Skip to content

R_X86_64_GOTTPOFF linking error in x32 architecture. #161059

@HomuHomu833

Description

@HomuHomu833

(this is a continuation of ziglang/zig#25374)

This issue exists in LLVM 18(?) to 21 and there isn't any resolve yet. hopefully this gets fixed.

The Error:

2025-09-27T15:02:44.6910810Z FAILED: [code=1] bin/lld 
2025-09-27T15:02:44.6942420Z : && /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/zig-as-llvm/bin/c++ -fstack-protector-strong -fsanitize=undefined -static -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Os -DNDEBUG -static -static -fno-pie -Wl,--color-diagnostics tools/lld/tools/lld/CMakeFiles/lld.dir/lld.cpp.o tools/lld/tools/lld/CMakeFiles/lld.dir/lld-driver.cpp.o -o bin/lld  -Wl,-rpath,"\$ORIGIN/../lib:"  lib/libLLVMSupport.a  lib/libLLVMTargetParser.a  lib/liblldCommon.a  lib/liblldCOFF.a  lib/liblldELF.a  lib/liblldMachO.a  lib/liblldMinGW.a  lib/liblldWasm.a  lib/liblldCOFF.a  lib/libLLVMLibDriver.a  lib/libLLVMWindowsDriver.a  lib/libLLVMWindowsManifest.a  lib/liblldCommon.a  lib/libLLVMOption.a  lib/libLLVMX86CodeGen.a  lib/libLLVMX86AsmParser.a  lib/libLLVMX86Desc.a  lib/libLLVMX86Disassembler.a  lib/libLLVMX86Info.a  lib/libLLVMAArch64CodeGen.a  lib/libLLVMAArch64AsmParser.a  lib/libLLVMAArch64Disassembler.a  lib/libLLVMAArch64Desc.a  lib/libLLVMAArch64Info.a  lib/libLLVMAArch64Utils.a  lib/libLLVMARMCodeGen.a  lib/libLLVMARMAsmParser.a  lib/libLLVMARMDisassembler.a  lib/libLLVMARMDesc.a  lib/libLLVMARMInfo.a  lib/libLLVMARMUtils.a  lib/libLLVMRISCVCodeGen.a  lib/libLLVMAsmPrinter.a  lib/libLLVMGlobalISel.a  lib/libLLVMSelectionDAG.a  lib/libLLVMRISCVAsmParser.a  lib/libLLVMRISCVDisassembler.a  lib/libLLVMRISCVDesc.a  lib/libLLVMMCDisassembler.a  lib/libLLVMRISCVInfo.a  lib/libLLVMLTO.a  lib/libLLVMExtensions.a  lib/libLLVMPasses.a  lib/libLLVMCodeGen.a  lib/libLLVMCGData.a  lib/libLLVMCodeGenTypes.a  lib/libLLVMTarget.a  lib/libLLVMObjCARCOpts.a  lib/libLLVMCFGuard.a  lib/libLLVMIRPrinter.a  lib/libLLVMCoroutines.a  lib/libLLVMipo.a  lib/libLLVMBitWriter.a  lib/libLLVMInstrumentation.a  lib/libLLVMVectorize.a  lib/libLLVMSandboxIR.a  lib/libLLVMLinker.a  lib/libLLVMFrontendOpenMP.a  lib/libLLVMScalarOpts.a  lib/libLLVMAggressiveInstCombine.a  lib/libLLVMInstCombine.a  lib/libLLVMFrontendOffloading.a  lib/libLLVMFrontendAtomic.a  lib/libLLVMHipStdPar.a  lib/libLLVMTransformUtils.a  lib/libLLVMAnalysis.a  lib/libLLVMProfileData.a  lib/libLLVMSymbolize.a  lib/libLLVMDebugInfoDWARF.a  lib/libLLVMDebugInfoPDB.a  lib/libLLVMDebugInfoCodeView.a  lib/libLLVMDebugInfoMSF.a  lib/libLLVMObject.a  lib/libLLVMTextAPI.a  lib/libLLVMMCParser.a  lib/libLLVMMC.a  lib/libLLVMIRReader.a  lib/libLLVMBitReader.a  lib/libLLVMAsmParser.a  lib/libLLVMCore.a  lib/libLLVMRemarks.a  lib/libLLVMBitstreamReader.a  lib/libLLVMBinaryFormat.a  lib/libLLVMTargetParser.a  lib/libLLVMDebugInfoBTF.a  lib/libLLVMSupport.a  -lrt  -ldl  -lm  /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/output/x86_64-linux-muslx32/lib/libz.a  /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/output/x86_64-linux-muslx32/lib/libzstd.a  lib/libLLVMDemangle.a && cd /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/tools/lld/tools/lld && /usr/local/bin/cmake -E create_symlink lld /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/./bin/lld-link && cd /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/tools/lld/tools/lld && /usr/local/bin/cmake -E create_symlink lld /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/./bin/ld.lld && cd /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/tools/lld/tools/lld && /usr/local/bin/cmake -E create_symlink lld /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/./bin/ld64.lld && cd /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/tools/lld/tools/lld && /usr/local/bin/cmake -E create_symlink lld /home/runner/work/llvm-custom-experimental/llvm-custom-experimental/build/x86_64-linux-muslx32/./bin/wasm-ld
2025-09-27T15:02:44.6981900Z ld.lld: error: lib/liblldELF.a(Relocations.cpp.o):(function void addRelativeReloc<true>(lld::elf::Ctx&, lld::elf::InputSectionBase&, unsigned long long, lld::elf::Symbol&, long long, lld::elf::RelExpr, lld::elf::RelType): .text._ZL16addRelativeRelocILb1EEvRN3lld3elf3CtxERNS1_16InputSectionBaseEyRNS1_6SymbolExNS1_7RelExprENS1_7RelTypeE+0xf6): R_X86_64_GOTTPOFF must be used in MOVQ or ADDQ instructions only
2025-09-27T15:02:44.6987419Z ld.lld: error: lib/liblldELF.a(Relocations.cpp.o):(function void lld::elf::RelocationBaseSection::addReloc<true>(lld::elf::DynamicReloc::Kind, lld::elf::RelType, lld::elf::InputSectionBase&, unsigned long long, lld::elf::Symbol&, long long, lld::elf::RelExpr, lld::elf::RelType): .text._ZN3lld3elf21RelocationBaseSection8addRelocILb1EEEvNS0_12DynamicReloc4KindENS0_7RelTypeERNS0_16InputSectionBaseEyRNS0_6SymbolExNS0_7RelExprES5_+0x137): R_X86_64_GOTTPOFF must be used in MOVQ or ADDQ instructions only

CMake Flags I use:

cmake -S "$ROOTDIR/llvm" -B "${TARGET_BUILD_DIR}" -G Ninja \
    -DCMAKE_INSTALL_PREFIX="${ROOTDIR}/llvm-${{matrix.target}}" \
    -DCMAKE_PREFIX_PATH="${TARGET_INSTALL_DIR}" \
    -DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;RISCV" \
    -DCMAKE_BUILD_TYPE=MinSizeRel \
    -DCMAKE_CROSSCOMPILING=True \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DLLVM_DEFAULT_TARGET_TRIPLE=${{matrix.target}} \
    -DCMAKE_C_COMPILER="${TOOLCHAIN}/bin/cc" \
    -DCMAKE_CXX_COMPILER="${TOOLCHAIN}/bin/c++" \
    -DCMAKE_ASM_COMPILER="${TOOLCHAIN}/bin/cc" \
    -DCMAKE_LINKER="${TOOLCHAIN}/bin/ld" \
    -DCMAKE_OBJCOPY="${TOOLCHAIN}/bin/objcopy" \
    -DCMAKE_AR="${TOOLCHAIN}/bin/ar" \
    -DCMAKE_RANLIB="${TOOLCHAIN}/bin/ranlib" \
    -DCMAKE_STRIP="${TOOLCHAIN}/bin/strip" \
    -DCMAKE_C_FLAGS="-fstack-protector-strong -fsanitize=undefined -static" \
    -DCMAKE_CXX_FLAGS="-fstack-protector-strong -fsanitize=undefined -static" \
    -DCMAKE_EXE_LINKER_FLAGS="-static" \
    -DLLVM_ENABLE_PROJECTS="${{inputs.projects}}" \
    -DLLVM_ENABLE_ZLIB=FORCE_ON \
    -DLLVM_ENABLE_ZSTD=FORCE_ON \
    -DLLVM_USE_STATIC_ZSTD=ON \
    -DLLVM_BUILD_STATIC=ON \
    -DCLANG_ENABLE_ARCMT=OFF \
    -DLLVM_LINK_LLVM_DYLIB=OFF \
    -DLIBCLANG_BUILD_STATIC=ON \
    -DCMAKE_SKIP_INSTALL_RPATH=TRUE \
    -DBUILD_SHARED_LIBS=OFF \
    -DLLVM_INCLUDE_BENCHMARKS=OFF \
    -DLLVM_BUILD_BENCHMARKS=OFF \
    -DLLVM_INCLUDE_EXAMPLES=OFF \
    -DLLVM_BUILD_EXAMPLES=OFF \
    -DLLVM_BUILD_TESTS=OFF \
    -DLLVM_BUILD_TOOLS=ON \
    -DLLVM_INCLUDE_TESTS=OFF \
    -DCLANG_INCLUDE_TESTS=OFF \
    -DCLANG_BUILD_TESTS=OFF \
    -DLLVM_TOOL_C_TEST_BUILD=OFF \
    -DCLANG_TOOL_CLANG_IMPORT_TEST_BUILD=OFF \
    -DCLANG_TOOL_APINOTES_TEST_BUILD=OFF \
    -DCLANG_TOOL_ARCMT_TEST_BUILD=OFF \
    -DCLANG_TOOL_C_ARCMT_TEST_BUILD=OFF \
    -DCLANG_TOOL_C_INDEX_TEST_BUILD=OFF \
    -DLLVM_PARALLEL_LINK_JOBS=1 \
    -DLLVM_ENABLE_PIC=OFF \
    -DLLVM_ENABLE_LIBCXX=OFF \
    -DLLVM_ENABLE_LLVM_LIBC=OFF \
    -DLLVM_ENABLE_UNWIND_TABLES=OFF \
    -DLLVM_ENABLE_EH=OFF \
    -DLLVM_ENABLE_RTTI=OFF \
    -DLLVM_ENABLE_LTO=OFF \
    -DLLVM_ENABLE_TERMINFO=OFF \
    -DLLVM_ENABLE_MODULES=OFF \
    -DLLVM_ENABLE_PEDANTIC=OFF \
    -DLLVM_ENABLE_FFI=OFF \
    -DLLVM_ENABLE_LIBPFM=OFF \
    -DLLVM_ENABLE_LIBEDIT=OFF \
    -DLLVM_ENABLE_LIBXML2=OFF \
    -DLLVM_ENABLE_CURL=OFF \
    -DLLVM_ENABLE_THREADS=ON \
    -DLLVM_VERSION_SUFFIX="" \
    -DCLANG_VENDOR="Android" \
    -DCLANG_REPOSITORY_STRING="https://github.com/${{ github.repository_owner }}/llvm-custom" \
    -DPACKAGE_BUGREPORT="https://github.com/${{ github.repository_owner }}/android-ndk-custom/issues/"

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions