[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