From 51a141876897223e925ea2e56be8f48d2affb32f Mon Sep 17 00:00:00 2001 From: Jordan Rupprecht Date: Thu, 2 May 2019 21:42:46 +0000 Subject: [PATCH] Revert [llvm-nm] Fix handling of symbol types + [llvm-nm] Generalize symbol types This reverts r359311 and r359312 (git commit 0bf06a8f59b0074a60871865e828d92db8930c59 and 5f184f17800ea2ac27be5e4ab540cb94a46e80c7) llvm-svn: 359830 --- .../X86/Inputs/init-fini.out.elf-x86_64 | Bin 0 -> 904 bytes .../llvm-nm/X86/Inputs/weak.obj.elf-x86_64 | Bin 0 -> 1448 bytes llvm/test/tools/llvm-nm/X86/init-fini.test | 56 +++--------------- llvm/test/tools/llvm-nm/X86/weak.test | 41 ++----------- llvm/tools/llvm-nm/llvm-nm.cpp | 39 ++++++++---- 5 files changed, 41 insertions(+), 95 deletions(-) create mode 100755 llvm/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64 create mode 100644 llvm/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64 diff --git a/llvm/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64 b/llvm/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64 new file mode 100755 index 0000000000000000000000000000000000000000..b5c74f234c609b4336cb5e64dee4868c57a0422f GIT binary patch literal 904 zcmbu7u}%Xq42J*Ssnvl50wyFD7+8>~#MTLQfr)nrsd^F}=x~>TPP___(77X1AEA%X z$G~>%UPyt3NV(ts;@D0u?+;IpMXv`N1@6J#5@SK}3si-;%0?(?eSlJ8``r>*WA&o0 z)H4Mxg>a1lP2(#(3pcIAqq?fLZ`-E?+e)+S7XLK3OFK^*Skfu1o^kFA#6Ptk<7dkA z_#5IUKjgm_zMtpr7k;FCoz;bNv-vDI-!y*V>iP6LXoGJ8p-J01wd<)59vHTZ*Wf3l zp^5rpR;b?shFw}J{qJ!>8Tjt_pYpK#UPc#(swVNC%>%B;Jf>MHvU|4o(Y=EhkncZD v_G$`|jRxMPknDUv`^gjEMX%M`sPbFqY5kllKOnW<6^VRkp-~FS&g*{xFyBCt literal 0 HcmV?d00001 diff --git a/llvm/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64 b/llvm/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64 new file mode 100644 index 0000000000000000000000000000000000000000..8aa41bf4f37f0894b33366f5ecec8c2bd0bee6b4 GIT binary patch literal 1448 zcmb_bJ4*vW5S~kXzfiFdVsToCf-WiuA|jEX5ebT-g@uGmyb#btxSY?%P7oV^f~7x0 z@V5xI_JYoLw?j7TrSm&>cjnu9?9R^JZx*&vjza>6)~TrpOZ1v*%GpTF(g5|+(e~rV zC-kRI%qQ=d^SRurJCol%nst}el3HMD3_QcRJ0Ry~*vSlZ_dIi=3Fa_>5lkCH!w;$4 zU{`?+ptk|e*g;=EN!#hf8xW=WOG26>B_T~+Ni;|4Zo@}4XxYOZCXM)#33r_`&KcdE zxeO1NhmAQVT$_Y`?R#gc94*BwFNlT8WnEMLP3Q;p;vWL0fSef5+sEVkCq_Ru8Q>uc z@3IVlH(G*7HEwI6SK>7c;@@RoB0(u-k4UtEBcN`>R zng@8h1NX6+0N9$q`y;09f2fV5uf)gJ7kL9Q<(y(C{-Z+ZRr1Ta%Dl*?X~k3w*|y!& z{w+PjTvhw57`_mtenRiCkW~K#9Z>3w`s42uf8p`IcI}v=ZS8*y#ejW&==RxR{(_0& YY6tu)$ZhBEWiBcIoAz7deG_*6U%3EYssI20 literal 0 HcmV?d00001 diff --git a/llvm/test/tools/llvm-nm/X86/init-fini.test b/llvm/test/tools/llvm-nm/X86/init-fini.test index 80a81ba0d33f..86afc711c4ea 100644 --- a/llvm/test/tools/llvm-nm/X86/init-fini.test +++ b/llvm/test/tools/llvm-nm/X86/init-fini.test @@ -1,50 +1,8 @@ -# RUN: yaml2obj %s -o %t -# RUN: llvm-nm -B -S %t | FileCheck %s -!ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_EXEC - Machine: EM_X86_64 -Sections: - - Name: .text - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - - Name: .init_array - Type: SHT_INIT_ARRAY - Flags: [ SHF_ALLOC, SHF_WRITE ] - - Name: .preinit_array - Type: SHT_PREINIT_ARRAY - Flags: [ SHF_ALLOC, SHF_WRITE ] - - Name: .fini_array - Type: SHT_FINI_ARRAY - Flags: [ SHF_ALLOC, SHF_WRITE ] - - Name: .data - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_WRITE ] - - Name: .bss - Type: SHT_NOBITS - Flags: [ SHF_ALLOC, SHF_WRITE ] -Symbols: - - Name: __init_array_start - Section: .init_array - - Name: __preinit_array_start - Section: .preinit_array - - Name: __fini_array_start - Section: .fini_array - - Name: __bss_start - Section: .bss - Binding: STB_GLOBAL - - Name: _edata - Section: .data - Binding: STB_GLOBAL - - Name: _end - Section: .bss - Binding: STB_GLOBAL +# RUN: llvm-nm -B -S %p/Inputs/init-fini.out.elf-x86_64 | FileCheck --match-full-lines %s -# CHECK: B __bss_start -# CHECK: d __fini_array_start -# CHECK: d __init_array_start -# CHECK: d __preinit_array_start -# CHECK: D _edata -# CHECK: B _end +CHECK: 00000000006000c2 0000000000000000 T __bss_start +CHECK: 00000000006000c2 0000000000000000 t __init_array_end +CHECK: 00000000006000ba 0000000000000000 t __init_array_start +CHECK: 00000000006000c2 0000000000000000 T _edata +CHECK: 00000000006000c8 0000000000000000 T _end +CHECK: 00000000004000b0 0000000000000000 T _start diff --git a/llvm/test/tools/llvm-nm/X86/weak.test b/llvm/test/tools/llvm-nm/X86/weak.test index 4fc03eaffb90..8d06f4fb029e 100644 --- a/llvm/test/tools/llvm-nm/X86/weak.test +++ b/llvm/test/tools/llvm-nm/X86/weak.test @@ -1,36 +1,7 @@ -# RUN: yaml2obj %s -o %t -# RUN: llvm-nm -B -S %t | FileCheck --match-full-lines %s -# RUN: llvm-nm -W -B -S %t | count 0 -!ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_REL - Machine: EM_X86_64 -Sections: - - Name: .text - Type: SHT_PROGBITS - - Name: .data - Type: SHT_PROGBITS -Symbols: - - Name: weak_func - Type: STT_FUNC - Section: .text - Binding: STB_WEAK - Size: 17 - - Name: weak_var - Type: STT_OBJECT - Section: .data - Binding: STB_WEAK - Size: 4 - - Name: weak_extern_func - Type: STT_FUNC - Binding: STB_WEAK - - Name: weak_extern_var - Type: STT_OBJECT - Binding: STB_WEAK +# RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s +# RUN: llvm-nm -W -B -S %p/Inputs/weak.obj.elf-x86_64 | count 0 -# CHECK: w weak_extern_func -# CHECK: v weak_extern_var -# CHECK: 0000000000000000 0000000000000011 W weak_func -# CHECK: 0000000000000000 0000000000000004 V weak_var +CHECK: w weak_extern_func +CHECK: w weak_extern_var +CHECK: 0000000000000000 0000000000000011 W weak_func +CHECK: 0000000000000000 0000000000000004 V weak_var diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 336167f34bb7..9b72c300726a 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -901,26 +901,43 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj, elf_section_iterator SecI = *SecIOrErr; if (SecI != Obj.section_end()) { - uint32_t Type = SecI->getType(); - uint64_t Flags = SecI->getFlags(); - if (Type == ELF::SHT_NOBITS) + switch (SecI->getType()) { + case ELF::SHT_PROGBITS: + case ELF::SHT_DYNAMIC: + switch (SecI->getFlags()) { + case (ELF::SHF_ALLOC | ELF::SHF_EXECINSTR): + return 't'; + case (ELF::SHF_TLS | ELF::SHF_ALLOC | ELF::SHF_WRITE): + case (ELF::SHF_ALLOC | ELF::SHF_WRITE): + return 'd'; + case ELF::SHF_ALLOC: + case (ELF::SHF_ALLOC | ELF::SHF_MERGE): + case (ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::SHF_STRINGS): + return 'r'; + } + break; + case ELF::SHT_NOBITS: return 'b'; - if (Flags & ELF::SHF_EXECINSTR) + case ELF::SHT_INIT_ARRAY: + case ELF::SHT_FINI_ARRAY: return 't'; - if (Flags & ELF::SHF_ALLOC) - return Flags & ELF::SHF_WRITE ? 'd' : 'r'; + } + } + + if (SymI->getELFType() == ELF::STT_SECTION) { Expected Name = SymI->getName(); if (!Name) { consumeError(Name.takeError()); return '?'; } - if (Name->startswith(".debug")) - return 'N'; - if (!(Flags & ELF::SHF_WRITE)) - return 'n'; + return StringSwitch(*Name) + .StartsWith(".debug", 'N') + .StartsWith(".note", 'n') + .StartsWith(".comment", 'n') + .Default('?'); } - return '?'; + return 'n'; } static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) {