[PATCH] D18166: Add _GLOBAL_OFFSET_TABLE_ symbol to shared libraries

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 15 10:23:41 PDT 2016


davide updated this revision to Diff 50751.
davide added a comment.

Address Rui's comments, add a small testcase.


http://reviews.llvm.org/D18166

Files:
  ELF/Driver.cpp
  test/ELF/global_offset_table_shared.s

Index: test/ELF/global_offset_table_shared.s
===================================================================
--- test/ELF/global_offset_table_shared.s
+++ test/ELF/global_offset_table_shared.s
@@ -0,0 +1,3 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+.long _GLOBAL_OFFSET_TABLE_
Index: ELF/Driver.cpp
===================================================================
--- ELF/Driver.cpp
+++ ELF/Driver.cpp
@@ -342,14 +342,15 @@

   Config->Rela = ELFT::Is64Bits;

-  if (!Config->Shared && !Config->Relocatable) {
+  if (Config->Entry.empty() && !Config->Shared && !Config->Relocatable &&
+      Config->EMachine != EM_AMDGPU)
     // Add entry symbol.
     //
     // There is no entry symbol for AMDGPU binaries, so skip adding one to avoid
     // having and undefined symbol.
-    if (Config->Entry.empty() && Config->EMachine != EM_AMDGPU)
-      Config->Entry = (Config->EMachine == EM_MIPS) ? "__start" : "_start";
+    Config->Entry = (Config->EMachine == EM_MIPS) ? "__start" : "_start";

+  if (!Config->Relocatable)
     // In the assembly for 32 bit x86 the _GLOBAL_OFFSET_TABLE_ symbol
     // is magical and is used to produce a R_386_GOTPC relocation.
     // The R_386_GOTPC relocation value doesn't actually depend on the
@@ -363,7 +364,6 @@
     // Given that the symbol is effectively unused, we just create a dummy
     // hidden one to avoid the undefined symbol error.
     Symtab.addIgnored("_GLOBAL_OFFSET_TABLE_");
-  }

   if (!Config->Entry.empty()) {
     // Set either EntryAddr (if S is a number) or EntrySym (otherwise).


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18166.50751.patch
Type: text/x-patch
Size: 1614 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160315/eb8a68e6/attachment.bin>


More information about the llvm-commits mailing list