From 5d24cf87d7683f7dc620ddfa278efed30a137409 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli <dodji@redhat.com> Date: Sat, 7 Nov 2015 22:52:10 +0100 Subject: [PATCH] Support DW_AT_count DWARF attribute Libabigail's DWARF reader does not support the DW_AT_count attribute used to specify the number of elements in an array subrange. Rather, it uses the DW_AT_lower_bound and DW_AT_upper_bound attributes that are emitted by GCC. Recent versions of Clang, on the other hand, use the DW_AT_count attribute. This patch adds support for the DW_AT_count attribute too. * src/abg-dwarf-reader.cc (get_default_array_lower_bound): Define new static function. (build_array_type): Support the DW_AT_count attribute. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so: Likewise. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so: New test binary input. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt: New test reference output. * tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c: Source code for the binaries above. * tests/data/Makefile.am: Add the new test material to the build system. * tests/test-diff-dwarf.cc (in_out_specs): Add the new test inputs to the harness. Signed-off-by: Dodji Seketeli <dodji@redhat.com> --- src/abg-dwarf-reader.cc | 104 +++++++++++++++++- tests/data/Makefile.am | 6 + ...t35-pr19173-libfoo-long-clang-report-0.txt | 13 +++ .../test35-pr19173-libfoo-long-clang.so | Bin 0 -> 9165 bytes .../test35-pr19173-libfoo-long-clang2.so | Bin 0 -> 9165 bytes ...est35-pr19173-libfoo-long-gcc-report-0.txt | 13 +++ .../test35-pr19173-libfoo-long-gcc.so | Bin 0 -> 8725 bytes .../test35-pr19173-libfoo-long-gcc2.so | Bin 0 -> 8725 bytes .../test35-pr19173-libfoo-long.c | 15 +++ tests/test-diff-dwarf.cc | 12 ++ 10 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt create mode 100755 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so create mode 100755 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so create mode 100644 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt create mode 100755 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so create mode 100755 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so create mode 100644 tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index fc436983..21a648e1 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -144,6 +144,9 @@ maybe_canonicalize_type(Dwarf_Off die_offset, bool in_alt_di, read_context& ctxt); +static int +get_default_array_lower_bound(translation_unit::language l); + /// Convert an elf symbol type (given by the ELF{32,64}_ST_TYPE /// macros) into an elf_symbol::type value. /// @@ -6092,6 +6095,64 @@ dwarf_language_to_tu_language(size_t l) } } +/// Get the default array lower bound value as defined by the DWARF +/// specification, version 4, depending on the language of the +/// translation unit. +/// +/// @param l the language of the translation unit. +/// +/// @return the default array lower bound value. +static int +get_default_array_lower_bound(translation_unit::language l) +{ + int value = 0; + switch (l) + { + case translation_unit::LANG_UNKNOWN: + value = 0; + break; + case translation_unit::LANG_Cobol74: + case translation_unit::LANG_Cobol85: + value = 1; + break; + case translation_unit::LANG_C89: + case translation_unit::LANG_C99: + case translation_unit::LANG_C11: + case translation_unit::LANG_C: + case translation_unit::LANG_C_plus_plus_11: + case translation_unit::LANG_C_plus_plus_14: + case translation_unit::LANG_C_plus_plus: + case translation_unit::LANG_ObjC: + case translation_unit::LANG_ObjC_plus_plus: + value = 0; + break; + case translation_unit::LANG_Fortran77: + case translation_unit::LANG_Fortran90: + case translation_unit::LANG_Fortran95: + case translation_unit::LANG_Ada83: + case translation_unit::LANG_Ada95: + case translation_unit::LANG_Pascal83: + case translation_unit::LANG_Modula2: + value = 1; + break; + case translation_unit::LANG_Java: + value = 0; + break; + case translation_unit::LANG_PL1: + value = 1; + break; + case translation_unit::LANG_UPC: + case translation_unit::LANG_D: + case translation_unit::LANG_Python: + case translation_unit::LANG_Go: + case translation_unit::LANG_Mips_Assembler: + value = 0; + break; + } + + return value; +} + /// Given a DW_TAG_compile_unit, build and return the corresponding /// abigail::translation_unit ir node. Note that this function /// recursively reads the children dies of the current DIE and @@ -7265,7 +7326,11 @@ build_array_type(read_context& ctxt, Dwarf_Die child; array_type_def::subranges_type subranges; - size_t upper_bound, lower_bound = 0; + translation_unit::language language = + ctxt.current_translation_unit()->get_language(); + size_t upper_bound = 0; + size_t lower_bound = get_default_array_lower_bound(language); + size_t count = 0; if (dwarf_child(die, &child) == 0) { @@ -7274,15 +7339,48 @@ build_array_type(read_context& ctxt, int child_tag = dwarf_tag(&child); if (child_tag == DW_TAG_subrange_type) { - // usually not specified for C/C++ + // The DWARF 4 specifications says, in [5.11 Subrange + // Type Entries]: + // + // The subrange entry may have the attributes + // DW_AT_lower_bound and DW_AT_upper_bound to + // specify, respectively, the lower and upper bound + // values of the subrange. + // + // So let's look for DW_AT_lower_bound first. die_unsigned_constant_attribute(&child, DW_AT_lower_bound, lower_bound); + // Then, DW_AT_upper_bound. if (!die_unsigned_constant_attribute(&child, DW_AT_upper_bound, upper_bound)) - return result; + { + // The DWARF 4 spec says, in [5.11 Subrange Type + // Entries]: + // + // The DW_AT_upper_bound attribute may be replaced + // by a DW_AT_count attribute, whose value + // describes the number of elements in the + // subrange rather than the value of the last + // element." + // + // So, as DW_AT_upper_bound is not present in this + // case, let's see if there is a DW_AT_count. + if (!die_unsigned_constant_attribute(&child, + DW_AT_count, + count)) + // We have no information about the number of + // elements of the array. Let's bail out then. + return result; + + // We can deduce the upper_bound from the + // lower_bound and the number of elements of the + // array: + if (size_t u = lower_bound + count) + upper_bound = u - 1; + } array_type_def::subrange_sptr s (new array_type_def::subrange_type(lower_bound, diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 23363d65..7ab72fcd 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -249,6 +249,12 @@ test-diff-dwarf/test33-fnref-changes-v1.o \ test-diff-dwarf/test34-pr19173-libfoo.so \ test-diff-dwarf/test34-pr19173-libfoo2.so \ test-diff-dwarf/test34-pr19173-libfoo-report-0.txt \ +test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so \ +test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so \ +test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt \ +test-diff-dwarf/test35-pr19173-libfoo-long-clang.so \ +test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so \ +test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt \ \ test-read-dwarf/test0 \ test-read-dwarf/test0.abi \ diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt new file mode 100644 index 00000000..56a89614 --- /dev/null +++ b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt @@ -0,0 +1,13 @@ +Functions changes summary: 0 Removed, 0 Changed, 0 Added function +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + +1 Changed variable: + + [C]'char buggy_symbol[5]' was changed to 'char buggy_symbol[10]': + size of symbol (in bytes) changed from 5 to 10 + type of variable changed: + type name changed from 'char[5]' to 'char[10]' + array type size changed from 40 to 80 bits: + array type subrange 1 changed length from 5 to 10 + + diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so new file mode 100755 index 0000000000000000000000000000000000000000..4b68a63c6c612a756bf333830839c294a3d907ec GIT binary patch literal 9165 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so new file mode 100755 index 0000000000000000000000000000000000000000..8e9f6ce0993c8d81d31a4ee126d09dfa586da03e GIT binary patch literal 9165 zcmeHNTWlOx89wXHCQh8#j@^(;TQY=%Itb6+d`+9giEC#aoRqpwQxMiLyEE(EYA^22 zY#Jjj5h;iiBBj6!Pw>DK@BloZKqTZ6Xb=J^6e>j(NET5=0+pIl0Y=c8?>}??_3Z3A zK|(?x`L|~O^MC*4T;|NV`qN{R<1L|(U<!*vf~1c{JY+;EF5RaRU?XBktjDh=9+bAq zbj84z`sjL3U@qWAM0t>EX$wijwK^Vak)jw;oc%~7za8zKen-0|6U-MVFo=1pCyI68 z^juQ<Am6L(n3FBh<FC1vs)7gH<CpWBf*-|Lt$wYlUd&aoWErWc!+4IJJSE=Vv;6(8 z-(HD)?{`mrWFqqR!+)Fq+!7Um^c(PSJAQsa3yH|cM#47X*^FoCo9AyF9ed^VD>uLN zi5t&6^}r7<zS;h#U%#PR4hE}GSZoxXftUIKY_%r#lz%haTm>Im1)l=G2Tzcy0Je&4 z;sc$UR8ifCzKEw&+$VYzE<yZ!P2$_cPyqk3!h`mmz`L5%_gxa-EK<RjZy2-1a>;O9 zv*H?tF!H6mD~v3dFeau?7?xeJXY-D0SEf&l7Rn`i+DsR0PuE;yWX_rtz%1lH4#VST zj42giv|u`p?TB=Bc6Q!y=8NfaK@{@ojP8{60b$sd>6*eY(vIU52vErq$0jF^jv5I) zq4%Q}E7XGCvhwHQB!31;Y6qg~uKY$JTEsUzvG!eZzwYGrP~RQn*HwS%4B#x^=+I<D za#vkn%8Ndn`ZUumAI{$*>F)S&e-~Zy;ao(r-=X>eeHZ@tnh*Eer_R6Ln)*WIr<*j9 z`s{)mxphArQ|EuudX=IHvE2VMRLlE*gWrzbBS?{)Bh~H2WzfE#lT4q*?duRz7b8Cd zkh*yAhhV2t`<GG|UQ3-{YJaw6<|;CpCM7cZ^UU%h#e@9|p8fMa`xlqOsS7_&z4*t& zsnGS*ua>IPd0SLEzYOQpg_o9pPyXi)J`PY+A4;7+xSdj`ke|C5`R{4f#H|?==~fOu zGcQGYpboutHA|#-?0ybKrm7yivjJ}I`%t)R8@<BqItBk%0VCG(^_knJ5ujuDIkLa~ zL79dh+HIwoNVP_5EwI)CYb~(W0&6X>)&l=yEx_wIUbk`ac)dmo7$RC5648Ewi1!6* z+g4j2@ATBQ^&%~sh<JUt%M*oA>qFX45V8I*?<|)|zN|9lwOvdt+IWq&r1ZQG_zpRN z+B_z9C|+CZsdXN&Ib%xC+gVx{5^eXGSX7Hm#x*5#ITw^27Ri!0zjv0s^2-ezG*}hM z`fxkmQSzcH*x!|0E2oP0-)6jT4(2<qUci%z9~&J#p!Hx!x?k(lhxDYDh{gM2!|}M* zGi6&^%5*)vcW}SR6wK1BcE+wa`Ep51!aSz+<Xm^oIS`G`=G|O1t!K)`XrXYX*jvn3 zD&<O4`sh$<*}maSW+0mxNXG^TO*1i^N%Rf%*@<{8naG${a%jM|GTHv&{r8MX@ny(Z zJYfy@52rKzaXV|K&De0-%p~HbWe)Tu<Nfiz<X~bTJ&2<3Mmu<2<s?$?##6WVqE<SN z$LkcW^5t$8R|p2(z|-;|z$6l(%^SnKX$>C+ux=bbn?&UOFjya29|ddOAVOP1``WuB z;r7n$_qW5nPlVeix)1L>(Dra!3p!Ug6q@LU^LxZZ_aHiXWG@U3wY4F+o|0{Chp6ih z<7x5o4gI5iiwJ=L;Ry-XcHCrt?_4E593M>fV*i*emwT}_oz*k25&zHc>#lW+=E_Ao zYL%_0^VIF4sJWTW&zkuH^@?aVf3~-1(oQ`}VVo%Kre(6%%4f5^*0W|MTmSwuIkO@h zY}4KOIa`hyE1iYjvDC{p)v;T5&9u-Rx8m^}r%Gkl)@MsqJzdQgtlqpOq?9wAoY1ZL z5<ETbRy>XRlIjElx{6&e$w8&&3a-%QafI&LXOWhN61tr;vK6yvdpg6cRLpr#$LXgt z2u78sh<c?gb2p3m400?Z4t{hQ9On#zzTBc+0&Lm%HjKGyx`gOZcyhj!r2tZArqdPs z3`>Q435D=9XbVmv0JWwgo9#dTp?QbKZXWMfJLlt!)bP%t(2@Ep#%A{C`H1-=%96)z zo)<X45EAr3vOmvP%!lZ+1W~?Z!~Q&vi~yt9?9cNbbDr;DB1wf~QKXQfxrhCEzG2Su zFqfb0n4f|_&1Ed}e8yZ;IZ^p3Z!W)rg@pvyjWCS_A77Bt%2^EibNx%u`~4S{KXabH zsr<AC2>PD|M&;u50<Tw?bNyi=Nrh)oP&f4Z$JG2+<26e!(WzwSp9=W%IXd%OtN1hg zT)>~tADQ#IgYARme_r|X`+G_?1oNOhw;#v*3KE!yWFI7K<y@YmmG<_eM)~Vdbl~Cs z#p^v86nHSdp!{vvQ2Vogt6DF%QlUUW`=I<?*!cZ<J=^(j`u_<2)MT7LuaEe?VS$2! zxE(ove*f2?^XJd!o;RpbKs_F-{jxvvUqIvc7i#^=2ekL{e+B*&i_6dF-94&+Tuv?k z*MsF(k)Zrz3@Fb2e+b~JIiwG%ZsK9gZ`!fdliuqGo7le91S6M(@;^y}kAitELl?xz z{G9SX=JTaw&~^)eAVzlAl>b2zd=#|Zsr-ZOx30@`;_;tDus`#?%AfVjAHgD!i1$^V z)L2$3Cck^OA%0r<_i;u_84zXNdF=4}Us4;kIW->ALOF_u`z?>(G(I)UpD%ZQ8OSgo z`m=0EhfzA7&;80UX3NV>0)<f$o_Fi**9o3a>+y(KY*P3zjR?UH1&(2?G_<C8Yi%D{ zAHVTljr3v6WIVsr+qc#3Ve9cG_fj&>7Qy3uy?uLa9IwYQD5>$a9`6)9?$+a51&^oo zco*(tH9sWNVbLvk{PQcrxVNi~Yd%F7_k28F`CzmU-NrRixVCGr*M)1R070BjDS~)# zRp9Bv4PP7Me0s4Ghq~W7@g@yFbwuYTAq?KZ_N0=uV5P|G0(R0Beo1|2j2}_>^#Fbv zc*xgo{262=-uQkmsyKZ915wgf@f*S<&GWs2#bqR#)oZo-()<$=js5VZ#2edz@@W?T z4Qb!l-~K7_#{L#TfkI90gSRR?*xw!kt|3;CMu9iGZ~hSQX7|mffp_6_jMrxzZw9!= zf{zzuoW}d<XA~an|DRkX&I_yH-vYkJmmepu0dIECEix6?ajUoi%-|yV_~?`|Iq}3a zF1A<hu?@FqWauW_5qyE|gABte8?%LS+AJ8BTdp{USv@PTNt`R#u5IZ9$>b0sH!+fz z=H4C@*Vb-jUdVl_VO5L8dARr_dCOjBde@D=VT?~5IWcC8oqUw8=w-DyZ8>ElXO=9w zlYjKXCy$(%7=;Dy>e>3(<YPyVOd5}kk3TUsZA>3IIyr_Ice&cHJ0apbdG8+r0{<&O gm-BVE^-b>jWlr4A_5VUp_m2W2BmQfC@81yq1&3-)ZvX%Q literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt new file mode 100644 index 00000000..56a89614 --- /dev/null +++ b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt @@ -0,0 +1,13 @@ +Functions changes summary: 0 Removed, 0 Changed, 0 Added function +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + +1 Changed variable: + + [C]'char buggy_symbol[5]' was changed to 'char buggy_symbol[10]': + size of symbol (in bytes) changed from 5 to 10 + type of variable changed: + type name changed from 'char[5]' to 'char[10]' + array type size changed from 40 to 80 bits: + array type subrange 1 changed length from 5 to 10 + + diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so new file mode 100755 index 0000000000000000000000000000000000000000..737c5f06fef86b3d6d05ed28d08b02f8ef3cddbb GIT binary patch literal 8725 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so new file mode 100755 index 0000000000000000000000000000000000000000..2ea5b962f54d04d27914a240b1b2764e58155293 GIT binary patch literal 8725 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c new file mode 100644 index 00000000..1ed48875 --- /dev/null +++ b/tests/data/test-diff-dwarf/test35-pr19173-libfoo-long.c @@ -0,0 +1,15 @@ +// This file is the source code for 4 binaries. +// It comes from one of the comments of bug libabigail/19173. + +// To compile the first two binaries, please do: +// gcc test35-pr19173-libfoo-long.c -shared -fpic -o test35-pr19173-libfoo-long-gcc.so -g +// gcc test35-pr19173-libfoo-long.c -shared -fpic -o test35-pr19173-libfoo-long-gcc2.so -g -DLONG +// +// To compile the next two binaries, please do: +// clang test35-pr19173-libfoo-long.c -shared -fpic -o test35-pr19173-libfoo-long-clang.so -g +// clang test35-pr19173-libfoo-long.c -shared -fpic -o test35-pr19173-libfoo-long-clang2.so -g -DLONG +#ifdef LONG +char buggy_symbol[10]; +#else +char buggy_symbol[5]; +#endif diff --git a/tests/test-diff-dwarf.cc b/tests/test-diff-dwarf.cc index d148f1a7..9e41c799 100644 --- a/tests/test-diff-dwarf.cc +++ b/tests/test-diff-dwarf.cc @@ -272,6 +272,18 @@ InOutSpec in_out_specs[] = "data/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt", "output/test-diff-dwarf/test34-pr19173-libfoo-report-0.txt" }, + { + "data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc.so", + "data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc2.so", + "data/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt", + "output/test-diff-dwarf/test35-pr19173-libfoo-long-gcc-report-0.txt" + }, + { + "data/test-diff-dwarf/test35-pr19173-libfoo-long-clang.so", + "data/test-diff-dwarf/test35-pr19173-libfoo-long-clang2.so", + "data/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt", + "output/test-diff-dwarf/test35-pr19173-libfoo-long-clang-report-0.txt" + }, // This should be the last entry {NULL, NULL, NULL, NULL} };