We cannot rely on arrays and fields to be smaller than a page in size
for this test to work, i.e.
byte[] a = null;
a[4096] = ...;
must still throw NullPointerException.
Signed-off-by: Vegard Nossum <[email protected]>
---
include/vm/object.h | 7 ++++++-
vm/signal.c | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/include/vm/object.h b/include/vm/object.h
index 9bb4b93..864f7c3 100644
--- a/include/vm/object.h
+++ b/include/vm/object.h
@@ -13,7 +13,10 @@ enum vm_type;
struct vm_object {
/* For arrays, this points to the array type, e.g. for int arrays,
- * this points to the (artificial) class named "[I". */
+ * this points to the (artificial) class named "[I". We actually rely
+ * on this being the first field in the struct, because this way we
+ * don't need a null-pointer check for accessing this object whenever
+ * we access ->class first. */
struct vm_class *class;
pthread_mutex_t mutex;
@@ -22,6 +25,8 @@ struct vm_object {
uint8_t fields[];
};
+/* XXX: BUILD_BUG_ON(offsetof(vm_object, class) != 0); */
+
int init_vm_objects(void);
struct vm_object *vm_object_alloc(struct vm_class *class);
diff --git a/vm/signal.c b/vm/signal.c
index da2b6d4..cba8460 100644
--- a/vm/signal.c
+++ b/vm/signal.c
@@ -98,7 +98,7 @@ static void sigsegv_handler(int sig, siginfo_t *si, void *ctx)
/* Assume that zero-page access is caused by dereferencing a
null pointer */
- if ((unsigned long)si->si_addr < (unsigned long)getpagesize()) {
+ if (!si->si_addr) {
/* We must be extra caucious here because IP might be
invalid */
if (get_signal_source_cu(ctx) == NULL)
--
1.6.0.6
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel