[PATCH] D27497: [ELF] Shared libraries should have entry point
Petr Hosek via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 6 18:36:40 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL288878: [ELF] Shared libraries should have entry point (authored by phosek).
Changed prior to commit:
https://reviews.llvm.org/D27497?vs=80520&id=80529#toc
Repository:
rL LLVM
https://reviews.llvm.org/D27497
Files:
lld/trunk/ELF/Config.h
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Writer.cpp
lld/trunk/test/ELF/gc-sections-keep-shared-start.s
Index: lld/trunk/test/ELF/gc-sections-keep-shared-start.s
===================================================================
--- lld/trunk/test/ELF/gc-sections-keep-shared-start.s
+++ lld/trunk/test/ELF/gc-sections-keep-shared-start.s
@@ -0,0 +1,29 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+
+# RUN: ld.lld -shared --gc-sections -o %t1 %t
+# RUN: llvm-readobj --elf-output-style=GNU --file-headers --symbols %t1
+# | FileCheck %s
+# CHECK: Entry point address: 0x1000
+# CHECK: 0000000000001000 0 FUNC LOCAL HIDDEN 4 _start
+# CHECK: 0000000000001006 0 FUNC LOCAL HIDDEN 4 internal
+# CHECK: 0000000000001005 0 FUNC GLOBAL DEFAULT 4 foobar
+
+.section .text.start,"ax"
+.globl _start
+.type _start,%function
+.hidden _start
+_start:
+ jmp internal
+
+.section .text.foobar,"ax"
+.globl foobar
+.type foobar,%function
+foobar:
+ ret
+
+.section .text.internal,"ax"
+.globl internal
+.hidden internal
+.type internal,%function
+internal:
+ ret
Index: lld/trunk/ELF/Config.h
===================================================================
--- lld/trunk/ELF/Config.h
+++ lld/trunk/ELF/Config.h
@@ -107,6 +107,7 @@
bool GcSections;
bool GdbIndex;
bool GnuHash = false;
+ bool HasEntry = false;
bool ICF;
bool Mips64EL = false;
bool MipsN32Abi = false;
Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -521,6 +521,7 @@
Config->EnableNewDtags = !Args.hasArg(OPT_disable_new_dtags);
Config->ExportDynamic = Args.hasArg(OPT_export_dynamic);
Config->FatalWarnings = Args.hasArg(OPT_fatal_warnings);
+ Config->HasEntry = Args.hasArg(OPT_entry);
Config->GcSections = getArg(Args, OPT_gc_sections, OPT_no_gc_sections, false);
Config->GdbIndex = Args.hasArg(OPT_gdb_index);
Config->ICF = Args.hasArg(OPT_icf);
@@ -786,8 +787,7 @@
// It is either "-e <addr>" or "-e <symbol>".
if (!Config->Entry.getAsInteger(0, Config->EntryAddr))
Config->Entry = "";
- } else if (!Config->Shared && !Config->Relocatable &&
- Config->EMachine != EM_AMDGPU) {
+ } else if (!Config->Relocatable && Config->EMachine != EM_AMDGPU) {
// -e was not specified. Use the default start symbol name
// if it is resolvable.
Config->Entry = (Config->EMachine == EM_MIPS) ? "__start" : "_start";
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -1410,14 +1410,16 @@
// Case 4
if (OutputSectionBase *Sec = findSection(".text")) {
- warn("cannot find entry symbol " + Config->Entry + "; defaulting to 0x" +
- utohexstr(Sec->Addr));
+ if (!Config->Shared || Config->HasEntry)
+ warn("cannot find entry symbol " + Config->Entry + "; defaulting to 0x" +
+ utohexstr(Sec->Addr));
return Sec->Addr;
}
// Case 5
- warn("cannot find entry symbol " + Config->Entry +
- "; not setting start address");
+ if (!Config->Shared || Config->HasEntry)
+ warn("cannot find entry symbol " + Config->Entry +
+ "; not setting start address");
return 0;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27497.80529.patch
Type: text/x-patch
Size: 3258 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161207/8ed7df07/attachment.bin>
More information about the llvm-commits
mailing list