[lld] r319879 - [ELF] - Show .plt symbols in -Map output.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 6 00:36:21 PST 2017


Author: grimar
Date: Wed Dec  6 00:36:21 2017
New Revision: 319879

URL: http://llvm.org/viewvc/llvm-project?rev=319879&view=rev
Log:
[ELF] - Show .plt symbols in -Map output.

As mentioned in PR35471, shared functions for which
.plt entry address is used shows up in bfd's map files. 
Patch teaches LLD to do the same.

Differential revision: https://reviews.llvm.org/D40839

Modified:
    lld/trunk/ELF/MapFile.cpp
    lld/trunk/test/ELF/Inputs/map-file5.s
    lld/trunk/test/ELF/map-file.s

Modified: lld/trunk/ELF/MapFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/MapFile.cpp?rev=319879&r1=319878&r2=319879&view=diff
==============================================================================
--- lld/trunk/ELF/MapFile.cpp (original)
+++ lld/trunk/ELF/MapFile.cpp Wed Dec  6 00:36:21 2017
@@ -52,7 +52,7 @@ static std::vector<Symbol *> getSymbols(
   for (InputFile *File : ObjectFiles) {
     for (Symbol *B : File->getSymbols()) {
       if (auto *SS = dyn_cast<SharedSymbol>(B))
-        if (SS->CopyRelSec)
+        if (SS->CopyRelSec || SS->NeedsPltAddr)
           V.push_back(SS);
       if (auto *DR = dyn_cast<Defined>(B))
         if (DR->File == File && !DR->isSection() && DR->Section &&
@@ -67,10 +67,16 @@ static std::vector<Symbol *> getSymbols(
 static SymbolMapTy getSectionSyms(ArrayRef<Symbol *> Syms) {
   SymbolMapTy Ret;
   for (Symbol *S : Syms) {
-    if (auto *DR = dyn_cast<Defined>(S))
+    if (auto *DR = dyn_cast<Defined>(S)) {
       Ret[DR->Section].push_back(S);
+      continue;
+    }
+
+    SharedSymbol *SS = cast<SharedSymbol>(S);
+    if (SS->CopyRelSec)
+      Ret[SS->CopyRelSec].push_back(S);
     else
-      Ret[cast<SharedSymbol>(S)->CopyRelSec].push_back(S);
+      Ret[InX::Plt].push_back(S);
   }
 
   // Sort symbols by address. We want to print out symbols in the

Modified: lld/trunk/test/ELF/Inputs/map-file5.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/map-file5.s?rev=319879&r1=319878&r2=319879&view=diff
==============================================================================
--- lld/trunk/test/ELF/Inputs/map-file5.s (original)
+++ lld/trunk/test/ELF/Inputs/map-file5.s Wed Dec  6 00:36:21 2017
@@ -10,3 +10,14 @@ sharedFoo:
 sharedBar:
 .quad 0
 .size sharedBar, 8
+
+.text
+.globl sharedFunc1
+.type sharedFunc1, at function
+sharedFunc1:
+ nop
+
+.globl sharedFunc2
+.type sharedFunc2, at function
+sharedFunc2:
+ nop

Modified: lld/trunk/test/ELF/map-file.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/map-file.s?rev=319879&r1=319878&r2=319879&view=diff
==============================================================================
--- lld/trunk/test/ELF/map-file.s (original)
+++ lld/trunk/test/ELF/map-file.s Wed Dec  6 00:36:21 2017
@@ -17,6 +17,8 @@
 _start:
  .quad sharedFoo
  .quad sharedBar
+ callq sharedFunc1
+ callq sharedFunc2
         call baz
 .global _Z1fi
 _Z1fi:
@@ -34,49 +36,57 @@ abs = 0xAB5
 labs = 0x1AB5
 
 // CHECK:      Address          Size             Align Out     In      Symbol
-// CHECK-NEXT: 00000000002001c8 0000000000000048     8 .dynsym
-// CHECK-NEXT: 00000000002001c8 0000000000000048     8         <internal>:(.dynsym)
-// CHECK-NEXT: 0000000000200210 0000000000000024     8 .gnu.hash
-// CHECK-NEXT: 0000000000200210 0000000000000024     8         <internal>:(.gnu.hash)
-// CHECK-NEXT: 0000000000200234 0000000000000020     4 .hash
-// CHECK-NEXT: 0000000000200234 0000000000000020     4         <internal>:(.hash)
-// CHECK-NEXT: 0000000000200254 0000000000000019     1 .dynstr
-// CHECK-NEXT: 0000000000200254 0000000000000019     1         <internal>:(.dynstr)
-// CHECK-NEXT: 0000000000200270 0000000000000030     8 .rela.dyn
-// CHECK-NEXT: 0000000000200270 0000000000000030     8         <internal>:(.rela.dyn)
-// CHECK-NEXT: 00000000002002a0 0000000000000030     8 .eh_frame
-// CHECK-NEXT: 00000000002002a0 0000000000000030     8         <internal>:(.eh_frame)
-// CHECK-NEXT: 0000000000201000 0000000000000025     4 .text
-// CHECK-NEXT: 0000000000201000 000000000000001e     4         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.text)
+// CHECK-NEXT: 00000000002001c8 0000000000000078     8 .dynsym
+// CHECK-NEXT: 00000000002001c8 0000000000000078     8         <internal>:(.dynsym)
+// CHECK-NEXT: 0000000000200240 000000000000002c     8 .gnu.hash
+// CHECK-NEXT: 0000000000200240 000000000000002c     8         <internal>:(.gnu.hash)
+// CHECK-NEXT: 000000000020026c 0000000000000030     4 .hash
+// CHECK-NEXT: 000000000020026c 0000000000000030     4         <internal>:(.hash)
+// CHECK-NEXT: 000000000020029c 0000000000000031     1 .dynstr
+// CHECK-NEXT: 000000000020029c 0000000000000031     1         <internal>:(.dynstr)
+// CHECK-NEXT: 00000000002002d0 0000000000000030     8 .rela.dyn
+// CHECK-NEXT: 00000000002002d0 0000000000000030     8         <internal>:(.rela.dyn)
+// CHECK-NEXT: 0000000000200300 0000000000000030     8 .rela.plt
+// CHECK-NEXT: 0000000000200300 0000000000000030     8         <internal>:(.rela.plt)
+// CHECK-NEXT: 0000000000200330 0000000000000030     8 .eh_frame
+// CHECK-NEXT: 0000000000200330 0000000000000030     8         <internal>:(.eh_frame)
+// CHECK-NEXT: 0000000000201000 000000000000002d     4 .text
+// CHECK-NEXT: 0000000000201000 0000000000000028     4         {{.*}}{{/|\\}}map-file.s.tmp1.o:(.text)
 // CHECK-NEXT: 0000000000201000 0000000000000000     0                 _start
-// CHECK-NEXT: 0000000000201015 0000000000000000     0                 f(int)
-// CHECK-NEXT: 000000000020101e 0000000000000000     0                 local
-// CHECK-NEXT: 0000000000201020 0000000000000002     4         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.text)
-// CHECK-NEXT: 0000000000201020 0000000000000000     0                 foo
-// CHECK-NEXT: 0000000000201021 0000000000000000     0                 bar
-// CHECK-NEXT: 0000000000201022 0000000000000000     1         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.text.zed)
-// CHECK-NEXT: 0000000000201022 0000000000000000     0                 zed
-// CHECK-NEXT: 0000000000201024 0000000000000000     4         {{.*}}{{/|\\}}map-file.s.tmp3.o:(.text)
-// CHECK-NEXT: 0000000000201024 0000000000000000     0                 bah
-// CHECK-NEXT: 0000000000201024 0000000000000001     4         {{.*}}{{/|\\}}map-file.s.tmp4.a(map-file.s.tmp4.o):(.text)
-// CHECK-NEXT: 0000000000201024 0000000000000000     0                 baz
-// CHECK-NEXT: 0000000000202000 00000000000000c0     8 .dynamic
-// CHECK-NEXT: 0000000000202000 00000000000000c0     8         <internal>:(.dynamic)
-// CHECK-NEXT: 0000000000203000 0000000000000010    16 .bss
-// CHECK-NEXT: 0000000000203000 0000000000000004    16         {{.*}}{{/|\\}}map-file.s.tmp1.o:(COMMON)
-// CHECK-NEXT: 0000000000203000 0000000000000004     0                 common
-// CHECK-NEXT: 0000000000203004 0000000000000004     1         <internal>:(.bss)
-// CHECK-NEXT: 0000000000203004 0000000000000004     0                 sharedFoo
-// CHECK-NEXT: 0000000000203008 0000000000000008     1         <internal>:(.bss)
-// CHECK-NEXT: 0000000000203008 0000000000000008     0                 sharedBar
+// CHECK-NEXT: 000000000020101f 0000000000000000     0                 f(int)
+// CHECK-NEXT: 0000000000201028 0000000000000000     0                 local
+// CHECK-NEXT: 0000000000201028 0000000000000002     4         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.text)
+// CHECK-NEXT: 0000000000201028 0000000000000000     0                 foo
+// CHECK-NEXT: 0000000000201029 0000000000000000     0                 bar
+// CHECK-NEXT: 000000000020102a 0000000000000000     1         {{.*}}{{/|\\}}map-file.s.tmp2.o:(.text.zed)
+// CHECK-NEXT: 000000000020102a 0000000000000000     0                 zed
+// CHECK-NEXT: 000000000020102c 0000000000000000     4         {{.*}}{{/|\\}}map-file.s.tmp3.o:(.text)
+// CHECK-NEXT: 000000000020102c 0000000000000000     0                 bah
+// CHECK-NEXT: 000000000020102c 0000000000000001     4         {{.*}}{{/|\\}}map-file.s.tmp4.a(map-file.s.tmp4.o):(.text)
+// CHECK-NEXT: 000000000020102c 0000000000000000     0                 baz
+// CHECK-NEXT: 0000000000201030 0000000000000030    16 .plt
+// CHECK-NEXT: 0000000000201030 0000000000000030    16         <internal>:(.plt)
+// CHECK-NEXT: 0000000000201040 0000000000000000     0                 sharedFunc1
+// CHECK-NEXT: 0000000000201050 0000000000000000     0                 sharedFunc2
+// CHECK-NEXT: 0000000000202000 0000000000000028     8 .got.plt
+// CHECK-NEXT: 0000000000202000 0000000000000028     8         <internal>:(.got.plt)
+// CHECK-NEXT: 0000000000203000 0000000000000100     8 .dynamic
+// CHECK-NEXT: 0000000000203000 0000000000000100     8         <internal>:(.dynamic)
+// CHECK-NEXT: 0000000000204000 0000000000000010    16 .bss
+// CHECK-NEXT: 0000000000204000 0000000000000004    16         {{.*}}{{/|\\}}map-file.s.tmp1.o:(COMMON)
+// CHECK-NEXT: 0000000000204000 0000000000000004     0                 common
+// CHECK-NEXT: 0000000000204004 0000000000000004     1         <internal>:(.bss)
+// CHECK-NEXT: 0000000000204004 0000000000000004     0                 sharedFoo
+// CHECK-NEXT: 0000000000204008 0000000000000008     1         <internal>:(.bss)
+// CHECK-NEXT: 0000000000204008 0000000000000008     0                 sharedBar
 // CHECK-NEXT: 0000000000000000 0000000000000008     1 .comment
 // CHECK-NEXT: 0000000000000000 0000000000000008     1         <internal>:(.comment)
-// CHECK-NEXT: 0000000000000000 0000000000000168     8 .symtab
-// CHECK-NEXT: 0000000000000000 0000000000000168     8         <internal>:(.symtab)
-// CHECK-NEXT: 0000000000000000 000000000000006c     1 .shstrtab
-// CHECK-NEXT: 0000000000000000 000000000000006c     1         <internal>:(.shstrtab)
-// CHECK-NEXT: 0000000000000000 0000000000000055     1 .strtab
-// CHECK-NEXT: 0000000000000000 0000000000000055     1         <internal>:(.strtab)
+// CHECK-NEXT: 0000000000000000 0000000000000198     8 .symtab
+// CHECK-NEXT: 0000000000000000 0000000000000198     8         <internal>:(.symtab)
+// CHECK-NEXT: 0000000000000000 0000000000000084     1 .shstrtab
+// CHECK-NEXT: 0000000000000000 0000000000000084     1         <internal>:(.shstrtab)
+// CHECK-NEXT: 0000000000000000 000000000000006d     1 .strtab
+// CHECK-NEXT: 0000000000000000 000000000000006d     1         <internal>:(.strtab)
 
 // RUN: not ld.lld %t1.o %t2.o %t3.o %t4.a -o %t -Map=/ 2>&1 \
 // RUN:  | FileCheck -check-prefix=FAIL %s




More information about the llvm-commits mailing list