Bug 25411 - CU referenced from PU (--odr-mode=basic case)
Summary: CU referenced from PU (--odr-mode=basic case)
Status: RESOLVED FIXED
Alias: None
Product: dwz
Classification: Unclassified
Component: default (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-01-17 15:47 UTC by Tom de Vries
Modified: 2020-01-20 15:43 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2020-01-17 15:47:41 UTC
When applying the assert patch from PR25398 comment 1 to master, we hit the assert like this:
...
$ dwz cc1 -o 1 -lnone --odr --odr-mode=basic
dwz: dwz.c:10943: write_die: Assertion `IMPLIES (cu->cu_kind == CU_PU, die_cu (refd)->cu_kind == CU_PU)' failed.
Aborted (core dumped)
...

The process of splitting the duplicate chain for odr DIEs can result in some of the DIEs not being part of any duplicate chain afterwards, and consequently not being part of a partial unit, while in fact that may be required.

Normally, in partition_dups phase 1 we decide which DIEs we want to move into partial units because it's profitable, and in partition_dups phase 2 we find which DIEs we have to move into partial units because they are referenced by other DIEs already in partial units.

So, if a DIE marked as referenced in phase 2 is not part of any duplicate chain, it won't be moved to a partial unit, causing the reference from PU to CU.