segfault in sysdep/i386/backtrace.h

Marco Trudel mtrudel@gmx.ch
Mon Feb 19 18:26:00 GMT 2007


Andrew Haley wrote:
> Marco Trudel writes:
>  > Marco Trudel wrote:
>  > > Andrew Haley wrote:
>  > >> Marco Trudel writes:
>  > >>  >  >  > The segfault happens on reading scan_bytes[x]. I assume that 
>  > >> there is no  > "pushl %ebp; movl %esp, %ebp" function prologue in 
>  > >> certain cases and  > thus we go reading protected areas below the 
>  > >> function.
>  > >>
>  > >> Why don't you have a look, and tell us what is there?
>  > > 
>  > > Because I don't know how and what these hex values mean (how to 
>  > > interpret them) when doing the backtrace...
>  > 
>  > Ok, learnt it...
>  > The problem is that the code assumes that there is always a "pushl %ebp; 
>  > movl %esp, %ebp" function prologue. But, from [1]: "Note that many 
>  > compilers can optimize these standard sequences away when not needed 
>  > (often called "no stackframe generation")".
>  > 
>  > So, when turning on maximum optimization in microsoft visual c++, there 
>  > are no longer "pushl %ebp; movl %esp, %ebp" intros and thus we run into 
>  > trouble (tried it). I don't know if GCC can do that too... Can it?
> 
> It can.
> 
>  > I checked a couple of dll's (awt.dll, swt.dll, aBluetoothLib.dll) I had 
>  > around and they all miss the intro in at least a couple of functions.
>  > 
>  > So, questions:
>  > - Is this a sjlj-exception only problem?
> 
> Yes.
> 
>  > Can DW EH do that better?
> 
> Yes.
> 
>  > - Is there another way to reliably recognize the start of a function? I 
>  > assume this only affects native libs since Java compiled apps will 
>  > always have the intro?!
> 
> Yes.  We tell gcj not to optimize away the frame generation.
> 
> We either have to write a ton of heuristics to figure this stuff out
> or fix DWARF / SEH in Windows.

Well, I think we should go for DWARF. Last I heard from Danny was that 
it worked already but then was broken again for building gcc. Since 
then, I never got an answer from him again.
So, for the mean time we have two options for mingw:
1. Tell users to only use dlls with the entry sequences.
2. Fix gcj to not rely on them.

I will take a look at the second option tomorrow. Ranjit introduced the 
dependency of the entry sequence with this patch: 
http://gcc.gnu.org/ml/java-patches/2006-q3/msg00051.html. So it must 
have done something halfway reasonable before. Better have running 
programs than nonrunning programs with sometimes pretty exceptions.
Does anyone know of other places checking for that entry sequence?


Marco



More information about the Java mailing list