On 09/22/11 16:40, Alan Modra wrote: > The bootstrap breakage happens on libmudflap/mf-hooks1.c, compiling > __wrap_malloc. Eliding some detail, this function starts off as > > void *__wrap_malloc (size_t c) > { > if (__mf_starting_p) > return __real_malloc (c); > > The "if" is bb2, the sibling call bb3, and shrink wrap rather nicely > puts the prologue for the rest of the function in bb4. A great > example of shrink wrap doing as it should, if you ignore the fact that > optimizing for startup isn't so clever. However, bb-reorder inverts > the "if" and moves the sibling call past other blocks in the function. > That's wrong, because the dwarf unwind info for the prologue is not > applicable for the sibling call block: The prologue hasn't been > executed for that block. (The unwinder sequentially executes all > unwind opcodes from the start of the function to find the unwind state > at any instruction address.) Exactly the same sort of problem is > generated by your "unconverted_simple_returns" code.
dwarf2cfi should be able to figure this out. I'd need to see RTL dumps to get an idea what's going on. Bernd