On 6/30/22 22:05, Mark Wielaard wrote: > Hi Martin, > > On Thu, Jun 30, 2022 at 04:23:02PM +0200, Martin Liška wrote: >> On 6/28/22 23:43, Mark Wielaard wrote: >>> On Mon, Jun 27, 2022 at 09:25:23AM +0200, Martin Liška wrote: >>>> On 6/26/22 00:17, Mark Wielaard wrote: >>>>> The build is now green on all builders except one: >>>>> https://builder.sourceware.org/buildbot/#/builders?tags=dwz >>>>> dwz-opensusetw-x86_64 fails one testcase: odr-struct-ns.sh >>>>> https://builder.sourceware.org/buildbot/#/builders/100/builds/2 >>>>> >>>>> Martin, could you take a look at what is different on tumbleweed from >>>>> the other builders that makes that testcase fail? >>>> >>>> It's going to be likely GCC compiler version that plays role. >>>> >>>> Anyway, it's caused by: >>>> >>>> expected_decl_cnt: 20, decl_cnt: 10 >>> >>> I took a quick look and this seems to be caused by lots of extra >>> DW_AT_declaration in the original binary: >>> >>> readelf -wi odr-struct-ns | grep -3 DW_AT_declaration | grep name >>> <1c0> DW_AT_name : (indirect string, offset: 0x3f1): sockaddr_at >>> <1d4> DW_AT_name : (indirect string, offset: 0x450): sockaddr_ax25 >>> <1e8> DW_AT_name : (indirect string, offset: 0x366): sockaddr_dl >>> <1fc> DW_AT_name : (indirect string, offset: 0x382): sockaddr_eon >>> <2c4> DW_AT_name : (indirect string, offset: 0x5e): sockaddr_inarp >>> <2d8> DW_AT_name : (indirect string, offset: 0xa7): sockaddr_ipx >>> <2ec> DW_AT_name : (indirect string, offset: 0x51): sockaddr_iso >>> <300> DW_AT_name : (indirect string, offset: 0x11c): sockaddr_ns >>> <314> DW_AT_name : (indirect string, offset: 0x86): sockaddr_un >>> <328> DW_AT_name : (indirect string, offset: 0x3bd): sockaddr_x25 >>> <671> DW_AT_name : (indirect string, offset: 0x3f1): sockaddr_at >>> <685> DW_AT_name : (indirect string, offset: 0x450): sockaddr_ax25 >>> <699> DW_AT_name : (indirect string, offset: 0x366): sockaddr_dl >>> <6ad> DW_AT_name : (indirect string, offset: 0x382): sockaddr_eon >>> <770> DW_AT_name : (indirect string, offset: 0x5e): sockaddr_inarp >>> <784> DW_AT_name : (indirect string, offset: 0xa7): sockaddr_ipx >>> <798> DW_AT_name : (indirect string, offset: 0x51): sockaddr_iso >>> <7ac> DW_AT_name : (indirect string, offset: 0x11c): sockaddr_ns >>> <7c0> DW_AT_name : (indirect string, offset: 0x86): sockaddr_un >>> <7d4> DW_AT_name : (indirect string, offset: 0x3bd): sockaddr_x25 >>> <9e0> DW_AT_name : bbb >>> DW_AT_name : ccc >> >> Just to summarize it what we have for Tumbleweed and Leap: >> >> TW: >> >> ==before== >> <1c0> DW_AT_name : (indirect string, offset: 0x3f1): sockaddr_at >> <1d4> DW_AT_name : (indirect string, offset: 0x450): sockaddr_ax25 >> <1e8> DW_AT_name : (indirect string, offset: 0x366): sockaddr_dl >> <1fc> DW_AT_name : (indirect string, offset: 0x382): sockaddr_eon >> <2c4> DW_AT_name : (indirect string, offset: 0x5e): sockaddr_inarp >> <2d8> DW_AT_name : (indirect string, offset: 0xa7): sockaddr_ipx >> <2ec> DW_AT_name : (indirect string, offset: 0x51): sockaddr_iso >> <300> DW_AT_name : (indirect string, offset: 0x11c): sockaddr_ns >> <314> DW_AT_name : (indirect string, offset: 0x86): sockaddr_un >> <328> DW_AT_name : (indirect string, offset: 0x3bd): sockaddr_x25 >> <671> DW_AT_name : (indirect string, offset: 0x3f1): sockaddr_at >> <685> DW_AT_name : (indirect string, offset: 0x450): sockaddr_ax25 >> <699> DW_AT_name : (indirect string, offset: 0x366): sockaddr_dl >> <6ad> DW_AT_name : (indirect string, offset: 0x382): sockaddr_eon >> <770> DW_AT_name : (indirect string, offset: 0x5e): sockaddr_inarp >> <784> DW_AT_name : (indirect string, offset: 0xa7): sockaddr_ipx >> <798> DW_AT_name : (indirect string, offset: 0x51): sockaddr_iso >> <7ac> DW_AT_name : (indirect string, offset: 0x11c): sockaddr_ns >> <7c0> DW_AT_name : (indirect string, offset: 0x86): sockaddr_un >> <7d4> DW_AT_name : (indirect string, offset: 0x3bd): sockaddr_x25 >> <9e0> DW_AT_name : bbb >> DW_AT_name : ccc >> ==after== >> DW_AT_name : (indirect string, offset: 0x3f1): sockaddr_at >> DW_AT_name : (indirect string, offset: 0x450): sockaddr_ax25 >> <10a> DW_AT_name : (indirect string, offset: 0x366): sockaddr_dl >> <118> DW_AT_name : (indirect string, offset: 0x382): sockaddr_eon >> <1b6> DW_AT_name : (indirect string, offset: 0x5e): sockaddr_inarp >> <1c4> DW_AT_name : (indirect string, offset: 0xa7): sockaddr_ipx >> <1d2> DW_AT_name : (indirect string, offset: 0x51): sockaddr_iso >> <1e0> DW_AT_name : (indirect string, offset: 0x11c): sockaddr_ns >> <1ee> DW_AT_name : (indirect string, offset: 0x86): sockaddr_un >> <1fc> DW_AT_name : (indirect string, offset: 0x3bd): sockaddr_x25 >> >> while Leap has: >> >> ==before== >> <105> DW_AT_name : bbb >> <1cb> DW_AT_name : ccc >> <2b3> DW_AT_name : (indirect string, offset: 0x4b6): __preinit_array_end >> <2be> DW_AT_name : (indirect string, offset: 0x2a5): __init_array_start >> <2c9> DW_AT_name : (indirect string, offset: 0x4ca): __init_array_end >> <2f1> DW_AT_name : (indirect string, offset: 0x2fd): __fini_array_end >> <2fc> DW_AT_name : (indirect string, offset: 0x2ed): __libc_csu_fini >> <3bb> DW_AT_linkage_name: (indirect string, offset: 0x33d): _init >> <3bf> DW_AT_name : (indirect string, offset: 0x33d): _init >> ==after== >> <27e> DW_AT_name : (indirect string, offset: 0x4b6): __preinit_array_end >> <286> DW_AT_name : (indirect string, offset: 0x2a5): __init_array_start >> <28e> DW_AT_name : (indirect string, offset: 0x4ca): __init_array_end >> <2ab> DW_AT_name : (indirect string, offset: 0x2fd): __fini_array_end >> <2b4> DW_AT_name : (indirect string, offset: 0x2ed): __libc_csu_fini >> <34c> DW_AT_linkage_name: (indirect string, offset: 0x33d): _init >> <350> DW_AT_name : (indirect string, offset: 0x33d): _init >> >> So as Florian said, we should ignore sockeraddr decls and check that bbb and ccc >> are not present after dwz. >> >> What about using the following patch? > > That fails on my local debian-arm64 setup. > > Because bbb and ccc were the only DW_AT_declarations in the original > binary. > > $ readelf -wi odr-struct-ns | grep -3 DW_AT_declaration | grep name > <7c> DW_AT_name : bbb > <14b> DW_AT_name : ccc > > So > readelf -wi 1 | grep -3 DW_AT_declaration > decls > fails because the grep fails > > So I think that should also be a passing condition (no decls left). > It would be good to make sure they were there at the start though. > > Cheers, > > Mark > Oh, I see, so please try the updated version of the patch? Cheers, Martin