[PATCH] D36874: [ELF] - Mention "-z notext" and -fPIC in some error messages
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 18 06:56:41 PDT 2017
grimar created this revision.
Herald added a subscriber: emaste.
This is PR32429.
LLD has different default setting for relocations in readonly segment in compare with GNU linkers.
We do not permit them by default. Usually such relocations appear when -fPIC flag
is not specified during compilation, but sometimes may be used intentinally.
It worth to add hint information to error message and and that is what patch do.
https://reviews.llvm.org/D36874
Files:
ELF/Relocations.cpp
test/ELF/dynamic-reloc-in-ro.s
Index: test/ELF/dynamic-reloc-in-ro.s
===================================================================
--- test/ELF/dynamic-reloc-in-ro.s
+++ test/ELF/dynamic-reloc-in-ro.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 -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)
-
+// CHECK: can't create dynamic relocation R_X86_64_64 against local symbol in readonly segment
+// CHECK-NEXT: >>> defined in {{.*}}.o
+// CHECK-NEXT: >>> referenced by {{.*}}.o:(.text+0x0)
+// CHECK-NEXT: >>> Usually this error happens when -fPIC flag is missing during compilation.
+// CHECK-NEXT: >>> Unintentional use of such relocations is undesirable, and not
+// CHECK-NEXT: >>> permited by default, consider using -z notext.
foo:
.quad foo
Index: ELF/Relocations.cpp
===================================================================
--- ELF/Relocations.cpp
+++ ELF/Relocations.cpp
@@ -563,10 +563,15 @@
// 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))) {
+ std::string Hint =
+ "\n>>> Usually this error happens when -fPIC flag is missing during "
+ "compilation."
+ "\n>>> Unintentional use of such relocations is undesirable, and not "
+ "\n>>> permited by default, consider using -z notext.";
error("can't create dynamic relocation " + toString(Type) + " against " +
(Body.getName().empty() ? "local symbol"
: "symbol: " + toString(Body)) +
- " in readonly segment" + getLocation<ELFT>(S, Body, RelOff));
+ " in readonly segment" + getLocation<ELFT>(S, Body, RelOff) + Hint);
return Expr;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D36874.111670.patch
Type: text/x-patch
Size: 1988 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170818/7b966b4d/attachment.bin>
More information about the llvm-commits
mailing list