[Libguestfs] [PATCH] filearch: Add s390 and s390x detection and tests.

Richard W.M. Jones rjones at redhat.com
Wed Nov 9 12:26:24 UTC 2016


Unfortunately I was unable to build s390 binaries since multilib was
dropped in Fedora 24 on s390x.  Going from the source of the 'file'
command it seems as if it prints "32-bit" (the architecture is really
31 bit).
---
 generator/actions.ml                 |  12 ++++++++++++
 src/filearch.c                       |  10 ++++++++++
 test-data/Makefile.am                |   2 ++
 test-data/binaries/Makefile.am       |   2 ++
 test-data/binaries/bin-s390x-dynamic | Bin 0 -> 8448 bytes
 test-data/binaries/lib-s390x.so      | Bin 0 -> 7696 bytes
 6 files changed, 26 insertions(+)
 create mode 100755 test-data/binaries/bin-s390x-dynamic
 create mode 100755 test-data/binaries/lib-s390x.so

diff --git a/generator/actions.ml b/generator/actions.ml
index 91a1819..43de38b 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -798,6 +798,8 @@ to specify the QEMU interface emulation to use at run time." };
       InitISOFS, Always, TestResultString (
         [["file_architecture"; "/bin-riscv64-dynamic"]], "riscv64"), [];
       InitISOFS, Always, TestResultString (
+        [["file_architecture"; "/bin-s390x-dynamic"]], "s390x"), [];
+      InitISOFS, Always, TestResultString (
         [["file_architecture"; "/bin-sparc-dynamic"]], "sparc"), [];
       InitISOFS, Always, TestResultString (
         [["file_architecture"; "/bin-win32.exe"]], "i386"), [];
@@ -818,6 +820,8 @@ to specify the QEMU interface emulation to use at run time." };
       InitISOFS, Always, TestResultString (
         [["file_architecture"; "/lib-riscv64.so"]], "riscv64"), [];
       InitISOFS, Always, TestResultString (
+        [["file_architecture"; "/lib-s390x.so"]], "s390x"), [];
+      InitISOFS, Always, TestResultString (
         [["file_architecture"; "/lib-sparc.so"]], "sparc"), [];
       InitISOFS, Always, TestResultString (
         [["file_architecture"; "/lib-win32.dll"]], "i386"), [];
@@ -880,6 +884,14 @@ Intel Itanium.
 
 RISC-V 32-, 64- or 128-bit variants.
 
+=item \"s390\"
+
+31 bit IBM S/390.
+
+=item \"s390x\"
+
+64 bit IBM S/390.
+
 =item \"sparc\"
 
 32 bit SPARC.
diff --git a/src/filearch.c b/src/filearch.c
index 310038e..2c75425 100644
--- a/src/filearch.c
+++ b/src/filearch.c
@@ -102,6 +102,16 @@ canonical_elf_arch (guestfs_h *g,
     ret = safe_asprintf (g, "riscv%s", bits);
     goto no_strdup;
   }
+  else if (strstr (elf_arch, "IBM S/390")) {
+    if (STREQ (bits, "32"))
+      r = "s390";
+    else if (STREQ (bits, "64"))
+      r = "s390x";
+    else {
+      error (g, "file_architecture: unknown S/390 bit size: %s", bits);
+      return NULL;
+    }
+  }
   else
     r = elf_arch;
 
diff --git a/test-data/Makefile.am b/test-data/Makefile.am
index 86cd5a2..0ac7354 100644
--- a/test-data/Makefile.am
+++ b/test-data/Makefile.am
@@ -42,6 +42,7 @@ image_files = \
 	$(srcdir)/binaries/bin-ppc64-dynamic \
 	$(srcdir)/binaries/bin-ppc64le-dynamic \
 	$(srcdir)/binaries/bin-riscv64-dynamic \
+	$(srcdir)/binaries/bin-s390x-dynamic \
 	$(srcdir)/binaries/bin-sparc-dynamic \
 	$(srcdir)/binaries/bin-win32.exe \
 	$(srcdir)/binaries/bin-win64.exe \
@@ -54,6 +55,7 @@ image_files = \
 	$(srcdir)/binaries/lib-ppc64.so \
 	$(srcdir)/binaries/lib-ppc64le.so \
 	$(srcdir)/binaries/lib-riscv64.so \
+	$(srcdir)/binaries/lib-s390x.so \
 	$(srcdir)/binaries/lib-sparc.so \
 	$(srcdir)/binaries/lib-win32.dll \
 	$(srcdir)/binaries/lib-win64.dll \
diff --git a/test-data/binaries/Makefile.am b/test-data/binaries/Makefile.am
index ccc7d00..05c1eb9 100644
--- a/test-data/binaries/Makefile.am
+++ b/test-data/binaries/Makefile.am
@@ -27,6 +27,7 @@ EXTRA_DIST = \
 	bin-ppc64-dynamic \
 	bin-ppc64le-dynamic \
 	bin-riscv64-dynamic \
+	bin-s390x-dynamic \
 	bin-sparc-dynamic \
 	bin-win32.exe \
 	bin-win64.exe \
@@ -39,6 +40,7 @@ EXTRA_DIST = \
 	lib-ppc64le.so \
 	lib-mipsel.so \
 	lib-riscv64.so \
+	lib-s390x.so \
 	lib-sparc.so \
 	lib-win32.dll \
 	lib-win64.dll \
diff --git a/test-data/binaries/bin-s390x-dynamic b/test-data/binaries/bin-s390x-dynamic
new file mode 100755
index 0000000000000000000000000000000000000000..43d3b3ddd1ec36ab2b8653212d9ee128c630d046
GIT binary patch
literal 8448
zcmeHMdu&@*89&!?>ZFY`ckN0?w{j<fXc2Lov}7#<&1oJ at ru0D;P>~QfPV6P_96Pmd
zrlk9$mZ(I>MyUo&2niAK$^`sTG>J8uU=|W(qh-wyh)M{lB`cZ~p}DA36OWqTch32)
zk8d4m2=QOO=-lsozwdb-_xjwMQ~kpOfq*4E3W#m!OQ0x%5sk+czrQ4TT<jCgA}$^j
z?}xkrtx at 6v7^vvu2=^}GRW6z!G at u0u6(X>Yu0<aQbPwSm=2RCo&PO`RCy6;qdP^b9
z<uJ&PY6Z1!r)yE{tl_9*E8*Z07ee|40I*+-wD7CpC~2ASDwpF60-y#84AK?jtKoq9
z2nR6_CfyrHA#1-4I!`T!zKxtf%*pRlkae9>_g*d$_>I6&=UZ!DthZG#=ECa8q{lll
z$?m<;LN3}VwG<<QW*t2IX=Sd~nC6d&^fbQ>q`&c`v*qcR9(rw|`IqAt|C~J0d-3N#
zAR`djQ<Ljui8#8FWSrZdJlw&+8vH at KzGBn88ZU~5vS)&EOwbs*h2v1)DY%Ke>r5xo
zSs;_sxvWMUad3F(K(Esk?NZLN9#qMDlEyB==`^Jw-A73#Dhk^MBfE`g9s#F)Mz)(6
zT+NkZqHQTCKCt-D%GgQ-g|?MS*s;+P;<rAs5&;V?1;pmX)1o1KeI<S~B7*Q*7QxW1
zPzWCT;6b+c{WesNMVjCNi_p!Gpg*bEs-lE$h9l^;h^?htl}hCX)zA|!H?72wHMrPZ
zDK8a88Fd`}L#QmuV)dQ!f at tfRDKC`9VESh1D6TJ*Y+S!kx`7D46GCEdQI_yudm<6k
z1Ec0&?1W8g=#5h3)yltLr|Lsz$uImz)Fny!T`t9dy}1%2pVd8hLTp^!A|4ejOHHB^
zvL!accMp6i&i9QtFLRvLE9EgYW8ojIlq+ME6JHl4vFM7Btnj7ht&-4lcI75UNpnU-
z)wG;jiGT%Q-6&_|g3NP5&35HojDJS7si@)WtMAavOS|u3-p`kh$#r{m5o@}%Rcyu@
zKD2WF{4wOX6AG=KqIFTe(0m8&t7xZ7=aKiQtgVq|tz}@TS^Q-66&gG8zJgW07j`Gm
z2GRDTePksvL+kUjXbN9ne7SN<kLOhRYIQu6lW48|6yAWEeR~IMM7xppsidN?W7J_z
zeQQU<BVcW44Ons7zj5$=;A7w~f`0>zNIpxglOw{KYqfT?+_RtqKLFhWmCBuE at SS4d
z+2+3Rrjbiwe#DEtz(1k&$Hl-G!)IEa+4QB2&o)2T^ySdm4PR*-Xe|W-pS$wLZ!TZ@
z_3N+ws#OQ3d at gEe0$2AYI_tDP1M4%eJ_GABus#FpGw|QdKv6W(Zz+ENgY;W%5}y&6
zw~!L&>T}vCtmMXPTE1V&>U|6S9U7PM(Wm!F`0uodgXoMvB=xz<oxhV%6akJe-~W)0
zU?Tb61N{XhdgttJE%W)B&MQRsDdt^eAe?g;;PV69%d-rWA#LzJ;>bUzWr;%`(=v~X
z{hKu|<s1$-B*Q*V9CC#?NX{qZG6~Rg{UrY1h~H=Z36Njb$@szE-jCb6 at b<Rb?v8dw
zJMFGmXLs!3u1<T`NGfR$CR~NL at 7*nGY`fTYe`mL83%tE+H-}%7V{zoXV14(QM!@Ad
z0Uz|?dOZVEK0HV=?0FwaHH`Is^7aqodSA(K5~B+wUhkUq0WQ~_*OeWB%k>97#u#zn
z at _i6E?<1)OF83>Nf1P}vE&Jl=`_21a!*N=vgZucJ1oQ>*<zc%hHbi{5l!3>5_-2xU
zAM at ezl^Xj;?rYW|{uX8L-Oo}5T;4~p-^I4Xfy?{RzYl at aw<zSbiFpKE-+#70j;sUr
z-n%zB!CpRpya1|W1w{p~fOk<BHe0<qAH`<lc|K}*^%(dW10OZ;WdlEs`2IR+f6wDm
zZ{8NFan$oz$NDks>&^eAHOBQ1*z-DGtJY&R0k1b+Q9q7Fww%{C;(Q2k>a3#`HSCRj
zV)X#8v)`;y#Hq9H)^Q}|-<7L6FQ&#iX=|aDS>Fa;XP;OvASvU<KCxWHuXDdx-!klt
z{bv1ejl4^n1K#~*+F!)v`|rCT>i at l*Ocam%y<8oG^*3X at QyM=GdmHue{)rj(->ur4
z&w)U|us6mVXsy~e4(d4gP7~N-SA!b8z=ts|o;M?JU{8H}>tBd}_j9acwvd+}4<{!k
zItqLC$L8AespM3`ZO^2$vvVEYQT!@&Oyu41)MPpv&EX^5W4$BJ at X+I<jw6z(Jm7+x
z$~*3~Gm*(<Qw3NgbIxQYH=f8iNjH}-IEmRgF_D{|$)wy=GTQyIhhz1PoF~%Rw3Eo^
z6Z1|g>*nXh6Zyn+%1O>nPtU`}kQ`XLHKy-*B&lptj$>e?=TN`Xf4C0=QKRC1P3)v_
z`aXNO=g?3utPG9(FbN1hz)t_5qoNJ=jR@!9 at R0*O!_JX`fyettozb2H!~K*&e$JdI
z%*s&;XK3`0Q=PxjL%lS6qlxiMN;s)x!cD-1nEKucq2}W!bcLKVmB=Q^e&`6SlIg57
zTS%c^|CiHvy!x%wsDlOr<MBd4=TKi+AA8Cf(W}~<NfZilNl_n96&23QUQ at P+7Urkj
z#5lN{SA2?l=`1$MjEH7)ZYtVyV5r?qOloN|I~yIJO=ptr>7<B~G?ge!iD+^@i+GB=
zd8K(Ol`o`o*&4xtE}zOI$U*mJGOmcq;YHol9Qw4epv%d5ji#pbR+>t}mnG$)_LTDA
z{_zQzA$npuJ%Q9Y1XO`Abs~zLJ&oOJ+?)SXm(JpN<VwQxl%7L;&SLKU|3z6<?MeP1
z8lQ{VUq4U0bD2$s2I0BqQ73wSfBn4k&Tnm=wd$DueK;@Q)_Tr=PRZUmkNnO588vBp
zVu#WA{eb;1D7|+cr18*Mkmrg0={fuvG#oJ`X at 3@(i*BuF#&Jmgym9_#e{Jub|0%aw
zzqA8J{7LxpIi3CEz(Eah$%L at M>(x){lW07j>_0{d_>bX2MB_B`o8vzX9s3_3WBiWI
z5r at C#p8qz5t8+5?6!$C|&j+8k_4;||-#Bbc;(UZXgXZ^NR>lpQi at 1`#EBo6(zJ})W
z=ig7}7RTWLJbseDdAEP#HBw;8u1RM6FG$OrpTq?;&L1EE=j;e^EScuQmSXi{=6?~e
z-#?~Iy>on9)m8S){6DSZe at y#pE}rxGoB2!7$#WC9-0;=+0rmex;HEvq8u>D0{`k-S
zHW?wTEm^HSL1w(Gka_&<zf1YGYF=aS_x}?Bx$nT)U(a8w=5qbn#`LH4`3ssazfCqE
zQcL1GSmyePucG<=wS9#B%=MxercCcJ98cHJ?>`Yf at 0s>~|JwjKzaB4{5PAN*4-{Or
zCqH_pka<~I<=cOz`}}=_Rh*Ax>dSr4$|{eXQT at iZ!Reb2kB7&*9T>e^uaSS-40NEt
KA;rC`m;XPXE<-N>

literal 0
HcmV?d00001

diff --git a/test-data/binaries/lib-s390x.so b/test-data/binaries/lib-s390x.so
new file mode 100755
index 0000000000000000000000000000000000000000..387b56da990bd829acc7eb3a824361c2e5203a7e
GIT binary patch
literal 7696
zcmeHMUua}k89z6fWRh(Xr+;?a>Jl$)uvzF%X0sSmUph&eO;WPyn$5!cboWkXnvBk$
z?aWO{iduyrqPWz>q7QxOK1dKMY{iF$f*k}=q{yl$(ibgZeTlFWY(-Hz{=Rd*@6O5X
zomJ2WA9BJy-}!#upL5Q4&Yk<6lNV<f&vkV<DlFaV1lkPr%rl-f^ub%2X4RzXRay0L
zsN2JO9Z2ujj6i6LSn8wK;6tvV!x7pwYVfX%q1vtsZL!N5d^kd#hQWoZKJW>CK%AFY
z9-(T);2}-qgWI10#{IGM-;)&VmZ3&{qI8;{^G7XKLUl~Y<^eq2b4!=hlXLI<<#%0w
z`q8xu{jbzd?VtQa?#fq;jp_zX;?Z&J&nA at PHYm=7_2aqc&%d3W{=)UWH&0%E?)O6n
z-`pL#^P7F(9Sa<i9ZKTohU$9x5sR^!CtZuNnobAY?|@Hsz+c2_->-CW=MB~Mb>I{q
z6!(Imy8fz#+xn^d;^%b&_<*tRy&U at SytQ(*;?)Dc7I>cWij`uZyk|j_x3F^F%NJ^e
zwPHOe)K<>Vl&Y1&ik~YLj4WQ_t#10{z%LbFfa257d&}%$rsUV_g}N#gbF1lkH9euc
zLf#L2<$1Y!-HZWHC9mcd7p7;t@$@*4limSS9IU_jYx7ENfI&Ev8Y~tuO-1_OA>I^u
z&%*g at U8ROcS%Kry(_sC{!}u`st_z%eA7eQam;BKFjN%z!w7;V``J>;ED4qpI?_Lyt
z2pIKy4<23itIdoW*-faA at BE{6WiQoKYNXM?{I54Kx51sg6i8yXOWnJ(t-1%_-OC=N
zR03AFR3iCaG6{=GSdi}4uanJ8st*>>NFF5dLM4@!Y#J}ggTWM91L}dsd#zUMHVr__
zzua(P|HY|PD!JRQ?)%9w1VhPRYFVy5g5<U2fyUMw8R!?FduIPE;&p8Qe)Xgp*zME2
zqmE&`XOq{o?vib<`&q!)lKXEpFJs&{;b&^E*}Bqt?qzjT?F8z$wt7 at sbz#nZWHazs
z<2FY8imtzZ-MOha4sSL8X5yf=FgqxB!Ap;x;cMDge|rQw+pYKa?=-Kf5!2`3yZd)2
zo?83mBuc0C82ANZ9f>`nbX1Naa1?=~2pmP=C;~?j_`i!lFY+QPk`EdV`J&{74kMIz
zQsMkDJVy)~ILxyjHhh?ee$4RtoJP%$vRv}fleWCt`rv)TJ8v+~=g)2)r_LE6a+)lc
z{P70!k~dNwNriG%6j#@%B)=9ppEvZ`igX?{iV5Uhy3m;mrCa*zGrVdr<#UzN{;I9k
z2L|uHMHGCC^>iG;v!CuCvi$EX=W#OkKO=H}jymj_h$5Z%xtW<yyQ4U<o^mJB<LNW*
zc;?JR=7}>C?&xwM at 6P*y!B3B$>f|ECF-hJ}a!xlQ;Jhy3x@!S&j!U at Sg7f)1+!un&
ze$nwY-nA1tYoM5QF>Q at U*Vkw%*{|U~5IpW2O at rip*dzNx^m#vq_bq~d_<RZp{K)&X
ztrfWfK4hBVd!<?6A7NbHC&5#UXACtp^zUVSGJ?}t66NrIfxev6jhJiTa!#MO1;CHn
zJhz>MY8}MjXR#UL#+k)th>P2_g>PE^E?IcP!aooH(Q(rLdjVBk+-|h}$nT=|_5<k0
z#sBRN^ZF<BW7g3*20U)QI5@|}$2kH0nDufVbwYi6y`0CPFY9Hki!<5QcdhU^OOIGw
zyXmakS{A;I!N>Xk1~yO3es;dq!OyGkBkOX(^8Y;xx5xi_2R}dUfd2vG`S5!>wo$K*
z;X-C?ZFP05e)fsX=IL4?zwQU8OU25@=9vC<8(XafIb7mYE~cxvta*B7*;`z=xPtql
z_Vth#l)Y8DAgV(nU-i~X)tq1Q@<Fv$_xz1bwOTD-Efs=7K0WctPi5kj^u?3s*J}P2
z?ty~ZmU_14mkVBgqg>vCiN)!gsza*(@l<fbWF~TMdFuSEH at ox{-F)e3NjqP!dh32A
zPgh+}eRgT;{K5=0a0MpXbBoVRPc3 at SoI7`McEwwnnqHhGANJi>Hru|&y6asUUxJxS
zx5#}Q-G&{y9*en8)6U~B<Mef&O4ql_fu92nYKE>$t5OXL>9xv6I=4|Q<xdy$N^|Re
zeO;yVTNPLu8q|#B`9iH;tX2*&9%Qvb$tMGDT`dJFt$R-gg-x{e?9zpGvxY`yme0tf
z{kc^*qgz4pn66cI?|!+siXN-*gPTH?#$GC8f3)9{|Dr{?7=Q1=@9j&*U-&&9iTLO5
ztVYwwU;fH+{8Unr at 3m0;|3H7nw2-R4u%)z2 at -wk-8o7Mm9Tz<H$@0*i@~bQ!d}4HA
zxqSbHsv9g9f}g~&%v<@G*mIs>@-b*qKhg&o$~cH#f<5PVf=fOjRJqWj at k_t<{PQdW
z3GI3QVSd?w%<f<8X<QXNvL4fD6MOS84ad*F(}&`>30)Z%=R=am3sqU;FRZ0M0_u1o
z_LA=i?P%}9_DeDL{5voCk&}XsU1a`*ZR3gb-+S383ssLBKCJEWf8DaD^+f3<pB4?{
zYv6XgiT^ep&I4qPBp;Li1BLMxdwcw^0_40Sv>!E!Lrm{#{~B~<{=7$qGi=ZFuJ*6T
z*iW)O)4SUL7`nV~!trO>o~hFSZ^vBbPwV<KJdyFcfT)DaK5zK27JH&^;}M?cFaJME
ziJi#BfjyRA0hInFUaS||NB58D6Qx|temB{c$O%5Ts&_1qnqn_)-ggl#m7;eOCGlNU
e58-)?I24%=VU*K!=>Iqe(9!?1AVV%;|NjDizI)05

literal 0
HcmV?d00001

-- 
2.7.4




More information about the Libguestfs mailing list