This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: segfault in sysdep/i386/backtrace.h
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.
Andrew.