From 7866a458e2c017ced1ae1a01e90d1c25c22d051d Mon Sep 17 00:00:00 2001 From: Bryce McKinlay <bryce@waitaki.otago.ac.nz> Date: Mon, 10 Sep 2001 01:21:08 +0000 Subject: [PATCH] jvm.h (_Jv_AllocRawObj): New prototype. * include/jvm.h (_Jv_AllocRawObj): New prototype. * boehm.cc (_Jv_AllocRawObj): Implement. * nogc.cc (_Jv_AllocRawObj): Likewise. * exception.cc (_Jv_Throw): Use _Jv_AllocRawObj, not GC_malloc. From-SVN: r45497 --- libjava/ChangeLog | 7 +++++++ libjava/boehm.cc | 8 ++++++++ libjava/exception.cc | 5 +---- libjava/include/jvm.h | 3 +++ libjava/nogc.cc | 7 +++++++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6d872b2731cc..8e158adfc77a 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2001-09-10 Bryce McKinlay <bryce@waitaki.otago.ac.nz> + + * include/jvm.h (_Jv_AllocRawObj): New prototype. + * boehm.cc (_Jv_AllocRawObj): Implement. + * nogc.cc (_Jv_AllocRawObj): Likewise. + * exception.cc (_Jv_Throw): Use _Jv_AllocRawObj, not GC_malloc. + 2001-09-06 Anthony Green <green@redhat.com> * java/util/ResourceBundle.java (tryLocalBundle): Eliminate diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 7982eda09513..27e332b259e9 100644 --- a/libjava/boehm.cc +++ b/libjava/boehm.cc @@ -375,6 +375,14 @@ _Jv_AllocArray (jsize size, jclass klass) return obj; } +/* Allocate space for a new non-Java object, which does not have the usual + Java object header but may contain pointers to other GC'ed objects. */ +void * +_Jv_AllocRawObj (jsize size) +{ + return (void *) GC_MALLOC (size); +} + static void call_finalizer (GC_PTR obj, GC_PTR client_data) { diff --git a/libjava/exception.cc b/libjava/exception.cc index 752236102af3..a8e6ece6e284 100644 --- a/libjava/exception.cc +++ b/libjava/exception.cc @@ -20,8 +20,6 @@ details. */ #include "unwind.h" -#include <gc.h> - struct alignment_test_struct { @@ -73,9 +71,8 @@ get_exception_header_from_ue (_Unwind_Exception *exc) extern "C" void _Jv_Throw (jthrowable value) { - /* FIXME: Use the proper API to the collector. */ java_exception_header *xh - = static_cast<java_exception_header *>(GC_malloc (sizeof (*xh))); + = static_cast<java_exception_header *>(_Jv_AllocRawObj (sizeof (*xh))); if (value == NULL) value = new java::lang::NullPointerException (); diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index 3f9071c347f2..936d4c690c61 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -114,6 +114,9 @@ void *_Jv_AllocPtrFreeObj (jsize size, jclass cl) __attribute__((__malloc__)); void *_Jv_AllocArray (jsize size, jclass cl) __attribute__((__malloc__)); /* Allocate space that is known to be pointer-free. */ void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__)); +/* Allocate space for a new non-Java object, which does not have the usual + Java object header but may contain pointers to other GC'ed objects. */ +void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__)); /* Explicitly throw an out-of-memory exception. */ void _Jv_ThrowNoMemory() __attribute__((__noreturn__)); /* Allocate an object with a single pointer. The first word is reserved diff --git a/libjava/nogc.cc b/libjava/nogc.cc index 7cdd58277246..65cc8c30e22e 100644 --- a/libjava/nogc.cc +++ b/libjava/nogc.cc @@ -66,6 +66,13 @@ _Jv_AllocBytes (jsize size) return obj; } +void * +_Jv_AllocRawObj (jsize size) +{ + total += size; + return calloc (size, 1); +} + void _Jv_RegisterFinalizer (void *, _Jv_FinalizerFunc *) {