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 <[email protected]>
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
zcmaJ^ZERE589vtuiDQBj0$us)xMgV-3UQpoBn}%B0TYrbrIf<dY15o*`zCgC{UQ5?
z#i$#BLf1}+u?eRBC>7Jbw2mLH1Y4`Yh{V>hs%)(mt(~TJ2#GbcTN|VerRs+FJm>m^
zn@rl9JokOxk8|!h=bkSg+%edvX_`<{C0YcnqsxQ{LEH6sc*LTR&_z9BYs5-X0~cco
z6DUAb!$(vB=U^+KDnT#?w*=Ij96|wtanb0+kH9{HLc~UogGH|RB#g-i9Q+%8g6&e}
zFTl9a<$zrvRJ<14T^^<szF!CMx_R+8U=u9QoIN+}gu6W7z14TOe~%&#*Z+uoKfJ8t
z3I;+U44a^zKq%LY{wuV=N2qvPp;)lZbXzQyX|qz9Q8O=u_ikCyn@Qxesf1Wp@nJ~i
zH`%#spSa!fR`K+!J74kt@y*Wn_P@0gp?SjZqofIBi87#RFJEA<Twp)svX@Hk!FW1<
z8hZ9Q_}Cswd<nm(M?|FMe0Po!+pwzQlPVguQn7e6l}XtmmrrHvVUZiN3nCgV*hYLb
z8c&W!hmDjq&oMG)<P(Ag1BI*@9N4y98XGpyggaf)35%q6_hTJw-}6_+DSS$C;z1$g
zJi#0qLW9|+B((R)qKR|RrNu`ku2KK2W}+Gc!}wX0`4mWr8k6W8HNNA^)cAN0Bz$6T
zGF8y=Z|H?$I+nHAzei@oV!)s56EoV&Q&SV?pDr~FOn$UmG<;#SuNXnB{y=2=$5(xI
z$)@DxSuy$Os;jfhC!cN9)_eX^J5Y>xzEd;6OkYymFJ^u}EiS!}HcbQn#3Z-^T{`dU
z_YI6kijnH1mszV{`ru51_fqNN(Z=czj*8v0)%6oQwJo!6mM*@4{4>DJ`EQnX>|#51
z^o#qy5gCt&q)67BNcPqC?L=#Oh9;)VYsIaQXSC1m`+DEu>99CGD;k67$I0o_vzlbb
z!90?E3#>}ABVg5%O@J+u>;PDeWc$HtCCh<%C9}ZlBpU|vNfrZJEZJAU>Lq&|Y>8xh
z!2FW!0&9@0f4XO!t&703RC>08HA%J^Y?)+T)4qQ6b!PK)&2wIiZe6l2d1#yGlF(~Q
zGZ)277smJVAC=1%#%S+{<??=KqVrRV>T9hx#NWPsU3>rd^}$=ex-qpt#H)zCcI<lS
z)&&_;cFO{L%>uho+43!SADnjs05#VZ^<x$NW#~@>+#5bAm$Qg@?*XSYU|M@IH!+2W
zxW>6ZGp`v~0sm*9xo2XFmHW=U(1Y-EZ`1)$aR&36`vJRO12DK43Uvyu>>tABT1o)_
zx>L>`gFS<G3_;(4wxG*SyO80C+Vk&oZ#0$IZZzHvlr7(6!zqJuBiyVH4o39$?m#dQ
zQv0CZ(%v5I?Aa7-->7fMjb!n}!n2_)n?~BAFJ=_Xgr3dl`A|=|qoXIbUXNQwW<=j_
z<_jtKol5nVq;2O4o7>t9XO|6(WV0idS;&s%<7Ob9O}E+EtQAih+?=ib>DF96`-B;{
zb+a>MCb|<{o#C#|SZGstQ`qbdwRd!x3B%~_gs~|c?hXfo>qT!b`eT?zEG4vV(Cr<8
zV2`Nr*Y<j~I*+fmzRE8ev_@^Ir>T0mc8|EXYK68^Tjg1&HER!Q4{4FgcPgPQwjI%O
zzU@DHskKUU9Bo=#`q9d&`fI`Zs;w_3Z$HuW+Z|h;)?$}W{O-GbFMV&S-}lUB&v59_
zzT?q<96b2h??1b~xNqy<I}dDsM{jxR2Orj6SoiuJ&&>_*z4FUXe&Q2)wRdW5zZTcu
zT~@EXb9#NdSY03D1Y96Lb=lS8R{77c`JEl{i^oAu!QKn)5q|Lp=##GaYp~yT*_&YV
zZ0G#cFa!BY&Vvv%%l`&?+Lb>Ed->da@{2LpJbPC_Ybfyuv=Y_6HLm<A1jB0Kp#F2P
zIS(Ca5I+VPa@maMTsGrRx@^WLTsGs!TsGq;TsGs+yKKhKxNOGHx@@k;x$*V*#i<4M
zFJSZTB*n8-+y}z@o*%jiPwoLqu*Hce!1cHhW5)QCDhSPZaDmPBu7vTYlmRWb%0Ta)
zhXdw#DlskswmEJKEFwIxc+zGDB$KtxfLdRvg!CaJkh2iXo0daZiDBFMRBX&P3nGvx
zW(sy5b!El^l|>tciR*%y&&hIm<~TJ-;>vW27t^wMG-1ZZMtHSyYD*f0BogS14(E-u
zS!p86$Hr1tq7}C-)@`IyaS<pa(GJ^)fhk=~OWRHuwt)s@9W9?CZdg`y7?+!<k<S}N
zTw?ATyx`<*xLg+?-h5mcUrX7^XaQrC%9vI`U?}WBJeLzr(P$bQ(Y$++yeMIBv5gUR
znR4HwoNLp(Hkg@&XikWD-j10gsZ1a)nhg<+d}&wj!vot93G|3&I}j%8AZsVX!wv*R
zCNbJ-TEne{<gjIo6hwQ?i+^=ZhyP2{h;nV?n3(rlLKR|+q656EF;Cs8xwe&X52RcM
zRNgfdCUgcWqVl+2c#g3?`2ZOL<@tyra!=(M_YA=Ei+MxL0k|irdgv#<3h=xm=b1<7
z;O_chinGA&N*>Qjg8fkSDg8zGu*J)|dBze6*h<(&%0U2}%@RE837++;9%|-}0o*Q`
z$FrYcKa?;}<sv_K7`FSj3HJ?(s&@-`9k31Hoq^E78RvVb*>}F2@9zLC<PdY)m=l(9
zXP<ZO81jCAykE0mMbvwHVbfg$$a?}VAw%Fw_{}IE1I(*JLHQe!mlc=j75*n^)`i#2
z<-Gwe+YYVz!97ma2hHCNCs0Ve3$D3w3AyrkcRGW-HB6|8>W3GVsruw^SmZ7I9xTE;
z8S{cPAXkw0x<loYF`^GZA9B)($4M*#ej6psq5K?>ywbt9k#|5woQG=PEts4uO7<dO
zhl9V_Rs+mq|GCgPc1mnq2L0+~a4LEe+?{tAi|<`k$dz~6#Tg#Lpx{`V6V<-|0<g&n
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
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net