[Bug target/29487] Shared libstdc++ fails to link

mark at codesourcery dot com gcc-bugzilla@gcc.gnu.org
Mon Feb 5 03:06:00 GMT 2007



------- Comment #17 from mark at codesourcery dot com  2007-02-05 03:06 -------
Subject: Re:  Shared libstdc++ fails to link

dave at hiauly1 dot hia dot nrc dot ca wrote:

> Unwind data.  We're talking about functions compiled in the
> current object.

OK.

I'm not sure it matters, but if these functions don't throw exceptions,
I don't understand why we're not marking them TREE_NOTHROW.  I suspect
there's something that I'm just not following.

The fact that linker semantics allow you to replace a function at the
object level do not make it valid at the language level.

So, for example, I would expect:

  void f () throw () {}

and:

  void g() {}

to both be TREE_NOTHROW, independent of linkage, weakness, etc.
Certainly, not marking such functions as TREE_NOTHROW will inhibit
optimization of their callers, which seems bad.

Why aren't the functions being marked TREE_NOTHROW?

> There are numerous "one-only/weak" functions which don't bind locally
> in libstdc++.  Previously, *ALL* these functions were determined to be
> nothrow and no unwind data was emitted for them.  Now, unwind
> data is being emitted because these functions don't bind locally.
> This breaks the HP-UX 10 DWARF2 unwind implementation (obviously a
> latent bug) because of the relocation issue mentioned above.

I understand that this is a latent bug in the HP-UX linker.

To be honest, I'm less concerned about HP-UX 10.10 per se than about the
possible bloat on other targets.  (HP-UX 10 is not a primary or
secondary target.)  At the same time, I certainly don't want to
gratuitously break any target.

Assuming that the changes in TREE_NOTHROW and emission of exception
information make sense, what solution would you implement for HP-UX 10?
 Use SJLJ exception handling?

Thanks,


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29487



More information about the Gcc-bugs mailing list