This patch fixes a bug in the handling of section flags. I added a new test elf file that shows the failures, but I'm not sure if you would prefer some other way of doing the testing.
From e633babc8129b759ea50c8f9e734686f2374494a Mon Sep 17 00:00:00 2001 From: Christopher Ferris <cfer...@google.com> Date: Wed, 29 Nov 2023 16:28:23 -0800 Subject: [PATCH] readelf: Fix the section flags handling.
The array of section flags was missing the G flag, so any flags after it were displayed incorrectly. And, of course, the G flag was not displayed at all. Added a new elf file with a section that include the T and C flags and updated readelf.test to run this test. This test fails on the old code and passes with the fix. --- tests/files/elf/ndk-elf-note-shflags | Bin 0 -> 4308 bytes tests/readelf.test | 36 +++++++++++++++++++++++++++ toys/other/readelf.c | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100755 tests/files/elf/ndk-elf-note-shflags diff --git a/tests/files/elf/ndk-elf-note-shflags b/tests/files/elf/ndk-elf-note-shflags new file mode 100755 index 0000000000000000000000000000000000000000..684a78bf9c7acc6912a6810e7bd0a37418eee75c GIT binary patch literal 4308 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 A<NyEw literal 0 HcmV?d00001 diff --git a/tests/readelf.test b/tests/readelf.test index 1e85e45e..2f0a4712 100755 --- a/tests/readelf.test +++ b/tests/readelf.test @@ -70,6 +70,42 @@ Section Headers: [31] .strtab STRTAB 0000000000000000 001b18 0001f4 00 0 0 1 " "" "" +# Verify many section header flags display properly. +NOSPACE=1 testing "-S flags" "readelf -SW $elf-shflags | head -32" \ +"There are 28 section headers, starting at offset 0xc74: + +Section Headers: + [Nr] Name Type Address Off Size ES Flg Lk Inf Al + [ 0] NULL 00000000 000000 000000 00 0 0 0 + [ 1] .interp PROGBITS 000001b4 0001b4 000013 00 A 0 0 1 + [ 2] .note.android.ident NOTE 000001c8 0001c8 000018 00 A 0 0 4 + [ 3] .note.gnu.build-id NOTE 000001e0 0001e0 000020 00 A 0 0 4 + [ 4] .dynsym DYNSYM 00000200 000200 000060 10 A 8 1 4 + [ 5] .gnu.version VERSYM 00000260 000260 00000c 02 A 4 0 2 + [ 6] .gnu.version_r VERNEED 0000026c 00026c 000020 00 A 8 1 4 + [ 7] .gnu.hash GNU_HASH 0000028c 00028c 000018 00 A 4 0 4 + [ 8] .dynstr STRTAB 000002a4 0002a4 000064 00 A 0 0 1 + [ 9] .rel.dyn ANDROID_REL 00000308 000308 00000d 01 A 4 0 4 + [10] .relr.dyn RELR 00000318 000318 00000c 04 A 0 0 4 + [11] .ARM.exidx ARM_EXIDX 00000324 000324 000028 00 AL 14 0 4 + [12] .rel.plt REL 0000034c 00034c 000020 08 AI 4 19 4 + [13] .rodata PROGBITS 0000036c 00036c 000015 01 AMS 0 0 1 + [14] .text PROGBITS 00001384 000384 0001c4 00 AX 0 0 4 + [15] .plt PROGBITS 00001550 000550 000060 00 AX 0 0 16 + [16] .tdata PROGBITS 000025c0 0005c0 000000 00 WAT 0 0 32 + [17] .dynamic DYNAMIC 000025c0 0005c0 0000d0 08 WA 8 0 4 + [18] .got PROGBITS 00002690 000690 000010 00 WA 0 0 4 + [19] .got.plt PROGBITS 000026a0 0006a0 00001c 00 WA 0 0 4 + [20] .data PROGBITS 000036bc 0006bc 00000c 00 WA 0 0 4 + [21] .comment PROGBITS 00000000 0006c8 0000cc 01 MS 0 0 1 + [22] .ARM.attributes ATTRIBUTES 00000000 000794 000042 00 0 0 1 + [23] .debug_frame PROGBITS 00000000 0007d8 00007a 00 C 0 0 4 + [24] .symtab SYMTAB 00000000 000854 000220 10 26 27 4 + [25] .shstrtab STRTAB 00000000 000a74 00010e 00 0 0 1 + [26] .strtab STRTAB 00000000 000b82 0000de 00 0 0 1 + [27] .gnu_debuglink PROGBITS 00000000 000c60 000014 00 0 0 4 +" "" "" + testing "-l" "readelf -lW $elf-short" " Elf file type is DYN (Shared object file) Entry point 0x1001 diff --git a/toys/other/readelf.c b/toys/other/readelf.c index 6aaa55e1..15e5e7d7 100644 --- a/toys/other/readelf.c +++ b/toys/other/readelf.c @@ -542,7 +542,7 @@ static void scan_elf() if (FLAG(S)) { char sh_flags[12] = {}, *p = sh_flags; - for (j=0; j<12; j++) if (s.flags&(1<<j)) *p++ = "WAXxMSILOTC"[j]; + for (j=0; j<12; j++) if (s.flags&(1<<j)) *p++ = "WAXxMSILOGTC"[j]; printf(" [%2d] %-17s %-15s %0*llx %06llx %06llx %02llx %3s %2d %2d %2lld\n", i, s.name, sh_type(s.type), w, s.addr, s.offset, s.size, s.entsize, sh_flags, s.link, s.info, s.addralign); -- 2.43.0.rc2.451.g8631bc7472-goog
_______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net