[PATCH] D33856: [ELF] Define __dso_handle symbol if needed
Petr Hosek via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 2 17:02:04 PDT 2017
phosek created this revision.
phosek added a project: lld.
Herald added a subscriber: emaste.
Traditionally, it has been defined in crtbegin.o, which is typically provided by libgcc or as part of the C library on some systems. However, but there's no principled reason for it to be there. We optionally define this symbol, which can be used on platforms that don't provide __dso_handle in crtbegin.o or which don't use crtbegin.o at all.
Repository:
rL LLVM
https://reviews.llvm.org/D33856
Files:
ELF/Writer.cpp
test/ELF/dso_handle.s
Index: test/ELF/dso_handle.s
===================================================================
--- /dev/null
+++ test/ELF/dso_handle.s
@@ -0,0 +1,19 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared %t.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck %s
+# CHECK: Name: __dso_handle
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local
+# CHECK-NEXT: Type: None
+# CHECK-NEXT: Other [
+# CHECK-NEXT: STV_HIDDEN
+# CHECK-NEXT: ]
+# CHECK-NEXT: Section: .dynsym
+
+.text
+.global foo, __dso_handle
+foo:
+ lea __dso_handle(%rip),%rax
Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -910,6 +910,11 @@
if (!InX::DynSymTab)
Symtab<ELFT>::X->addIgnored("__tls_get_addr");
+ // __dso_handle symbol is mandated by C++ ABI with a value which is an
+ // address in one of the object's segments, and as such this symbol has to be
+ // included statically and cannot be a part of a shared library.
+ addOptionalRegular<ELFT>("__dso_handle", Out::ElfHeader, 0, STV_HIDDEN);
+
// __ehdr_start is the location of ELF file headers. Note that we define
// this symbol unconditionally even when using a linker script, which
// differs from the behavior implemented by GNU linker which only define
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33856.101295.patch
Type: text/x-patch
Size: 1412 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170603/391c78db/attachment.bin>
More information about the llvm-commits
mailing list