This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Exception handling on AIX5.3 with gcc 3.4.6


Hi brian,

tx a lot for the great answer!

Shlom



On Sat, Mar 22, 2008 at 5:24 AM, Brian Dessent <brian@dessent.net> wrote:
>
> Shlom Marom wrote:
>
> > 1. is it relevant also for gcc (not g++)
>
> If you're asking if there's a problem linking C code with static libgcc
> then I would guess it's probably not an issue since you cannot throw or
> catch exceptions in C.
>
> > 2. what is the reason for that?
>
> I don't know the specific reason for your case, but I can think of
> several general reasons why static linking libgcc would be a problem.
>
> The first is that it creates the possibility for multiple instances of
> the unwinder in the final process, each unaware of the other.  For
> example, suppose you had a main program and a library, each linked
> statically to libgcc.  Each would register their unwind information
> (either .eh_frame FDE tables for DWARF-2, or function contexts for SJLJ,
> or whatever) with their own separate copy of the unwinder.  If one tried
> to throw to the other, the unwinder would not find any handler since it
> would be unaware of the registered info from the other module, and would
> probably abort/terminate with an uncaught exception.  By having libgcc
> be a shared object there is only ever one instance shared by all the
> modules in the process.
>
> The other potential issue is that when statically linking the link
> editor only selects objects from an archive that contain symbols that
> have been referenced by something in the objects it's scanned so far.
> All unreferenced objects are discarded.  If there were routines
> necessary by the unwinder at runtime that are not directly referenced by
> user code, they wouldn't be included in the link.  I don't know if this
> is actually a problem in reality or not, but if it is you might be able
> to use -Wl,--whole-archive (or whatever the AIX linker calls it if not
> using the GNU linker) to work around it.
>
> Another reason could simply be that the initialization of the unwinder
> and registration of unwind info requires hooks only available to a
> shared library, such as the DT_INIT/DT_FINI dynamic tags (corresponding
> to the .init and .fini sections.)
>
> > 3. is it common to distribute a gcc llib with your product? do you
> > know anyhing about the licensing issue?
>
> To answer that question look at the code.  Every file has a copyright
> header.  In the case of libgcc you should look at gcc/libgcc2.{c,h}, one
> or more of gcc/unwind*, and probably one or more gcc/gthr*.  The
> specific files that get linked into libgcc depend on details of the
> target.
>
> But I'll save you the work.  libgcc is licensed under GPLv2 with the
> "runtime exception" clause, which is intended to allow unrestricted use
> of the gcc libraries when linked with your code -- just using gcc to
> build something doesn't require that thing to be GPL.  You can think of
> it another way: you're already distributing libgcc code with your
> product (statically linked into it) so switching to shared libgcc
> doesn't really change the situation.  But as with all things legal,
> consult a lawyer if you want real definitive answers, et cetera.
>
> As to whether it's common to distribute libgcc, I guess that varies
> widely.  If you're talking about linux then it would be hard to find a
> system without a shared copy of libgcc already on the system so it's
> usually not necessary to distribute it.  However, there can be problems
> if the compiler you use contains a more recent version of libgcc than
> what's on the user's system so I suppose there's always some need for
> distributing libgcc if it's not possible to statically link it.  In
> general though distributing binary software is a whole separate
> headache, spanning much more than just libgcc.
>
> Brian
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]