https://bugs.llvm.org/show_bug.cgi?id=38200
Bug ID: 38200
Summary: Linking error: error: relocation R_X86_64_PC32 cannot
refer to absolute symbol:
__typeid__ZTSFvvE.generalized_align
Product: lld
Version: unspecified
Hardware: PC
OS: All
Status: NEW
Severity: enhancement
Priority: P
Component: ELF
Assignee: unassignedb...@nondot.org
Reporter: t...@ritter.vg
CC: llvm-bugs@lists.llvm.org
> clang version 7.0.0 (trunk) (llvm/trunk 337005)
> Target: x86_64-unknown-linux-gnu
The following code was compiled into a .o :
>
> if (aType & nsCFIType::ICALL_INVALID_ENTRY_POINT) {
>
> int val = setjmp(env);
>
> if (val == 0) {
> fn_ptr slide_to_the_left = (fn_ptr)((uintptr_t)(not_entry_point) + 0x20);
> slide_to_the_left(); // Line 690
> }
>
> return NS_OK;
> }
>
>
> if (aType & nsCFIType::ICALL_INVALID_SIGNATURE) {
> int_arg_fn get_down_now_yall = (int_arg_fn)int_arg;
>
> int ret = get_down_now_yall(5); // Line 709
>
> get_down_now_yall = (int_arg_fn)float_arg;
> ret = get_down_now_yall(5); // Line 713
>
> return NS_OK;
> }
And then linked with the following command:
> ../../../../../../../../clang++ \
> -fuse-ld=lld \
> -flto=thin \
> -fsanitize=cfi-icall \
> -pipe \
> -g \
> -fPIC \
> -shared \
> -o \
> libxul.so \
> trimmed_tmp.list \
> -fcolor-diagnostics \
> -Wl,--error-limit,0
It yields the following errors:
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFvvE.generalized_align
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:0
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:0)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFvvE.generalized_size_m1
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:690
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:690)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFiiE.generalized_align
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:0
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:0)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFiiE.generalized_size_m1
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:709
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:709)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFiiE.generalized_align
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:0
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:0)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
> /home/tom/Documents/moz/mozilla-unified-cfi-icall/reproduce-bug/xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library/../../../../../../../../ld.lld:
> error: relocation R_X86_64_PC32 cannot refer to absolute symbol:
> __typeid__ZTSFiiE.generalized_size_m1
> >>> defined in lto.tmp
> >>> referenced by nsDebugImpl.cpp:713
> >>> (/home/tom/Documents/moz/mozilla-unified-cfi-icall/xpcom/base/nsDebugImpl.cpp:713)
> >>> lto.tmp:(nsDebugImpl::CfiCrash(int))
The reproduction steps are:
> wget https://ritter.vg/misc/transient/R_X86_64_PC32.tgz
> tar xf R_X86_64_PC32.tgz
> cd
> xul-repro/home/tom/Documents/moz/mozilla-unified-cfi-icall/obj-x86_64-pc-linux-gnu/toolkit/library
> # Clear your terminal
> # Run the above compile command; search for R_X86_64_PC32
I tried to reproduce the compilation command to take it from the source code to
the .o file; but had a lot of difficulty doing that, so I decided to file this
with what I had. My file is too large to attach to bugzilla; but it is
minimized as much as I could, down from 2 GB and 1000+ object files.
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs