[llvm] [llvm-profgen] Add pgo accuracy metrics (PR #93975)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 3 02:06:12 PDT 2024
https://github.com/lifengxiang1025 updated https://github.com/llvm/llvm-project/pull/93975
>From 81dab7e1f4ac2c3d2e62b6a765e50fb87d7505da Mon Sep 17 00:00:00 2001
From: lifengxiang <lifengxiang at kuaishou.com>
Date: Fri, 31 May 2024 23:23:16 +0800
Subject: [PATCH 1/3] [llvm-profgen] Add pgo accuracy metrics
---
.../Inputs/pgo-accuracy-metrics.perfbin | Bin 0 -> 33472 bytes
.../Inputs/pgo-accuracy-metrics.perfscrpit | 2 +
.../llvm-profgen/pgo-accuracy-metrics.test | 24 ++++
llvm/tools/llvm-profgen/CMakeLists.txt | 1 +
.../tools/llvm-profgen/PGOAccuracyMetrics.cpp | 106 ++++++++++++++++++
llvm/tools/llvm-profgen/PGOAccuracyMetrics.h | 45 ++++++++
llvm/tools/llvm-profgen/ProfiledBinary.cpp | 8 ++
llvm/tools/llvm-profgen/ProfiledBinary.h | 10 ++
llvm/tools/llvm-profgen/llvm-profgen.cpp | 13 +++
9 files changed, 209 insertions(+)
create mode 100755 llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin
create mode 100644 llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit
create mode 100644 llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
create mode 100644 llvm/tools/llvm-profgen/PGOAccuracyMetrics.cpp
create mode 100644 llvm/tools/llvm-profgen/PGOAccuracyMetrics.h
diff --git a/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin b/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin
new file mode 100755
index 0000000000000000000000000000000000000000..7ae145c299adbabe28f7e8652addaa854e21b135
GIT binary patch
literal 33472
zcmeHwd3+RA_V2Cg>Lg7ForHw$5QG>&0in}j35$ve5J)s2f*>l;cGBHROQ$<_cQ$cB
zK@=4P+!x%pnUQfF$9- at c6`dK;Sr}(@oI!tsIy$%xu6f^cZr$!mC(OLx`@G+K|D at o1
zzxSMb&fV%()xA}f>ho(G=Ifd!)MgX21xc^wOHH+zP~B}tK-FS~$VGUB7%Q?M8?2M*
z)sm1Zw-&uO=a_mMnEdWF(=&O5X{T7#keK`qwcSe<!lqc5?I1rpC75z1?=<V7Sf!`R
zD<fxYWgMosiwv+Sw)#<3?w!QR;@)F>^PL&(R(_-=zn4wFmrXy#`KF&@)t}TSgcr>8
zOfEwjZDky$`*895$pHJB2}TCbGwl_VEo~>k&+KZc_z$7#_9bR{hw7IVX8jeL-76|0
z;l`?|6_LQCNI2TwHK}Vx)ugJao<z(uncGeIlkI{<%eW at 0AIn&hX_T(=Gu8i*$iA!}
ztJTmI_M^Y{5c-Zo=;t3oPwgoKGPj9Plw~R*Ujmf(qhAkQfAthTUvq0L>Psa3 at ubfu
zeDx<U^aX<PU~@Q;48~7hI5!fD22b`kMuIY}|CG}fElth{#}d9qe<C=wJ{nHWtE}x1
zzP|dotoJo_`F;Lmuq&Jtaep*`YLF%rj`}0vvr&`}`?<-iRjWT76_69jK+{o2(Y~%C
zu{9NIZh|REm85Ty`UMU3bLRRcdnS9P368H=;hW-_%6+2?8~({5Mll)>ns^<o`n!F2
z*ddVe7Te48ADQW-N{-)-Lrxd}Wu~j+S{;WE6v%`J%;Q$+cToY at 9?Q_TnfALf^h(})
zob;n(jmDzd-nHoYyk;isx9F|M=K+g8TV(=1Xwj>>QnI_6LLtc3T5ef2X{BEFqm;*0
zOD22jSG9SoWsLOd+(DWd)fCEntmRf$vzp7rju_YmdSIXj26|wi2L^gzpa%weV4w&7
zFZV#*`hVoqU1tAPg%EWY?MmABm!g2W^)KW+FAM6K_BSN;jC~KGb5u2AB)3rF2k-V^
z8~YZ?G)4U2b(Y^CnWlyx>|%L0$uuSW-~pDOBblaxAKc3F6C~3V_JggEm(^{0zi#uf
z4?($~((5ieb|&I=o2T8vRGf>2@&3D!vg&!N583a3iN(r~>o at ILUAO6Pb?e_du=wPL
z&GuiQT6LTA>X?q*gEIE7gy|O{k8{)pNJ4ByS at oQ;eGbvggUMoa$FDtzqdOcu?>a}V
zBSRF%4EqvUpF*PXKh$kHQ1|R7$JIT1&{n7YvTn~0$s%NMwV6Rq&$}V#sCjAsb;te=
zNus at CS>5_$J1B|<BnKng$ynO$fBT1?p8YMT<1g(yk*HB4xm?8`tVN=w{@h>d|B?Sv
z?RUsayi|Ko(if5r5M6NY0rA%_?dML}zXjPpPW$Tme|^3F8<EVttoGpgUD~GFgC99A
ztNntbUwkAkt3ANc10TImxeJ3KpQ<4{tmc%OO+7Ws>o<K>v#fs8?`qJ^W6wBBU_Wf0
z)B;}GF#i3 at Kh-_^y^TiJ{vF?A7hd#na-{Na*z{q;rmyB9kDj7G*R6kEtDE^z`-e2(
zPG42CvSwAy>KfnkThk5v9OID3XnIIelLoed9vJ9>fgTv>fq@<v=z)PA80dk49vJ9>
zfgTv>f&XR?Xn2;TmD-N3h95nn8F8Se=W_7n;77nufoU!I5_l!apZ4_p7CiB at o}MDC
zByR$*1Q$U^n|AgRp>^eJrGv9`wrbh=q^D>2P4J&U2Ikhky%1xNPWG4lv!|zxY=`8}
zAL2gVncJDOP8>J<=m}HCl#`llu&frZ!;YSbikcz$8}+$)S<NUIBBcj_cTq0itx)ND
z6B|%Et!Q__KNp<xpD+C>?>m8fv^PlUbB5$!q1O&^Z?V-5Dcfw+4jFg3y>5tiV^-ae
z8SAqb4yld|nNc&uTQg+boFQd%hPYurXGjh|SNsRuXCNQz^D at eEU>oRxfgTv>fq@<v
z=z)PA80dk49vJ9>fgTv>f&O|xy;rE-Bg}knkRIyMM(--prsT(@n3A8%kY6|D!6x&9
z1 at SynzSDepw8WIv`;PROm^SmZMloE9srMUceMOskx9`gzdSWE+Hy1(boyCLZ%Yy1%
z#T-)}M8?=YlZ5xp<>ofI*knbf8 at -&)n_6paH4W5ylh(Mjxg-g<S+LSqn-x>_-fP;a
zcM(<j-}cD%Ael|^V3pe^UoyuNb5mCJz%rE6KQv^9Uz at Tinx*`|C-q)=X316Nj-7Av
za+5<QcbL4<Wb$7yckZmRad-oJeA!gb49~Q($==Fo-m1w{%Em1T2FmLENvWSSW#)LR
zaite8>sG>ga;3L&iZ^X76DCzwju%Z4f3&%*BN$JFW6`q8nI5ml+Z;}ojYCikc$#AI
zHqV-Ne>l++YlqZ2tEsIm8H+^{6^-rTNT4DT>1g$k%hV}To2Gkb_yaS%RiVZifktmr
z<IKj&z_hBWY5t(Mv8gK9G_$fQFka}!R<n6HoF?K{iJ=ZZ$hj<=ukT_EjLFf2BS#m7
z7{a-D*VU0 at 7kW+>;@Kic)3kNia`bE>Lzkh!WaCh?6Xht%l9Kci&12}V7c?GenmF8y
zq080qlB19gV%=sljs|PT>$iz)!*0(KS+?r^IG(a>o9E#$%CcS2z_j&rrfuC!+wWq!
z@^PlC{>*gs0j6v0$T`b)?Qo{+#xq?%ndyc$rW>~~-E<Grj^8ldypQSD&zNo>jFU>1
z?T*8l?wrPScRSOMwlLjyAJb1?WP0F_Ob>m`^l<(Va(`qr)6c4y9<68k`AVk8VoZ<U
z%=E-grYB!ydg^Var at v%+<}fE^_KQlUXO}WPzlQ0B4NNcI#`Mc4m|l8=>E*vNz48sy
z?x7eSS+-XvGQC#I^s8k|zYa3}ri<zI%bE7v!t}<&pln;Nwi3f9+csEBGUsXAm`gRP
zPquBOMxB#wJ6xk~$+nHrs6(=C<4nKtrr!ki)6cN`v$Bt$PD3Iqd)5))oW`c?`3{PS
zLBXs+6^|kNtU=xvm?~dqn!J~3>bp$S_A^x-V48lAX(s&zLDryIIZQ|AGach*nq9_p
z+&HEhFVmc3nC8|o&0EYge+AQmGnndHnCjb at PUvE4SjV*R5~f94nHFEibkeOvxzp}t
zs`@e0^rwl2RPSc0*~>KNznJEJ!8A`FN+z}WO!G%FEttquH;bvhj_LU2OeX}G8sbc+
ztRu>wx`n9V{2ff|?q<61mrNU8W!m@`rcGZkU2ek_C#zs{0n?UIOjk@|+L~nAb_vt=
zo0zV=hv}+^n67 at 7>6+J>u6>W``p=ne$i~GltKh~mrX4exZe7ZB$7-fKo0;xf%XIff
zrhD#Sy7x(@AHB)+lfN<D_bt-_=P=6pvkIm!W-)y^hDJfbSM at 9%T*dVDjZELHVfuDG
z(|125Dr|g~sp%D_;9E?g51E<|GPPvm0-RMC9>#R$7^XE-m?F!WT4PMn^-QtrnA+}R
zI%^kGd>>QdJEmj-F3wqn?Gu<f>X<rDVd^@Yse2RCdE1%J-@&wQC({MbGF|vO)B3+K
zZTOh!B7yl&R^i56ri)9NE;)*6Q$5qAtC=oKFl}DTbj2p7tvi^uJ<7CwH`C+$n4b8a
z>B(W3L1h&_HG%2rI-+4q{7g&NGM&t4?_tZ=vvkTfrc-ZWI(;Y8$|spt{hDd at pP76g
zGM#ad$)Am>Th_3~VN6Y9nF3Rpf^(Tdr!X~#m|EJI!W)R(ORr=K-OkkgAk*c$m~Q(m
z(<A$sUiysbEe%t_EceIxplr9$Mllc7Jj~;?Im}0Er!z0oV$6Q+Jm#dfnR%UdH}hTE
z6U>ikuQ0!=?PY#P`#bZe+E>gAb^BpdUW;DDJl+`1Ji(aAJjs~G>@nssR~So~D~(3x
z$;MgCQ;c=Y(~K*atBjkOryDz&XBtm2&oW+RKH7MT`B>uv=Gn&g%*Po8BdI<$##rV#
z##H9H#$4uFV+r$o!_U0HXk)H7&SyT}*us2*v4eS`aUb&{<4NWdjor*A8GmG6Vtm59
z)Ub`Ba+euy=H<p@=2MIY=2MLj^J&If=F^R>%&UyMm{%K5F#C+(F#C=7m>Z3Q%uUAN
zGRi+_lre`4FLSd|%^WrsGoNYrnAaFl=BRNlbIjPx+-B at xjvG6f6UNibN#j?{oyObD
zUB*9{yNz#|*BXNkr}ED+N|?_z#xb97OlMwa%xAv9SjN2G2rzFjlFSzw8<;OPu42B#
zxRZI4 at d)!}#tY1s8*egiHvYzZh4Cr#RzoYN^0yfU%vTzRGhby?F<)(*z<jN72J>}B
zJM;C%rOY=Pw=myiJi@%gc!l{E;~nN(jf2d$8HJ;%oI8w(%y$~cFyCb~FyCXWWWLvk
zF#pInhxsSQ<;?dPw=wTD9%a7Yc$N79<6Y(ljW3xWHU?p;neBeW7|#4NV*>Nfjakf(
z8OJj}Zkz_j9C#u^ZTV(xu-?M4Et;^6!=y1!-`2HN6NVX2ZqtOF;zMk6VTaVV?V89U
z4c;p at h_vNbX!!>)Pc6{T%s&Xu*H;(VbMz&JIb^1vED8rXDYD8KYB%&{g}D<+S|JMa
zycAi9Jc=B4qiArpQG5(E!>SP&qG(8#=5pp_=aYG%k>?(&`!zb1I=FOqk^X_s;+fEi
zk{H7LP6Wg3)x(S3E<MY(os4g!fIJ+xA`m6lA}n&-jZ#W2C0}=m{x6vmr8zh|_i#Or
z`@``o(y?pl8;F+t0l^3|beHNU=$tWmn3Wo#FOfR(VBf=p`!IcNU*$;sLre8Xj?xdX
z=q}T{v=auy`4kE`7D7zqFGX0MRakU*c24O^#7q1LMo@>9t|5_ at 3hvQ*tMuk(XJp|X
zqlY!F at eVkMlG`Z*b{nf-XK{NGdP~WryD57r(tU(}uuo4NssE7H3HLaCrEDzMfa_0P
zh;A6KUnEnwOHJhjz1YTkF}*9 at N9lo#{&FnB1X`3VML5dtb(c+~F(Jw(5gBEkB=k9D
z6-4>saCfEtV88zE$@*FS)lKH^o}xdUQ9m<bsvfZ<a8=yX^vC<?s`R+*#Vo8<96XqK
z*Olf%E}=bDK3%^tJu0aSMEMN;4&Em;x*QaU@|pUsOw}y?%1p<j_3yZQ(~j<A^iyoC
z>)rW|&8UDV-A>iG7Qu*{5DY)oJzF0oD=dpWPQST#89WF?d9{9b at 9LQP8vUC7?A>$p
zn=Sn?6l)^uXmUd?p#t4=@d`s`3+Cz1X|?3RgQOlYQB-T>lrADKD$PA#e?@D~uvlOi
z?mB(AmQfvcch~E`)pqo9kOyng@%9||3Hl#3I<nH`$;9#o{e^T-a%D&q?uB|#9z!%>
zg?o`+D at AG%?>^Z%?i2O;%<9Mt7VC>-0#}yZWWq`M5=#OPADOU3KQ%qpa3C$!FSN?#
zC+qvtd6A!RFVhFfyi(N?<;(StGtExXi!;sKEA(oME?o`%)GXV#a^Y*33s^fZV6zHd
zmdlS{%jL%#a`~}Wt~>V0b;o;h!STLaaQt1aLiW?TWAqDm7yOPgaBRkUg#%2e at 0YXe
z2jndKK{?BQNY1h!rdhUdpQgX6(e2dqt`kM48~N^)`aX at bN(~`%f3L#+Uafzq{kWHt
zndr;T(F0?0X3f!&cm6JzG&{x=g|f8#*ANdo#ul~M^?W)G&U74+PvdEgV;tK>9H+6|
z>R8Dfb*y5JIaYIeo1=#FILk4I{o{_goStyhGAA7yncE$m`7^Ng?R0pHI&!r9d5CvA
zDvP?Zb-o6k?U=$Bfwhk5Y<G^MndNgGVdnE3XELAfSi|Y-91Wbu1&)R6f1zU$r>}P`
zX5QeqnE4{d*~2%MUp)9+I!$qJIOt?A#$Gab-HWJ02`$~rH|53nBtU^EzcjDSB3+hu
zmPNWeFK&@G=Or!Dmb`>Tx+1ULB5lp<ut?kTIxW)nye^A$WnQ;Mx+?Eni*$9~I*W8o
z-lnwVzSgPBi#q8<{#{t{U*`-Sk^fUfZgjR5*z=v?!s}_ at I@gH88#ofl5l7zS)OGg`
z=XV-iVdS|?9+@{gv*eNZ333o6pCcUSzQvhqQI_B8+{!03?$h$yoL6#%q;$LU8a^|z
z<i5lCna(9F#{B{Z2ULtKa5;3MWEsNo6MP8obiS{b1Q0oj^Gmr1_g&66`&9I9XTFW@
zfymv<&7XLWbEGZ@|D=1Jf72XPv~d5(IYsAzAnWvFr_IJyq(HcT;w-e$O%#Vkcb{`l
zx;)|D={#L_GG$<%41ekjS*}Z|X^C*(?_4d7d(T(Iqz9Y_b*@pmyB*vG6CZSrF{?fD
zA!i4leBBQ_|01i9+CgH{BhD_(!SjUjpE>X3UBCrjk2 at x!^k#%5)Xwrpoj>Qsq!MMH
zl>glMBwrXZ^zO%;ugTpjJLqv|ST>C>`j!jD6V682H1174E$6#%ntRgOO#`jH at OnB)
zIXf}XIMS6PCO+kyXtvG$v at _e5J|ViFak_08C&}_(ICroGSEPKGa}P at y^(}wa`FlR$
zW$K at E-p7~GlwOoS at 4TN+sA(0?s9&^u^Y at _UFWIB{e+2(>Xvq<iUbfG&Io^jPO6ayx
z`78F1c_6aNz1x0_Y`hd-wa>PQ<*(U4v)KO1K2&z7wEeYxq_katyF-o!1frBuN>4(x
zgzinbe`AlzG0J_;S&^}Dzi!Xh$W~6CsTsn(#~zSZXwHvxxP-o8KUS7$smGgkbK1zw
zml^)n{-Vyu;5$^A^wG$vr8L^yzq1d^DAOT*e{cU$--7>O|2W-Pc@$9<gnO at jbh?Wi
zvvK=Ml*~mqf?NDY`)4|jQrSmu*<Y2_YKKLiYSFpC{U>`-x*##~&-URgPI}wE$R^M4
z?sx2G$_kpD@)!H;KArNeeO_88+<&$IT#9nc{muRmcc7H^*&j(svWQ9V+5e@>QR05z
ze!sP}N&jVU(72}@v=@c@@Ak!(?n>`jd8XZOkH}O`Ff06l{lRpWyw494V?VS%Pn}f$
zk$n#zc at zluKkUz>+hNw|V|&6<BJXuMx&Or8ZOK>a{%K#EQ2}#xaKL_{C4q;CS-nr~
zf9OB|&+LEclmF-Tjs0a~7V?FCpT#3x)%-A~LSGd>Q4$4 at NFd-T#+OCo_|pEb;;H2a
zi{*uz=d0yk7t2eol)fpxo%fiOzAcs)St)&2e19s<L3c7m`S-==q*S8(hhll9mF7Lg
z7p2oYLMy(+B5GRkW{aq6#oH~SO)I|EA{tupO%~Cv6~9eII5?m?tHP6|6+f5K2~W0G
z{Gvt7(Td+9J2?hD4z2hnRDV+(q`9j2YCwVT<Z7-N7ICoVnq?95G}kdH(IGvCXs(A-
zI^l6 at uH!6XzUHd4hy|J}U=a&7*P|A3sOEayA{J?`r&6L>TCwJ8PV1JBK%GmdcRa&1
z*O}=AQVEYsbG4>)!sFIlZ5FXab0t!u<2KHUWY2KTbwfIVV!~6ZxoT26;TfU1j<<-1
zX|5d>air#&YY|6jt_F)(rnz?W4kexN9Im-ON{bbwEZ0g7tDvjVXsu*~XN=}rVR0V|
zk*`z~2+t7^`6 at +$@EobRPO}(~gJ>}x57A;gL36FN7#{`EVmuL|#dwnD`mx2>1JPn!
z0nuXY)m(3-jLltF30=y=K{4T(3|-32K{4T(qPf0F`3lceh$%PWnFcZCAv{%@>syQQ
zbchz?84xYTGd0&1i}5Uo7UQEKT8xj;To+i3kA-M4o((Z=>^)9%EtU)Qw2QZzlqnzC
zVs8y8Q=YQP-Z`49DZ^cMns+Xx^v=V~Xdb2X&dAKIR&y=Q$W3_Xld^Y4!n=T!z4H*>
zI?c7bk9$2SGu at 9TWrn-w1kH6vsuRpz-vC{Pvu7c68NS{{nrpl~u~QDhdtyo^Z{b~>
zlF3tePSRZ8rOFbXB at k1^2+vZ8sS<?uWX-ieu7qXg%Tlt;e0fUd%)O`Ju(jH+NXgRv
z)RZhMbDHMbV5!XM5G|Ei2{Bz6&nnHe&0 at S7qQ%$;(PDgt=DOHo?1yMEZiJXN_BLs*
z`SJ#jY-S)O%W4NxGFRIh(p)E4?VD4wv~NktZ0`wcuD^0+c$VWi6CzheifbTpWmxn^
zG}q+xSQ6e=lGAnfMoG3*KBl=!)Ar^u&_>FXlR5m)B4x_c9Qkq0b(qDSE9^~>GVLyv
zNm6FIw`;D$E$*`aI!Kvzr<m||k}}i13zxnOcL!ggyxo-2I}bDEY)a{!k(shqbGg&G
z3GX>1r}7Zqb4gBl3h#NikX!A~C)r}Zj%17d1)9r~w&%IG at LovDl#{7kPs)_1sobEs
z##-F at g6qAAlxcUV+(^o_yHsARxol~7;k|_9l&A1+B01$Gyq97kVzs}FWQ+afB&Y3#
zR-la?JJfC)8+YZqO2-yx%SI<$NvvA*nVM}ZKJGVF*v8fmot1lZuI`RPVd&5wgNN95
zd|i<vSvi7|-B{n_Z?O=yQ#8k;MaSC4QpzzU$CX^H!Np-0^+*~t6P|dQ<Pim>g;~{Z
z+YwWdIM|~pk(}y>9tUOKRG}kXD)2Zdmu;~ARlZU7%^!x0Wnp-rG*qj~&CMkrJORo}
z)qe)Wp)N~W(HNx7hN%$6nnpDnb~y5x4%tOXxw*3ub$ifYWM;1)N)5q0%E_%5J`^U@
z5v9{v9&rTIVYCDr=|P&+XB5?ma>U~YStF{=;dG3YoB5-~GXK%(o>QtZvr=6=*33F(
ze#B5gwK!50nd<FvbjM=+5eO!vx(Ba29#zauov50XvY%wt;GzN1?08u(+@?h*vkFJH
znVRYqae_uKt>uU(P$1ra`*uhk5tQ^YDk7u!ol86(7ahQQ;6~tUU<C|xZItdDekPeG
z$o?GCZJ^j?2yD-hxSL`cZnPQ&2<#;Y^l}8+1PUgT*iFIFB+?C8JZXdRG7?u&5FlL}
zf~+ozT|l}`BwkIi8!2XBl<Mj=zyd?FmkhG)7RMWCT9)n6^PeD1E;Kn?bv%a9*j&9O
zSfJ;oRCL+JR%CY!dcWO1q}}eyO4{v7dtO$By(nviJ at 3L}5OZv^=T+G4+wEg)XM6DO
z-qx&XS-BoP3)%dCc>}VdCDt0OhzBG7ZhV0^6pS`^h4CV0MKYL33VfGUsBgat`t~cn
z`?@sQFvI5y$HFZ7nquuysC^y&NIQMqwX>;3v_})+<|tkW4RaDyjYz3kvZUrz-_rWi
zYJDf4y114;N$YFHr(f~0SYJ|f!WI;24kkOB at Il%Wee>%ZYGJ~}>V!Z}{y15+wUZT7
zLWDZQfuLYVB#YL at cqAB2R|228Z59c9dlrsJOUB at da=HFsRwM-HNbc=XS%r>JXImVV
z3W?@6Un~?#1gTsVi{VApP$bsr^T(TkpkLtgxxR$IBPb>65Pa!2fj0S at 1@cNX`J*Ax
zkx-c;W~x#eQ_<OkDz!GEu`oc#fLhy_Vvz`QTQ^gpElM0phFgOo*-CM0I4Ej5MorIX
zlXT&XsT&ifZ!#7jDH#h1v__VejIEJ6E-V>qXYLBcsf1(<6>AN)a>m4zF}M{S!V&5w
z<k-{_Cu(bqb7pZ<P9&iwHzecx#L;$q9JtFYEg)!5l?7t$^hsi_m259nA<}z)mhn#Y
z`GQ?d!L}q`81}UxXBwQ9)8oNpOB{P9m4+`ES5C{Yt(=ldCf8c*z6>w3et}?Pdo$va
zQzM%OqG-qPn1NB1(&EkJI7Fx`t4NQ?l*wkKYN{FWh5QNWhGZ5}#w?{gSW3G^f>uA4
z(vB>qJy}e-w)(rwve8t;B2BSqhrphS#G3r*Ye}pOC;X9Ud#fOBYw?4dqRDs!90=pp
zYH)Mh-_`=g;19;Ze2@^gN1G@;(dKUog4^5LIK4|cCS%e8JJU>P#0%eR#98ezd?-5D
zD*TPqclby&ojH8|2r4Da?@0TTzO&lHO>3}AQ3XGZRs>-RBBC)7^kaBo7vYugHk=+p
zQ8W?lq6|XuAfFk6Xm6`jwPJKd=>$M0f&?ObLO3fyrQ<kew*-H=8iSRN52lDD91DqV
zd_J2GHabe_VB(`S5($JmP_VC->KKXmk;FQ#rRk1g%(>Bc=19oQ9iPcQZPCos5itdM
z)#AYLE%1ff at a=812YWOgjK at W&DH2NrMJPyzEEF-QLXq}F3!ggCVw}C;!i+H1hQ`u)
zQl2fLK^p at U%9KPfxJJ;qjeU|qR4mjP4=1_Tc#vZ+QX!NDjd|=UI at IIAs2^vYco64p
zbWt$b*p9XYlO4p#*0xX>;|dHbc}8u*Nzgo>b|{u(2WQ2QIy;&t$!N+#Cg6Hw9!cnJ
z>>KJ4#Jbz)oE}besxga*9JHNsa3M(zUujOpY9M#2k=&_<vOE)$jT+3IYBYDMQQMgs
z&t_Ew#*Z4>rj@@5JHU at C4EDWW29rfoFpR#XVSzI(?X^~nE$oM`HW3MM7;DCn*j(uq
zNC}CySf at ywg+UocMj?bzWF=3IXf&U#!BkX>3~^A95aE)cgIf!9M9`rk&{0SS4=5s<
za53Z{#32;1wr;v|ry at u&RS|*fU5EmXHBqdI<t8Y)+9q=V1){8It)zHsC97I1(eyyL
zl>>}hM4 at Q)6CmQqq at arfmb*xS{-b~t;b=s(bhqJD!C^=ePD|*pMj4`uNQj6?v%eKt
zOA46`b%d_wCPB?2t1*MYwI>oM<^+l$1^WW~hC*nGST~vClUak7VyA>CKnw?HV>cC%
ziXlZQDZMM{58=!E=@_M(N|}zK<c|kfE2Gjv#v^p>;e+}3hJQL1N=G>zr&H2^I0cL|
z4NiuQk*H!Er&3|2m<ebH>(P{?>_JI5oLPiAj#Io0p(G(fXWgzYUvnhZ=#OB^6UTvy
z(;t7=-?yOQ#5pw$K3}4}(O2)I38e>ru_Gp8l1!_Hh1E1&#uqyArxLW$n-sLYZL*qU
z)9Q-su at vAB%+nNnqTxN-h8GeS<Bz+rz~Sv3yw=u^*mmH at z%{@vz at 5Ouz#G7m!1KT>
z!0&<kY$y->DeyV)J<x#+4HT9O&<9XTfpTC1PzlTct^oc7*n!!=0$>q9A4+Kg)&R7q
zISM!zcn|ml*a&O^t^;ld?gO3yUIX3&_5mLQUjaQpHWnyOU>I;1Fcz2yOa+bws(}T-
ziNGm<4+sOi;z8Rw5kC*u09*!~f;_i_Zvbuw?gbtI9s`~Q at It5fGw=%HuLFC5cY(hH
z{{+4UG~}BH90?QyBY{d_3Qz-_3tR!*2;2oc1Uv`40*t_l at K50PfKP!QAP+05QeZqV
z16Tko2hITQK>CBg<G{<n9^frtA8-Kp0T>Ls;lMaxIxrtt2Kaz55Cgh_4Z!8VRlrTa
zoxpv-BfwL at 3&3l at Z-KXg_koXr_fY3wU`%|8_&2~ai2ndKz=c2wa3nAhs06Bj*+2vE
zCQuG61y%sB0dD|4AOu8!cHkUf1aKK}A#f?M6}T3-8MqtR2|Nls4ZH}v3hV*?0K5&n
z4}1cA349MYu^$U at d=vvCfU&?tpc0q?90$|_3xTD;yTGY{4+sKlfNy{V&<$JwTntnL
zTYzhTzXGQLJAgBQyMX(Ehk<W_CxB;xPl2K6$5+66fW5$9fc?M$z=5={!5TORC<KNB
zV*n2 at 9jFHCfhEA{Kmce3I)L+mOMq>_4Zt11PT=RjF5rG(74Qo1Yv4^_FYpeq8<>Va
zy!#fs57-ZU0(=g94fFsuq&on7???Oway_^Z_$}hAz%Jl0U^Flhm<r4SYJfUm5wHwc
z2{Zy>pbcmT)&ds*mjYJ-lW`uq8GHwDFR&AM7<e3b26zG34ZIHg0eA=42Ydkh6ZjlB
z2z(Fd_^Z|&U<fc2C;>(RV}Xgl6ksM$4J-f_0n35aKoDpJ+JSR{jldPa)xb at _9l*W7
zPl2hxET9JP0U;m?bO7f87XzbEpGUxt1J3|218)NF0Q-T at fgb<|+FuMD4jctk0X0A!
zuoyT4HqAf`=mgFOE&*0h8W0BJKsRs!unE`-TnF3=+zspm9sza(zahr4G97tT;JEp>
zcSI^;ZOMvwOGO~q!GC%hOirrwR>WhmWJP--PQPJPf#0mDz>gRCs-{kg2Lmnsr2Ijn
z3fOr(>HlF|KHCGq3jFX5k_5Y(x<ge#{7;o$(HKr9{^xR+YiDZ<Wr3+F0q!v+u`Z!i
z71kJ at 7SY5JOv*Z1`OkWN=3n at td-*O|Mdi#2)q$8`Bm;q9$R}?h!5eZo2LA84%UeWn
z>vd-UGFRWsHkw2PH%tOF(Zf;<Gby!xrUYJ-Q27`L(!+-tzv%*<bdAx%4$JLOxEV>b
zj3E=bLLpmot<vgGwjloq`;&lqRk8&wh0VX;Y?v(3r9E?_Uq({D8)i+TUrO5Fue~AE
z-|P3bw+r=m{k`>BLjC=FZ#~YFIJ7c18>V&D{pua5zuUL^*aVJMbGq1DpDW7x)elZh
zFMHeP3H9BB-g>+ORA$x4xJ@{P(XT#V)b*<`Nc|q1H8-0mOnpD0w|=NlzX#P at UnKhb
z`+b`z7V3ASdfVfDrfRE3#%=f-LS4Ulw`k~BkH-uBY_`-_AbKa-1pX4RpUuW!>Fb+d
z!<%*eZ8m|wY3paR3H&WuKbx(;odr7^{(`>0%_hqGsHZ_=h);Vm6L3Yq(UKlNv}~b`
zULVwiJGFcvJKBx_$X+d5 at UVxs*$Df~zaDzB7v^$DS_^T4srP2+SDSizl4sqL5U4(C
zKdSnyV}0N8b`SJa?gJV5&=N^QWz_dSAo6yo`qOes!@)>@W|z73*WP#8sPAz^%Pvjy
z9k&i{NI{?DWw@!&tmh=?HGHKq^LQDB^IBOy<G%{_h3E(Rt8?1a>2EY5q*uR>DO0hm
zfPI+~EL_d`^gW*}W4*=DjGlc6{q={?KYR%NUg*pEW-q>gzCfhUV_2#1X5)V7>p;uO
z{C at g}p0JhoH5c=tFVJ0Ladq#+C9Lmz9-}2G^(TEefVQ9{5raP8GHy*Zp36#oX8vnA
zA7z#1&76-bHU3q~Rc5*Bwt~85(y%Y=?>f@|t&GeEUWd4;foC>}WP2#&X~J|t{gR?D
z+3Ld_AsS531B95mO%h1P;t8L>y$g5OTH7MQWH8|I_HRMIn;6CurMSP_7sQSDZrm}%
zeOF(gy|uL)E*6RJy!0}~v$G{N3u}F~i{|meHhj0mS6gQ)>*g)NEJWU+IdT5{rL`yf
zPOh2LP)kqc=pIfgC;A0Pi-LbnQuyYbx~OJh{amDBR at 3BbO0;uTA@}~#$^L&PvbuT!
z{f49YyN!K*64FdIf8tU8fTVmBkde|iclvS4jNJe2?_QorlgDt>*PaNXp=7FdUhf~s
z^aXI!RQ_ru+Gzbn%Zw`d;Fs$0KqBUA!H-~Kj%ev9zD4HqH6{{fhV--{Bby+VC-0*P
zPoldu>2Cz%fdq4lieVNSjJF9-G?ol{YUb2WqNj}>JXiCy_;Fv at 6X=e at Su!4waf<ng
zonC?uY4i-39L!i-Bq=;xRS$m66LA`fNQ-gJJi!)o at U;Zst0d_m$By(+aq^-fkO5c6
z-x_X06>vwF0uPrab4I at i`n*po2E6dl9NyR1=<^2xabK$+ZRP1WhGd8`qNj71VmHQv
z9ZJH_#|Bj#{iLFlfr`hY&Gc**<;V<RW<J<WsVEohp13-l{2w#TjBrXzU0>9^Trs^|
zYu(7!x{Zc_*>lQY&EFN5S&b1_=X<5DMC2=ciwdVh-qbu_u_|BrVU^x%I~o$rWt6{K
z4=6rhTGKS1>aP6hwk>UQ0o<ia`Kxt<;?Ky)vSqfP=0o(YEmgi+Uns_(Fz}}8uj~}B
zKq`H^OUbEqh`H{lmhP-38&!W(Et(Obyp_LNuPEMY8mjV at ziR(krvDt%PJNF|@m7mJ
zW<ja)mH%4ks84WrOm1qOV=}$wZrxNpl&%92tACm4r?^cSnw*inxFEw{-L6+$s5&OY
zUuAo7hQC^ODaKuwUR!4UH=F+E^g)O+)7<1tdnGHr+Voe|RO>j!^UUlNDL*COk>Rh_
zdy2i(xt2}sf2G=q2xen^43JLETh;GltNx}m+LXWI$DyN_#^@NLP5r*`W0Rz;?4;D!
z|3xHF6_vkQXYTqB{wlvW5TUWB{MGzg{eF4A*|Fx~l&ZgK*Pq~PEnlr$_g2Uf#z{(r
zsy&L|MT*s5RGX$=$#tfvNck!L00~xqwGOT`{WJGB*;==MLZG}<`_($D;eXTr3;0r=
zra5AAQ~rCD!emvxVtOPssG%peF2n9HI<aHhBndNYxhX$W<i`M+I!e3S^j|YZSxU~d
zrN>{HI<hQSF71z32bL83*p5Gh|LJsM#&%*x<{6 at xX8LFL-;Ym~{(r|UA?v366<3 at 7
zRvU_M3rJ07zRFM8HypzMS<_!#Kb3u^KRpu6)RFDmrvJ&Q6T8eI(>7-MXV$ZFjkLe(
z5dE+6A<i&i$Gxr6e=$uiu+cD>4yfZsU4I<Vsj-h}Y8yw-TCrW9k+~{YrpntJ{rNxJ
NDJ{;=aL5qF{{n(ac~<}c
literal 0
HcmV?d00001
diff --git a/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit b/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit
new file mode 100644
index 0000000000000..7152093802751
--- /dev/null
+++ b/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit
@@ -0,0 +1,2 @@
+PERF_RECORD_MMAP2 36922/36922: [0x5592aaa7f000(0x1000) @ 0x1000 08:10 26214013168 3588669473]: r-xp /pgo-accuracy-metrics.perfbin
+ 5592aaa7f1fa 0x7f2ed752662d/0x7f2ed7526850/P/-/-/3 0x7f2ed7526602/0x7f2ed7526614/P/-/-/1 0x7f2ed7526b34/0x7f2ed75265f0/P/-/-/1 0x5592aaa7f080/0x7f2ed7526b30/P/-/-/1 0x5592aaa7f1ed/0x5592aaa7f080/P/-/-/1 0x5592aaa7f21e/0x5592aaa7f1e4/P/-/-/1 0x5592aaa7f213/0x5592aaa7f215/P/-/-/1 0x5592aaa7f1fd/0x5592aaa7f20a/P/-/-/15 0x7f2ed7526b3d/0x5592aaa7f1f2/P/-/-/1 0x7f2ed752665f/0x7f2ed7526b39/P/-/-/1 0x7f2ed7526639/0x7f2ed752664a/P/-/-/1 0x7f2ed752689d/0x7f2ed7526632/P/-/-/6 0x7f2ed752662d/0x7f2ed7526850/P/-/-/3 0x7f2ed7526602/0x7f2ed7526614/P/-/-/1 0x7f2ed7526b34/0x7f2ed75265f0/P/-/-/1 0x5592aaa7f080/0x7f2ed7526b30/P/-/-/1 0x5592aaa7f1ed/0x5592aaa7f080/P/-/-/1 0x5592aaa7f21e/0x5592aaa7f1e4/P/-/-/1 0x5592aaa7f213/0x5592aaa7f215/P/-/-/1 0x5592aaa7f1fd/0x5592aaa7f20a/P/-/-/15 0x7f2ed7526b3d/0x5592aaa7f1f2/P/-/-/1 0x7f2ed752665f/0x7f2ed7526b39/P/-/-/1 0x7f2ed7526639/0x7f2ed752664a/P/-/-/1 0x7f2ed752689d/0x7f2ed7526632/P/-/-/6 0x7f2ed752662d/0x7f2ed7526850/P/-/-/3 0x7f2ed7526602/0x7f2ed7526614/P/-/-/1 0x7f2ed7526b34/0x7f2ed75265f0/P/-/-/1 0x5592aaa7f080/0x7f2ed7526b30/P/-/-/1 0x5592aaa7f1ed/0x5592aaa7f080/P/-/-/1 0x5592aaa7f21e/0x5592aaa7f1e4/P/-/-/1 0x5592aaa7f213/0x5592aaa7f215/P/-/-/1 0x5592aaa7f1fd/0x5592aaa7f20a/P/-/-/14
diff --git a/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test b/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
new file mode 100644
index 0000000000000..b4fd875bd704e
--- /dev/null
+++ b/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
@@ -0,0 +1,24 @@
+; Test pgo accuracy metrics
+; RUN: llvm-profgen --perfscript=%S/Inputs/pgo-accuracy-metrics.perfscript --binary=%S/Inputs/pgo-accuracy-metrics.perfbin --output=%t --pgo-accuracy-metrics 2>&1 | FileCheck %s --check-prefix=CHECK-STATS
+
+; CHECK-STATS: UnknownBranches: 0
+; CHECK-STATS: MatchedBranches: 5
+; CHECK-STATS: DismatchedBranches: 4
+
+; Original code:
+; clang++ test.cpp -g -fbasic-block-sections=labels -mllvm -pgo-analysis-map=br-prob
+
+#include <iostream>
+#include <random>
+int main() {
+ int a = 0;
+ int b = 0;
+ for (int i = 0; i < 100000000; ++i) {
+ if (rand() % 1) {
+ ++a;
+ } else {
+ ++b;
+ }
+ }
+ return 0;
+}
diff --git a/llvm/tools/llvm-profgen/CMakeLists.txt b/llvm/tools/llvm-profgen/CMakeLists.txt
index 354c63f409ffe..af8ea240f8a54 100644
--- a/llvm/tools/llvm-profgen/CMakeLists.txt
+++ b/llvm/tools/llvm-profgen/CMakeLists.txt
@@ -22,4 +22,5 @@ add_llvm_tool(llvm-profgen
ProfiledBinary.cpp
ProfileGenerator.cpp
MissingFrameInferrer.cpp
+ PGOAccuracyMetrics.cpp
)
diff --git a/llvm/tools/llvm-profgen/PGOAccuracyMetrics.cpp b/llvm/tools/llvm-profgen/PGOAccuracyMetrics.cpp
new file mode 100644
index 0000000000000..2c9394805e072
--- /dev/null
+++ b/llvm/tools/llvm-profgen/PGOAccuracyMetrics.cpp
@@ -0,0 +1,106 @@
+#include "PGOAccuracyMetrics.h"
+static cl::opt<double> BranchProbabilityThreshold(
+ "pgo-accuracy-metrics-branch-probability-threshold",
+ cl::desc("PGO accuracy metrics branch probability threshold"),
+ cl::init(20.0));
+
+namespace llvm {
+namespace sampleprof {
+
+void PGOAccuracyMetrics::init() {
+ for (auto &Function : BBAddrMaps) {
+ for (auto &Range : Function.getBBRanges()) {
+ uint64_t BaseAddress = Range.BaseAddress;
+ for (auto &BB : Range.BBEntries) {
+ uint64_t Address = BaseAddress + BB.Offset;
+ BBAddrToID[Address] =
+ std::make_pair(Function.getFunctionAddress(), BB.ID);
+ }
+ }
+ }
+
+ for (auto It : SampleCounters) {
+ const RangeSample &RangeCounter = It.second.RangeCounter;
+ const BranchSample &BranchCounter = It.second.BranchCounter;
+
+ for (auto Item : RangeCounter) {
+ auto From = BBAddrToID.lower_bound(Item.first.first);
+ auto End = BBAddrToID.upper_bound(Item.first.second);
+ if (From == End)
+ continue;
+ for (auto To = std::next(From); To != End; ++To) {
+ assert(From->second.first == To->second.first);
+ EdgeCounter[From->second.first]
+ [std::make_pair(From->second.second, To->second.second)] +=
+ Item.second;
+ From = To;
+ }
+ }
+
+ for (auto Item : BranchCounter) {
+ auto Ptr = BBAddrToID.upper_bound(Item.first.first);
+ if (Ptr == BBAddrToID.begin())
+ continue;
+ auto From = std::prev(Ptr)->second;
+ auto To = BBAddrToID[Item.first.second];
+ assert(From.first == To.first);
+ EdgeCounter[From.first][{From.second, To.second}] += Item.second;
+ }
+ }
+}
+
+void PGOAccuracyMetrics::emitPGOAccuracyMetrics() {
+ assert(BBAddrMaps.size() == PGOAnalysisMaps.size());
+
+ for (uint64_t I = 0; I < BBAddrMaps.size(); ++I) {
+ auto &BBAddrMap = BBAddrMaps[I];
+ auto &PGOAnalysisMap = PGOAnalysisMaps[I];
+ assert(BBAddrMap.getNumBBEntries() == PGOAnalysisMap.BBEntries.size());
+ size_t Pos = 0;
+ for (auto &Range : BBAddrMap.getBBRanges()) {
+ for (auto &BB : Range.BBEntries) {
+ uint64_t Sum = 0;
+ for (auto Successor : PGOAnalysisMap.BBEntries[Pos].Successors) {
+ Sum += EdgeCounter[BBAddrMap.getFunctionAddress()]
+ [std::make_pair(BB.ID, Successor.ID)];
+ }
+
+ for (auto Successor : PGOAnalysisMap.BBEntries[Pos].Successors) {
+ if (Successor.Prob.isUnknown()) {
+ ++UnknownBranches;
+ continue;
+ }
+ double SampleBranchProb =
+ rint((Sum == 0
+ ? (double)1 /
+ PGOAnalysisMap.BBEntries[Pos].Successors.size()
+ : (double)EdgeCounter[BBAddrMap.getFunctionAddress()]
+ [std::make_pair(BB.ID,
+ Successor.ID)] /
+ Sum) *
+ 100.0 * 100.0) /
+ 100.0;
+ double RecordBranchProb =
+ rint(((double)Successor.Prob.getNumerator() /
+ Successor.Prob.getDenominator()) *
+ 100.0 * 100.0) /
+ 100.0;
+ if (abs(SampleBranchProb - RecordBranchProb) <
+ BranchProbabilityThreshold) {
+ ++MatchedBranches;
+ } else {
+ ++DismatchedBranches;
+ }
+ }
+ ++Pos;
+ }
+ }
+ }
+
+ llvm::outs() << "UnknownBranches: " << UnknownBranches << "\n";
+ llvm::outs() << "MatchedBranches: " << MatchedBranches << "\n";
+ llvm::outs() << "DismatchedBranches: " << DismatchedBranches << "\n";
+}
+
+} // namespace sampleprof
+} // namespace llvm
diff --git a/llvm/tools/llvm-profgen/PGOAccuracyMetrics.h b/llvm/tools/llvm-profgen/PGOAccuracyMetrics.h
new file mode 100644
index 0000000000000..5363713abbff8
--- /dev/null
+++ b/llvm/tools/llvm-profgen/PGOAccuracyMetrics.h
@@ -0,0 +1,45 @@
+//===-- PGOAccuracyMetrics.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_TOOLS_LLVM_PROFGEN_PGOACCURACYMETRICS_H
+#define LLVM_TOOLS_LLVM_PROFGEN_PGOACCURACYMETRICS_H
+
+#include "PerfReader.h"
+#include "llvm/Object/ELFTypes.h"
+
+namespace llvm {
+namespace sampleprof {
+class PGOAccuracyMetrics {
+public:
+ PGOAccuracyMetrics(const ContextSampleCounterMap &CSCM,
+ const std::vector<BBAddrMap> &BBAM,
+ const std::vector<PGOAnalysisMap> &PGOAM)
+ : SampleCounters(CSCM), BBAddrMaps(BBAM), PGOAnalysisMaps(PGOAM) {
+ init();
+ }
+ void init();
+ void emitPGOAccuracyMetrics();
+
+private:
+ const ContextSampleCounterMap &SampleCounters;
+ const std::vector<BBAddrMap> &BBAddrMaps;
+ const std::vector<PGOAnalysisMap> &PGOAnalysisMaps;
+
+ // key is bb's address, value is function's address and bb's unique id;
+ std::map<uint64_t, std::pair<uint64_t, uint32_t>> BBAddrToID;
+ std::unordered_map<uint64_t,
+ std::map<std::pair<uint32_t, uint32_t>, uint64_t>>
+ EdgeCounter;
+
+ uint64_t UnknownBranches = 0;
+ uint64_t MatchedBranches = 0;
+ uint64_t DismatchedBranches = 0;
+};
+} // namespace sampleprof
+} // namespace llvm
+
+#endif
\ No newline at end of file
diff --git a/llvm/tools/llvm-profgen/ProfiledBinary.cpp b/llvm/tools/llvm-profgen/ProfiledBinary.cpp
index 1baf35820f97f..d0695deae86e5 100644
--- a/llvm/tools/llvm-profgen/ProfiledBinary.cpp
+++ b/llvm/tools/llvm-profgen/ProfiledBinary.cpp
@@ -256,6 +256,14 @@ void ProfiledBinary::load() {
warnNoFuncEntry();
+ if (auto *ELFObj = dyn_cast<ELFObjectFileBase>(Obj)) {
+ auto BBAddrMapsOrErr =
+ ELFObj->readBBAddrMap(std::nullopt, &PGOAnalysisMaps);
+ if (!BBAddrMapsOrErr.takeError()) {
+ BBAddrMaps = *BBAddrMapsOrErr;
+ }
+ }
+
// TODO: decode other sections.
}
diff --git a/llvm/tools/llvm-profgen/ProfiledBinary.h b/llvm/tools/llvm-profgen/ProfiledBinary.h
index 5d2088ad7691c..08c6d065ebca4 100644
--- a/llvm/tools/llvm-profgen/ProfiledBinary.h
+++ b/llvm/tools/llvm-profgen/ProfiledBinary.h
@@ -299,6 +299,10 @@ class ProfiledBinary {
bool IsCOFF = false;
+ std::vector<PGOAnalysisMap> PGOAnalysisMaps;
+
+ std::vector<BBAddrMap> BBAddrMaps;
+
void setPreferredTextSegmentAddresses(const ObjectFile *O);
template <class ELFT>
@@ -600,6 +604,12 @@ class ProfiledBinary {
bool getMissingMMapWarned() { return MissingMMapWarned; }
void setMissingMMapWarned(bool Value) { MissingMMapWarned = Value; }
+
+ const std::vector<BBAddrMap> &getBBAddrMaps() const { return BBAddrMaps; }
+
+ const std::vector<PGOAnalysisMap> &getPGOAnalysisMaps() const {
+ return PGOAnalysisMaps;
+ }
};
} // end namespace sampleprof
diff --git a/llvm/tools/llvm-profgen/llvm-profgen.cpp b/llvm/tools/llvm-profgen/llvm-profgen.cpp
index 3b974e25103ad..6a904d8acbe83 100644
--- a/llvm/tools/llvm-profgen/llvm-profgen.cpp
+++ b/llvm/tools/llvm-profgen/llvm-profgen.cpp
@@ -11,6 +11,7 @@
//===----------------------------------------------------------------------===//
#include "ErrorHandling.h"
+#include "PGOAccuracyMetrics.h"
#include "PerfReader.h"
#include "ProfileGenerator.h"
#include "ProfiledBinary.h"
@@ -67,6 +68,11 @@ static cl::opt<std::string> DebugBinPath(
"from it instead of the executable binary."),
cl::cat(ProfGenCategory));
+static cl::opt<bool>
+ EmitPGOAccuracyMetrics("pgo-accuracy-metrics", cl::init(false),
+ cl::desc("Print PGO accuracy metrics"),
+ cl::cat(ProfGenCategory));
+
extern cl::opt<bool> ShowDisassemblyOnly;
extern cl::opt<bool> ShowSourceLocations;
extern cl::opt<bool> SkipSymbolization;
@@ -179,6 +185,13 @@ int main(int argc, const char *argv[]) {
// Parse perf events and samples
Reader->parsePerfTraces();
+ if (EmitPGOAccuracyMetrics) {
+ PGOAccuracyMetrics PGOAM(Reader->getSampleCounters(),
+ Binary->getBBAddrMaps(),
+ Binary->getPGOAnalysisMaps());
+ PGOAM.emitPGOAccuracyMetrics();
+ }
+
if (SkipSymbolization)
return EXIT_SUCCESS;
>From f3979e778fd86d7a9fdbf83f5d63470ef280fcd6 Mon Sep 17 00:00:00 2001
From: lifengxiang <lifengxiang at kuaishou.com>
Date: Mon, 3 Jun 2024 11:38:30 +0800
Subject: [PATCH 2/3] fix file name
---
...ccuracy-metrics.perfscrpit => pgo-accuracy-metrics.perfscript} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename llvm/test/tools/llvm-profgen/Inputs/{pgo-accuracy-metrics.perfscrpit => pgo-accuracy-metrics.perfscript} (100%)
diff --git a/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit b/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscript
similarity index 100%
rename from llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscrpit
rename to llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfscript
>From 5875c2084cfaa3241eb74ef303ce013db3116ee8 Mon Sep 17 00:00:00 2001
From: lifengxiang <lifengxiang at kuaishou.com>
Date: Mon, 3 Jun 2024 17:05:49 +0800
Subject: [PATCH 3/3] use yaml as testcast's input
---
.../Inputs/pgo-accuracy-metrics.perfbin | Bin 33472 -> 0 bytes
.../llvm-profgen/pgo-accuracy-metrics.test | 24 -
.../llvm-profgen/pgo-accuracy-metrics.yaml | 849 ++++++++++++++++++
3 files changed, 849 insertions(+), 24 deletions(-)
delete mode 100755 llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin
delete mode 100644 llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
create mode 100644 llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.yaml
diff --git a/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin b/llvm/test/tools/llvm-profgen/Inputs/pgo-accuracy-metrics.perfbin
deleted file mode 100755
index 7ae145c299adbabe28f7e8652addaa854e21b135..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 33472
zcmeHwd3+RA_V2Cg>Lg7ForHw$5QG>&0in}j35$ve5J)s2f*>l;cGBHROQ$<_cQ$cB
zK@=4P+!x%pnUQfF$9- at c6`dK;Sr}(@oI!tsIy$%xu6f^cZr$!mC(OLx`@G+K|D at o1
zzxSMb&fV%()xA}f>ho(G=Ifd!)MgX21xc^wOHH+zP~B}tK-FS~$VGUB7%Q?M8?2M*
z)sm1Zw-&uO=a_mMnEdWF(=&O5X{T7#keK`qwcSe<!lqc5?I1rpC75z1?=<V7Sf!`R
zD<fxYWgMosiwv+Sw)#<3?w!QR;@)F>^PL&(R(_-=zn4wFmrXy#`KF&@)t}TSgcr>8
zOfEwjZDky$`*895$pHJB2}TCbGwl_VEo~>k&+KZc_z$7#_9bR{hw7IVX8jeL-76|0
z;l`?|6_LQCNI2TwHK}Vx)ugJao<z(uncGeIlkI{<%eW at 0AIn&hX_T(=Gu8i*$iA!}
ztJTmI_M^Y{5c-Zo=;t3oPwgoKGPj9Plw~R*Ujmf(qhAkQfAthTUvq0L>Psa3 at ubfu
zeDx<U^aX<PU~@Q;48~7hI5!fD22b`kMuIY}|CG}fElth{#}d9qe<C=wJ{nHWtE}x1
zzP|dotoJo_`F;Lmuq&Jtaep*`YLF%rj`}0vvr&`}`?<-iRjWT76_69jK+{o2(Y~%C
zu{9NIZh|REm85Ty`UMU3bLRRcdnS9P368H=;hW-_%6+2?8~({5Mll)>ns^<o`n!F2
z*ddVe7Te48ADQW-N{-)-Lrxd}Wu~j+S{;WE6v%`J%;Q$+cToY at 9?Q_TnfALf^h(})
zob;n(jmDzd-nHoYyk;isx9F|M=K+g8TV(=1Xwj>>QnI_6LLtc3T5ef2X{BEFqm;*0
zOD22jSG9SoWsLOd+(DWd)fCEntmRf$vzp7rju_YmdSIXj26|wi2L^gzpa%weV4w&7
zFZV#*`hVoqU1tAPg%EWY?MmABm!g2W^)KW+FAM6K_BSN;jC~KGb5u2AB)3rF2k-V^
z8~YZ?G)4U2b(Y^CnWlyx>|%L0$uuSW-~pDOBblaxAKc3F6C~3V_JggEm(^{0zi#uf
z4?($~((5ieb|&I=o2T8vRGf>2@&3D!vg&!N583a3iN(r~>o at ILUAO6Pb?e_du=wPL
z&GuiQT6LTA>X?q*gEIE7gy|O{k8{)pNJ4ByS at oQ;eGbvggUMoa$FDtzqdOcu?>a}V
zBSRF%4EqvUpF*PXKh$kHQ1|R7$JIT1&{n7YvTn~0$s%NMwV6Rq&$}V#sCjAsb;te=
zNus at CS>5_$J1B|<BnKng$ynO$fBT1?p8YMT<1g(yk*HB4xm?8`tVN=w{@h>d|B?Sv
z?RUsayi|Ko(if5r5M6NY0rA%_?dML}zXjPpPW$Tme|^3F8<EVttoGpgUD~GFgC99A
ztNntbUwkAkt3ANc10TImxeJ3KpQ<4{tmc%OO+7Ws>o<K>v#fs8?`qJ^W6wBBU_Wf0
z)B;}GF#i3 at Kh-_^y^TiJ{vF?A7hd#na-{Na*z{q;rmyB9kDj7G*R6kEtDE^z`-e2(
zPG42CvSwAy>KfnkThk5v9OID3XnIIelLoed9vJ9>fgTv>fq@<v=z)PA80dk49vJ9>
zfgTv>f&XR?Xn2;TmD-N3h95nn8F8Se=W_7n;77nufoU!I5_l!apZ4_p7CiB at o}MDC
zByR$*1Q$U^n|AgRp>^eJrGv9`wrbh=q^D>2P4J&U2Ikhky%1xNPWG4lv!|zxY=`8}
zAL2gVncJDOP8>J<=m}HCl#`llu&frZ!;YSbikcz$8}+$)S<NUIBBcj_cTq0itx)ND
z6B|%Et!Q__KNp<xpD+C>?>m8fv^PlUbB5$!q1O&^Z?V-5Dcfw+4jFg3y>5tiV^-ae
z8SAqb4yld|nNc&uTQg+boFQd%hPYurXGjh|SNsRuXCNQz^D at eEU>oRxfgTv>fq@<v
z=z)PA80dk49vJ9>fgTv>f&O|xy;rE-Bg}knkRIyMM(--prsT(@n3A8%kY6|D!6x&9
z1 at SynzSDepw8WIv`;PROm^SmZMloE9srMUceMOskx9`gzdSWE+Hy1(boyCLZ%Yy1%
z#T-)}M8?=YlZ5xp<>ofI*knbf8 at -&)n_6paH4W5ylh(Mjxg-g<S+LSqn-x>_-fP;a
zcM(<j-}cD%Ael|^V3pe^UoyuNb5mCJz%rE6KQv^9Uz at Tinx*`|C-q)=X316Nj-7Av
za+5<QcbL4<Wb$7yckZmRad-oJeA!gb49~Q($==Fo-m1w{%Em1T2FmLENvWSSW#)LR
zaite8>sG>ga;3L&iZ^X76DCzwju%Z4f3&%*BN$JFW6`q8nI5ml+Z;}ojYCikc$#AI
zHqV-Ne>l++YlqZ2tEsIm8H+^{6^-rTNT4DT>1g$k%hV}To2Gkb_yaS%RiVZifktmr
z<IKj&z_hBWY5t(Mv8gK9G_$fQFka}!R<n6HoF?K{iJ=ZZ$hj<=ukT_EjLFf2BS#m7
z7{a-D*VU0 at 7kW+>;@Kic)3kNia`bE>Lzkh!WaCh?6Xht%l9Kci&12}V7c?GenmF8y
zq080qlB19gV%=sljs|PT>$iz)!*0(KS+?r^IG(a>o9E#$%CcS2z_j&rrfuC!+wWq!
z@^PlC{>*gs0j6v0$T`b)?Qo{+#xq?%ndyc$rW>~~-E<Grj^8ldypQSD&zNo>jFU>1
z?T*8l?wrPScRSOMwlLjyAJb1?WP0F_Ob>m`^l<(Va(`qr)6c4y9<68k`AVk8VoZ<U
z%=E-grYB!ydg^Var at v%+<}fE^_KQlUXO}WPzlQ0B4NNcI#`Mc4m|l8=>E*vNz48sy
z?x7eSS+-XvGQC#I^s8k|zYa3}ri<zI%bE7v!t}<&pln;Nwi3f9+csEBGUsXAm`gRP
zPquBOMxB#wJ6xk~$+nHrs6(=C<4nKtrr!ki)6cN`v$Bt$PD3Iqd)5))oW`c?`3{PS
zLBXs+6^|kNtU=xvm?~dqn!J~3>bp$S_A^x-V48lAX(s&zLDryIIZQ|AGach*nq9_p
z+&HEhFVmc3nC8|o&0EYge+AQmGnndHnCjb at PUvE4SjV*R5~f94nHFEibkeOvxzp}t
zs`@e0^rwl2RPSc0*~>KNznJEJ!8A`FN+z}WO!G%FEttquH;bvhj_LU2OeX}G8sbc+
ztRu>wx`n9V{2ff|?q<61mrNU8W!m@`rcGZkU2ek_C#zs{0n?UIOjk@|+L~nAb_vt=
zo0zV=hv}+^n67 at 7>6+J>u6>W``p=ne$i~GltKh~mrX4exZe7ZB$7-fKo0;xf%XIff
zrhD#Sy7x(@AHB)+lfN<D_bt-_=P=6pvkIm!W-)y^hDJfbSM at 9%T*dVDjZELHVfuDG
z(|125Dr|g~sp%D_;9E?g51E<|GPPvm0-RMC9>#R$7^XE-m?F!WT4PMn^-QtrnA+}R
zI%^kGd>>QdJEmj-F3wqn?Gu<f>X<rDVd^@Yse2RCdE1%J-@&wQC({MbGF|vO)B3+K
zZTOh!B7yl&R^i56ri)9NE;)*6Q$5qAtC=oKFl}DTbj2p7tvi^uJ<7CwH`C+$n4b8a
z>B(W3L1h&_HG%2rI-+4q{7g&NGM&t4?_tZ=vvkTfrc-ZWI(;Y8$|spt{hDd at pP76g
zGM#ad$)Am>Th_3~VN6Y9nF3Rpf^(Tdr!X~#m|EJI!W)R(ORr=K-OkkgAk*c$m~Q(m
z(<A$sUiysbEe%t_EceIxplr9$Mllc7Jj~;?Im}0Er!z0oV$6Q+Jm#dfnR%UdH}hTE
z6U>ikuQ0!=?PY#P`#bZe+E>gAb^BpdUW;DDJl+`1Ji(aAJjs~G>@nssR~So~D~(3x
z$;MgCQ;c=Y(~K*atBjkOryDz&XBtm2&oW+RKH7MT`B>uv=Gn&g%*Po8BdI<$##rV#
z##H9H#$4uFV+r$o!_U0HXk)H7&SyT}*us2*v4eS`aUb&{<4NWdjor*A8GmG6Vtm59
z)Ub`Ba+euy=H<p@=2MIY=2MLj^J&If=F^R>%&UyMm{%K5F#C+(F#C=7m>Z3Q%uUAN
zGRi+_lre`4FLSd|%^WrsGoNYrnAaFl=BRNlbIjPx+-B at xjvG6f6UNibN#j?{oyObD
zUB*9{yNz#|*BXNkr}ED+N|?_z#xb97OlMwa%xAv9SjN2G2rzFjlFSzw8<;OPu42B#
zxRZI4 at d)!}#tY1s8*egiHvYzZh4Cr#RzoYN^0yfU%vTzRGhby?F<)(*z<jN72J>}B
zJM;C%rOY=Pw=myiJi@%gc!l{E;~nN(jf2d$8HJ;%oI8w(%y$~cFyCb~FyCXWWWLvk
zF#pInhxsSQ<;?dPw=wTD9%a7Yc$N79<6Y(ljW3xWHU?p;neBeW7|#4NV*>Nfjakf(
z8OJj}Zkz_j9C#u^ZTV(xu-?M4Et;^6!=y1!-`2HN6NVX2ZqtOF;zMk6VTaVV?V89U
z4c;p at h_vNbX!!>)Pc6{T%s&Xu*H;(VbMz&JIb^1vED8rXDYD8KYB%&{g}D<+S|JMa
zycAi9Jc=B4qiArpQG5(E!>SP&qG(8#=5pp_=aYG%k>?(&`!zb1I=FOqk^X_s;+fEi
zk{H7LP6Wg3)x(S3E<MY(os4g!fIJ+xA`m6lA}n&-jZ#W2C0}=m{x6vmr8zh|_i#Or
z`@``o(y?pl8;F+t0l^3|beHNU=$tWmn3Wo#FOfR(VBf=p`!IcNU*$;sLre8Xj?xdX
z=q}T{v=auy`4kE`7D7zqFGX0MRakU*c24O^#7q1LMo@>9t|5_ at 3hvQ*tMuk(XJp|X
zqlY!F at eVkMlG`Z*b{nf-XK{NGdP~WryD57r(tU(}uuo4NssE7H3HLaCrEDzMfa_0P
zh;A6KUnEnwOHJhjz1YTkF}*9 at N9lo#{&FnB1X`3VML5dtb(c+~F(Jw(5gBEkB=k9D
z6-4>saCfEtV88zE$@*FS)lKH^o}xdUQ9m<bsvfZ<a8=yX^vC<?s`R+*#Vo8<96XqK
z*Olf%E}=bDK3%^tJu0aSMEMN;4&Em;x*QaU@|pUsOw}y?%1p<j_3yZQ(~j<A^iyoC
z>)rW|&8UDV-A>iG7Qu*{5DY)oJzF0oD=dpWPQST#89WF?d9{9b at 9LQP8vUC7?A>$p
zn=Sn?6l)^uXmUd?p#t4=@d`s`3+Cz1X|?3RgQOlYQB-T>lrADKD$PA#e?@D~uvlOi
z?mB(AmQfvcch~E`)pqo9kOyng@%9||3Hl#3I<nH`$;9#o{e^T-a%D&q?uB|#9z!%>
zg?o`+D at AG%?>^Z%?i2O;%<9Mt7VC>-0#}yZWWq`M5=#OPADOU3KQ%qpa3C$!FSN?#
zC+qvtd6A!RFVhFfyi(N?<;(StGtExXi!;sKEA(oME?o`%)GXV#a^Y*33s^fZV6zHd
zmdlS{%jL%#a`~}Wt~>V0b;o;h!STLaaQt1aLiW?TWAqDm7yOPgaBRkUg#%2e at 0YXe
z2jndKK{?BQNY1h!rdhUdpQgX6(e2dqt`kM48~N^)`aX at bN(~`%f3L#+Uafzq{kWHt
zndr;T(F0?0X3f!&cm6JzG&{x=g|f8#*ANdo#ul~M^?W)G&U74+PvdEgV;tK>9H+6|
z>R8Dfb*y5JIaYIeo1=#FILk4I{o{_goStyhGAA7yncE$m`7^Ng?R0pHI&!r9d5CvA
zDvP?Zb-o6k?U=$Bfwhk5Y<G^MndNgGVdnE3XELAfSi|Y-91Wbu1&)R6f1zU$r>}P`
zX5QeqnE4{d*~2%MUp)9+I!$qJIOt?A#$Gab-HWJ02`$~rH|53nBtU^EzcjDSB3+hu
zmPNWeFK&@G=Or!Dmb`>Tx+1ULB5lp<ut?kTIxW)nye^A$WnQ;Mx+?Eni*$9~I*W8o
z-lnwVzSgPBi#q8<{#{t{U*`-Sk^fUfZgjR5*z=v?!s}_ at I@gH88#ofl5l7zS)OGg`
z=XV-iVdS|?9+@{gv*eNZ333o6pCcUSzQvhqQI_B8+{!03?$h$yoL6#%q;$LU8a^|z
z<i5lCna(9F#{B{Z2ULtKa5;3MWEsNo6MP8obiS{b1Q0oj^Gmr1_g&66`&9I9XTFW@
zfymv<&7XLWbEGZ@|D=1Jf72XPv~d5(IYsAzAnWvFr_IJyq(HcT;w-e$O%#Vkcb{`l
zx;)|D={#L_GG$<%41ekjS*}Z|X^C*(?_4d7d(T(Iqz9Y_b*@pmyB*vG6CZSrF{?fD
zA!i4leBBQ_|01i9+CgH{BhD_(!SjUjpE>X3UBCrjk2 at x!^k#%5)Xwrpoj>Qsq!MMH
zl>glMBwrXZ^zO%;ugTpjJLqv|ST>C>`j!jD6V682H1174E$6#%ntRgOO#`jH at OnB)
zIXf}XIMS6PCO+kyXtvG$v at _e5J|ViFak_08C&}_(ICroGSEPKGa}P at y^(}wa`FlR$
zW$K at E-p7~GlwOoS at 4TN+sA(0?s9&^u^Y at _UFWIB{e+2(>Xvq<iUbfG&Io^jPO6ayx
z`78F1c_6aNz1x0_Y`hd-wa>PQ<*(U4v)KO1K2&z7wEeYxq_katyF-o!1frBuN>4(x
zgzinbe`AlzG0J_;S&^}Dzi!Xh$W~6CsTsn(#~zSZXwHvxxP-o8KUS7$smGgkbK1zw
zml^)n{-Vyu;5$^A^wG$vr8L^yzq1d^DAOT*e{cU$--7>O|2W-Pc@$9<gnO at jbh?Wi
zvvK=Ml*~mqf?NDY`)4|jQrSmu*<Y2_YKKLiYSFpC{U>`-x*##~&-URgPI}wE$R^M4
z?sx2G$_kpD@)!H;KArNeeO_88+<&$IT#9nc{muRmcc7H^*&j(svWQ9V+5e@>QR05z
ze!sP}N&jVU(72}@v=@c@@Ak!(?n>`jd8XZOkH}O`Ff06l{lRpWyw494V?VS%Pn}f$
zk$n#zc at zluKkUz>+hNw|V|&6<BJXuMx&Or8ZOK>a{%K#EQ2}#xaKL_{C4q;CS-nr~
zf9OB|&+LEclmF-Tjs0a~7V?FCpT#3x)%-A~LSGd>Q4$4 at NFd-T#+OCo_|pEb;;H2a
zi{*uz=d0yk7t2eol)fpxo%fiOzAcs)St)&2e19s<L3c7m`S-==q*S8(hhll9mF7Lg
z7p2oYLMy(+B5GRkW{aq6#oH~SO)I|EA{tupO%~Cv6~9eII5?m?tHP6|6+f5K2~W0G
z{Gvt7(Td+9J2?hD4z2hnRDV+(q`9j2YCwVT<Z7-N7ICoVnq?95G}kdH(IGvCXs(A-
zI^l6 at uH!6XzUHd4hy|J}U=a&7*P|A3sOEayA{J?`r&6L>TCwJ8PV1JBK%GmdcRa&1
z*O}=AQVEYsbG4>)!sFIlZ5FXab0t!u<2KHUWY2KTbwfIVV!~6ZxoT26;TfU1j<<-1
zX|5d>air#&YY|6jt_F)(rnz?W4kexN9Im-ON{bbwEZ0g7tDvjVXsu*~XN=}rVR0V|
zk*`z~2+t7^`6 at +$@EobRPO}(~gJ>}x57A;gL36FN7#{`EVmuL|#dwnD`mx2>1JPn!
z0nuXY)m(3-jLltF30=y=K{4T(3|-32K{4T(qPf0F`3lceh$%PWnFcZCAv{%@>syQQ
zbchz?84xYTGd0&1i}5Uo7UQEKT8xj;To+i3kA-M4o((Z=>^)9%EtU)Qw2QZzlqnzC
zVs8y8Q=YQP-Z`49DZ^cMns+Xx^v=V~Xdb2X&dAKIR&y=Q$W3_Xld^Y4!n=T!z4H*>
zI?c7bk9$2SGu at 9TWrn-w1kH6vsuRpz-vC{Pvu7c68NS{{nrpl~u~QDhdtyo^Z{b~>
zlF3tePSRZ8rOFbXB at k1^2+vZ8sS<?uWX-ieu7qXg%Tlt;e0fUd%)O`Ju(jH+NXgRv
z)RZhMbDHMbV5!XM5G|Ei2{Bz6&nnHe&0 at S7qQ%$;(PDgt=DOHo?1yMEZiJXN_BLs*
z`SJ#jY-S)O%W4NxGFRIh(p)E4?VD4wv~NktZ0`wcuD^0+c$VWi6CzheifbTpWmxn^
zG}q+xSQ6e=lGAnfMoG3*KBl=!)Ar^u&_>FXlR5m)B4x_c9Qkq0b(qDSE9^~>GVLyv
zNm6FIw`;D$E$*`aI!Kvzr<m||k}}i13zxnOcL!ggyxo-2I}bDEY)a{!k(shqbGg&G
z3GX>1r}7Zqb4gBl3h#NikX!A~C)r}Zj%17d1)9r~w&%IG at LovDl#{7kPs)_1sobEs
z##-F at g6qAAlxcUV+(^o_yHsARxol~7;k|_9l&A1+B01$Gyq97kVzs}FWQ+afB&Y3#
zR-la?JJfC)8+YZqO2-yx%SI<$NvvA*nVM}ZKJGVF*v8fmot1lZuI`RPVd&5wgNN95
zd|i<vSvi7|-B{n_Z?O=yQ#8k;MaSC4QpzzU$CX^H!Np-0^+*~t6P|dQ<Pim>g;~{Z
z+YwWdIM|~pk(}y>9tUOKRG}kXD)2Zdmu;~ARlZU7%^!x0Wnp-rG*qj~&CMkrJORo}
z)qe)Wp)N~W(HNx7hN%$6nnpDnb~y5x4%tOXxw*3ub$ifYWM;1)N)5q0%E_%5J`^U@
z5v9{v9&rTIVYCDr=|P&+XB5?ma>U~YStF{=;dG3YoB5-~GXK%(o>QtZvr=6=*33F(
ze#B5gwK!50nd<FvbjM=+5eO!vx(Ba29#zauov50XvY%wt;GzN1?08u(+@?h*vkFJH
znVRYqae_uKt>uU(P$1ra`*uhk5tQ^YDk7u!ol86(7ahQQ;6~tUU<C|xZItdDekPeG
z$o?GCZJ^j?2yD-hxSL`cZnPQ&2<#;Y^l}8+1PUgT*iFIFB+?C8JZXdRG7?u&5FlL}
zf~+ozT|l}`BwkIi8!2XBl<Mj=zyd?FmkhG)7RMWCT9)n6^PeD1E;Kn?bv%a9*j&9O
zSfJ;oRCL+JR%CY!dcWO1q}}eyO4{v7dtO$By(nviJ at 3L}5OZv^=T+G4+wEg)XM6DO
z-qx&XS-BoP3)%dCc>}VdCDt0OhzBG7ZhV0^6pS`^h4CV0MKYL33VfGUsBgat`t~cn
z`?@sQFvI5y$HFZ7nquuysC^y&NIQMqwX>;3v_})+<|tkW4RaDyjYz3kvZUrz-_rWi
zYJDf4y114;N$YFHr(f~0SYJ|f!WI;24kkOB at Il%Wee>%ZYGJ~}>V!Z}{y15+wUZT7
zLWDZQfuLYVB#YL at cqAB2R|228Z59c9dlrsJOUB at da=HFsRwM-HNbc=XS%r>JXImVV
z3W?@6Un~?#1gTsVi{VApP$bsr^T(TkpkLtgxxR$IBPb>65Pa!2fj0S at 1@cNX`J*Ax
zkx-c;W~x#eQ_<OkDz!GEu`oc#fLhy_Vvz`QTQ^gpElM0phFgOo*-CM0I4Ej5MorIX
zlXT&XsT&ifZ!#7jDH#h1v__VejIEJ6E-V>qXYLBcsf1(<6>AN)a>m4zF}M{S!V&5w
z<k-{_Cu(bqb7pZ<P9&iwHzecx#L;$q9JtFYEg)!5l?7t$^hsi_m259nA<}z)mhn#Y
z`GQ?d!L}q`81}UxXBwQ9)8oNpOB{P9m4+`ES5C{Yt(=ldCf8c*z6>w3et}?Pdo$va
zQzM%OqG-qPn1NB1(&EkJI7Fx`t4NQ?l*wkKYN{FWh5QNWhGZ5}#w?{gSW3G^f>uA4
z(vB>qJy}e-w)(rwve8t;B2BSqhrphS#G3r*Ye}pOC;X9Ud#fOBYw?4dqRDs!90=pp
zYH)Mh-_`=g;19;Ze2@^gN1G@;(dKUog4^5LIK4|cCS%e8JJU>P#0%eR#98ezd?-5D
zD*TPqclby&ojH8|2r4Da?@0TTzO&lHO>3}AQ3XGZRs>-RBBC)7^kaBo7vYugHk=+p
zQ8W?lq6|XuAfFk6Xm6`jwPJKd=>$M0f&?ObLO3fyrQ<kew*-H=8iSRN52lDD91DqV
zd_J2GHabe_VB(`S5($JmP_VC->KKXmk;FQ#rRk1g%(>Bc=19oQ9iPcQZPCos5itdM
z)#AYLE%1ff at a=812YWOgjK at W&DH2NrMJPyzEEF-QLXq}F3!ggCVw}C;!i+H1hQ`u)
zQl2fLK^p at U%9KPfxJJ;qjeU|qR4mjP4=1_Tc#vZ+QX!NDjd|=UI at IIAs2^vYco64p
zbWt$b*p9XYlO4p#*0xX>;|dHbc}8u*Nzgo>b|{u(2WQ2QIy;&t$!N+#Cg6Hw9!cnJ
z>>KJ4#Jbz)oE}besxga*9JHNsa3M(zUujOpY9M#2k=&_<vOE)$jT+3IYBYDMQQMgs
z&t_Ew#*Z4>rj@@5JHU at C4EDWW29rfoFpR#XVSzI(?X^~nE$oM`HW3MM7;DCn*j(uq
zNC}CySf at ywg+UocMj?bzWF=3IXf&U#!BkX>3~^A95aE)cgIf!9M9`rk&{0SS4=5s<
za53Z{#32;1wr;v|ry at u&RS|*fU5EmXHBqdI<t8Y)+9q=V1){8It)zHsC97I1(eyyL
zl>>}hM4 at Q)6CmQqq at arfmb*xS{-b~t;b=s(bhqJD!C^=ePD|*pMj4`uNQj6?v%eKt
zOA46`b%d_wCPB?2t1*MYwI>oM<^+l$1^WW~hC*nGST~vClUak7VyA>CKnw?HV>cC%
ziXlZQDZMM{58=!E=@_M(N|}zK<c|kfE2Gjv#v^p>;e+}3hJQL1N=G>zr&H2^I0cL|
z4NiuQk*H!Er&3|2m<ebH>(P{?>_JI5oLPiAj#Io0p(G(fXWgzYUvnhZ=#OB^6UTvy
z(;t7=-?yOQ#5pw$K3}4}(O2)I38e>ru_Gp8l1!_Hh1E1&#uqyArxLW$n-sLYZL*qU
z)9Q-su at vAB%+nNnqTxN-h8GeS<Bz+rz~Sv3yw=u^*mmH at z%{@vz at 5Ouz#G7m!1KT>
z!0&<kY$y->DeyV)J<x#+4HT9O&<9XTfpTC1PzlTct^oc7*n!!=0$>q9A4+Kg)&R7q
zISM!zcn|ml*a&O^t^;ld?gO3yUIX3&_5mLQUjaQpHWnyOU>I;1Fcz2yOa+bws(}T-
ziNGm<4+sOi;z8Rw5kC*u09*!~f;_i_Zvbuw?gbtI9s`~Q at It5fGw=%HuLFC5cY(hH
z{{+4UG~}BH90?QyBY{d_3Qz-_3tR!*2;2oc1Uv`40*t_l at K50PfKP!QAP+05QeZqV
z16Tko2hITQK>CBg<G{<n9^frtA8-Kp0T>Ls;lMaxIxrtt2Kaz55Cgh_4Z!8VRlrTa
zoxpv-BfwL at 3&3l at Z-KXg_koXr_fY3wU`%|8_&2~ai2ndKz=c2wa3nAhs06Bj*+2vE
zCQuG61y%sB0dD|4AOu8!cHkUf1aKK}A#f?M6}T3-8MqtR2|Nls4ZH}v3hV*?0K5&n
z4}1cA349MYu^$U at d=vvCfU&?tpc0q?90$|_3xTD;yTGY{4+sKlfNy{V&<$JwTntnL
zTYzhTzXGQLJAgBQyMX(Ehk<W_CxB;xPl2K6$5+66fW5$9fc?M$z=5={!5TORC<KNB
zV*n2 at 9jFHCfhEA{Kmce3I)L+mOMq>_4Zt11PT=RjF5rG(74Qo1Yv4^_FYpeq8<>Va
zy!#fs57-ZU0(=g94fFsuq&on7???Oway_^Z_$}hAz%Jl0U^Flhm<r4SYJfUm5wHwc
z2{Zy>pbcmT)&ds*mjYJ-lW`uq8GHwDFR&AM7<e3b26zG34ZIHg0eA=42Ydkh6ZjlB
z2z(Fd_^Z|&U<fc2C;>(RV}Xgl6ksM$4J-f_0n35aKoDpJ+JSR{jldPa)xb at _9l*W7
zPl2hxET9JP0U;m?bO7f87XzbEpGUxt1J3|218)NF0Q-T at fgb<|+FuMD4jctk0X0A!
zuoyT4HqAf`=mgFOE&*0h8W0BJKsRs!unE`-TnF3=+zspm9sza(zahr4G97tT;JEp>
zcSI^;ZOMvwOGO~q!GC%hOirrwR>WhmWJP--PQPJPf#0mDz>gRCs-{kg2Lmnsr2Ijn
z3fOr(>HlF|KHCGq3jFX5k_5Y(x<ge#{7;o$(HKr9{^xR+YiDZ<Wr3+F0q!v+u`Z!i
z71kJ at 7SY5JOv*Z1`OkWN=3n at td-*O|Mdi#2)q$8`Bm;q9$R}?h!5eZo2LA84%UeWn
z>vd-UGFRWsHkw2PH%tOF(Zf;<Gby!xrUYJ-Q27`L(!+-tzv%*<bdAx%4$JLOxEV>b
zj3E=bLLpmot<vgGwjloq`;&lqRk8&wh0VX;Y?v(3r9E?_Uq({D8)i+TUrO5Fue~AE
z-|P3bw+r=m{k`>BLjC=FZ#~YFIJ7c18>V&D{pua5zuUL^*aVJMbGq1DpDW7x)elZh
zFMHeP3H9BB-g>+ORA$x4xJ@{P(XT#V)b*<`Nc|q1H8-0mOnpD0w|=NlzX#P at UnKhb
z`+b`z7V3ASdfVfDrfRE3#%=f-LS4Ulw`k~BkH-uBY_`-_AbKa-1pX4RpUuW!>Fb+d
z!<%*eZ8m|wY3paR3H&WuKbx(;odr7^{(`>0%_hqGsHZ_=h);Vm6L3Yq(UKlNv}~b`
zULVwiJGFcvJKBx_$X+d5 at UVxs*$Df~zaDzB7v^$DS_^T4srP2+SDSizl4sqL5U4(C
zKdSnyV}0N8b`SJa?gJV5&=N^QWz_dSAo6yo`qOes!@)>@W|z73*WP#8sPAz^%Pvjy
z9k&i{NI{?DWw@!&tmh=?HGHKq^LQDB^IBOy<G%{_h3E(Rt8?1a>2EY5q*uR>DO0hm
zfPI+~EL_d`^gW*}W4*=DjGlc6{q={?KYR%NUg*pEW-q>gzCfhUV_2#1X5)V7>p;uO
z{C at g}p0JhoH5c=tFVJ0Ladq#+C9Lmz9-}2G^(TEefVQ9{5raP8GHy*Zp36#oX8vnA
zA7z#1&76-bHU3q~Rc5*Bwt~85(y%Y=?>f@|t&GeEUWd4;foC>}WP2#&X~J|t{gR?D
z+3Ld_AsS531B95mO%h1P;t8L>y$g5OTH7MQWH8|I_HRMIn;6CurMSP_7sQSDZrm}%
zeOF(gy|uL)E*6RJy!0}~v$G{N3u}F~i{|meHhj0mS6gQ)>*g)NEJWU+IdT5{rL`yf
zPOh2LP)kqc=pIfgC;A0Pi-LbnQuyYbx~OJh{amDBR at 3BbO0;uTA@}~#$^L&PvbuT!
z{f49YyN!K*64FdIf8tU8fTVmBkde|iclvS4jNJe2?_QorlgDt>*PaNXp=7FdUhf~s
z^aXI!RQ_ru+Gzbn%Zw`d;Fs$0KqBUA!H-~Kj%ev9zD4HqH6{{fhV--{Bby+VC-0*P
zPoldu>2Cz%fdq4lieVNSjJF9-G?ol{YUb2WqNj}>JXiCy_;Fv at 6X=e at Su!4waf<ng
zonC?uY4i-39L!i-Bq=;xRS$m66LA`fNQ-gJJi!)o at U;Zst0d_m$By(+aq^-fkO5c6
z-x_X06>vwF0uPrab4I at i`n*po2E6dl9NyR1=<^2xabK$+ZRP1WhGd8`qNj71VmHQv
z9ZJH_#|Bj#{iLFlfr`hY&Gc**<;V<RW<J<WsVEohp13-l{2w#TjBrXzU0>9^Trs^|
zYu(7!x{Zc_*>lQY&EFN5S&b1_=X<5DMC2=ciwdVh-qbu_u_|BrVU^x%I~o$rWt6{K
z4=6rhTGKS1>aP6hwk>UQ0o<ia`Kxt<;?Ky)vSqfP=0o(YEmgi+Uns_(Fz}}8uj~}B
zKq`H^OUbEqh`H{lmhP-38&!W(Et(Obyp_LNuPEMY8mjV at ziR(krvDt%PJNF|@m7mJ
zW<ja)mH%4ks84WrOm1qOV=}$wZrxNpl&%92tACm4r?^cSnw*inxFEw{-L6+$s5&OY
zUuAo7hQC^ODaKuwUR!4UH=F+E^g)O+)7<1tdnGHr+Voe|RO>j!^UUlNDL*COk>Rh_
zdy2i(xt2}sf2G=q2xen^43JLETh;GltNx}m+LXWI$DyN_#^@NLP5r*`W0Rz;?4;D!
z|3xHF6_vkQXYTqB{wlvW5TUWB{MGzg{eF4A*|Fx~l&ZgK*Pq~PEnlr$_g2Uf#z{(r
zsy&L|MT*s5RGX$=$#tfvNck!L00~xqwGOT`{WJGB*;==MLZG}<`_($D;eXTr3;0r=
zra5AAQ~rCD!emvxVtOPssG%peF2n9HI<aHhBndNYxhX$W<i`M+I!e3S^j|YZSxU~d
zrN>{HI<hQSF71z32bL83*p5Gh|LJsM#&%*x<{6 at xX8LFL-;Ym~{(r|UA?v366<3 at 7
zRvU_M3rJ07zRFM8HypzMS<_!#Kb3u^KRpu6)RFDmrvJ&Q6T8eI(>7-MXV$ZFjkLe(
z5dE+6A<i&i$Gxr6e=$uiu+cD>4yfZsU4I<Vsj-h}Y8yw-TCrW9k+~{YrpntJ{rNxJ
NDJ{;=aL5qF{{n(ac~<}c
diff --git a/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test b/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
deleted file mode 100644
index b4fd875bd704e..0000000000000
--- a/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.test
+++ /dev/null
@@ -1,24 +0,0 @@
-; Test pgo accuracy metrics
-; RUN: llvm-profgen --perfscript=%S/Inputs/pgo-accuracy-metrics.perfscript --binary=%S/Inputs/pgo-accuracy-metrics.perfbin --output=%t --pgo-accuracy-metrics 2>&1 | FileCheck %s --check-prefix=CHECK-STATS
-
-; CHECK-STATS: UnknownBranches: 0
-; CHECK-STATS: MatchedBranches: 5
-; CHECK-STATS: DismatchedBranches: 4
-
-; Original code:
-; clang++ test.cpp -g -fbasic-block-sections=labels -mllvm -pgo-analysis-map=br-prob
-
-#include <iostream>
-#include <random>
-int main() {
- int a = 0;
- int b = 0;
- for (int i = 0; i < 100000000; ++i) {
- if (rand() % 1) {
- ++a;
- } else {
- ++b;
- }
- }
- return 0;
-}
diff --git a/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.yaml b/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.yaml
new file mode 100644
index 0000000000000..e72ead1936ba7
--- /dev/null
+++ b/llvm/test/tools/llvm-profgen/pgo-accuracy-metrics.yaml
@@ -0,0 +1,849 @@
+## Test pgo accuracy metrics
+
+# RUN: yaml2obj %s -o pgo-accuracy-metrics.perfbin
+# RUN: llvm-profgen --perfscript=%S/Inputs/pgo-accuracy-metrics.perfscript --binary=pgo-accuracy-metrics.perfbin --output=%t1 --pgo-accuracy-metrics 2>&1 | FileCheck %s --check-prefix=CHECK-STATS
+
+# CHECK-STATS: UnknownBranches: 0
+# CHECK-STATS: MatchedBranches: 5
+# CHECK-STATS: DismatchedBranches: 4
+
+## Original code:
+## clang++ test.cpp -g -fbasic-block-sections=labels -mllvm -pgo-analysis-map=br-prob
+
+## #include <iostream>
+## #include <random>
+## int main() {
+## int a = 0;
+## int b = 0;
+## for (int i = 0; i < 100000000; ++i) {
+## if (rand() % 1) {
+## ++a;
+## } else {
+## ++b;
+## }
+## }
+## return 0;
+## }
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+ Entry: 0x10CB
+ProgramHeaders:
+ - Type: PT_PHDR
+ Flags: [ PF_R ]
+ VAddr: 0x40
+ Align: 0x8
+ Offset: 0x40
+ - Type: PT_INTERP
+ Flags: [ PF_R ]
+ FirstSec: .interp
+ LastSec: .interp
+ VAddr: 0x2A8
+ Offset: 0x2A8
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .interp
+ LastSec: .rela.plt
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .init
+ LastSec: .fini
+ VAddr: 0x1000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x2000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .init_array
+ LastSec: .bss
+ VAddr: 0x3DA8
+ Align: 0x1000
+ Offset: 0x2DA8
+ - Type: PT_DYNAMIC
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .dynamic
+ LastSec: .dynamic
+ VAddr: 0x3DC8
+ Align: 0x8
+ Offset: 0x2DC8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.ABI-tag
+ LastSec: .note.ABI-tag
+ VAddr: 0x2C4
+ Align: 0x4
+ Offset: 0x2C4
+ - Type: PT_GNU_EH_FRAME
+ Flags: [ PF_R ]
+ FirstSec: .eh_frame_hdr
+ LastSec: .eh_frame_hdr
+ VAddr: 0x2004
+ Align: 0x4
+ Offset: 0x2004
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .init_array
+ LastSec: .got
+ VAddr: 0x3DA8
+ Offset: 0x2DA8
+Sections:
+ - Name: .interp
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ Address: 0x2A8
+ AddressAlign: 0x1
+ Content: 2F6C696236342F6C642D6C696E75782D7838362D36342E736F2E3200
+ - Name: .note.ABI-tag
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x2C4
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: '00000000020000000600000020000000'
+ Type: NT_VERSION
+ - Name: .gnu.hash
+ Type: SHT_GNU_HASH
+ Flags: [ SHF_ALLOC ]
+ Address: 0x2E8
+ Link: .dynsym
+ AddressAlign: 0x8
+ Header:
+ SymNdx: 0x1
+ Shift2: 0x0
+ BloomFilter: [ 0x0 ]
+ HashBuckets: [ 0x0 ]
+ HashValues: [ ]
+ - Name: .dynsym
+ Type: SHT_DYNSYM
+ Flags: [ SHF_ALLOC ]
+ Address: 0x308
+ Link: .dynstr
+ AddressAlign: 0x8
+ - Name: .dynstr
+ Type: SHT_STRTAB
+ Flags: [ SHF_ALLOC ]
+ Address: 0x3F8
+ AddressAlign: 0x1
+ - Name: .gnu.version
+ Type: SHT_GNU_versym
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4EA
+ Link: .dynsym
+ AddressAlign: 0x2
+ Entries: [ 0, 0, 2, 3, 3, 2, 0, 0, 3, 3 ]
+ - Name: .gnu.version_r
+ Type: SHT_GNU_verneed
+ Flags: [ SHF_ALLOC ]
+ Address: 0x500
+ Link: .dynstr
+ AddressAlign: 0x8
+ Dependencies:
+ - Version: 1
+ File: libc.so.6
+ Entries:
+ - Name: GLIBC_2.2.5
+ Hash: 157882997
+ Flags: 0
+ Other: 3
+ - Version: 1
+ File: 'libstdc++.so.6'
+ Entries:
+ - Name: GLIBCXX_3.4
+ Hash: 143796596
+ Flags: 0
+ Other: 2
+ - Name: .rela.dyn
+ Type: SHT_RELA
+ Flags: [ SHF_ALLOC ]
+ Address: 0x540
+ Link: .dynsym
+ AddressAlign: 0x8
+ Relocations:
+ - Offset: 0x3DA8
+ Type: R_X86_64_RELATIVE
+ Addend: 4528
+ - Offset: 0x3DB0
+ Type: R_X86_64_RELATIVE
+ Addend: 4288
+ - Offset: 0x3DB8
+ Type: R_X86_64_RELATIVE
+ Addend: 4464
+ - Offset: 0x3DC0
+ Type: R_X86_64_RELATIVE
+ Addend: 15808
+ - Offset: 0x3FD8
+ Symbol: __gmon_start__
+ Type: R_X86_64_GLOB_DAT
+ - Offset: 0x3FE0
+ Symbol: _ZNSt8ios_base4InitD1Ev
+ Type: R_X86_64_GLOB_DAT
+ - Offset: 0x3FE8
+ Symbol: _ITM_deregisterTMCloneTable
+ Type: R_X86_64_GLOB_DAT
+ - Offset: 0x3FF0
+ Symbol: _ITM_registerTMCloneTable
+ Type: R_X86_64_GLOB_DAT
+ - Offset: 0x3FF8
+ Symbol: __cxa_finalize
+ Type: R_X86_64_GLOB_DAT
+ - Name: .rela.plt
+ Type: SHT_RELA
+ Flags: [ SHF_ALLOC, SHF_INFO_LINK ]
+ Address: 0x618
+ Link: .dynsym
+ AddressAlign: 0x8
+ Info: .got.plt
+ Relocations:
+ - Offset: 0x4018
+ Symbol: __gmon_start__
+ Type: R_X86_64_JUMP_SLOT
+ - Offset: 0x4020
+ Symbol: _ZNSt8ios_base4InitC1Ev
+ Type: R_X86_64_JUMP_SLOT
+ - Offset: 0x4028
+ Symbol: __libc_start_main
+ Type: R_X86_64_JUMP_SLOT
+ - Offset: 0x4030
+ Symbol: __cxa_atexit
+ Type: R_X86_64_JUMP_SLOT
+ - Offset: 0x4038
+ Symbol: __cxa_finalize
+ Type: R_X86_64_JUMP_SLOT
+ - Offset: 0x4040
+ Symbol: rand
+ Type: R_X86_64_JUMP_SLOT
+ - Name: .init
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x1000
+ AddressAlign: 0x4
+ Offset: 0x1000
+ Content: 4883EC08488B05CD2F00004885C07405E81B0000004883C408C3
+ - Name: .plt
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x1020
+ AddressAlign: 0x10
+ EntSize: 0x10
+ Content: FF35E22F0000FF25E42F00000F1F4000FF25E22F00006800000000E9E0FFFFFFFF25DA2F00006801000000E9D0FFFFFFFF25D22F00006802000000E9C0FFFFFFFF25CA2F00006803000000E9B0FFFFFFFF25C22F00006804000000E9A0FFFFFFFF25BA2F00006805000000E990FFFFFF
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x1090
+ AddressAlign: 0x10
+ Content: 554889E5488D3DB22F0000E8A0FFFFFF488B3D392F0000488D359F2F0000488D150B2D0000E8A6FFFFFF5DC30F1F4000554889E5E8C7FFFFFF5DC331ED4989D15E4889E24883E4F050544C8D05BF010000488D0D48010000488D3DD1000000E85CFFFFFFF4662E0F1F84000000000090488D3D492F0000488D05422F00004839F87415488B05CE2E00004885C07409FFE00F1F8000000000C30F1F8000000000488D3D192F0000488D35122F00004829FE4889F048C1EE3F48C1F8034801C648D1FE7414488B05952E00004885C07408FFE0660F1F440000C30F1F8000000000803DD52E000000752F5548833D762E0000004889E5740C488D3D322C0000E8DDFEFFFFE868FFFFFFC605AD2E0000015DC30F1F8000000000C30F1F8000000000E97BFFFFFF662E0F1F84000000000090554889E54883EC10C745FC00000000C745F800000000C745F400000000C745F000000000817DF000E1F5057D33E88EFEFFFFB90100000099F7F983FA00740B8B45F883C0018945F8EB098B45F483C0018945F4EB008B45F083C0018945F0EBC431C04883C4105DC30F1F84000000000041574189FF41564989F641554989D541544C8D25602B000055488D2D682B0000534C29E531DB48C1FD034883EC08E89DFDFFFF4885ED741E0F1F8400000000004C89EA4C89F64489FF41FF14DC4883C3014839EB75EA4883C4085B5D415C415D415E415FC390662E0F1F840000000000F3C3
+ - Name: .fini
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x12A4
+ AddressAlign: 0x4
+ Content: 4883EC084883C408C3
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE ]
+ Address: 0x2000
+ AddressAlign: 0x4
+ EntSize: 0x4
+ Offset: 0x2000
+ Content: '01000200'
+ - Name: .eh_frame_hdr
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ Address: 0x2004
+ AddressAlign: 0x4
+ Content: 011B033B40000000070000001CF0FFFF8C0000008CF0FFFFB4000000BCF0FFFFF4000000C7F0FFFF5C000000BCF1FFFFD40000002CF2FFFF140100009CF2FFFF5C010000
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ Address: 0x2048
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C070890010710140000001C00000063F0FFFF2A00000000000000000000001400000000000000017A5200017810011B0C070890010000240000001C00000088EFFFFF70000000000E10460E184A0F0B770880003F1A3B2A332422000000001C00000044000000D0EFFFFF2C00000000410E108602430D06670C07080000001C00000064000000E0F0FFFF6800000000410E108602430D0602630C070800001C00000084000000C0EFFFFF0B00000000410E108602430D06460C070800000044000000A400000010F1FFFF6500000000420E108F02450E188E03450E208D04450E288C05480E308606480E3883074D0E406C0E38410E30410E28420E20420E18420E10420E080010000000EC00000038F1FFFF020000000000000000000000
+ - Name: .init_array
+ Type: SHT_INIT_ARRAY
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x3DA8
+ AddressAlign: 0x8
+ EntSize: 0x8
+ Offset: 0x2DA8
+ Content: B011000000000000C010000000000000
+ - Name: .fini_array
+ Type: SHT_FINI_ARRAY
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x3DB8
+ AddressAlign: 0x8
+ EntSize: 0x8
+ Content: '7011000000000000'
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x3DC0
+ AddressAlign: 0x8
+ Content: C03D000000000000
+ - Name: .dynamic
+ Type: SHT_DYNAMIC
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x3DC8
+ Link: .dynstr
+ AddressAlign: 0x8
+ Entries:
+ - Tag: DT_NEEDED
+ Value: 0xA9
+ - Tag: DT_NEEDED
+ Value: 0xB8
+ - Tag: DT_NEEDED
+ Value: 0xC2
+ - Tag: DT_NEEDED
+ Value: 0xD0
+ - Tag: DT_INIT
+ Value: 0x1000
+ - Tag: DT_FINI
+ Value: 0x12A4
+ - Tag: DT_INIT_ARRAY
+ Value: 0x3DA8
+ - Tag: DT_INIT_ARRAYSZ
+ Value: 0x10
+ - Tag: DT_FINI_ARRAY
+ Value: 0x3DB8
+ - Tag: DT_FINI_ARRAYSZ
+ Value: 0x8
+ - Tag: DT_GNU_HASH
+ Value: 0x2E8
+ - Tag: DT_STRTAB
+ Value: 0x3F8
+ - Tag: DT_SYMTAB
+ Value: 0x308
+ - Tag: DT_STRSZ
+ Value: 0xF2
+ - Tag: DT_SYMENT
+ Value: 0x18
+ - Tag: DT_DEBUG
+ Value: 0x0
+ - Tag: DT_PLTGOT
+ Value: 0x4000
+ - Tag: DT_PLTRELSZ
+ Value: 0x90
+ - Tag: DT_PLTREL
+ Value: 0x7
+ - Tag: DT_JMPREL
+ Value: 0x618
+ - Tag: DT_RELA
+ Value: 0x540
+ - Tag: DT_RELASZ
+ Value: 0xD8
+ - Tag: DT_RELAENT
+ Value: 0x18
+ - Tag: DT_FLAGS_1
+ Value: 0x8000000
+ - Tag: DT_VERNEED
+ Value: 0x500
+ - Tag: DT_VERNEEDNUM
+ Value: 0x2
+ - Tag: DT_VERSYM
+ Value: 0x4EA
+ - Tag: DT_RELACOUNT
+ Value: 0x4
+ - Tag: DT_NULL
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ - Name: .got
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x3FD8
+ AddressAlign: 0x8
+ EntSize: 0x8
+ Content: '00000000000000000000000000000000000000000000000000000000000000000000000000000000'
+ - Name: .got.plt
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x4000
+ AddressAlign: 0x8
+ EntSize: 0x8
+ Content: C83D00000000000000000000000000000000000000000000361000000000000046100000000000005610000000000000661000000000000076100000000000008610000000000000
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x4048
+ AddressAlign: 0x1
+ Content: '00000000'
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x404C
+ AddressAlign: 0x1
+ Size: 0x4
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 4743433A2028474E552920342E382E3520323031353036323320285265642048617420342E382E352D333929004743433A2028474E55292031302E322E312032303231303133302028526564204861742031302E322E312D31312900636C616E672076657273696F6E2031392E302E306769742028676974406769742E636F72702E6B75616973686F752E636F6D3A637070746F6F6C732F6275696C642F6C6C766D2E67697420343334633730386164383036666238646230636239623164353636356165306263366563393136642900
+ - Name: .llvm_bb_addr_map
+ Type: SHT_LLVM_BB_ADDR_MAP
+ Flags: [ SHF_LINK_ORDER ]
+ Link: .text
+ AddressAlign: 0x1
+ Entries:
+ - Version: 2
+ Feature: 0x4
+ BBRanges:
+ - BaseAddress: 0x1090
+ BBEntries:
+ - ID: 0
+ AddressOffset: 0x0
+ Size: 0x2C
+ Metadata: 0x1
+ - Version: 2
+ Feature: 0x4
+ BBRanges:
+ - BaseAddress: 0x10C0
+ BBEntries:
+ - ID: 0
+ AddressOffset: 0x0
+ Size: 0xB
+ Metadata: 0x1
+ - Version: 2
+ Feature: 0x4
+ BBRanges:
+ - BaseAddress: 0x11C0
+ BBEntries:
+ - ID: 0
+ AddressOffset: 0x0
+ Size: 0x24
+ Metadata: 0x8
+ - ID: 1
+ AddressOffset: 0x0
+ Size: 0x9
+ Metadata: 0x8
+ - ID: 2
+ AddressOffset: 0x0
+ Size: 0x12
+ Metadata: 0x8
+ - ID: 3
+ AddressOffset: 0x0
+ Size: 0xB
+ Metadata: 0x0
+ - ID: 4
+ AddressOffset: 0x0
+ Size: 0x9
+ Metadata: 0x8
+ - ID: 5
+ AddressOffset: 0x0
+ Size: 0x2
+ Metadata: 0x8
+ - ID: 6
+ AddressOffset: 0x0
+ Size: 0xB
+ Metadata: 0x0
+ - ID: 7
+ AddressOffset: 0x0
+ Size: 0x8
+ Metadata: 0x1
+ PGOAnalyses:
+ - PGOBBEntries:
+ - Successors: []
+ - PGOBBEntries:
+ - Successors: []
+ - PGOBBEntries:
+ - Successors:
+ - ID: 1
+ BrProb: 0x80000000
+ - Successors:
+ - ID: 7
+ BrProb: 0x40000000
+ - ID: 2
+ BrProb: 0x40000000
+ - Successors:
+ - ID: 4
+ BrProb: 0x40000000
+ - ID: 3
+ BrProb: 0x40000000
+ - Successors:
+ - ID: 5
+ BrProb: 0x80000000
+ - Successors:
+ - ID: 5
+ BrProb: 0x80000000
+ - Successors:
+ - ID: 6
+ BrProb: 0x80000000
+ - Successors:
+ - ID: 1
+ BrProb: 0x80000000
+ - Successors: []
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 6724000005000108000000000100210001080000000000000002000000000000000000080000000C000000020303043B000000014A02A100070405050600060340E80A000006038D440B000006038F4C0B00000603905B0B0000060391790B0000060392A50B0000060393B90B0000060394DC0B0000060395F00B0000060396050C00000603971A0C0000060398290C0000060399320C000006039A700C000006039B8E0C000006039CA70C000006039DCF0C000006039EE30C00000603A0F20C00000603A20C0D00000603A3210D00000603A4350D00000603A6750D00000603A98E0D00000603ACAC0D00000603AEC50D00000603B0D90D00000603B2ED0D00000603B3100E00000603B4230E00000603B5360E00000603B6490E00000603B75C0E00000603B86F0E00000603B99E0E00000603BAAD0E00000603BBC50E00000603BCDD0E00000603BDF50E00000603BE1D0F00000603BF310F00000603C1530F00000603C36B0F00000603C4840F00000603C5A10F00000603C6BA0F00000603C7D20F00000603C8E10F00000603C9FA0F00000603CA131000000603CB2C1000000603CC451000000603CD551000000603CE651000000603CF781000000603D08C1000000603D19F1000000603D2B310000007030B015C11000007030C017411000007030D019111000007031B01530F000007031E01750D000007032101AC0D000007032401D90D0000070328015C110000070329017411000007032A01911100000260056106074A370200000006073A2602000008626307460926020000000A65060A2FB8110000060A30C4110000060A31D0110000060A32D8110000060A34E0110000060A35E8110000060A36F0110000060A37F8110000060A3900120000060A3A08120000060A3B10120000060A3C18120000060A3E20120000060A3F28120000060A4130120000060A423C120000060A4348120000060A4450120000060A4658120000060A4760120000060A4868120000060A4970120000060A4B78120000060A4C80120000060A4D88120000060A4E90120000060A5098120000060A51A0120000060B35A8120000060B36AA120000060B37BD120000060E40CA120000060E41D8120000060E42E6120000060E43F4120000060E4402130000060E4510130000060E461E130000060E472C130000060E483A130000060E4948130000060E4A56130000060E4B64130000060E4C72130000060E57801300000610348E13000006117F9D130000061180A6130000061182C6130000061184CB130000061186DF130000061189F413000006118C0314000006118D1114000006118E1F14000006118F2D14000006119074140000061191881400000611929C140000061193A7140000061194B2140000061195C1140000061196D0140000061197E4140000061199F314000006119A0715000006119B2015000006119D391500000611A0531500000611A35E1500000611A4671500000611A57B1500000611A6861500000611A7A31500000611A8BB1500000611A9D31500000611ABE21500000611ACFB1500000611F00F1600000611F22F1600000611F43A1600000611F5241100000611F6491600000611F85D1600000611F99B1600000611FA6B1600000611FB831600000611FCAE160000061262C1160000061263C9160000061265DA160000061266EA160000061267F8160000061268071700000612691617000006126A2417000006126B3317000006126C5617000006126D6F17000006126E8317000006126F98170000061270AC170000061271C0170000061272E3170000061273FC170000061274111800000612752A18000006127648180000061277571800000612787A1800000612798918000006127E9218000006127F9D180000061280AD180000061281C1180000061282D0180000061283DF180000061284ED180000061285001900000612860B1900000612871B1900000612882B1900000612894919000006128A5E19000006128B7319000006128D7B19000006128F891900000612909D190000061291B6190000061292CA1900000612B9E31900000612BAFD1900000612BB161A00000612BC2A1A00000612BD481A0000061652611A00000616537B1A0000061654440B0000061656831A0000061657911A00000616599F1A000006165BAD1A000006165CBB1A000006165DCE1A000006165EDC1A000006165FEA1A0000061660F81A0000061661071B0000061662161B0000061663251B0000061664341B0000061665431B0000061666571B0000061667661B0000061668751B0000061669841B0000061853931B0000061866A21B0000061879B11B000006188CC01B00000618A1D41B00000618B4E31B00000618C7F21B00000618DA011C00000618ED101C0000071800011F1C0000071813012E1C000007182801421C000007183B015B1C000007184E016F1C0000071861017E1C0000071874018D1C000007188001A61C00000718A501BA1C00000718B801C91C00000718CB01D81C00000718DE01E71C00000718F101F61C000007184D02051D000007186802141D000007182904231D000007182A042C1D000007182D04351D000007182E04441D000007182F04531D000007183104621D000007183204711D000007183304801D0000071835048F1D0000071836049E1D000007183704AD1D000007183904BC1D000007183A04CB1D000007183B04DA1D000007183D04E91D000007183E04FD1D000007183F04111E000007184104251E000007184204341E000007184304431E000007184504521E000007184604611E000007184704701E0000071849047F1E000007184A048E1E000007184B049D1E000007184D04AC1E000007184E04BB1E000007184F04CA1E000007185104D91E000007185204EE1E000007185304031F000007185504181F000007185604321F0000071857044C1F000007185904661F000007185A047B1F000007185B04901F000007185D04A51F000007185E04BA1F000007185F04CF1F000007186104E41F000007186204F81F0000071863040C200000071865042020000007186604302000000718670440200000071869045020000007186A045F20000007186B046E20000007186E047D20000007186F048D200000071870049D20000007187204AD20000007187304BD20000007187404CD20000007187704DD20000007187804EC20000007187904FB20000007187B040A21000007187C041921000007187D042821000007187F043721000007188004462100000718810455210000071883046421000007188404742100000718850484210000071887049421000007188804A421000007188904B421000007188B04C421000007188C04D321000007188D04E221000007188F04F12100000718900401220000071891041122000007189304212200000718940436220000071895044B22000007189704602200000718980475220000071899048A22000007189B049F22000007189C04B422000007189D04C922000007189F04DE2200000718A004F82200000718A104122300000718A3042C2300000718A4043C2300000718A5044C2300000718A7045C2300000718A8046C2300000718A9047C2300000718AB048C2300000718AC04A12300000718AD04B62300000718AF04CB2300000718B004E02300000718B104F52300000718B3040A2400000718B4041A2400000718B5042A2400000718B7043A2400000718B8044A2400000718B9045A240000000B012C00000001568D010C026800000001568E010003280B00000D02917890010004280B00000D02917491010005280B00000E03430000000D02917092010006280B000000000F040B00000001568F0110F00A000011026A10F80A000010025E11050802521208280B0000025400120A0F0B0000025D041305040255120B2C0B0000025800120D300B0000025C00000014090504140C0704153C0B000016400B00000400140E0601170F0807102C0B000012040D1813026101440B000009280B000000181402E902440B0000096A0B000000196F0B000010770B00001605401A151817020603920B0000099B0B000009280B000009A00B00000019970B0000141805041B920B00001B6A0B0000181902F702440B000009970B0000096A0B000000181A020D03280B000009CD0B000009A00B0000001BD20B000019D70B00001C970B0000181B024B02280B0000096A0B000009280B000000181C025202280B000009A00B000009CD0B00001D00181D027B02280B000009A00B000009CD0B00001D00181E02EA02440B0000096A0B0000001E1F02F002440B000018200278014B0C000009570C0000094B0C000009660C00000010530C0000220612142107081B5C0C000019610C00001C3C0B00001B6B0C000019E80A00001823026D014B0C0000099B0B000009570C0000094B0C000009660C0000001824026901280B0000099D0C00000019A20C00001CE80A000018250298014B0C0000099B0B000009C50C0000094B0C000009660C0000001BCA0C0000195C0C0000182602F802440B000009970B0000096A0B000000182702FE02440B000009970B0000001828025C02280B0000099B0B0000094B0C000009CD0B00001D001829028502280B000009CD0B000009CD0B00001D00182A021503440B000009440B0000096A0B000000182B026402280B000009A00B000009CD0B0000094E0D00000019530D00001F053018202C2C0B000000202D2C0B000004202E740D000008202F740D0000100021183102B102280B000009A00B000009CD0B0000094E0D0000001832027102280B0000099B0B0000094B0C000009CD0B0000094E0D000000183302BD02280B000009CD0B000009CD0B0000094E0D0000001834026C02280B000009CD0B0000094E0D000000183502B902280B000009CD0B0000094E0D00000018360272014B0C000009060E000009970B000009660C0000001B0B0E0000193C0B00002237029B920B0000099B0B000009CD0B000000223802A3280B000009D20B000009D20B000000223902C0280B000009D20B000009D20B000000223A0293920B0000099B0B000009CD0B000000223B02FC4B0C000009D20B000009D20B000000183C0257034B0C0000099B0B0000094B0C000009CD0B0000098D0E0000001B920E000019970E00001C9C0E00001A3D183E021F014B0C000009D20B000000223F029E920B0000099B0B000009CD0B0000094B0C000000224002A6280B000009D20B000009D20B0000094B0C00000022410296920B0000099B0B000009CD0B0000094B0C0000001842029E014B0C000009060E000009130F0000094B0C000009660C0000001B180F000019D20B000018430200014B0C000009D20B000009D20B000000184402C201450F000009CD0B000009490F000000144504081B4E0F000019920B0000184602C901670F000009CD0B000009490F000000144704041848021A01920B0000099B0B000009CD0B000009490F000000184902D4019D0F000009CD0B000009490F000009280B000000144A0508184B02D901530C000009CD0B000009490F000009280B000000224C02C44B0C0000099B0B000009CD0B0000094B0C000000184D026501280B000009440B000000184E024501280B000009D20B000009D20B0000094B0C000000184F024901920B0000099B0B000009CD0B0000094B0C0000001850024E01920B000009920B000009D20B0000094B0C0000001851025201920B000009920B000009970B0000094B0C0000001852025902280B000009CD0B00001D001853028202280B000009CD0B00001D00225402E3920B000009D20B000009970B0000001855020A01920B000009D20B000009D20B000000225602ED920B000009D20B000009970B0000001857021501920B000009D20B000009D20B0000001858024001920B000009D20B000009970B0000094B0C00000002590603FB5C110000070304017411000007030501911100000611C80F1600000611CE2F1600000611D23A1600000611D8491600000611E35D1600000611E46B1600000611E5831600000611E79B1600000611E8AE16000023C4A611D50F160000098D110000098D110000000612AFE31900000612B0FD1900000612B1161A00000612B22A1A00000612B3481A000000185A02CB017011000009CD0B000009490F000000145B0410185C02E3018D11000009CD0B000009490F000009280B000000145D0508185E02EA01AA11000009CD0B000009490F000009280B000000145F0708026424083A420200000010C01100006709241466060110CC1100006909251468050210280B00006A0926109D0F00006B092810C01100006C095A109D0F00006D095C109D0F00006E095D109D0F00006F095E10C011000070094110CC11000071094210280B0000720943109D0F0000730945109D0F0000740986109D0F0000750977103812000077093014760801104412000079093114780702102C0B00007A093310530C00007B093710381200007C096710530C00007D096910530C00007E096A10530C00007F096B103812000080094C104412000081094D102C0B000082094E10530C000083095010530C000084098710530C000085097A1A8622870C7D0B0E000009280B0000095C0C00000025880C80C512000019A812000022890D6F280B000009280B000000228A0D70280B000009280B000000228B0D71280B000009280B000000228C0D72280B000009280B000000228D0D74280B000009280B000000228E0D73280B000009280B000000228F0D75280B000009280B00000022900D76280B000009280B00000022910D77280B000009280B00000022920D78280B000009280B00000022930D79280B000009280B00000022940D7D280B000009280B00000022950D80280B000009280B00000022960D89280B000009280B00000018970F0203280B000009280B00000010A5130000980F652610AE1300009B0F6D1105100F6912999D0F00000F6B00129A9D0F00000F6C0800279C0F0202189D0FFC01740D0000094B0C0000094B0C000000189E0F0602280B000009EE1300000019F313000028189F0F0B02280B000009EE1300000022A00F90450F0000095C0C00000022A10F93280B0000095C0C00000022A20F969D0F0000095C0C00000018A30FF202740D000009501400000950140000094B0C0000094B0C00000956140000001955140000292A5F140000A40FE50219641400002B280B0000095014000009501400000018A50FD301740D0000094B0C0000094B0C00000018A60F10039D13000009280B000009280B0000002CA70F1E0209280B0000002DA80FE20109740D00000018A90F33020B0E0000095C0C00000018AA0F03039D0F0000099D0F00000018AB0F1203A6130000099D0F0000099D0F00000018AC0FD101740D0000094B0C00000018AD0F5B03280B0000095C0C0000094B0C00000018AE0F66034B0C0000099B0B000009570C0000094B0C00000018AF0F5E03280B0000099B0B000009570C0000094B0C0000002DB00FF80209740D0000094B0C0000094B0C00000956140000002CB10F240209280B0000001EB20F7601280B000018B30FDF01740D000009740D0000094B0C0000002DB40F7801092C0B00000022B50FA4450F000009570C00000999150000001B9E150000190B0E000022B60FB79D0F000009570C0000099915000009280B00000022B70FBB530C000009570C0000099915000009280B00000018B80FCC02280B0000095C0C00000018B90F69034B0C000009060E000009CD0B0000094B0C00000018BA0F6203280B0000090B0E000009970B0000001017160000BB0F791105100F7512998D1100000F7700129A8D1100000F7808002CBC0F2C0209280B00000018BD0F07038D110000098D1100000018BE0F18030F160000098D110000098D1100000022BF0F9D8D110000095C0C00000022C00FD18D11000009570C0000099915000009280B00000022C10FD6AA11000009570C0000099915000009280B00000022C20FAC670F000009570C000009991500000022C30FAF7011000009570C000009991500000010770B0000C5053010D1160000C7056E10D9160000C61319262DC8053A0309E51600000019C116000022C905ED280B000009E51600000018CA053C03280B000009E51600000018CB053E03280B000009E51600000022CC05F2280B000009E51600000018CD051302280B000009E51600000018CE051E03280B00000947170000094C170000001BE51600001B5117000019C916000018CF056E020B0E000009060E000009280B000009471700000018D0051001E516000009570C000009570C00000018D1056401280B0000094717000009570C00001D0018D2053D02280B000009280B000009E51600000018D305B102280B000009570C000009471700000018D405C5024B0C000009DE170000094B0C0000094B0C00000947170000001B740D000018D5051601E516000009570C000009570C000009471700000018D605A901280B0000094717000009570C00001D0018D705ED02280B000009E5160000099D0F000009280B00000018D8052303280B000009E5160000093E1800000019431800001CC916000018D905F2029D0F000009E51600000018DA05CB024B0C00000975180000094B0C0000094B0C00000947170000001B5014000018DB051402280B000009E5160000001EDC051A02280B00002DDD054E03095C0C00000018DE056A01280B000009570C00001D0018DF053E02280B000009280B000009E51600000018E0054402280B000009280B00000018E105B702280B0000095C0C00000022E205B2280B0000095C0C00000022E305B4280B0000095C0C0000095C0C0000002DE405F70209E51600000018E505AF01280B000009570C00001D002DE6054C01094717000009060E00000018E7055001280B0000094717000009060E000009280B0000094B0C00000018E8056C01280B000009060E000009570C00001D0018E905B101280B000009570C000009570C00001D0025EA05C3E516000022EB05D10B0E0000090B0E00000018EC05BE02280B000009280B000009E51600000018ED057301280B0000094717000009570C0000094E0D00000018EE057901280B000009570C0000094E0D00000018EF057B01280B000009060E000009570C0000094E0D00000018F0058201280B000009060E0000094B0C000009570C00001D0018F105D701280B0000094717000009570C0000094E0D00000018F205DF01280B000009570C0000094E0D00000018F3058601280B000009060E0000094B0C000009570C0000094E0D00000018F405E301280B000009570C000009570C0000094E0D00000010691A0000F615BA196E1A00001C731A000010280B0000F5142810530C0000F7153422F8156F280B000009440B00000022F91575280B000009440B00000022FA15A2280B000009440B00000022FB1578280B000009440B00000022FC15AF280B000009440B0000097B1A00000022FD157C280B000009440B00000022FE1580280B000009440B00000022FF1585280B000009440B0000002E00011588280B000009440B0000002E0101158D280B000009440B0000002E02011592280B000009440B0000002E03011597280B000009440B0000002E0401159C280B000009440B0000002E050115DD440B000009440B000009611A0000002E060115C2440B000009440B0000002E070115C5440B000009440B0000002E080115DA611A0000095C0C0000002E090115AB7B1A0000095C0C0000002E0A011736450F000009450F0000002E0B011738450F000009450F0000002E0C01173A450F000009450F0000002E0D01173C450F000009450F000009450F0000002E0E0117B3450F000009450F0000002E0F01173F450F000009450F0000002E10011748450F000009450F0000002E11011764450F000009450F0000002E120117B6450F000009450F0000002E130117B9450F000009450F0000002E140117BC450F000009450F000009450F0000002E15011767450F000009450F000009561C00000019280B00002E1601176A450F000009450F000009280B0000002E1701176D450F000009450F0000002E18011770450F000009450F0000002E19011773450F000009450F000009A11C00000019450F00002E1A01179A450F000009450F000009450F0000002E1B011741450F000009450F0000002E1C01174A450F000009450F0000002E1D01179D450F000009450F0000002E1E011743450F000009450F0000002E1F01174C450F000009450F0000002E200117CA280B000009450F0000002E210117EB280B000009450F0000002F450F00002201191D2F670F00002301191C2E24011758450F000009450F0000002E25011758670F000009670F0000002E26011758701100000970110000002E2701175A450F000009450F0000002E2801175A670F000009670F0000002E2901175A701100000970110000002E2A01175C450F000009450F0000002E2B01175C670F000009670F0000002E2C01175C701100000970110000002E2D0117AA450F000009450F0000002E2E0117AA670F000009670F0000002E2F0117AA701100000970110000002E300117DA450F000009450F000009450F0000002E310117DA670F000009670F000009670F0000002E320117DA7011000009701100000970110000002E330117FA450F000009450F0000002E340117FA670F000009670F0000002E350117FA701100000970110000002E360117FB450F000009450F0000002E370117FB670F000009670F0000002E380117FB701100000970110000002E3901178E450F000009450F0000002E3A01178E670F000009670F0000002E3B01178E701100000970110000002E3C011781450F000009450F0000002E3D011781670F000009670F0000002E3E01178170110000097011000000303F01175001450F000009450F000009450F000000304001175001670F000009670F000009670F000000304101175001701100000970110000097011000000304201176301450F000009450F000009450F000009450F000000304301176301670F000009670F000009670F000009670F0000003044011763017011000009701100000970110000097011000000304501175301450F000009450F000009450F000000304601175301670F000009670F000009670F000000304701175301701100000970110000097011000000304801175601450F000009450F000009450F000000304901175601670F000009670F000009670F000000304A011756017011000009701100000970110000002E4B0117A3450F000009450F000009450F0000002E4C0117A3670F000009670F000009670F0000002E4D0117A3701100000970110000097011000000304E01172901280B000009450F000000304F01172901280B000009670F000000305001172901280B00000970110000002E510117FC450F000009450F0000002E520117FC670F000009670F0000002E530117FC701100000970110000003054011747018D11000009450F0000003055011747018D11000009670F0000003056011747018D110000097011000000305701174C018D11000009450F000000305801174C018D11000009670F000000305901174C018D1100000970110000002E5A011784450F000009450F0000002E5B011784670F000009670F0000002E5C011784701100000970110000002E5D011791450F000009450F0000002E5E011791670F000009670F0000002E5F011791701100000970110000002E60011787450F000009450F0000002E61011787670F000009670F0000002E62011787701100000970110000003063011746019D0F000009450F0000003064011746019D0F000009670F0000003065011746019D0F0000097011000000306601174B019D0F000009450F000000306701174B019D0F000009670F000000306801174B019D0F00000970110000002E690117E1450F0000095C0C0000002E6A0117E1670F0000095C0C0000002E6B0117E170110000095C0C000000306C01173201450F000009450F000000306D01173201670F000009670F000000306E0117320170110000097011000000306F01171B01450F000009450F000009450F000000307001171B01670F000009670F000009670F000000307101171B01701100000970110000097011000000307201171D01450F000009450F0000097011000000307301171D01670F000009670F0000097011000000307401171D01701100000970110000097011000000307501172101450F000009450F000009450F000000307601172101670F000009670F000009670F000000307701172101701100000970110000097011000000307801173F01450F000009450F000009450F000009561C000000307901173F01670F000009670F000009670F000009561C000000307A01173F01701100000970110000097011000009561C000000307B01171801450F000009450F000000307C01171801670F000009670F000000307D0117180170110000097011000000307E01173601450F000009450F000000307F01173601670F000009670F00000030800117360170110000097011000000308101172E01450F000009450F0000099D0F000000308201172E01670F000009670F0000099D0F000000308301172E01701100000970110000099D0F000000308401172501450F000009450F000009280B000000308501172501670F000009670F000009280B00000030860117250170110000097011000009280B000000308701170301450F000009450F000000308801170301670F000009670F00000030890117030170110000097011000000308A01173A01450F000009450F000000308B01173A01670F000009670F000000308C01173A017011000009701100000000
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 011101252513050325721710171B251101552373177417000002390103250000033400032549133A0B3B0B02186E25000004020103253C19000005020003253C1900000608003A0B3B0B181300000708003A0B3B0518130000082E016E2503253A0B3B0B3C193F198701190000090500491300000A3900032500000B2E00111B120640180326341900000C2E01111B1206401803263A0B3B0B49133F1900000D3400021803263A0B3B0B491300000E0B01111B120600000F2E00111B120640186E2634190000101600491303253A0B3B0B0000111301360B0B0B3A0B3B0B0000120D00032549133A0B3B0B380B0000131701360B0B0B3A0B3B0B000014240003253E0B0B0B0000150101491300001621004913370B000017240003250B0B3E0B0000182E0103253A0B3B0549133C193F190000190F00491300001A130003253C1900001B3700491300001C2600491300001D180000001E2E0003253A0B3B0549133C193F1900001F1301360B03250B0B0000200D0003254913380B0000210F000000222E0103253A0B3B0B49133C193F190000232E016E2503253A0B3B0B49133C193F190000243A003A0B3B0B18130000252E0003253A0B3B0B49133C193F1900002613003C190000272E0003253A0B3B053C193F198701190000281500000029260000002A1600491303253A0B3B0500002B1501491300002C2E0103253A0B3B053C193F1987011900002D2E0103253A0B3B053C193F1900002E2E0103263A0B3B0B49133C193F1900002F1600491303263A0B3B0B0000302E0103263A0B3B0549133C193F19000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 4B01000005000800BA000000010101FB0E0D00010101010000000100000101011F07000000001D00000076000000830000009B000000F90000005801000002011F020F1A6A0100000073010000017C0100000284010000018B01000003C201000002CA0100000301020000041102000005190200000222020000012A02000001320200000279020000023B0200000142020000024B0200000455020000015D020000016402000002700200000678020000028102000001890200000695020000019B020000060400000902901000000000000011040105190A03CA004A040005000603B67FBA040105190B03CA00089002020001010400000902C01000000000000011020B0001010400000902C0110000000000001405090AE575050E7505170674050574050D062F05140658050D823C062F050991050D2F0505920524037A2E050506900635060B2E0206000101
+ - Name: .debug_rnglists
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 18000000050008000100000004000000010104002C04303B03026800
+ - Name: .debug_str_offsets
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 500600000500000000000000DE0A00007500000092000000AA000000960000009F000000A4000000B3000000D2000000BB000000C3000000C9000000D6000000AC030000DD000000F1000000F3000000FD00000076050000040100000B010000140100001B010000220100002A01000031010000380100008F010000DB010000050100003E010000470100004E0100005C010000630100006B010000730100002B0100007D010000E4010000EE010000860100008E01000098010000A2010000AC010000BE010000CC010000DA010000E3010000ED010000F6010000FF010000070200000F020000160200001D020000250200002C020000340200003D02000040020000470200004F020000570200005F020000690200007002000006030000770200007E020000840200008B02000057010000920200009A020000A2020000A8020000B0020000B8020000C102000090010000DC010000C9020000D0020000D8020000E0020000E7020000EF020000F9020000010300000D03000027030000150300001E0300003103000033030000410300007D0300008F0300009B030000A5030000B2030000C2030000C90300001C070000DB030000E4030000F1030000FF0300000D0400001B0400002904000038040000470400005604000060040000A3030000B1030000B9030000C8030000D1030000DA030000E3030000F0030000FE0300000C0400001A040000280400003704000046040000550400005F040000690400006F04000079040000840400008C040000940400009C040000A4040000AC040000B4040000BC040000C4040000CC040000D4040000DD040000E5040000ED040000E4070000BF050000F5040000FA040000BE050000FE040000040500001205000019050000270500002C05000031050000360500003E0500004C050000D3050000220500005305000058050000CC050000D20500005F050000660500006C050000750500007C0500001C0500008B050000820500008A05000090050000970500009E050000A6050000AD050000B6050000BD050000C5050000CB050000D1050000D7050000DD050000E5050000EE050000F5050000FD0500000F01000012060000150600001C060000250600002C06000031060000380600003F060000450600004D06000053060000E0060000590600005F060000650600006B060000FA06000073060000790600008106000087060000400600008E06000096060000E10600005A0600009D06000060060000A5060000AC060000B3060000FB060000BA060000C1060000F106000013070000C9060000D1060000D8060000DF060000E8060000F006000009070000F90600000107000008070000120700001A070000240700002E070000370700004007000049070000520700005B070000640700006D070000760700007F07000088070000910700009A070000A3070000AD070000B7070000C0070000AF0700005D070000C9070000CE070000D3070000D8070000DE070000CA07000035080000FB070000E3070000E8070000EE070000F3070000F9070000FF07000003080000090800000E080000CF0700004908000012080000D40700005D080000170800001D080000230800002C080000340800003A08000041080000480800004E080000550800005C080000620800006908000070080000750800007B080000810800008A08000094080000320A00009E080000A3080000A8080000AD080000B3080000B9080000BE080000C4080000CA080000D0080000D7080000DE080000E3080000E9080000EF080000F3080000F8080000FD08000002090000080900000E09000013090000190900001F090000250900002C090000330900003909000040090000470900004E090000560900005E090000650900006D090000750900007D090000860900008F090000950900009C090000A3090000A8090000AE090000340900003A090000410900005F090000660900006E090000760900007E090000870900001F080000B4090000B9090000BE090000C8090000D3090000DE090000E8090000F3090000FE090000090A0000150A0000210A00002B0A0000360A0000410A0000480A0000500A000060090000670900006F090000770900007F09000088090000580A0000600A0000690A0000720A0000790A0000810A0000890A0000900A0000980A0000A00A0000A60A0000AD0A0000B40A0000CA0A0000CF0A0000CA010000370900002F050000
+ - Name: .debug_line_str
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 2F686F6D652F72656C61792F6C6966656E677869616E672F74657374002F6F70742F72682F646576746F6F6C7365742D31302F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31302F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F3130002F7573722F696E636C756465002F686F6D652F72656C61792F6C6966656E677869616E67002F6F70742F72682F646576746F6F6C7365742D31302F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31302F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F31302F62697473002F6F70742F72682F646576746F6F6C7365742D31302F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31302F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F31302F6465627567002F7573722F696E636C7564652F6269747300746573742E63707000696F73747265616D0077636861722E6800637763686172006C6C766D2F6C6C766D5F6275696C642F6C69622F636C616E672F31392F696E636C7564652F5F5F7374646465665F77696E745F742E6800737464696F2E68006C6C766D2F6C6C766D5F6275696C642F6C69622F636C616E672F31392F696E636C7564652F5F5F7374646465665F73697A655F742E6800657863657074696F6E5F7074722E680064656275672E6800737464696E742E680063737464696E7400636C6F63616C65006C6F63616C652E6800636374797065007374646C69622E68007374645F6162732E6800637374646C69620063737464696F005F475F636F6E6669672E680074797065732E68007763747970652E680063776374797065006D61746863616C6C732E6800636D617468006D6174686465662E6800
+Symbols:
+ - Name: .interp
+ Type: STT_SECTION
+ Section: .interp
+ Value: 0x2A8
+ - Name: .note.ABI-tag
+ Type: STT_SECTION
+ Section: .note.ABI-tag
+ Value: 0x2C4
+ - Name: .gnu.hash
+ Type: STT_SECTION
+ Section: .gnu.hash
+ Value: 0x2E8
+ - Name: .dynsym
+ Type: STT_SECTION
+ Section: .dynsym
+ Value: 0x308
+ - Name: .dynstr
+ Type: STT_SECTION
+ Section: .dynstr
+ Value: 0x3F8
+ - Name: .gnu.version
+ Type: STT_SECTION
+ Section: .gnu.version
+ Value: 0x4EA
+ - Name: .gnu.version_r
+ Type: STT_SECTION
+ Section: .gnu.version_r
+ Value: 0x500
+ - Name: .rela.dyn
+ Type: STT_SECTION
+ Section: .rela.dyn
+ Value: 0x540
+ - Name: .rela.plt
+ Type: STT_SECTION
+ Section: .rela.plt
+ Value: 0x618
+ - Name: .init
+ Type: STT_SECTION
+ Section: .init
+ Value: 0x1000
+ - Name: .plt
+ Type: STT_SECTION
+ Section: .plt
+ Value: 0x1020
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x1090
+ - Name: .fini
+ Type: STT_SECTION
+ Section: .fini
+ Value: 0x12A4
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x2000
+ - Name: .eh_frame_hdr
+ Type: STT_SECTION
+ Section: .eh_frame_hdr
+ Value: 0x2004
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x2048
+ - Name: .init_array
+ Type: STT_SECTION
+ Section: .init_array
+ Value: 0x3DA8
+ - Name: .fini_array
+ Type: STT_SECTION
+ Section: .fini_array
+ Value: 0x3DB8
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x3DC0
+ - Name: .dynamic
+ Type: STT_SECTION
+ Section: .dynamic
+ Value: 0x3DC8
+ - Name: .got
+ Type: STT_SECTION
+ Section: .got
+ Value: 0x3FD8
+ - Name: .got.plt
+ Type: STT_SECTION
+ Section: .got.plt
+ Value: 0x4000
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ Value: 0x4048
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Value: 0x404C
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .llvm_bb_addr_map
+ Type: STT_SECTION
+ Section: .llvm_bb_addr_map
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_rnglists
+ Type: STT_SECTION
+ Section: .debug_rnglists
+ - Name: .debug_str_offsets
+ Type: STT_SECTION
+ Section: .debug_str_offsets
+ - Name: .debug_line_str
+ Type: STT_SECTION
+ Section: .debug_line_str
+ - Name: test.cpp
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: __cxx_global_var_init
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1090
+ Size: 0x2C
+ - Name: _ZStL8__ioinit
+ Type: STT_OBJECT
+ Section: .bss
+ Value: 0x404D
+ Size: 0x1
+ - Name: _GLOBAL__sub_I_test.cpp
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x10C0
+ Size: 0xB
+ - Name: crtstuff.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: deregister_tm_clones
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1100
+ - Name: register_tm_clones
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1130
+ - Name: __do_global_dtors_aux
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1170
+ - Name: completed.0
+ Type: STT_OBJECT
+ Section: .bss
+ Value: 0x404C
+ Size: 0x1
+ - Name: __do_global_dtors_aux_fini_array_entry
+ Type: STT_OBJECT
+ Section: .fini_array
+ Value: 0x3DB8
+ - Name: frame_dummy
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x11B0
+ - Name: __frame_dummy_init_array_entry
+ Type: STT_OBJECT
+ Section: .init_array
+ Value: 0x3DA8
+ - Name: 'crtstuff.c (1)'
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: __FRAME_END__
+ Type: STT_OBJECT
+ Section: .eh_frame
+ Value: 0x2174
+ - Type: STT_FILE
+ Index: SHN_ABS
+ - Name: __GNU_EH_FRAME_HDR
+ Section: .eh_frame_hdr
+ Value: 0x2004
+ - Name: _GLOBAL_OFFSET_TABLE_
+ Type: STT_OBJECT
+ Section: .got.plt
+ Value: 0x4000
+ - Name: __init_array_end
+ Section: .init_array
+ Value: 0x3DB8
+ - Name: __init_array_start
+ Section: .init_array
+ Value: 0x3DA8
+ - Name: _DYNAMIC
+ Type: STT_OBJECT
+ Section: .dynamic
+ Value: 0x3DC8
+ - Name: data_start
+ Section: .data
+ Binding: STB_WEAK
+ Value: 0x4048
+ - Name: __libc_csu_fini
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x12A0
+ Size: 0x2
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x10CB
+ - Name: __gmon_start__
+ Binding: STB_WEAK
+ - Name: _fini
+ Type: STT_FUNC
+ Section: .fini
+ Binding: STB_GLOBAL
+ Value: 0x12A4
+ - Name: '_ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4'
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: '__libc_start_main@@GLIBC_2.2.5'
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: '__cxa_atexit@@GLIBC_2.2.5'
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: _ITM_deregisterTMCloneTable
+ Binding: STB_WEAK
+ - Name: _IO_stdin_used
+ Type: STT_OBJECT
+ Section: .rodata
+ Binding: STB_GLOBAL
+ Value: 0x2000
+ Size: 0x4
+ - Name: _ITM_registerTMCloneTable
+ Binding: STB_WEAK
+ - Name: __data_start
+ Section: .data
+ Binding: STB_GLOBAL
+ Value: 0x4048
+ - Name: '__cxa_finalize@@GLIBC_2.2.5'
+ Type: STT_FUNC
+ Binding: STB_WEAK
+ - Name: __TMC_END__
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_GLOBAL
+ Value: 0x4050
+ Other: [ STV_HIDDEN ]
+ - Name: __dso_handle
+ Type: STT_OBJECT
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x3DC0
+ Other: [ STV_HIDDEN ]
+ - Name: __libc_csu_init
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x1230
+ Size: 0x65
+ - Name: __bss_start
+ Section: .bss
+ Binding: STB_GLOBAL
+ Value: 0x404C
+ - Name: _end
+ Section: .bss
+ Binding: STB_GLOBAL
+ Value: 0x4050
+ - Name: 'rand@@GLIBC_2.2.5'
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: _edata
+ Section: .data
+ Binding: STB_GLOBAL
+ Value: 0x404C
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x11C0
+ Size: 0x68
+ - Name: _init
+ Type: STT_FUNC
+ Section: .init
+ Binding: STB_GLOBAL
+ Value: 0x1000
+DynamicSymbols:
+ - Name: __gmon_start__
+ Binding: STB_WEAK
+ - Name: _ZNSt8ios_base4InitC1Ev
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: __libc_start_main
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: __cxa_atexit
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: _ZNSt8ios_base4InitD1Ev
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: _ITM_deregisterTMCloneTable
+ Binding: STB_WEAK
+ - Name: _ITM_registerTMCloneTable
+ Binding: STB_WEAK
+ - Name: __cxa_finalize
+ Type: STT_FUNC
+ Binding: STB_WEAK
+ - Name: rand
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+DWARF:
+ debug_str:
+ debug_addr:
+...
More information about the llvm-commits
mailing list