C++ exception problems in mingw cross compiler

Toralf Lund toralf@procaptura.com
Tue Sep 19 18:06:00 GMT 2006


>>>> Unfortunately, I don't quite get a working setup with this, as the SJLJ
>>>> exception code isn't correctly built. The problem appears to be that
>>>> certain routines are compiled only if "__USING_SJLJ_EXCEPTIONS__" is
>>>> set, which it isn't. And I can't figure out how it's supposed to get
>>>> defined. "configure" does not define this macro - only (optionally)
>>>> "CONFIG_SJLJ_EXCEPTIONS". [ ... ]
>>>   It should get defined if you used "--enable-sjlj-exceptions" on your
>>> configure commandline IIUIC. 
>>>
>>>       
>> Apparently it's not quite as simple as that, but I've figured it all out
>> now. It depends on what configure commandline you are talking about,
>>     
>
>   The top level configure commandline.
>   
There is no such thing as "the" configure commandline. I have two 
different ones. Or three, if you count the libc one...
>   
>> actually, as it turns out that parts of the build rely on macros that
>> are automatically defined by the preprocessor based on the choice of
>> exception type. This means that the compiler you are using for the
>> build, as opposed to the compiler you are building, must be configured
>> via "--enable-sjlj-exceptions". [ ... ]
>   Yes, the "bootstrap" (as it is often described in cross-gcc terminology) aka
> "minimal" compiler and the final one should *definitely* both be configured
> with all the same ABI-related options.  You don't want to build one big-endian
> and the other little-endian either....
>   
I haven't seen those as the same type of options, though. The big/little 
endian flags control the low-level code-generation, while the exception 
type settings look more like options related to the inclusion of 
libraries or compiler features that are outside the scope of the 
boostrap build. I mean, that's how other "--enable" or "--disable" 
setting work (or some of them, at least), and this particular one seems 
mainly to affect "#ifdefs" that are only really relevant during the 
final build.

I don't use the same --enable-languages setting for the minimal and full 
compiler, either...
>   [ ... ]
>
>   If you refer to "the build compiler", people will think you are referring to
> your native compiler,
When I said "build compiler", I referred to the compiler used while 
building the "full gcc" *in general*. I'm not sure I know a different 
way to describe it. I mean, I was specifically not talking about the 
"minimal" gcc, as the point I was trying to make, was that I don't know 
if you have to compile the full gcc with such a separately built compiler.
>  and that absolutely shouldn't have to have the same
> configuration options as needed for the target!  But yes, you do need the same
> configure options for the minimal and full compilers; only things like the
> --with-headers/--with-libs/--with-newlib flags should have changed between
> them, according to the precise details of your cross-build procedure.
>   
Well, like I said, it does seem natural to change some of the "--enable" 
or "--disable" settings, too.

And what does "--enable-sjlj-exceptions" give me, anyway? I mean, does 
it affect anything besides the set of pre-defined macros? Could the 
references to those have been replaced by the local config settings?

But never mind all that. All I'm trying to say, is that I was originally 
confused by the configure setup, but now I'm not, and it works, and I'm 
happy...

Maybe I'll try to adjust the mingw patches for a slightly newer gcc 
release, though. I originally intended to use 3.4.6...

- Toralf

--
For unsubscribe information see http://sourceware.org/lists.html#faq



More information about the crossgcc mailing list