> Hello all, and ADA hackers in particular :-)
Ada, not ADA, that's not an acronym but a name, see http://www.adaic.org
> However the main issues I've been having trouble with show up when I try
> and run the testsuite.
>
> The first problem I ran into was total failure to throw and catch
> exceptions in ADA, failing with a SEGV every time. It wasn't enough to
> just set EH_MECHANISM=-gcc in the target-specific section of
> gcc/ada/Makefile.in; I found that lots of the ada runtime had been compiled
> without EH frame data, so the unwinder couldn't throw through them and just
> blew up at runtime.
Yes, an annoying merge glitch. The safest approach is probably to revert the
EH_MECHANISM change, on the 4.3 branch at least. This change is pre-approved
if you get a working Ada compiler with it.
> So I added "T_ADA_CFLAGS=-fexceptions" to the target clause in
> Makefile.in as well, but that seems wrong to me: surely the build system
> ought to do that already?
Neither, this is done automatically by the compiler, like in C++.
> I also tried manually setting ZCX_By_Default to true in the
> system-$target.ads, and even then I was getting similar crashes to the
> above, because some of the library .o files still contained no DW2 eh_frame
> tables, which blows up at runtime when you throw.
Yes, ZCX_By_Default would have needed to be set to true in conjunction with
the EH_MECHANISM change, the settings are coupled.
> Next problem I ran into was this:
>
> ------------------------------------<snip>---------------------------------
>--- === acats support ===
> Generating support files...error: "macrosub.adb" must be recompiled
> ("system.ads" has been modified)
> error: "defs.ads" must be recompiled ("system.ads" has been modified)
> error: "getsubs.adb" must be recompiled ("system.ads" has been modified)
> error: "parsemac.adb" must be recompiled ("system.ads" has been modified)
> error: "s-stalib.adb" and "macrosub.adb" compiled with different exception
> handling mechanisms
> error: "a-except.adb" and "macrosub.adb" compiled with different exception
> handling mechanisms
> [ ... snip many more ... ]
> ------------------------------------<snip>---------------------------------
>---
>
> I think it might be that this arises because the GNAT I'm using to
> bootstrap was configured for sjlj EH, and I'm trying to build one
> configured for ZCX.
Yes, very likely.
> 1. Is it supposed to work to bootstrap gnat with a compiler using a
> different EH model from the one you're trying to build?
Yes, I think so.
> 2. Where it uses the host compiler, would it be ok to use the newly-built
> target one instead if host==target, i.e. not a cross compiler?
Yes, probably.
> 3. Should I have needed to add -fexceptions, and if not, why not?
No, see above.
--
Eric Botcazou