google / tcmalloc

Apache License 2.0
4.31k stars 463 forks source link

Failed to build tcmalloc, Error info: junk at end of line #222

Open CWORLDY opened 7 months ago

CWORLDY commented 7 months ago
chenyi@ubuntu:~/cy/tool/tcmalloc$ bazel build tcmalloc/testing:hello_main
INFO: Analyzed target //tcmalloc/testing:hello_main (1 packages loaded, 81 targets configured).
INFO: Found 1 target...
ERROR: /home/chenyi/cy/tool/tcmalloc/tcmalloc/internal/BUILD:577:11: Compiling tcmalloc/internal/percpu_rseq_asm.S failed: (Exit 1): gcc failed: error executing command (from target //tcmalloc/internal:percpu) /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -MD -MF ... (remaining 29 arguments skipped)

Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging
tcmalloc/internal/percpu_rseq_asm.S: Assembler messages:
**tcmalloc/internal/percpu_rseq_asm.S:38: Error: junk at end of line, first unrecognized character is `,'**
Target //tcmalloc/testing:hello_main failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 2.504s, Critical Path: 1.59s
INFO: 13 processes: 9 internal, 4 linux-sandbox.
FAILED: Build did NOT complete successfully

chenyi@ubuntu:~/cy/tool/tcmalloc$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~18.04~1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~18.04~1) 
cathalobrien commented 6 months ago

I see the same error using Intel Classic 2021.4.0, Intel Classic 2023.1.0, GCC 13.1.0 and GCC 9.3.0. Interestingly Clang 17.6 and Intel OneAPI 2023.1.0 (both LLVM-based) didnt get this error.

# Intel Classic build command
CC=icc CXX=icpc FC=ifort $BAZEL_DIR/bazel --output_base $output_dir build  -c opt --copt='-wd858' --copt=-Wno-unused-but-set-variables --copt=-Wno-unused-result --linkopt='-Wl,-z,notext' --sandbox_debug  //tcmalloc/...

# GCC build command
$BAZEL_DIR/bazel --output_base $output_dir build -c opt --sandbox_debug --copt=-Wno-array-bounds //tcmalloc/...

I was able to prevent the error by changing tcmalloc/internal/percpu_rseq_asm.S:38 to

.section .tdata,"awT",@progbits
//.section .tdata, "awT", @progbits, unique, 1 //original

I am not sure if this will impact program correctness. According to the GNU assembler manual "The optional unique, argument must come last. It assigns as a unique section ID to distinguish different sections with the same section name". Grep showed that this was the only section named ".tdata" so maybe its fine to remove ", unique, 1".