On 2/16/21 10:11 AM, Tom de Vries wrote: > The problem is caused by the odr code in checksum_ref_die, which skips > checksum calculation for the children of odr types, with as unintended > side-effect that it break the CK_BAD propagation to toplevel DIEs. > > Fix this by making the skipping of the checksum calculation less intrusive. > > Also, add the assert in partition_found_dups to catch this earlier and > easier. > > Unfortunately, the fix also means that the earlier reported performance > improvement of odr on cc1, of 42.30%: > ... > $ ./dwz.master cc1 -o 1 -lnone > $ ./diff.sh cc1 1 > .debug_info red: 44.84% 111527248 61527733 > .debug_abbrev red: 40.28% 1722726 1028968 > .debug_str red: 0% 6609355 6609355 > total red: 42.30% 119859329 69166056 > ... > to 54.55%: > ... > $ ./dwz.master cc1 -o 2 -lnone --odr > $ ./diff.sh cc1 2 > .debug_info red: 57.46% 111527248 47449258 > .debug_abbrev red: 75.08% 1722726 429434 > .debug_str red: 0% 6609355 6609355 > total red: 54.55% 119859329 54488047 > ... > pretty much disappears: > ... > $ ./dwz.fix cc1 -o 3 -lnone --odr > $ ./diff.sh cc1 3 > .debug_info red: 45.44% 111527248 60858640 > .debug_abbrev red: 42.88% 1722726 984084 > .debug_str red: 0% 6609355 6609355 > total red: 42.89% 119859329 68452079 > ... > I managed to come up with a fix that doesn't suffer from this performance regression. Any comments? Thanks, - Tom