[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