[llvm] r359311 - [llvm-nm] Fix handling of symbol types 't' 'd' 'r'

Jordan Rupprecht via llvm-commits llvm-commits at lists.llvm.org
Thu May 2 14:27:22 PDT 2019


This change is actually a regression, __init_array_start/__init_array_end
show up as 'd' now instead of 't'. (nm <large file> used to be identical to
llvm-nm, modulo sorting).

Can you send changes like this for review first, and reserve post-commit
review for NFCs or other minor changes?

On Fri, Apr 26, 2019 at 8:59 AM Fangrui Song via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: maskray
> Date: Fri Apr 26 09:01:48 2019
> New Revision: 359311
>
> URL: http://llvm.org/viewvc/llvm-project?rev=359311&view=rev
> Log:
> [llvm-nm] Fix handling of symbol types 't' 'd' 'r'
>
> In addition, fix and convert the two tests to yaml2obj based. This
> allows us to delete two executables.
>
> X86/weak.test: 'v' was not tested
> X86/init-fini.test: symbol types of __bss_start _edata _end were wrong
>   GNU nm reports __init_array_start as 't', and __preinit_array_start as
> 'd'.
>   __init_array_start is 't' just because its section ".init_array" starts
> with ".init"
>
>   'd' makes more sense and allows us to drop the weird SHT_INIT_ARRAY rule.
>   So, change __init_array_start to 'd' instead.
>
> Removed:
>     llvm/trunk/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64
>     llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
> Modified:
>     llvm/trunk/test/tools/llvm-nm/X86/init-fini.test
>     llvm/trunk/test/tools/llvm-nm/X86/weak.test
>     llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>
> Removed: llvm/trunk/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64?rev=359310&view=auto
>
> ==============================================================================
> Binary files
> llvm/trunk/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64
> (original) and
> llvm/trunk/test/tools/llvm-nm/X86/Inputs/init-fini.out.elf-x86_64 (removed)
> differ
>
> Removed: llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64?rev=359310&view=auto
>
> ==============================================================================
> Binary files llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
> (original) and llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
> (removed) differ
>
> Modified: llvm/trunk/test/tools/llvm-nm/X86/init-fini.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/init-fini.test?rev=359311&r1=359310&r2=359311&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-nm/X86/init-fini.test (original)
> +++ llvm/trunk/test/tools/llvm-nm/X86/init-fini.test Fri Apr 26 09:01:48
> 2019
> @@ -1,8 +1,50 @@
> -# RUN: llvm-nm -B -S %p/Inputs/init-fini.out.elf-x86_64 | FileCheck
> --match-full-lines %s
> +# 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
>
> -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
> +# 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
>
> Modified: llvm/trunk/test/tools/llvm-nm/X86/weak.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/weak.test?rev=359311&r1=359310&r2=359311&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-nm/X86/weak.test (original)
> +++ llvm/trunk/test/tools/llvm-nm/X86/weak.test Fri Apr 26 09:01:48 2019
> @@ -1,7 +1,36 @@
> -# 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
> +# 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
>
> -CHECK:                  w weak_extern_func
> -CHECK:                  w weak_extern_var
> -CHECK: 0000000000000000 0000000000000011 W weak_func
> -CHECK: 0000000000000000 0000000000000004 V weak_var
> +# CHECK:                  w weak_extern_func
> +# CHECK:                  v weak_extern_var
> +# CHECK: 0000000000000000 0000000000000011 W weak_func
> +# CHECK: 0000000000000000 0000000000000004 V weak_var
>
> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=359311&r1=359310&r2=359311&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Fri Apr 26 09:01:48 2019
> @@ -936,27 +936,14 @@ static char getSymbolNMTypeChar(ELFObjec
>
>    elf_section_iterator SecI = *SecIOrErr;
>    if (SecI != Obj.section_end()) {
> -    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:
> +    uint32_t Type = SecI->getType();
> +    uint64_t Flags = SecI->getFlags();
> +    if (Type == ELF::SHT_NOBITS)
>        return 'b';
> -    case ELF::SHT_INIT_ARRAY:
> -    case ELF::SHT_FINI_ARRAY:
> +    if (Flags & ELF::SHF_EXECINSTR)
>        return 't';
> -    }
> +    if (Flags & ELF::SHF_ALLOC)
> +      return Flags & ELF::SHF_WRITE ? 'd' : 'r';
>    }
>
>    if (SymI->getELFType() == ELF::STT_SECTION) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190502/1e1f65ae/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4849 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190502/1e1f65ae/attachment.bin>


More information about the llvm-commits mailing list