[patch] Fix bias for DSOs loaded from core file with build-id

Jan Kratochvil jan.kratochvil at redhat.com
Wed Oct 17 20:18:59 UTC 2012


On Wed, 17 Oct 2012 22:00:20 +0200, Roland McGrath wrote:
> Rather than testing MOD->elferr, I think it would be cleaner to break the
> "if (fallback)" code out into a subroutine so the switch can continue to
> use return to avoid the error-case cleanup code.

Done.

jankratochvil/buildid-bias


Thanks,
Jan


commit 3fdcdcbcb424c45645aff1200adfb34450caf0b2
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date:   Wed Oct 17 21:49:10 2012 +0200

    libdwfl/
    2012-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
    
    	* dwfl_module_getdwarf.c (mod_verify_build_id): New function with code
    	from ...
    	(__libdwfl_getelf): ... here.  Call it.
    
    tests/
    2012-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
    
    	* run-addrname-test.sh: New test for DSO with build-id bias.
    	* testfile69.core.bz2: New file.
    	* testfile69.so.bz2: New file.
    
    Signed-off-by: Jan Kratochvil <jan.kratochvil at redhat.com>

diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 638a096..bdd9440 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,5 +1,11 @@
 2012-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
+	* dwfl_module_getdwarf.c (mod_verify_build_id): New function with code
+	from ...
+	(__libdwfl_getelf): ... here.  Call it.
+
+2012-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
 	* libdwfl.h (dwfl_module_getelf): Add __nonnull_attribute__.
 
 2012-10-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
index bbf9ff3..025cb8a 100644
--- a/libdwfl/dwfl_module_getdwarf.c
+++ b/libdwfl/dwfl_module_getdwarf.c
@@ -139,6 +139,43 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file)
   return DWFL_E_NOERROR;
 }
 
+/* We have an authoritative build ID for this module MOD, so don't use
+   a file by name that doesn't match that ID.  */
+static void
+mod_verify_build_id (Dwfl_Module *mod)
+{
+  assert (mod->build_id_len > 0);
+
+  switch (__builtin_expect (__libdwfl_find_build_id (mod, false,
+						     mod->main.elf), 2))
+    {
+    case 2:
+      /* Build ID matches as it should. */
+      return;
+
+    case -1:			/* ELF error.  */
+      mod->elferr = INTUSE(dwfl_errno) ();
+      break;
+
+    case 0:			/* File has no build ID note.  */
+    case 1:			/* FIle has a build ID that does not match.  */
+      mod->elferr = DWFL_E_WRONG_ID_ELF;
+      break;
+
+    default:
+      abort ();
+    }
+
+  /* We get here when it was the right ELF file.  Clear it out.  */
+  elf_end (mod->main.elf);
+  mod->main.elf = NULL;
+  if (mod->main.fd >= 0)
+    {
+      close (mod->main.fd);
+      mod->main.fd = -1;
+    }
+}
+
 /* Find the main ELF file for this module and open libelf on it.
    When we return success, MOD->main.elf and MOD->main.bias are set up.  */
 void
@@ -166,41 +203,7 @@ __libdwfl_getelf (Dwfl_Module *mod)
       mod->build_id_len = 0;
     }
   else if (fallback)
-    {
-      /* We have an authoritative build ID for this module, so
-	 don't use a file by name that doesn't match that ID.  */
-
-      assert (mod->build_id_len > 0);
-
-      switch (__builtin_expect (__libdwfl_find_build_id (mod, false,
-							 mod->main.elf), 2))
-	{
-	case 2:
-	  /* Build ID matches as it should. */
-	  return;
-
-	case -1:			/* ELF error.  */
-	  mod->elferr = INTUSE(dwfl_errno) ();
-	  break;
-
-	case 0:			/* File has no build ID note.  */
-	case 1:			/* FIle has a build ID that does not match.  */
-	  mod->elferr = DWFL_E_WRONG_ID_ELF;
-	  break;
-
-	default:
-	  abort ();
-	}
-
-      /* We get here when it was the right ELF file.  Clear it out.  */
-      elf_end (mod->main.elf);
-      mod->main.elf = NULL;
-      if (mod->main.fd >= 0)
-	{
-	  close (mod->main.fd);
-	  mod->main.fd = -1;
-	}
-    }
+    mod_verify_build_id (mod);
 
   mod->main_bias = mod->e_type == ET_REL ? 0 : mod->low_addr - mod->main.vaddr;
 }
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 2495fb5..9e8ad2c 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* run-addrname-test.sh: New test for DSO with build-id bias.
+	* testfile69.core.bz2: New file.
+	* testfile69.so.bz2: New file.
+
 2012-10-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	* run-addrname-test.sh: New test for core vDSO bias.
diff --git a/tests/run-addrname-test.sh b/tests/run-addrname-test.sh
index 4feb193..cc8aa33 100755
--- a/tests/run-addrname-test.sh
+++ b/tests/run-addrname-test.sh
@@ -298,4 +298,12 @@ __vdso_time
 ??:0
 EOF
 
+testfiles testfile69.core testfile69.so
+testrun_compare ../src/addr2line --core=./testfile69.core -S 0x7f0bc6a33535 0x7f0bc6a33546 <<\EOF
+libstatic+0x9
+??:0
+libglobal+0x9
+??:0
+EOF
+
 exit 0
diff --git a/tests/testfile69.core.bz2 b/tests/testfile69.core.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..99553182aee0aa017d762e9a4fbbe2847eff7fa9
GIT binary patch
literal 4416
zcmV-G5x?$2T4*^jL0KkKSxy7 at EdU$r|NsC0|NsC0|NsB}|NsC0|M%~I)Jy+#-v9sk
z|Nme9|Nr0+|9Km)cSSu9Lja1PuW^o@>;Uz9Fpq58rvPXIhIP5Ls<sk|0s>)E@?_N0
zYBa`_Z&ce+l6sk at Ns~e7jSZ%zWFhKpG at hXHgVZ$BKpGh`G-UMD^)zOtnr%ROfuLe(
zk)RC>AOIMFsF8$I%@pzgo~Dd6OhD0-K*^?znmtU02++_PWN2Xk8U}_#A)_XlG|0p-
z1Zk5%&}eADnKEQ#(*)B7gwafdhK3*j27mw_pwI(A0MG`2008v{fB*wP05kvq00000
z0000<sY0ivFxsY%P#S0(P-Fnm13&-(001-q00x6V000Jn0000000003KoB%EXfyx=
zKmY&%rkVf%27mwn01W}AhJermKmY&$13&-)pa5tMG6ax_5JnKt1l2z#h9alnr=;}C
zdSWp|{Y<CoN19Xe6!A}JrXH!}%4e#2O+29WKSdr>H5zH<9#hmkLqVa5p!FJP^)%Xm
z)71S_)bxM{p!AdPLS-FK-Q{X;iPCE;ltC!2{!xqe3Hbw$O+!1^To5#_YlfL~8W+Q3
z!ZL-KQ+Fy|1h8nJs*6l1&YKt(RY7zXSXs`?F}B<0+F4~%l+_4`tY%@DVS$ql?woYx
zrH~+XTJfVhB1nAv1Q=yD9$OeLHttHZO2Wpp_J#?yO5CC;dTq3x30CB$GdRnMC~9AD
z<P)feOzW!!r6wIpnh6$JO%#xtBQ#`1NLgH_QClk!^avoz67!X}k%m}W3z#8Nx(v;{
zxd^|r)eTYvOtUCyi2;T!P!<(`I#5Gw!%$dKZOQ|J!w3ke<rQG>H5+>R(mXLrq_2dJ
zFkqGmIBqOh(@UEyd(bJ!>>{>FrQuC(Sw}epDj-<!=Q<fiz6w3gIg!Gh1f at 11#$?gx
zD<D!x`?Nu;OpIx2l-=V_!bVv%<+<UBSvZP^lVL4elkkblMyma;N-7 at BR72CLLGfAZ
zNUbspN}L`NqzjIKYc<@w))k==B_L-rMWoY|8JXjUX0c*`iky2Kj04FapqS`^v*zG2
zdUR_nMlmuF^^{pDK at MYWzt3ZPy{m0+a%mc4*%HI0qsL>>lZ?$hJ9`*NX_#hZK=LYP
zVg`o;6a-?*OlC9{fJ6i}YE4{lG~ks40%KE}a}woegiu5L&J`l1NKR6f#II@<SmdC6
zy0$?Qw+1!b%k)#@(vSUlK_*o at oVEzSt-!v^xpI-yyU|m~VK60>$x_JyO9&F1BuOE8
z03<hyFH8}{L%zf9dq)>^J-+wB at qCxc^gW)xt=9Cnu)P|qPi)?{$$?@7fNAB7YQ9vY
z$=XsXj{=89DIo;|?pP?#aCI)jgVNg9%jPb!1c3!bg{xTKBjfDze$c?W(%1^p3u at 5`
zLIJ*qwIP`dLKV}!>^toOXhOA3U4I47R+><9jFG_@`VNtd&C>0xkRU5z0c~tDjMjJi
z9hj#sIwyi^3H`)VO{5+~hLQ#t<wPXYuqQaiO(c=c+>+Xr6Z?A0a0k3@*HI3uZ2n7y
z4UWn~$_2bAw^q{PqGTz-wPMB#87eHOz)32o!ebJXD&0<#bWLP5w{h2!-}GMfgQU!=
z2Bd;A8V}VbUnRmml`<y0VU0h)bO{1q7s2u<$e3m_LMvo<BM1{DgqZg~h)6={fJh1f
z3z!svAx$unMIjauNg{+*k|;`ysF6fxDj_!Xu}k#=g&822`G|>OkV4+DGs`8hwNMrc
zEDGHyp)8D4VHP+IKtwSGR8<8A3=tHHMZhZcl2QoBND^=e86*p$5Z#gmlEN44g+ at sO
z5+Jf1BxC at vLJ~=i83LjZn#jUxi2?}8F?Z at n3}FCS3^24=D#Pwa5S0uF+En3))pQIn
zvzSLy{apt<WEsN?%x^Q3ta+pUgd0cUn**M8RGY#_EVf8BEgggT)RdNEOlpR at z!?C-
z-Zp-Zv>@-*0(GCkDnmkKFry_!5Hxxv3!#N2;KP>NEEwqnvh$4W#fJIanImKhpFFK1
z(im78vRSGC-!uz`VTrS{O!Pt-QGiTNY*Z${0f$0_ND`4G!IF293t8E}3#5F~UtIQ1
zGPSm=zj{fkiPl%T$TBve;<mP{m_7$N!pwqz-bsHqqu~12L!a{7?;Ds`(0j;%Dp*SC
z*D at qSpkOhXFw4q%VJ@`sbh5M;)IJ at ep%x4+W5aNeFoAJRgy`0w_<ot`{S)c;^#VWX
zc4MPmGC`P`0davV#mt-EYQG{c at 2o2hEspLv1Uicpn4u;_Zh{6oc`8ys(@fkbl1zz&
z;2Z0u()oQ~WBDiWsi)jwEb<v2I2lM|rZNrC$N){OWQ~^ilwruS8pTzhD;ojegka2O
zj0%B~b0!e4S`;DUjxmaaLS{9j0Rw+B<B5r-iMrvB&_ha#F%$z{p87KYR1i(rs3Ii^
z>zP}|rsmn7p2ewFu^B#vb}&tv^h8p;6ogfvG!~Ay57>+qP`O1YRI+HO6$TMdZVhSB
zH4c&J4p(~-pk<l^X<~9yo`<VC52-TB(<fwnwoAKVe67b2>s`~nfNC04lKIaJyCp~M
z!6<ZYOal#pdZ)=JJMiQ({4tZD?R7iOrhV?`#EwA)XvrC1YBp99a$rvV3lc0n=9z+G
zj9vRNlG>}Wh5Pj=xh<4;VeW|fOuf$6M}yJ+(nYfR$T3+#Cy>dLBj1BEVODu=7E<Ds
zeAZT#yO2Q4L4aaKAdl!73!TPqpM4)Q1dutnc#s%H4MwzKRG7fvfPso|X&`Hy#bjFw
zf>6jEOhqYQ3Se>=0G)7?G(oZnq}p5Eouso3O>S;ZY>-Rn$i^2Dh=6f-OC- at +cwP+@
z!Je3g12}Gxc*J|7Z>})L8dBBOGYCSoajq&TnULR@$subd;UthSf|XB`0np=mM>R`u
z#Wx1 at ftUX&Em4=G7L)kJZ|o)yK{7nEl<Utt2R;GQB?t`DD)MB^hGcYfTt<Jyhj$$A
zHOQ?{oyvts=P{6Nl;%)2Ym;;G^yl2s*DJMqaslnm^-oza`K%h_0djn(4D$n$O<Si*
z#BrVuvy&8Lxit=f++>p{J$B8w<=g84lZ}qKR;t{oek%F$R>gpPatgAf3MC=PsN`}Q
ztxw;<jj*kB3td*Fy4-ita0k%S+O0-fj-iG??dV)Gr&B0SDfy0AQ8N?R4K{I at W*!KF
zQ4EHFb{&VnZHatt-29_(esQ2t&oxO9={WJKVxoPf(~4k_QS5Y+p}~w&A+UK1a{!Vl
zEhQf?{*<Jkq+)`CqggSiCPAxn-WK0z^BIi_IMd$n%tH^KR~|{vq at -@G(g8#`IV_xX
zWU#}_q at t@im>?w;k*!Gy3>iV(24eA)5IFH6>xpQPv_QxgN(?qoimEr^AgCi*x%`XY
zr-Ft&N5(~h#}$X&WFDn5Vo2p7={60eOI}dPpW0_mgD^D6^LFJ`*lIl&JK}uqLwM!W
z8i*h~J1>4(qiI-ei?jn$q0m3#Ja7?6!*!dImJnnSAy+?5ac7E5%Is{4M0g^XqXJnk
zoD6y+mzQ*AGV->X_pi;5^c+(~TMtD7CG1(&*$T?4u*tlP(Zng$qp&l>e6l4F4qcVQ
z3NJwv?V&}8+}*{*tXoS5v=-w#d2eEAmkGR6PsnKd7j8lc-k8jyhtco#&#(OH<JpFX
zGpS=V;iHoSp^(=y$by1!Lkz_Z?mXsWyfSFzK?Mql-Zk8okwT at IYduN9Uk;^8!zEgR
z>7bZpT<WcUkzrd5-O)|PhUK$G5=Rs3ag0c;P<OI1DSxwxh=*|mNM|mRaIJW?Yzt7P
znmpxx14!J)Hr3NZQi8zS5rX+K6BttyhZ3C)oDNClg;C~&B!kl42IDz*hZ~vKvtGB1
z;C3e-zD+tElQ!_+W?)Te?ZEI3hT5CwA$E?vf({yj#dSX1`lY1{_)eKit^^D<MAZp`
zaDq|7v at k)q&<WyD!EZo>V%hr$AopcP>o at v*QpMgvQ4}OB{CaW*&p7D at 4wk8=N(J#h
zz;(5rZ9>5^LuJvQEk=w<j5Nb0TQU3&Uo^?+*fL(%19~-wU};elRNGROW;@EQ1>Hj!
z92Zk6(lHg at B4zkNMpL8N^eP}1hJ>`$k18GEqt20&FRoHIhTFJOV6B<MOb3&gFzBB?
zrb12;w<N~7bbDQLh26>6I`$1E?Tv-uO?vCKPA%gUgA2-K;e;=ULUM!X9W=|yGl1<3
zkuW<aW at O2YJqsl<Hl+ at s#7lpe<uyb?8U~w1v}YYKe-VSXZiwq2y#^!(K`K{dLOv*|
z7p!kXFgYin9gmgqlmhrBiepL!#}vg}&y+DvR-Rh0$yp+{ZjI51EnS*+Mp0I*i_8bR
z%{aFciqcGHp7_GEkm|5>S&0)}N{a&EZPTS##?xu;_*{Lz0PxNymSnKyq_12VDWg+4
zWGN|v+AaP8&7D@=iYp3DgjQyXvuKKYwTuCrb>_K{mK0$eS4)YiR>RX*5f={ujg2Cr
z at TG@jPt7rw$ZUo#DcS#2q5=#nxy*lUq12_!E`D?`Dy6khQvf>Uz%PuH3B``HM;&D7
zm-AIf(EH%mK1rqfmkQ1ZnAI3^(x-0&md8UmcpOHOfPyFimf;H7zhvTIHC5qDf-ORj
z##0KzS!x)qmOmS1_^JKwLYHto9mgLiC_S>kZ%gKJmbYQT7NRUlS^&YK1xnJ?#Auj;
zl{I%nQx#>Rkaq<=`XOV1qO40i(kgM7%eH%R_~k{!%QYCAv^0}+40C#KOGG2ZEg{6q
zYp;k41xj^(?t3s{B$rr?J7Uu_iK3&EmaPE?g`jF8OZCjP`il+Vveu%z8;L#A9v at kt
zWrcc_c0BuLES;!b-V(&Iz__(E%`^R%6C5xXv0Y5e$YxB*n5wWuibO?FMhgWM85JRh
zW>S^U?AGy3-5kZ5J?hTcrgXVw2ge;GD;0NYkRJRmm3jBx?JBk+GPeK`DP%{RH(k3b
z%ZTts7+;PKlKF%XG2Ir+x5`8l7-3d+#$Ts~vXYd+>MIKS#=Ll6BJJ{Yt52SyBPr9I
z at D6hU<(%O-3<GAVJrR(GpT9^5u5DtBz);@0%r*~)&l5MSyQ`YH8tymnz`rDLWNP+M
zH#h8U7&uUq#*-|Bx+^bXxkHSnwxuA8R2Nt85ZyN!z7c_gvK4Cxdq~jmTG)mz1{n$X
zMobA3kFhVrteBS`(Ya2v%@AYSn<6A(!*Go?9ku?)hNKRqo*Bnac~y0vk@|^CoRnVU
zqVeXK5+Q~?licO8<JZ04d7k*2D5BJgs-<!yxEKj_HWxQjZCz!xW-9rDN&6>}FuS8A
znc0lW6qGemsirIts+5H>6&4hg6#-ISt#k({Llmzm>T+WkJee2lcC>T$vHpi}Tx14(
zVzd at h)5#e at Bk7&#bCAOuwCmAU>O}_nAY!;7Z{$Gl3J|-*-U!4VT()A&=JHdFQImax
zL_uj5&;2PI%Q+l=;V~%9QNO88^#X&g3I>HPk&l%>$|*B%t~B!K$;@XmvW(EsG$nf!
zdtlTuJ_(SlWvYLH^^S^=2US#S9^mS%Mpjo--rwZQzNDlf@=behlYE;_reZ!oxKb%&
z;xe$r_UIgqyn2F;U_(8TsRI)owr7(kF&$koOJ2WRwrxt#Bnfa8^66Prib*7*`4qn|
zdcA at 0>qtou)1FbKBibl|sB}?`5lz^ozR2*&2iX{A15{tUkew0+1~S(PR-|J%>i|e1
z`Q;TuDH42oNno}<ja4NgA_1wY&mOn^!O~R`q8vEq0J$I->mr3UDFJCe at pmLsg$V at U
GKXTBtr0_5R

literal 0
HcmV?d00001

diff --git a/tests/testfile69.so.bz2 b/tests/testfile69.so.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..fdddab98cffcaee843a2738b0b7e84faa5f22895
GIT binary patch
literal 2099
zcmV-32+a3FT4*^jL0KkKSv^p7umA^Z|NsC0|Nh?p|NsB@|9=1f|M$;-^hlO?N_c;n
z-fd6p_i5k;yxU5GwW^Wy?kRJ-ZX35 at qB25d4?s#kB|k+yk|*d!Q`GXFkb0h@)W~>{
z8Z;Ri14h*SQ$rvOpQ>njOpT=VJwQD}YG at u&=?_urdPCIF>IU^esiGPJXwywKC+SRR
zn^R3RGy_1$27np{ng)Ok27mwn13&-(05miJ27nMUG8$=+84Un342>ELhJmJrh9CnV
z$Y{_R0APba$OAwFO#m`9V2uHw0U{_6hD6F^Dde6)WYZytG|`{{XlMgLqa#4j05miJ
z&>8>(Mw)0e02u%p0Rtl;rkMed&;uaI(V)m^8fa)@05S}QjRBAb2s8|UGypWv10zNV
z&>8>|h^MBg^rOk7&<z7aAPoVK2AF^VJwfUNKmZ1YjDP^p&;S|$0B9NjXb!mDWaVAN
zrF$J!g=sGR?id#p{scwh3&jphDVkuyaYR*1a7 at 8dbjCaqQBc&vaTPc*XfLN8aUMpu
zjLIp5hXWDVKqb?$$U3zoWy7&=S%C|rjX at wymeU74V{ZnURivHI)oRB{TKcQ>(4#U-
zcZ4r1 at LDw%#PH?5f(NIO6Ub)+Zq#twyjrsO8TgBNydwZ}f5g#h{)u%m1^+`a>;kof
z3IpXzTZ*B%hQ(Oln9=4ngjqh<+wOcBzb1zYw+ at 7v+Hw21ZtHY*-xi+!wzjPRK&-E9
zn0NN}%}YHWoi}m-AOkK;2h8vKEt9aXm_!mPy|eJITQ at bL`wAdFN279Tm}%(LQ}^ep
z0JVt%GFU_a#NheaC^~$MS+kT+iJO at _4eAZLFp^an%7H=%nQYF*^dC;THQO%UL?h>D
zOFqz$TVhCBCWMl at Ho=Xt3~XW4w6fF5OJLeT3=K<5vyjfpL}0)orj3&XO9UaX0XCHk
zA)wAgCd4-NgM<TV6_PSshzTYEv=qc7q8t^CD3=1>^>HN-ltBz}4aS2r0f at tOs=!k~
zIh$Rd7cHBvKR%gHRBjI$1RP~n3k5xZ!<fj#?}p~@wt!J)3p%o3*g}Vq5L~8sGXoc8
zg&wA0+6D)mjg3N$kD+ddRBPRkBc3FkU9<R;Q>xoe$fpX7DOoumPGtl|KtoJJ7*5cf
zJVK>emlK at krZQ_IJEiQS`!@v4D4ix9%i`5B>g;MQTB}1~Q;7sZ0|;V=0}}#ImwS!1
zj|vc31^^UHh+1#6^n2bLi<o*w0HVRX#9_;0XqTR8R>3ORjkwU3f#<sp6A~|`TE;aD
zln_K#fQBnw5p9f$+yQ!^5e`;wVav_zv-vuL1api(-OMC|H>G3JX}8&NwT%8`@GTY6
z_<j}|rsUhI%L_~l#WDid-)3OR-c}nHu$ajXW@&{~9np<TIKIXKxTWCdcnsKy07jN`
za1_CUfIc9Q*#wL<NoUS0oaIChT?=XUNfG0X(xGhf9^SnkQEsuiEs}E*MHGpYIx(Vp
zTX#7VIj@=<F<Wr|b9d$2g(jl*GuB-TjU|H6xA>*VfWc at bt}jEuPZZT`MzoLOP#)Q3
zTgn4$&)Mqxm=->2FBj at fz9Izkhc<DgnWZ8z(ItllX+UbIqo*02SG|b>j#!x%dso<W
z^U=}mth#8kQW`!$o3ub-YO?&xdI(a}K at Rk&ZMHN((K1#OhknUvx~3a#^#1Qzi`!yg
zHjN4 at jN5`R9i^Hna)H9D5gZ5U1qQzBHMp5zIP~RN5CRFV?l}SqbslIHOcwOWDV3rI
z41?YoD7$4TET2FIL?(3FT#BQ_4_fC@{Z}aDI52WdSeh7X(a0O|v>1a9Wow6p&)_!<
zZ-r9DuR$re7lBm*j2(8-28I`Z_5WFJ8XQ5w$7EuDelX|-i1h?BvzS=Xz at D{08(P03
zb||08K)y}L^AtUO&iaZpp#cPXg5V=7JGO+9CgS*LrXW0EAIEQIFQMS?w))XOXe~^*
zyyyu;?XxNcBfC=^r2zyEz5(G7(!r;3cw~1F2e4g#d{H_2rgEgyC~pSJRmN1lCcSls
zrOQjzf at xuSy#ls4Cn=#Y65$5{N~H)P1PC0{ZA8HMB~_9 at h?Eq>xg}6qHwJ7|VoDtV
z$SEK>lH#T!;fiCLp%{uTfK<eUu_`JuJCIkIEeb at COs0Ow8nn!~V-;24Z&8D_aZ;jc
zx?D2%TC$4^&dMON165|4+mj+|AgGv43ZtGB1P!{p-A;f)Wn^-M(834_DaEg%g!p;m
zbmG~}1k8y~k1&KSAw6VNgpCAZ*hf*!E`_Syw0J!tgG$f3g@*F7)u^hQvn(zVepw>B
zK}CU>Mm~-f9tiTmof;0Bc)^hcEXv2t2wq6GZPwy^OPFQAI0z7!EEi&Qs6s-A2mvf0
z6Lcm}IAC}LsmY9kls72{OJIn$@`@_AS4cUCOL!SjtLPDvCITW*%oRNIz*Rp2?1=Tj
zz{57<iXel^H2KhV)U-oS2{1_t0IVb5QsY<n!6>b~n8vSGO(KH0KC3~1I7g_Ib~YF#
zK9pHFQW!}MYf4ctB8pIDVn=#CrF}2%4Mo2;|FvRlh)vwIy=tpC`rHlMob6F2d^UTM
z1|S2O at zRbNb{b~^QHXUr!`A&Qf?}B|n?E+{+c{=#Kh*ewwU<YCzC|>Jyz)^sVz3}T
zJIk4#?~k;RZ?FEZQ0p8!#Le+X)ui-xyGtzCtd!ot$swnh20&Lb%nfCP_nHHU$XDjI
dr(K1gmzQ7u=GaAF*6aWAcO+AV2?Ny!TL6-RsF(l%

literal 0
HcmV?d00001



More information about the elfutils-devel mailing list