]> gcc.gnu.org Git - gcc.git/commitdiff
backtrace.h (fallback_backtrace): Add "0x55 0x8B 0xEC" as another sequence that can...
authorRanjit Mathew <rmathew@gcc.gnu.org>
Sat, 19 Aug 2006 15:35:11 +0000 (15:35 +0000)
committerRanjit Mathew <rmathew@gcc.gnu.org>
Sat, 19 Aug 2006 15:35:11 +0000 (15:35 +0000)
* sysdep/i386/backtrace.h (fallback_backtrace): Add "0x55 0x8B 0xEC"
as another sequence that can indicate a "pushl %ebp; movl %esp, %ebp"
function prologue.

From-SVN: r116258

libjava/ChangeLog
libjava/sysdep/i386/backtrace.h

index 5cb7bc4cb2720db90e0bf530a52fc1917eaf15df..1e3680f59c759dfcc6aba914fc349a9b649c6187 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-19  Ranjit Mathew  <rmathew@gcc.gnu.org>
+
+       * sysdep/i386/backtrace.h (fallback_backtrace): Add "0x55 0x8B 0xEC"
+       as another sequence that can indicate a "pushl %ebp; movl %esp, %ebp"
+       function prologue.
+
 2006-08-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        * Makefile.am (install-exec-hook): Support $(DESTDIR).
index 9fe12b118a9b02fcea8f765cb73d45b06f998b3a..63b3274613789c035739d7d896e945ffb7860a7d 100644 (file)
@@ -71,8 +71,9 @@ fallback_backtrace (_Unwind_Trace_Fn trace_fn, _Jv_UnwindState *state)
 
       /* Try to locate a "pushl %ebp; movl %esp, %ebp" function prologue
          by scanning backwards at even addresses below the return address.
-         This instruction sequence is encoded as 0x55 0x89 0xE5.  We give up
-         if we do not find this sequence even after scanning 1024K of memory.
+         This instruction sequence is encoded either as 0x55 0x89 0xE5 or as
+         0x55 0x8B 0xEC.  We give up if we do not find this sequence even
+         after scanning 1024K of memory.
          FIXME: This is not robust and will probably give us false positives,
          but this is about the best we can do if we do not have DWARF-2 unwind
          information based exception handling.  */
@@ -83,8 +84,9 @@ fallback_backtrace (_Unwind_Trace_Fn trace_fn, _Jv_UnwindState *state)
       for ( ; scan_addr >= limit_addr; scan_addr -= 2)
         {
           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;
               break;
This page took 0.079643 seconds and 5 git commands to generate.