diff options
22 files changed, 107 insertions, 48 deletions
diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 39cdc6f05f5..2b85cc61b57 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -63,6 +63,22 @@ using namespace llvm::support::endian; using namespace lld; using namespace lld::elf; +// Construct a message in the following format. +// +// >>> defined in /home/alice/src/foo.o +// >>> referenced by bar.c:12 (/home/alice/src/bar.c:12) +// >>> /home/alice/src/bar.o:(.text+0x1) +template <class ELFT> +static std::string getLocation(InputSectionBase &S, const SymbolBody &Sym, + uint64_t Off) { + std::string Msg = + "\n>>> defined in " + toString(Sym.File) + "\n>>> referenced by "; + std::string Src = S.getSrcMsg<ELFT>(Off); + if (!Src.empty()) + Msg += Src + "\n>>> "; + return Msg + S.getObjMsg<ELFT>(Off); +} + static bool refersToGotEntry(RelExpr Expr) { return isRelExprOneOf<R_GOT, R_GOT_OFF, R_MIPS_GOT_LOCAL_PAGE, R_MIPS_GOT_OFF, R_MIPS_GOT_OFF32, R_MIPS_TLSGD, R_MIPS_TLSLD, @@ -331,9 +347,8 @@ static bool isStaticLinkTimeConstant(RelExpr E, uint32_t Type, if (Body.isUndefined() && !Body.isLocal() && Body.symbol()->isWeak()) return true; - error(S.getLocation<ELFT>(RelOff) + ": relocation " + toString(Type) + - " cannot refer to absolute symbol '" + toString(Body) + - "' defined in " + toString(Body.File)); + error("relocation " + toString(Type) + " cannot refer to absolute symbol: " + + toString(Body) + getLocation<ELFT>(S, Body, RelOff)); return true; } @@ -489,17 +504,16 @@ static RelExpr adjustExpr(SymbolBody &Body, RelExpr Expr, uint32_t Type, // only memory. We can hack around it if we are producing an executable and // the refered symbol can be preemepted to refer to the executable. if (Config->Shared || (Config->Pic && !isRelExpr(Expr))) { - error(S.getLocation<ELFT>(RelOff) + ": can't create dynamic relocation " + - toString(Type) + " against " + + error("can't create dynamic relocation " + toString(Type) + " against " + (Body.getName().empty() ? "local symbol in readonly segment" - : "symbol '" + toString(Body) + "'") + - " defined in " + toString(Body.File)); + : "symbol: " + toString(Body)) + + getLocation<ELFT>(S, Body, RelOff)); return Expr; } if (Body.getVisibility() != STV_DEFAULT) { - error(S.getLocation<ELFT>(RelOff) + ": cannot preempt symbol '" + - toString(Body) + "' defined in " + toString(Body.File)); + error("cannot preempt symbol: " + toString(Body) + + getLocation<ELFT>(S, Body, RelOff)); return Expr; } @@ -508,9 +522,10 @@ static RelExpr adjustExpr(SymbolBody &Body, RelExpr Expr, uint32_t Type, auto *B = cast<SharedSymbol>(&Body); if (!B->NeedsCopy) { if (Config->ZNocopyreloc) - error(S.getLocation<ELFT>(RelOff) + ": unresolvable relocation " + - toString(Type) + " against symbol '" + toString(*B) + - "'; recompile with -fPIC or remove '-z nocopyreloc'"); + error("unresolvable relocation " + toString(Type) + + " against symbol '" + toString(*B) + + "'; recompile with -fPIC or remove '-z nocopyreloc'" + + getLocation<ELFT>(S, Body, RelOff)); addCopyRelSymbol<ELFT>(B); } @@ -543,7 +558,7 @@ static RelExpr adjustExpr(SymbolBody &Body, RelExpr Expr, uint32_t Type, } error("symbol '" + toString(Body) + "' defined in " + toString(Body.File) + - " is missing type"); + " has no type"); return Expr; } @@ -820,8 +835,10 @@ static void scanRelocs(InputSectionBase &Sec, ArrayRef<RelTy> Rels) { // We don't know anything about the finaly symbol. Just ask the dynamic // linker to handle the relocation for us. if (!Target->isPicRel(Type)) - error(Sec.getLocation<ELFT>(Offset) + ": relocation " + toString(Type) + - " cannot be used against shared object; recompile with -fPIC."); + error("relocation " + toString(Type) + + " cannot be used against shared object; recompile with -fPIC" + + getLocation<ELFT>(Sec, Body, Offset)); + In<ELFT>::RelaDyn->addReloc( {Target->getDynRel(Type), &Sec, Offset, false, &Body, Addend}); diff --git a/lld/test/ELF/aarch64-fpic-abs16.s b/lld/test/ELF/aarch64-fpic-abs16.s index 539242a8d21..2b14b11c75d 100644 --- a/lld/test/ELF/aarch64-fpic-abs16.s +++ b/lld/test/ELF/aarch64-fpic-abs16.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}:(.data+0x0): relocation R_AARCH64_ABS16 cannot be used against shared object; recompile with -fPIC. +// CHECK: relocation R_AARCH64_ABS16 cannot be used against shared object; recompile with -fPIC +// CHECK-NEXT: >>> defined in {{.*}}.o +// CHECK-NEXT: >>> referenced by {{.*}}.o:(.data+0x0) .data .hword foo diff --git a/lld/test/ELF/aarch64-fpic-add_abs_lo12_nc.s b/lld/test/ELF/aarch64-fpic-add_abs_lo12_nc.s index 0ebd0fdde3a..9e13fd18af4 100644 --- a/lld/test/ELF/aarch64-fpic-add_abs_lo12_nc.s +++ b/lld/test/ELF/aarch64-fpic-add_abs_lo12_nc.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_ADD_ABS_LO12_NC against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_ADD_ABS_LO12_NC against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) add x0, x0, :lo12:dat .data diff --git a/lld/test/ELF/aarch64-fpic-adr_prel_lo21.s b/lld/test/ELF/aarch64-fpic-adr_prel_lo21.s index d01749600e7..c1e6bc6359b 100644 --- a/lld/test/ELF/aarch64-fpic-adr_prel_lo21.s +++ b/lld/test/ELF/aarch64-fpic-adr_prel_lo21.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_ADR_PREL_LO21 against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_ADR_PREL_LO21 against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) adr x0, dat .data diff --git a/lld/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s b/lld/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s index 3da4b2ece51..e27867b8524 100644 --- a/lld/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s +++ b/lld/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) adrp x0, dat .data diff --git a/lld/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s b/lld/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s index 8df582186b2..02b75a5bfcd 100644 --- a/lld/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s +++ b/lld/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_LDST32_ABS_LO12_NC against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_LDST32_ABS_LO12_NC against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) ldr s4, [x0, :lo12:dat] .data diff --git a/lld/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s b/lld/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s index fe80e654277..45e4f2032c1 100644 --- a/lld/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s +++ b/lld/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_LDST64_ABS_LO12_NC against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_LDST64_ABS_LO12_NC against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) ldr x0, [x0, :lo12:dat] .data diff --git a/lld/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s b/lld/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s index 8442062bed9..16e7df1bc4a 100644 --- a/lld/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s +++ b/lld/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_AARCH64_LDST8_ABS_LO12_NC against symbol 'dat' defined in {{.*}}.o +// CHECK: can't create dynamic relocation R_AARCH64_LDST8_ABS_LO12_NC against symbol: dat +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) ldrsb x0, [x1, :lo12:dat] .data diff --git a/lld/test/ELF/aarch64-fpic-prel16.s b/lld/test/ELF/aarch64-fpic-prel16.s index 3cb76cabd06..1faef9f866e 100644 --- a/lld/test/ELF/aarch64-fpic-prel16.s +++ b/lld/test/ELF/aarch64-fpic-prel16.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}:(.data+0x0): relocation R_AARCH64_PREL16 cannot be used against shared object; recompile with -fPIC. +// CHECK: R_AARCH64_PREL16 cannot be used against shared object; recompile with -fPIC +// CHECK: >>> defined in {{.*}} +// CHECK: >>> referenced by {{.*}}:(.data+0x0) .data .hword foo - . diff --git a/lld/test/ELF/aarch64-fpic-prel32.s b/lld/test/ELF/aarch64-fpic-prel32.s index 1c701e93cf8..b797dca2f2c 100644 --- a/lld/test/ELF/aarch64-fpic-prel32.s +++ b/lld/test/ELF/aarch64-fpic-prel32.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}:(.data+0x0): relocation R_AARCH64_PREL32 cannot be used against shared object; recompile with -fPIC. +// CHECK: relocation R_AARCH64_PREL32 cannot be used against shared object; recompile with -fPIC +// CHECK: >>> defined in {{.*}} +// CHECK: >>> referenced by {{.*}}:(.data+0x0) .data .word foo - . diff --git a/lld/test/ELF/aarch64-fpic-prel64.s b/lld/test/ELF/aarch64-fpic-prel64.s index 0f5f08a88eb..4c67837eac7 100644 --- a/lld/test/ELF/aarch64-fpic-prel64.s +++ b/lld/test/ELF/aarch64-fpic-prel64.s @@ -1,7 +1,9 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -// CHECK: {{.*}}:(.data+0x0): relocation R_AARCH64_PREL64 cannot be used against shared object; recompile with -fPIC. +// CHECK: relocation R_AARCH64_PREL64 cannot be used against shared object; recompile with -fPIC +// CHECK: >>> defined in {{.*}} +// CHECK: >>> referenced by {{.*}}:(.data+0x0) .data .xword foo - . diff --git a/lld/test/ELF/arm-target1.s b/lld/test/ELF/arm-target1.s index a4adfbe63ea..e77fa57bbf1 100644 --- a/lld/test/ELF/arm-target1.s +++ b/lld/test/ELF/arm-target1.s @@ -31,4 +31,6 @@ // RELATIVE: SYMBOL TABLE: // RELATIVE: 00001004 .text 00000000 patatino -// ABS: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_ARM_TARGET1 against symbol 'patatino' defined in {{.*}}.o +// ABS: can't create dynamic relocation R_ARM_TARGET1 against symbol: patatino +// ABS: >>> defined in {{.*}}.o +// ABS: >>> referenced by {{.*}}.o:(.text+0x0) diff --git a/lld/test/ELF/copy-errors.s b/lld/test/ELF/copy-errors.s index b0d56c9c6c6..d0d6abdf68d 100644 --- a/lld/test/ELF/copy-errors.s +++ b/lld/test/ELF/copy-errors.s @@ -4,12 +4,12 @@ // RUN: ld.lld %t2.o -o %t2.so -shared // RUN: not ld.lld %t.o %t2.so -o %t 2>&1 | FileCheck %s +// CHECK: cannot preempt symbol: bar +// CHECK: >>> defined in {{.*}}.so +// CHECK: >>> referenced by {{.*}}.o:(.text+0x1) +// CHECK: symbol 'zed' defined in {{.*}}.so has no type + .global _start _start: - - call bar -// CHECK: {{.*}}.o:(.text+0x1): cannot preempt symbol 'bar' defined in {{.*}}.so - call zed -// CHECK: symbol 'zed' defined in {{.*}}.so is missing type diff --git a/lld/test/ELF/copy-in-shared.s b/lld/test/ELF/copy-in-shared.s index b8e57ce9e70..1d77eaf3a14 100644 --- a/lld/test/ELF/copy-in-shared.s +++ b/lld/test/ELF/copy-in-shared.s @@ -4,7 +4,8 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t2.o // RUN: not ld.lld %t2.o %t1.so -o %t2.so -shared 2>&1 | FileCheck %s +// CHECK: can't create dynamic relocation R_X86_64_64 against symbol: foo +// CHECK: >>> defined in {{.*}}.so +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) .quad foo - -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_X86_64_64 against symbol 'foo' defined in {{.*}}.so diff --git a/lld/test/ELF/copy-rel-pie-error.s b/lld/test/ELF/copy-rel-pie-error.s index 7cb6700ef9f..6f7677e25e3 100644 --- a/lld/test/ELF/copy-rel-pie-error.s +++ b/lld/test/ELF/copy-rel-pie-error.s @@ -3,8 +3,13 @@ // RUN: ld.lld %t2.o -o %t2.so -shared // RUN: not ld.lld %t.o %t2.so -o %t.exe -pie 2>&1 | FileCheck %s -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_X86_64_64 against symbol 'bar' defined in {{.*}}.so -// CHECK: {{.*}}.o:(.text+0x8): can't create dynamic relocation R_X86_64_64 against symbol 'foo' defined in {{.*}}.so +// CHECK: can't create dynamic relocation R_X86_64_64 against symbol: bar +// CHECK: >>> defined in {{.*}}.so +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) + +// CHECK: can't create dynamic relocation R_X86_64_64 against symbol: foo +// CHECK: >>> defined in {{.*}}.so +// CHECK: >>> referenced by {{.*}}.o:(.text+0x8) .global _start _start: diff --git a/lld/test/ELF/dynamic-reloc-in-ro.s b/lld/test/ELF/dynamic-reloc-in-ro.s index 682dbdd8984..23b068ff839 100644 --- a/lld/test/ELF/dynamic-reloc-in-ro.s +++ b/lld/test/ELF/dynamic-reloc-in-ro.s @@ -2,7 +2,9 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o // RUN: not ld.lld %t.o -o %t.so -shared 2>&1 | FileCheck %s +// CHECK: can't create dynamic relocation R_X86_64_64 against local symbol in readonly segment +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.text+0x0) + foo: .quad foo - -// CHECK: {{.*}}.o:(.text+0x0): can't create dynamic relocation R_X86_64_64 against local symbol in readonly segment defined in {{.*}}.o diff --git a/lld/test/ELF/eh-frame-dyn-rel.s b/lld/test/ELF/eh-frame-dyn-rel.s index 91baf597c72..289e6c0150d 100644 --- a/lld/test/ELF/eh-frame-dyn-rel.s +++ b/lld/test/ELF/eh-frame-dyn-rel.s @@ -2,9 +2,11 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o // RUN: not ld.lld %t.o %t.o -o %t -shared 2>&1 | FileCheck %s - .section bar,"axG",@progbits,foo,comdat - .cfi_startproc - .cfi_personality 0x8c, foo - .cfi_endproc +// CHECK: can't create dynamic relocation R_X86_64_64 against symbol: foo +// CHECK: >>> defined in {{.*}}.o +// CHECK: >>> referenced by {{.*}}.o:(.eh_frame+0x12) -// CHECK: {{.*}}.o:(.eh_frame+0x12): can't create dynamic relocation R_X86_64_64 against symbol 'foo' defined in {{.*}}.o +.section bar,"axG",@progbits,foo,comdat +.cfi_startproc +.cfi_personality 0x8c, foo +.cfi_endproc diff --git a/lld/test/ELF/relocation-relative-absolute.s b/lld/test/ELF/relocation-relative-absolute.s index e1636c734a8..2a343fddca7 100644 --- a/lld/test/ELF/relocation-relative-absolute.s +++ b/lld/test/ELF/relocation-relative-absolute.s @@ -7,6 +7,8 @@ .globl _start _start: -# CHECK: {{.*}}input1.o:(.text+0x1): relocation R_X86_64_PLT32 cannot refer to absolute symbol 'answer' defined in {{.*}}input2.o +# CHECK: error: relocation R_X86_64_PLT32 cannot refer to absolute symbol: answer +# CHECK-NEXT: >>> defined in {{.*}}input2.o +# CHECK-NEXT: >>> referenced by {{.*}}o:(.text+0x1) call answer@PLT diff --git a/lld/test/ELF/x86-64-dyn-rel-error.s b/lld/test/ELF/x86-64-dyn-rel-error.s index 354fcc09e8a..ee39e2cb83f 100644 --- a/lld/test/ELF/x86-64-dyn-rel-error.s +++ b/lld/test/ELF/x86-64-dyn-rel-error.s @@ -9,4 +9,4 @@ _start: .data .long bar -// CHECK: {{.*}}:(.data+0x0): relocation R_X86_64_32 cannot be used against shared object; recompile with -fPIC. +// CHECK: relocation R_X86_64_32 cannot be used against shared object; recompile with -fPIC diff --git a/lld/test/ELF/x86-64-dyn-rel-error2.s b/lld/test/ELF/x86-64-dyn-rel-error2.s index 88a180da627..e316aeae54f 100644 --- a/lld/test/ELF/x86-64-dyn-rel-error2.s +++ b/lld/test/ELF/x86-64-dyn-rel-error2.s @@ -4,9 +4,11 @@ // RUN: ld.lld %t2.o -shared -o %t2.so // RUN: not ld.lld %t.o %t2.so -o %t 2>&1 | FileCheck %s +// CHECK: relocation R_X86_64_PC32 cannot be used against shared object; recompile with -fPIC +// CHECK: >>> defined in {{.*}}.so +// CHECK: >>> referenced by {{.*}}.o:(.data+0x0) + .global _start _start: .data .long bar - . - -// CHECK: {{.*}}:(.data+0x0): relocation R_X86_64_PC32 cannot be used against shared object; recompile with -fPIC. diff --git a/lld/test/ELF/x86-64-reloc-32-fpic.s b/lld/test/ELF/x86-64-reloc-32-fpic.s index 5726d36e9ad..e3e7c6834d2 100644 --- a/lld/test/ELF/x86-64-reloc-32-fpic.s +++ b/lld/test/ELF/x86-64-reloc-32-fpic.s @@ -1,7 +1,10 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o # RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -# CHECK: {{.*}}:(.data+0x0): relocation R_X86_64_32 cannot be used against shared object; recompile with -fPIC. + +# CHECK: relocation R_X86_64_32 cannot be used against shared object; recompile with -fPIC +# CHECK: >>> defined in {{.*}} +# CHECK: >>> referenced by {{.*}}:(.data+0x0) .data .long _shared diff --git a/lld/test/ELF/x86-64-reloc-pc32-fpic.s b/lld/test/ELF/x86-64-reloc-pc32-fpic.s index 3c9f3e0bdb3..399bf604f80 100644 --- a/lld/test/ELF/x86-64-reloc-pc32-fpic.s +++ b/lld/test/ELF/x86-64-reloc-pc32-fpic.s @@ -1,7 +1,10 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o # RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -# CHECK: {{.*}}:(.data+0x1): relocation R_X86_64_PC32 cannot be used against shared object; recompile with -fPIC. + +# CHECK: relocation R_X86_64_PC32 cannot be used against shared object; recompile with -fPIC +# CHECK: >>> defined in {{.*}} +# CHECK: >>> referenced by {{.*}}:(.data+0x1) .data call _shared |