]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386-signal.h (MAKE_THROW_FRAME): Advance EIP by two bytes to make it point after...
authorAndrew Haley <aph@cygnus.com>
Wed, 7 Jul 1999 10:53:17 +0000 (10:53 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 7 Jul 1999 10:53:17 +0000 (10:53 +0000)
1999-07-07  Andrew Haley  <aph@cygnus.com>
        * include/i386-signal.h (MAKE_THROW_FRAME): Advance EIP by two
bytes to make it point after the instruction where the trap
occurred.
(HANDLE_DIVIDE_OVERFLOW): Ditto.

From-SVN: r27995

libjava/ChangeLog
libjava/include/i386-signal.h

index 722b9fca552887abbe6855839de6ac16a8205cb2..1a22afb92757f890bf14319788eb24caffb1552f 100644 (file)
@@ -1,3 +1,10 @@
+1999-07-07  Andrew Haley  <aph@cygnus.com>
+
+        * include/i386-signal.h (MAKE_THROW_FRAME): Advance EIP by two
+       bytes to make it point after the instruction where the trap
+       occurred.
+       (HANDLE_DIVIDE_OVERFLOW): Ditto.
+
 1999-07-07  Tom Tromey  <tromey@cygnus.com>
 
        * mauve-libgcj: Explicitly enable formerly disabled java.text
index 51a94f92da21ffdcc0dcacd59cd02349753388f8..ddb66bea1256f3fd942380b8cea77cb667630fb8 100644 (file)
@@ -33,6 +33,11 @@ do                                                                   \
   register unsigned long _ebp = _regs->ebp;                            \
   register unsigned char *_eip = (unsigned char *)_regs->eip;          \
                                                                        \
+  /* Advance the program counter so that it is after the start of the  \
+     instruction:  the x86 exception handler expects                   \
+     the PC to point to the instruction after a call. */               \
+  _eip += 2;                                                           \
+                                                                       \
   asm volatile ("mov %0, (%%ebp); mov %1, 4(%%ebp)"                    \
                : : "r"(_ebp), "r"(_eip));                              \
 }                                                                      \
@@ -57,7 +62,7 @@ do                                                                    \
    * As the instructions are variable length it is necessary to do a   \
    * little calculation to figure out where the following instruction  \
    * actually is.                                                      \
-                                                                       \
+                                                                       \
    */                                                                  \
                                                                        \
   if (_eip[0] == 0xf7)                                                 \
@@ -99,6 +104,14 @@ do                                                                  \
          _eip = (unsigned char *)_ebp[1];                              \
          _ebp = (unsigned long *)_ebp[0];                              \
        }                                                               \
+      else                                                             \
+       {                                                               \
+         /* Advance the program counter so that it is after the start  \
+            of the instruction: this is because the x86 exception      \
+            handler expects the PC to point to the instruction after a \
+            call. */                                                   \
+         _eip += 2;                                                    \
+       }                                                               \
     }                                                                  \
                                                                        \
   asm volatile ("mov %0, (%%ebp); mov %1, 4(%%ebp)"                    \
@@ -118,9 +131,9 @@ do                                                          \
   }                                                            \
 while (0)  
 
-#define INIT_FPE                                                \
+#define INIT_FPE                                               \
 do                                                             \
-  {                                                            \
+  {                                                            \
     arithexception = new java::lang::ArithmeticException       \
       (JvNewStringLatin1 ("/ by zero"));                       \
     struct sigaction act;                                      \