Mercurial > hg > icedtea12
changeset 1674:bf3d642b5029
2009-02-26 Gary Benson <gbenson@redhat.com>
PR icedtea/202:
* ports/hotspot/src/share/vm/shark/sharkRuntime.hpp
(SharkRuntime::_register_finalizer): New variable.
(SharkRuntime::register_finalizer): New method.
(SharkRuntime::register_finalizer_C): Likewise.
* ports/hotspot/src/share/vm/shark/sharkRuntime.cpp
(SharkRuntime::_register_finalizer): New variable.
(SharkRuntime::initialize): Initialize the above.
(SharkRuntime::register_finalizer_C): New method.
* ports/hotspot/src/share/vm/shark/sharkBlock.hpp
(SharkBlock::call_register_finalizer): New method.
(SharkBlock::do_return): Call the above when compiling
java.lang.Object.<init>.
* ports/hotspot/src/share/vm/shark/sharkBlock.cpp
(SharkBlock::call_register_finalizer): New method.
(transplanted from 252bd67d10c653fb622ffae4c1e1426f3800e79c)
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Thu, 26 Feb 2009 10:24:35 -0500 |
parents | 9743a1ba5780 |
children | f235bdfcafe2 |
files | ChangeLog ports/hotspot/src/share/vm/shark/sharkBlock.cpp ports/hotspot/src/share/vm/shark/sharkBlock.hpp ports/hotspot/src/share/vm/shark/sharkRuntime.cpp ports/hotspot/src/share/vm/shark/sharkRuntime.hpp |
diffstat | 5 files changed, 93 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Feb 26 08:55:00 2009 -0500 +++ b/ChangeLog Thu Feb 26 10:24:35 2009 -0500 @@ -71,6 +71,24 @@ 2009-02-26 Gary Benson <gbenson@redhat.com> + PR icedtea/202: + * ports/hotspot/src/share/vm/shark/sharkRuntime.hpp + (SharkRuntime::_register_finalizer): New variable. + (SharkRuntime::register_finalizer): New method. + (SharkRuntime::register_finalizer_C): Likewise. + * ports/hotspot/src/share/vm/shark/sharkRuntime.cpp + (SharkRuntime::_register_finalizer): New variable. + (SharkRuntime::initialize): Initialize the above. + (SharkRuntime::register_finalizer_C): New method. + * ports/hotspot/src/share/vm/shark/sharkBlock.hpp + (SharkBlock::call_register_finalizer): New method. + (SharkBlock::do_return): Call the above when compiling + java.lang.Object.<init>. + * ports/hotspot/src/share/vm/shark/sharkBlock.cpp + (SharkBlock::call_register_finalizer): New method. + +2009-02-26 Gary Benson <gbenson@redhat.com> + * ports/hotspot/src/share/vm/shark/sharkState.cpp: Updated copyright. * ports/hotspot/src/share/vm/shark/sharkState.hpp: Likewise. * ports/hotspot/src/share/vm/shark/sharkState.inline.hpp: Likewise.
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Thu Feb 26 08:55:00 2009 -0500 +++ b/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Thu Feb 26 10:24:35 2009 -0500 @@ -1160,6 +1160,49 @@ current_state()->merge(orig_state, orig_block, safepointed_block); } +void SharkBlock::call_register_finalizer(Value *receiver) +{ + BasicBlock *orig_block = builder()->GetInsertBlock(); + SharkState *orig_state = current_state()->copy(); + + BasicBlock *do_call = function()->CreateBlock("has_finalizer"); + BasicBlock *done = function()->CreateBlock("done"); + + Value *klass = builder()->CreateValueOfStructEntry( + receiver, + in_ByteSize(oopDesc::klass_offset_in_bytes()), + SharkType::jobject_type(), + "klass"); + + Value *klass_part = builder()->CreateAddressOfStructEntry( + klass, + in_ByteSize(klassOopDesc::klass_part_offset_in_bytes()), + SharkType::klass_type(), + "klass_part"); + + Value *access_flags = builder()->CreateValueOfStructEntry( + klass_part, + in_ByteSize(Klass::access_flags_offset_in_bytes()), + SharkType::jint_type(), + "access_flags"); + + builder()->CreateCondBr( + builder()->CreateICmpNE( + builder()->CreateAnd( + access_flags, + LLVMValue::jint_constant(JVM_ACC_HAS_FINALIZER)), + LLVMValue::intptr_constant(0)), + do_call, done); + + builder()->SetInsertPoint(do_call); + call_vm(SharkRuntime::register_finalizer(), receiver); + BasicBlock *branch_block = builder()->GetInsertBlock(); + builder()->CreateBr(done); + + builder()->SetInsertPoint(done); + current_state()->merge(orig_state, orig_block, branch_block); +} + void SharkBlock::handle_return(BasicType type, Value* exception) { assert (exception == NULL || type == T_VOID, "exception OR result, please");
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.hpp Thu Feb 26 08:55:00 2009 -0500 +++ b/ports/hotspot/src/share/vm/shark/sharkBlock.hpp Thu Feb 26 10:24:35 2009 -0500 @@ -1,6 +1,6 @@ /* * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008 Red Hat, Inc. + * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -403,6 +403,7 @@ // Returns private: + void call_register_finalizer(llvm::Value* receiver); void handle_return(BasicType type, llvm::Value* exception); void release_locked_monitors(); @@ -468,7 +469,10 @@ private: void do_return(BasicType type) { - add_safepoint(); + if (target()->intrinsic_id() == vmIntrinsics::_Object_init) + call_register_finalizer(local(0)->jobject_value()); + else + add_safepoint(); handle_return(type, NULL); } void do_athrow()
--- a/ports/hotspot/src/share/vm/shark/sharkRuntime.cpp Thu Feb 26 08:55:00 2009 -0500 +++ b/ports/hotspot/src/share/vm/shark/sharkRuntime.cpp Thu Feb 26 10:24:35 2009 -0500 @@ -35,6 +35,7 @@ Constant* SharkRuntime::_newarray; Constant* SharkRuntime::_anewarray; Constant* SharkRuntime::_multianewarray; +Constant* SharkRuntime::_register_finalizer; Constant* SharkRuntime::_resolve_get_put; Constant* SharkRuntime::_resolve_invoke; Constant* SharkRuntime::_resolve_klass; @@ -115,6 +116,14 @@ params.clear(); params.push_back(SharkType::thread_type()); + params.push_back(SharkType::oop_type()); + _register_finalizer = builder->make_function( + (intptr_t) register_finalizer_C, + FunctionType::get(Type::VoidTy, params, false), + "SharkRuntime__register_finalizer"); + + params.clear(); + params.push_back(SharkType::thread_type()); params.push_back(SharkType::cpCacheEntry_type()); params.push_back(SharkType::jint_type()); params.push_back(SharkType::jint_type()); @@ -342,6 +351,15 @@ } JRT_END +JRT_ENTRY(void, SharkRuntime::register_finalizer_C(JavaThread* thread, + oop object)) +{ + assert(object->is_oop(), "should be"); + assert(object->klass()->klass_part()->has_finalizer(), "should have"); + instanceKlass::register_finalizer(instanceOop(object), CHECK); +} +JRT_END + JRT_ENTRY(void, SharkRuntime::resolve_get_put_C(JavaThread* thread, ConstantPoolCacheEntry* entry, int bci,
--- a/ports/hotspot/src/share/vm/shark/sharkRuntime.hpp Thu Feb 26 08:55:00 2009 -0500 +++ b/ports/hotspot/src/share/vm/shark/sharkRuntime.hpp Thu Feb 26 10:24:35 2009 -0500 @@ -1,6 +1,6 @@ /* * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008 Red Hat, Inc. + * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ static llvm::Constant* _newarray; static llvm::Constant* _anewarray; static llvm::Constant* _multianewarray; + static llvm::Constant* _register_finalizer; static llvm::Constant* _resolve_get_put; static llvm::Constant* _resolve_invoke; static llvm::Constant* _resolve_klass; @@ -73,6 +74,10 @@ { return _multianewarray; } + static llvm::Constant* register_finalizer() + { + return _register_finalizer; + } static llvm::Constant* resolve_get_put() { return _resolve_get_put; @@ -118,6 +123,8 @@ int ndims, int* dims); + static void register_finalizer_C(JavaThread* thread, oop object); + static void resolve_get_put_C(JavaThread* thread, ConstantPoolCacheEntry* entry, int bci,