This is the mail archive of the mailing list for the Java 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: Natively compiled SWT segfaults under Windows

Hash: SHA1

Olivier Parisy wrote:


> With /Oy-:
> _Java_org_eclipse_swt_internal_win32_OS_AbortDoc@12:
> 55 push ebp
> 8b ec mov ebp,esp


>>  If you need to unwind through a function in a DLL and get the stack
>>  trace, you need to compile the DLL with frame pointers enabled. (Even
>>  then the current code is quite kludgy - it assumes that the initial
>>  part of a function prologue is a sequence of "PUSH ebp; MOV ebp, esp"
>>  instructions which might not be true for other compilers or even GCC
>>  under "different" circumstances.)
> Considering the disassembled code above, this hypothesis looks rather
> robust.

No. Look at the opcodes for the instructions comprising the
prologue - it's "0x55 0x8B 0xEC" instead of the "0x55 0x89 0xE5"
assumed by the code. Both represent "PUSH ebp; MOV ebp, esp", but
the encoding used is different. See:

for reference.

If you want to continue with the existing kludge, you can modify
"libjava/sysdep/i386/backtrace.h" like so:
- ------------------------- 8< -------------------------
- --- backtrace.h.orig    Fri Aug 18 11:50:51 2006
+++ backtrace.h Fri Aug 18 11:53:01 2006
@@ -84,6 +84,7 @@
           unsigned char *scan_bytes = (unsigned char *)scan_addr;
- -          if (scan_bytes[0] == 0x55 && scan_bytes[1] == 0x89
- -              && scan_bytes[2] == 0xE5)
+          if (scan_bytes[0] == 0x55
+             && ((scan_bytes[1] == 0x89 && scan_bytes[2] == 0xE5)
+                 || (scan_bytes[1] == 0x8B && scan_bytes[2] == 0xEC)))
               ctx.meth_addr = scan_addr;
- ------------------------- 8< -------------------------

recompile libjava and see if it fixes your problem.

A "proper" solution would be to use a prologue analyser like
that used in GDB:

but that is too much work for too little a gain.


- --
Ranjit Mathew      Email: rmathew AT gmail DOT com

Bangalore, INDIA.    Web:

Version: GnuPG v1.4.2.2 (MingW32)
Comment: Using GnuPG with Mozilla -


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