[PATCH] D68462: [llvm-readobj/llvm-readelf] - Add checks for GNU-style to "all.test" test case.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 7 07:04:31 PDT 2019
grimar added inline comments.
================
Comment at: test/tools/llvm-readobj/all.test:63
+ Entries: []
+ - Name: .group
+ Type: SHT_GROUP
----------------
jhenderson wrote:
> grimar wrote:
> > jhenderson wrote:
> > > Do we need group information to print a header?
> > Yes.
> > Logic is:
> > 1) Collect all group sections:
> > https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-readobj/ELFDumper.cpp#L2842
> > 2) Dump them (header is printed on this step):
> > https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-readobj/ELFDumper.cpp#L2886
> I see. Could you just check the "There are no section groups in the file" message instead? (https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-readobj/ELFDumper.cpp#L2911)
>
> I think that would be sufficient for this test case.
Done.
================
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
----------------
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.)
================
Comment at: test/tools/llvm-readobj/all.test:100
+## An arbitrary linker-generated valid content.
+ Content: 040000001000000003000000474E55004FCB712AA6387724A9F465A32CD8C14B
+Symbols:
----------------
jhenderson wrote:
> grimar wrote:
> > jhenderson wrote:
> > > This could probably just be an arbitrary note, and much simpler.
> > Probably. But it is already short enough and I do not want to spend time on optimising it until we have a way to describe
> > it with YAML. Having a raw content is anyways not optimal. What do you think?
> Time to implement SHT_NOTE sections in yaml2obj :)
>
> But happy for that to be later.
Yep, probably `SHT_NOTE` will be the next.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68462/new/
https://reviews.llvm.org/D68462
More information about the llvm-commits
mailing list