[PATCH] D68462: [llvm-readobj/llvm-readelf] - Add checks for GNU-style to "all.test" test case.
James Henderson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 7 07:20:13 PDT 2019
jhenderson accepted this revision.
jhenderson added a comment.
This revision is now accepted and ready to land.
LGTM.
================
Comment at: test/tools/llvm-readobj/all.test:86-90
+ - Name: .eh_frame_hdr
+ Type: SHT_PROGBITS
+## An arbitrary linker-generated valid content.
+ Content: 011b033b140000000100000000f0ffff30000000
+ - Name: .eh_frame
----------------
grimar wrote:
> jhenderson wrote:
> > grimar wrote:
> > > jhenderson wrote:
> > > > Same comments as earlier. Can these be empty?
> > > No. We need to have something valid here, otherwise any
> > > error triggered will fail the dumping.
> > > (e.g. https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-readobj/DwarfCFIEHPrinter.h#L127).
> > You don't actually need the .eh_frame_hdr at all, looking at the code, I think, just the .eh_frame section. That said, this appears to be different from GNU readelf.
> >
> > For reference, GNU readelf prints "There are no unwind sections in this file" if there are no .eh_frame_hdr sections even if there is a .eh_frame section (not looked to see what happens if there is a PT_GNU_EH_FRAME program header).
> I am a bit confused.
>
> Imagine we have the code and invocations below:
>
> "1.s":
> ```
> .section foo,"ax", at progbits
> .cfi_startproc
> nop
> .cfi_endproc
> ```
>
> ```
> as 1.s -o 1.o
> ld.bfd 1.o -o with_hdr --eh-frame-hdr
> ld.bfd 1.o -o wo_hdr
> ```
>
> For both of them I do not see neither `.eh_frame_hdr` nor `.eh_frame` section dumped with `-a`.
> I see ".eh_frame" dumped when I add `-wf` though (but still no `.eh_frame_hdr`).
> e.g.:
>
>
> ```
> umb at ubuntu:~/tests/81$ readelf -v
> GNU readelf (GNU Binutils for Ubuntu) 2.31.1
> Copyright (C) 2018 Free Software Foundation, Inc.
>
> umb at ubuntu:~/tests/81$ readelf -a with_hdr
> ELF Header:
> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF64
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: EXEC (Executable file)
> Machine: Advanced Micro Devices X86-64
> Version: 0x1
> Entry point address: 0x401000
> Start of program headers: 64 (bytes into file)
> Start of section headers: 8584 (bytes into file)
> Flags: 0x0
> Size of this header: 64 (bytes)
> Size of program headers: 56 (bytes)
> Number of program headers: 3
> Size of section headers: 64 (bytes)
> Number of section headers: 7
> Section header string table index: 6
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
> [ 1] foo PROGBITS 0000000000401000 00001000
> 0000000000000001 0000000000000000 AX 0 0 1
> [ 2] .eh_frame_hdr PROGBITS 0000000000402000 00002000
> 0000000000000014 0000000000000000 A 0 0 4
> [ 3] .eh_frame PROGBITS 0000000000402018 00002018
> 000000000000002c 0000000000000000 A 0 0 8
> [ 4] .symtab SYMTAB 0000000000000000 00002048
> 00000000000000d8 0000000000000018 5 5 8
> [ 5] .strtab STRTAB 0000000000000000 00002120
> 000000000000002c 0000000000000000 0 0 1
> [ 6] .shstrtab STRTAB 0000000000000000 0000214c
> 0000000000000037 0000000000000000 0 0 1
> Key to Flags:
> W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
> L (link order), O (extra OS processing required), G (group), T (TLS),
> C (compressed), x (unknown), o (OS specific), E (exclude),
> l (large), p (processor specific)
>
> There are no section groups in this file.
>
> Program Headers:
> Type Offset VirtAddr PhysAddr
> FileSiz MemSiz Flags Align
> LOAD 0x0000000000001000 0x0000000000401000 0x0000000000401000
> 0x0000000000000001 0x0000000000000001 R E 0x1000
> LOAD 0x0000000000002000 0x0000000000402000 0x0000000000402000
> 0x0000000000000044 0x0000000000000044 R 0x1000
> GNU_EH_FRAME 0x0000000000002000 0x0000000000402000 0x0000000000402000
> 0x0000000000000014 0x0000000000000014 R 0x4
>
> Section to Segment mapping:
> Segment Sections...
> 00 foo
> 01 .eh_frame_hdr .eh_frame
> 02 .eh_frame_hdr
>
> There is no dynamic section in this file.
>
> There are no relocations in this file.
>
> The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.
>
> Symbol table '.symtab' contains 9 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000401000 0 SECTION LOCAL DEFAULT 1
> 2: 0000000000402000 0 SECTION LOCAL DEFAULT 2
> 3: 0000000000402018 0 SECTION LOCAL DEFAULT 3
> 4: 0000000000402000 0 NOTYPE LOCAL DEFAULT 2 __GNU_EH_FRAME_HDR
> 5: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _start
> 6: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 __bss_start
> 7: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 _edata
> 8: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 _end
>
> No version information found in this file.
>
> umb at ubuntu:~/tests/81$ readelf -a with_hdr -wf
> ELF Header:
> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF64
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: EXEC (Executable file)
> Machine: Advanced Micro Devices X86-64
> Version: 0x1
> Entry point address: 0x401000
> Start of program headers: 64 (bytes into file)
> Start of section headers: 8584 (bytes into file)
> Flags: 0x0
> Size of this header: 64 (bytes)
> Size of program headers: 56 (bytes)
> Number of program headers: 3
> Size of section headers: 64 (bytes)
> Number of section headers: 7
> Section header string table index: 6
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
> [ 1] foo PROGBITS 0000000000401000 00001000
> 0000000000000001 0000000000000000 AX 0 0 1
> [ 2] .eh_frame_hdr PROGBITS 0000000000402000 00002000
> 0000000000000014 0000000000000000 A 0 0 4
> [ 3] .eh_frame PROGBITS 0000000000402018 00002018
> 000000000000002c 0000000000000000 A 0 0 8
> [ 4] .symtab SYMTAB 0000000000000000 00002048
> 00000000000000d8 0000000000000018 5 5 8
> [ 5] .strtab STRTAB 0000000000000000 00002120
> 000000000000002c 0000000000000000 0 0 1
> [ 6] .shstrtab STRTAB 0000000000000000 0000214c
> 0000000000000037 0000000000000000 0 0 1
> Key to Flags:
> W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
> L (link order), O (extra OS processing required), G (group), T (TLS),
> C (compressed), x (unknown), o (OS specific), E (exclude),
> l (large), p (processor specific)
>
> There are no section groups in this file.
>
> Program Headers:
> Type Offset VirtAddr PhysAddr
> FileSiz MemSiz Flags Align
> LOAD 0x0000000000001000 0x0000000000401000 0x0000000000401000
> 0x0000000000000001 0x0000000000000001 R E 0x1000
> LOAD 0x0000000000002000 0x0000000000402000 0x0000000000402000
> 0x0000000000000044 0x0000000000000044 R 0x1000
> GNU_EH_FRAME 0x0000000000002000 0x0000000000402000 0x0000000000402000
> 0x0000000000000014 0x0000000000000014 R 0x4
>
> Section to Segment mapping:
> Segment Sections...
> 00 foo
> 01 .eh_frame_hdr .eh_frame
> 02 .eh_frame_hdr
>
> There is no dynamic section in this file.
>
> There are no relocations in this file.
>
> The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.
>
> Symbol table '.symtab' contains 9 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000401000 0 SECTION LOCAL DEFAULT 1
> 2: 0000000000402000 0 SECTION LOCAL DEFAULT 2
> 3: 0000000000402018 0 SECTION LOCAL DEFAULT 3
> 4: 0000000000402000 0 NOTYPE LOCAL DEFAULT 2 __GNU_EH_FRAME_HDR
> 5: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _start
> 6: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 __bss_start
> 7: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 _edata
> 8: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 3 _end
>
> No version information found in this file.
> Contents of the .eh_frame section:
>
>
> 00000000 0000000000000014 00000000 CIE
> Version: 1
> Augmentation: "zR"
> Code alignment factor: 1
> Data alignment factor: -8
> Return address column: 16
> Augmentation data: 1b
> DW_CFA_def_cfa: r7 (rsp) ofs 8
> DW_CFA_offset: r16 (rip) at cfa-8
> DW_CFA_nop
> DW_CFA_nop
>
> 00000018 0000000000000010 0000001c FDE cie=00000000 pc=0000000000401000..0000000000401001
> DW_CFA_nop
> DW_CFA_nop
> DW_CFA_nop
>
>
> ```
>
> I also see ".eh_frame" dumped when there is no ".eh_frame_hdr":
>
>
> ```
> umb at ubuntu:~/tests/81$ readelf -a wo_hdr -wf
> ELF Header:
> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF64
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: EXEC (Executable file)
> Machine: Advanced Micro Devices X86-64
> Version: 0x1
> Entry point address: 0x401000
> Start of program headers: 64 (bytes into file)
> Start of section headers: 8480 (bytes into file)
> Flags: 0x0
> Size of this header: 64 (bytes)
> Size of program headers: 56 (bytes)
> Number of program headers: 2
> Size of section headers: 64 (bytes)
> Number of section headers: 6
> Section header string table index: 5
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
> [ 1] foo PROGBITS 0000000000401000 00001000
> 0000000000000001 0000000000000000 AX 0 0 1
> [ 2] .eh_frame PROGBITS 0000000000402000 00002000
> 000000000000002c 0000000000000000 A 0 0 8
> [ 3] .symtab SYMTAB 0000000000000000 00002030
> 00000000000000a8 0000000000000018 4 3 8
> [ 4] .strtab STRTAB 0000000000000000 000020d8
> 0000000000000019 0000000000000000 0 0 1
> [ 5] .shstrtab STRTAB 0000000000000000 000020f1
> 0000000000000029 0000000000000000 0 0 1
> Key to Flags:
> W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
> L (link order), O (extra OS processing required), G (group), T (TLS),
> C (compressed), x (unknown), o (OS specific), E (exclude),
> l (large), p (processor specific)
>
> There are no section groups in this file.
>
> Program Headers:
> Type Offset VirtAddr PhysAddr
> FileSiz MemSiz Flags Align
> LOAD 0x0000000000001000 0x0000000000401000 0x0000000000401000
> 0x0000000000000001 0x0000000000000001 R E 0x1000
> LOAD 0x0000000000002000 0x0000000000402000 0x0000000000402000
> 0x000000000000002c 0x000000000000002c R 0x1000
>
> Section to Segment mapping:
> Segment Sections...
> 00 foo
> 01 .eh_frame
>
> There is no dynamic section in this file.
>
> There are no relocations in this file.
>
> The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.
>
> Symbol table '.symtab' contains 7 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000401000 0 SECTION LOCAL DEFAULT 1
> 2: 0000000000402000 0 SECTION LOCAL DEFAULT 2
> 3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _start
> 4: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 2 __bss_start
> 5: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 2 _edata
> 6: 0000000000404000 0 NOTYPE GLOBAL DEFAULT 2 _end
>
> No version information found in this file.
> Contents of the .eh_frame section:
>
>
> 00000000 0000000000000014 00000000 CIE
> Version: 1
> Augmentation: "zR"
> Code alignment factor: 1
> Data alignment factor: -8
> Return address column: 16
> Augmentation data: 1b
> DW_CFA_def_cfa: r7 (rsp) ofs 8
> DW_CFA_offset: r16 (rip) at cfa-8
> DW_CFA_nop
> DW_CFA_nop
>
> 00000018 0000000000000010 0000001c FDE cie=00000000 pc=0000000000401000..0000000000401001
> DW_CFA_nop
> DW_CFA_nop
> DW_CFA_nop
>
> }
> ```
>
> Since we have such differences in the behavior, should we just test the current behavior atm?
> I.e. before this diff I tested "EH_FRAME Header [", now I also added a check for ".eh_frame section at offset...".
> Both of them are dumped at the top level currently. Seems reasonable to test the fact we do that (with just `-all`)
> and the order, probably?
> (I am ok to change it in any way actually, but just wanted to clarify this before doing anything with it.)
I'm confused too. Your output above even appears to be conflicted. Note that it mentions "The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported."
Anyway, probably best to file a bug to record the issue and then do as you're doing here (i.e. test the current behaviour).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68462/new/
https://reviews.llvm.org/D68462
More information about the llvm-commits
mailing list