From 8b1753e3ec0f38a18b8bcd3c13e2b6b55f799099 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 8 Feb 2006 20:07:29 +0000 Subject: PR libgcj/26063, PR libgcj/17978, PR libgcj/10598: * defineclass.cc (parse): Use _Jv_AllocRawObj. (read_constpool): Likewise. (read_one_code_attribute): Use internal function name. (handleConstantPool): Use _Jv_AllocRawObj. (handleInterfacesBegin): Likewise. (handleFieldsBegin): Likewise. (handleMethodsBegin): Likewise. (handleCodeAttribute): Likewise. (handleMethodsEnd): Likewise. * include/jvm.h (new_vtable): Use _Jv_AllocRawObj. * interpret.cc (do_allocate_static_fields): Use _Jv_AllocRawObj. Allocate reference fields separately. * link.cc (prepare_constant_time_tables): Use _Jv_AllocRawObj. (add_miranda_methods): Likewise. (generate_itable): Use _Jv_AllocBytes. (find_iindex): Likewise. (struct method_closure): New structure. (create_error_method): Use struct method_closure; allocate with _Jv_AllocBytes. (ensure_fields_laid_out): Separate reference fields from non-reference fields. * boehm.cc (_Jv_MarkObj): Mark vtable. Only mark direct fields of Class. (_Jv_MarkArray): Mark vtable. (_Jv_AllocRawObj): Don't allocate objects of size 0. * include/execution.h (_Jv_ExecutionEngine::allocate_static_fields): Added 'int' parameter. (struct _Jv_CompiledEngine): Updated. (class _Jv_InterpreterEngine): Updated. From-SVN: r110763 --- libjava/include/execution.h | 8 ++++---- libjava/include/jvm.h | 11 ++++------- 2 files changed, 8 insertions(+), 11 deletions(-) (limited to 'libjava/include') diff --git a/libjava/include/execution.h b/libjava/include/execution.h index b8f4746..88189f6 100644 --- a/libjava/include/execution.h +++ b/libjava/include/execution.h @@ -1,6 +1,6 @@ // execution.h - Execution engines. -*- c++ -*- -/* Copyright (C) 2004 Free Software Foundation +/* Copyright (C) 2004, 2006 Free Software Foundation This file is part of libgcj. @@ -23,7 +23,7 @@ struct _Jv_ExecutionEngine // interpreter does it. bool (*need_resolve_string_fields) (); void (*verify) (jclass); - void (*allocate_static_fields) (jclass, int); + void (*allocate_static_fields) (jclass, int, int); void (*create_ncode) (jclass); _Jv_ResolvedMethod *(*resolve_method) (_Jv_Method *, jclass, jboolean, jint); @@ -55,7 +55,7 @@ struct _Jv_CompiledEngine : public _Jv_ExecutionEngine return NULL; } - static void do_allocate_static_fields (jclass, int) + static void do_allocate_static_fields (jclass, int, int) { // Compiled classes don't need this. } @@ -99,7 +99,7 @@ class _Jv_InterpreterEngine : public _Jv_ExecutionEngine public: static void do_verify (jclass); - static void do_allocate_static_fields (jclass, int); + static void do_allocate_static_fields (jclass, int, int); static void do_create_ncode (jclass); static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass, jboolean, jint); diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index b0b3305..e5187f4 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -1,6 +1,6 @@ // jvm.h - Header file for private implementation information. -*- c++ -*- -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation This file is part of libgcj. @@ -72,6 +72,7 @@ struct _Jv_VTable { return (2 * sizeof (void *)) + (index * vtable_elt_size ()); } + static _Jv_VTable *new_vtable (int count); }; @@ -374,16 +375,12 @@ void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, void _Jv_RunMain (struct _Jv_VMInitArgs *vm_args, jclass klass, const char *name, int argc, const char **argv, bool is_jar); -// Delayed until after _Jv_AllocBytes is declared. -// -// Note that we allocate this as unscanned memory -- the vtables -// are handled specially by the GC. - +// Delayed until after _Jv_AllocRawObj is declared. inline _Jv_VTable * _Jv_VTable::new_vtable (int count) { size_t size = sizeof(_Jv_VTable) + (count - 1) * vtable_elt_size (); - return (_Jv_VTable *) _Jv_AllocBytes (size); + return (_Jv_VTable *) _Jv_AllocRawObj (size); } // Determine if METH gets an entry in a VTable. -- cgit v1.1