Code in arch/exception.c can be used in x86_64 as well.
Signed-off-by: Tomek Grabiec <[email protected]>
---
arch/x86/Makefile_32 | 2 +-
arch/x86/exception.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
arch/x86/exception_32.c | 73 -----------------------------------------------
test/arch-x86/Makefile | 2 +-
4 files changed, 75 insertions(+), 75 deletions(-)
create mode 100644 arch/x86/exception.c
delete mode 100644 arch/x86/exception_32.c
diff --git a/arch/x86/Makefile_32 b/arch/x86/Makefile_32
index 784e5f7..9889039 100644
--- a/arch/x86/Makefile_32
+++ b/arch/x86/Makefile_32
@@ -7,7 +7,7 @@ ARCH_OBJS = \
arch/x86/registers_32.o \
arch/x86/stack-frame.o \
arch/x86/use-def.o \
- arch/x86/exception_32.o \
+ arch/x86/exception.o \
arch/x86/unwind_32.o \
arch/x86/signal.o \
jamvm/os/$(OS)/i386/dll_md.o \
diff --git a/arch/x86/exception.c b/arch/x86/exception.c
new file mode 100644
index 0000000..81174b5
--- /dev/null
+++ b/arch/x86/exception.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2009 Tomasz Grabiec
+ *
+ * This file is released under the GPL version 2 with the following
+ * clarification and special exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library. Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module. An
+ * independent module is a module which is not derived from or based on
+ * this library. If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ *
+ * Please refer to the file LICENSE for details.
+ */
+
+#include <jit/compilation-unit.h>
+#include <jit/basic-block.h>
+#include <jit/cu-mapping.h>
+#include <jit/exception.h>
+
+#include <arch/stack-frame.h>
+#include <arch/exception.h>
+#include <arch/memory.h>
+#include <arch/signal.h>
+
+unsigned char *
+throw_exception(struct compilation_unit *cu, struct object *exception)
+{
+ unsigned char *native_ptr;
+ struct jit_stack_frame *frame;
+
+ native_ptr = __builtin_return_address(0) - 1;
+ frame = __builtin_frame_address(1);
+
+ return throw_exception_from(cu, frame, native_ptr, exception);
+}
+
+void throw_exception_from_signal(void *ctx, struct object *exception)
+{
+ struct jit_stack_frame *frame;
+ struct compilation_unit *cu;
+ unsigned long source_addr;
+ unsigned long *stack;
+ ucontext_t *uc;
+ void *eh;
+
+ uc = ctx;
+
+ source_addr = uc->uc_mcontext.gregs[REG_IP];
+ cu = get_cu_from_native_addr(source_addr);
+ frame = (struct jit_stack_frame*)uc->uc_mcontext.gregs[REG_BP];
+
+ eh = throw_exception_from(cu, frame, (unsigned char*)source_addr,
+ exception);
+
+ uc->uc_mcontext.gregs[REG_IP] = (unsigned long)eh;
+
+ /* push exception object reference on stack */
+ uc->uc_mcontext.gregs[REG_SP] -= sizeof(exception);
+ stack = (unsigned long*)uc->uc_mcontext.gregs[REG_SP];
+ *stack = (unsigned long)exception;
+}
diff --git a/arch/x86/exception_32.c b/arch/x86/exception_32.c
deleted file mode 100644
index 81174b5..0000000
--- a/arch/x86/exception_32.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2009 Tomasz Grabiec
- *
- * This file is released under the GPL version 2 with the following
- * clarification and special exception:
- *
- * Linking this library statically or dynamically with other modules is
- * making a combined work based on this library. Thus, the terms and
- * conditions of the GNU General Public License cover the whole
- * combination.
- *
- * As a special exception, the copyright holders of this library give you
- * permission to link this library with independent modules to produce an
- * executable, regardless of the license terms of these independent
- * modules, and to copy and distribute the resulting executable under terms
- * of your choice, provided that you also meet, for each linked independent
- * module, the terms and conditions of the license of that module. An
- * independent module is a module which is not derived from or based on
- * this library. If you modify this library, you may extend this exception
- * to your version of the library, but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version.
- *
- * Please refer to the file LICENSE for details.
- */
-
-#include <jit/compilation-unit.h>
-#include <jit/basic-block.h>
-#include <jit/cu-mapping.h>
-#include <jit/exception.h>
-
-#include <arch/stack-frame.h>
-#include <arch/exception.h>
-#include <arch/memory.h>
-#include <arch/signal.h>
-
-unsigned char *
-throw_exception(struct compilation_unit *cu, struct object *exception)
-{
- unsigned char *native_ptr;
- struct jit_stack_frame *frame;
-
- native_ptr = __builtin_return_address(0) - 1;
- frame = __builtin_frame_address(1);
-
- return throw_exception_from(cu, frame, native_ptr, exception);
-}
-
-void throw_exception_from_signal(void *ctx, struct object *exception)
-{
- struct jit_stack_frame *frame;
- struct compilation_unit *cu;
- unsigned long source_addr;
- unsigned long *stack;
- ucontext_t *uc;
- void *eh;
-
- uc = ctx;
-
- source_addr = uc->uc_mcontext.gregs[REG_IP];
- cu = get_cu_from_native_addr(source_addr);
- frame = (struct jit_stack_frame*)uc->uc_mcontext.gregs[REG_BP];
-
- eh = throw_exception_from(cu, frame, (unsigned char*)source_addr,
- exception);
-
- uc->uc_mcontext.gregs[REG_IP] = (unsigned long)eh;
-
- /* push exception object reference on stack */
- uc->uc_mcontext.gregs[REG_SP] -= sizeof(exception);
- stack = (unsigned long*)uc->uc_mcontext.gregs[REG_SP];
- *stack = (unsigned long)exception;
-}
diff --git a/test/arch-x86/Makefile b/test/arch-x86/Makefile
index b271f16..26e730c 100644
--- a/test/arch-x86/Makefile
+++ b/test/arch-x86/Makefile
@@ -55,7 +55,7 @@ OBJS = \
../../arch/x86/insn-selector$(ARCH_POSTFIX).o \
../../arch/x86/stack-frame.o \
../../arch/x86/use-def.o \
- ../../arch/x86/exception$(ARCH_POSTFIX).o \
+ ../../arch/x86/exception.o \
../../arch/x86/unwind$(ARCH_POSTFIX).o \
$(TESTS)
--
1.6.0.6
------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel