mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 19:14:38 +02:00
Merge
This commit is contained in:
commit
1cf05b831f
16 changed files with 52 additions and 108 deletions
|
@ -661,30 +661,30 @@ init_classsharing_workaround(void *cd, const prmap_t* pmap, const char* obj_name
|
||||||
// read FileMapHeader
|
// read FileMapHeader
|
||||||
size_t n = read(fd, pheader, sizeof(struct FileMapHeader));
|
size_t n = read(fd, pheader, sizeof(struct FileMapHeader));
|
||||||
if (n != sizeof(struct FileMapHeader)) {
|
if (n != sizeof(struct FileMapHeader)) {
|
||||||
free(pheader);
|
|
||||||
close(fd);
|
|
||||||
char errMsg[ERR_MSG_SIZE];
|
char errMsg[ERR_MSG_SIZE];
|
||||||
sprintf(errMsg, "unable to read shared archive file map header from %s", classes_jsa);
|
sprintf(errMsg, "unable to read shared archive file map header from %s", classes_jsa);
|
||||||
|
close(fd);
|
||||||
|
free(pheader);
|
||||||
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check file magic
|
// check file magic
|
||||||
if (pheader->_magic != 0xf00baba2) {
|
if (pheader->_magic != 0xf00baba2) {
|
||||||
free(pheader);
|
|
||||||
close(fd);
|
|
||||||
char errMsg[ERR_MSG_SIZE];
|
char errMsg[ERR_MSG_SIZE];
|
||||||
sprintf(errMsg, "%s has bad shared archive magic 0x%x, expecting 0xf00baba2",
|
sprintf(errMsg, "%s has bad shared archive magic 0x%x, expecting 0xf00baba2",
|
||||||
classes_jsa, pheader->_magic);
|
classes_jsa, pheader->_magic);
|
||||||
|
close(fd);
|
||||||
|
free(pheader);
|
||||||
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check version
|
// check version
|
||||||
if (pheader->_version != CURRENT_ARCHIVE_VERSION) {
|
if (pheader->_version != CURRENT_ARCHIVE_VERSION) {
|
||||||
free(pheader);
|
|
||||||
close(fd);
|
|
||||||
char errMsg[ERR_MSG_SIZE];
|
char errMsg[ERR_MSG_SIZE];
|
||||||
sprintf(errMsg, "%s has wrong shared archive version %d, expecting %d",
|
sprintf(errMsg, "%s has wrong shared archive version %d, expecting %d",
|
||||||
classes_jsa, pheader->_version, CURRENT_ARCHIVE_VERSION);
|
classes_jsa, pheader->_version, CURRENT_ARCHIVE_VERSION);
|
||||||
|
close(fd);
|
||||||
|
free(pheader);
|
||||||
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -58,6 +58,8 @@ DTRACE_SRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/dtrace
|
||||||
DTRACE_COMMON_SRCDIR = $(GAMMADIR)/src/os/posix/dtrace
|
DTRACE_COMMON_SRCDIR = $(GAMMADIR)/src/os/posix/dtrace
|
||||||
DTRACE = dtrace
|
DTRACE = dtrace
|
||||||
DTRACE.o = $(DTRACE).o
|
DTRACE.o = $(DTRACE).o
|
||||||
|
DTRACE_JHELPER = dtrace_jhelper
|
||||||
|
DTRACE_JHELPER.o = $(DTRACE_JHELPER).o
|
||||||
|
|
||||||
# to remove '-g' option which causes link problems
|
# to remove '-g' option which causes link problems
|
||||||
# also '-z nodefs' is used as workaround
|
# also '-z nodefs' is used as workaround
|
||||||
|
@ -255,7 +257,10 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(DTRACE).d: $(DTRACE_COMMON_SRCDIR)/hotspot.d $(DTRACE_COMMON_SRCDIR)/hotspot_jni.d \
|
$(DTRACE).d: $(DTRACE_COMMON_SRCDIR)/hotspot.d $(DTRACE_COMMON_SRCDIR)/hotspot_jni.d \
|
||||||
$(DTRACE_COMMON_SRCDIR)/hs_private.d $(DTRACE_SRCDIR)/jhelper.d
|
$(DTRACE_COMMON_SRCDIR)/hs_private.d
|
||||||
|
$(QUIETLY) cat $^ > $@
|
||||||
|
|
||||||
|
$(DTRACE_JHELPER).d: $(DTRACE_SRCDIR)/jhelper.d
|
||||||
$(QUIETLY) cat $^ > $@
|
$(QUIETLY) cat $^ > $@
|
||||||
|
|
||||||
DTraced_Files = ciEnv.o \
|
DTraced_Files = ciEnv.o \
|
||||||
|
@ -280,7 +285,7 @@ DTraced_Files = ciEnv.o \
|
||||||
vmGCOperations.o \
|
vmGCOperations.o \
|
||||||
|
|
||||||
# Dtrace is available, so we build $(DTRACE.o)
|
# Dtrace is available, so we build $(DTRACE.o)
|
||||||
$(DTRACE.o): $(DTRACE).d $(JVMOFFS).h $(JVMOFFS)Index.h $(DTraced_Files)
|
$(DTRACE.o): $(DTRACE).d $(DTraced_Files)
|
||||||
@echo Compiling $(DTRACE).d
|
@echo Compiling $(DTRACE).d
|
||||||
|
|
||||||
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \
|
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \
|
||||||
|
@ -344,6 +349,11 @@ $(DtraceOutDir)/hs_private.h: $(DTRACE_COMMON_SRCDIR)/hs_private.d | $(DtraceOut
|
||||||
|
|
||||||
dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h
|
dtrace_gen_headers: $(DtraceOutDir)/hotspot.h $(DtraceOutDir)/hotspot_jni.h $(DtraceOutDir)/hs_private.h
|
||||||
|
|
||||||
|
# The jhelper.d and hotspot probes are separated into two different SUNW_dof sections.
|
||||||
|
# Now the jhelper.d is built without the -Xlazyload flag.
|
||||||
|
$(DTRACE_JHELPER.o) : $(DTRACE_JHELPER).d $(JVMOFFS).h $(JVMOFFS)Index.h
|
||||||
|
@echo Compiling $(DTRACE_JHELPER).d
|
||||||
|
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -o $@ -s $(DTRACE_JHELPER).d
|
||||||
|
|
||||||
.PHONY: dtraceCheck
|
.PHONY: dtraceCheck
|
||||||
|
|
||||||
|
@ -372,7 +382,7 @@ endif # ifneq ("$(patchDtraceFound)", "")
|
||||||
ifneq ("${DTRACE_PROG}", "")
|
ifneq ("${DTRACE_PROG}", "")
|
||||||
ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
|
ifeq ("${HOTSPOT_DISABLE_DTRACE_PROBES}", "")
|
||||||
|
|
||||||
DTRACE_OBJS = $(DTRACE.o) $(JVMOFFS.o)
|
DTRACE_OBJS = $(DTRACE.o) $(JVMOFFS.o) $(DTRACE_JHELPER.o)
|
||||||
CFLAGS += $(DTRACE_INCL) -DDTRACE_ENABLED
|
CFLAGS += $(DTRACE_INCL) -DDTRACE_ENABLED
|
||||||
MAPFILE_DTRACE_OPT = $(MAPFILE_DTRACE)
|
MAPFILE_DTRACE_OPT = $(MAPFILE_DTRACE)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -54,21 +54,6 @@ StackMapFrame* StackMapFrame::frame_in_exception_handler(u1 flags) {
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StackMapFrame::has_new_object() const {
|
|
||||||
int32_t i;
|
|
||||||
for (i = 0; i < _max_locals; i++) {
|
|
||||||
if (_locals[i].is_uninitialized()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; i < _stack_size; i++) {
|
|
||||||
if (_stack[i].is_uninitialized()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StackMapFrame::initialize_object(
|
void StackMapFrame::initialize_object(
|
||||||
VerificationType old_object, VerificationType new_object) {
|
VerificationType old_object, VerificationType new_object) {
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -154,10 +154,6 @@ class StackMapFrame : public ResourceObj {
|
||||||
VerificationType set_locals_from_arg(
|
VerificationType set_locals_from_arg(
|
||||||
const methodHandle m, VerificationType thisKlass, TRAPS);
|
const methodHandle m, VerificationType thisKlass, TRAPS);
|
||||||
|
|
||||||
// Search local variable type array and stack type array.
|
|
||||||
// Return true if an uninitialized object is found.
|
|
||||||
bool has_new_object() const;
|
|
||||||
|
|
||||||
// Search local variable type array and stack type array.
|
// Search local variable type array and stack type array.
|
||||||
// Set every element with type of old_object to new_object.
|
// Set every element with type of old_object to new_object.
|
||||||
void initialize_object(
|
void initialize_object(
|
||||||
|
|
|
@ -70,24 +70,26 @@ int StackMapTable::get_index_from_offset(int32_t offset) const {
|
||||||
|
|
||||||
bool StackMapTable::match_stackmap(
|
bool StackMapTable::match_stackmap(
|
||||||
StackMapFrame* frame, int32_t target,
|
StackMapFrame* frame, int32_t target,
|
||||||
bool match, bool update, ErrorContext* ctx, TRAPS) const {
|
bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
|
||||||
int index = get_index_from_offset(target);
|
int index = get_index_from_offset(target);
|
||||||
return match_stackmap(frame, target, index, match, update, ctx, THREAD);
|
return match_stackmap(frame, target, index, match, update, handler, ctx, THREAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Match and/or update current_frame to the frame in stackmap table with
|
// Match and/or update current_frame to the frame in stackmap table with
|
||||||
// specified offset and frame index. Return true if the two frames match.
|
// specified offset and frame index. Return true if the two frames match.
|
||||||
|
// handler is true if the frame in stackmap_table is for an exception handler.
|
||||||
//
|
//
|
||||||
// The values of match and update are: _match__update_
|
// The values of match and update are: _match__update__handler
|
||||||
//
|
//
|
||||||
// checking a branch target/exception handler: true false
|
// checking a branch target: true false false
|
||||||
|
// checking an exception handler: true false true
|
||||||
// linear bytecode verification following an
|
// linear bytecode verification following an
|
||||||
// unconditional branch: false true
|
// unconditional branch: false true false
|
||||||
// linear bytecode verification not following an
|
// linear bytecode verification not following an
|
||||||
// unconditional branch: true true
|
// unconditional branch: true true false
|
||||||
bool StackMapTable::match_stackmap(
|
bool StackMapTable::match_stackmap(
|
||||||
StackMapFrame* frame, int32_t target, int32_t frame_index,
|
StackMapFrame* frame, int32_t target, int32_t frame_index,
|
||||||
bool match, bool update, ErrorContext* ctx, TRAPS) const {
|
bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const {
|
||||||
if (frame_index < 0 || frame_index >= _frame_count) {
|
if (frame_index < 0 || frame_index >= _frame_count) {
|
||||||
*ctx = ErrorContext::missing_stackmap(frame->offset());
|
*ctx = ErrorContext::missing_stackmap(frame->offset());
|
||||||
frame->verifier()->verify_error(
|
frame->verifier()->verify_error(
|
||||||
|
@ -98,11 +100,9 @@ bool StackMapTable::match_stackmap(
|
||||||
StackMapFrame *stackmap_frame = _frame_array[frame_index];
|
StackMapFrame *stackmap_frame = _frame_array[frame_index];
|
||||||
bool result = true;
|
bool result = true;
|
||||||
if (match) {
|
if (match) {
|
||||||
// when checking handler target, match == true && update == false
|
|
||||||
bool is_exception_handler = !update;
|
|
||||||
// Has direct control flow from last instruction, need to match the two
|
// Has direct control flow from last instruction, need to match the two
|
||||||
// frames.
|
// frames.
|
||||||
result = frame->is_assignable_to(stackmap_frame, is_exception_handler,
|
result = frame->is_assignable_to(stackmap_frame, handler,
|
||||||
ctx, CHECK_VERIFY_(frame->verifier(), result));
|
ctx, CHECK_VERIFY_(frame->verifier(), result));
|
||||||
}
|
}
|
||||||
if (update) {
|
if (update) {
|
||||||
|
@ -126,24 +126,10 @@ void StackMapTable::check_jump_target(
|
||||||
StackMapFrame* frame, int32_t target, TRAPS) const {
|
StackMapFrame* frame, int32_t target, TRAPS) const {
|
||||||
ErrorContext ctx;
|
ErrorContext ctx;
|
||||||
bool match = match_stackmap(
|
bool match = match_stackmap(
|
||||||
frame, target, true, false, &ctx, CHECK_VERIFY(frame->verifier()));
|
frame, target, true, false, false, &ctx, CHECK_VERIFY(frame->verifier()));
|
||||||
if (!match || (target < 0 || target >= _code_length)) {
|
if (!match || (target < 0 || target >= _code_length)) {
|
||||||
frame->verifier()->verify_error(ctx,
|
frame->verifier()->verify_error(ctx,
|
||||||
"Inconsistent stackmap frames at branch target %d", target);
|
"Inconsistent stackmap frames at branch target %d", target);
|
||||||
return;
|
|
||||||
}
|
|
||||||
// check if uninitialized objects exist on backward branches
|
|
||||||
check_new_object(frame, target, CHECK_VERIFY(frame->verifier()));
|
|
||||||
frame->verifier()->update_furthest_jump(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StackMapTable::check_new_object(
|
|
||||||
const StackMapFrame* frame, int32_t target, TRAPS) const {
|
|
||||||
if (frame->offset() > target && frame->has_new_object()) {
|
|
||||||
frame->verifier()->verify_error(
|
|
||||||
ErrorContext::bad_code(frame->offset()),
|
|
||||||
"Uninitialized object exists on backward branch %d", target);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,12 +60,12 @@ class StackMapTable : public StackObj {
|
||||||
// specified offset. Return true if the two frames match.
|
// specified offset. Return true if the two frames match.
|
||||||
bool match_stackmap(
|
bool match_stackmap(
|
||||||
StackMapFrame* current_frame, int32_t offset,
|
StackMapFrame* current_frame, int32_t offset,
|
||||||
bool match, bool update, ErrorContext* ctx, TRAPS) const;
|
bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
|
||||||
// Match and/or update current_frame to the frame in stackmap table with
|
// Match and/or update current_frame to the frame in stackmap table with
|
||||||
// specified offset and frame index. Return true if the two frames match.
|
// specified offset and frame index. Return true if the two frames match.
|
||||||
bool match_stackmap(
|
bool match_stackmap(
|
||||||
StackMapFrame* current_frame, int32_t offset, int32_t frame_index,
|
StackMapFrame* current_frame, int32_t offset, int32_t frame_index,
|
||||||
bool match, bool update, ErrorContext* ctx, TRAPS) const;
|
bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const;
|
||||||
|
|
||||||
// Check jump instructions. Make sure there are no uninitialized
|
// Check jump instructions. Make sure there are no uninitialized
|
||||||
// instances on backward branch.
|
// instances on backward branch.
|
||||||
|
@ -76,10 +76,6 @@ class StackMapTable : public StackObj {
|
||||||
// Returns the frame array index where the frame with offset is stored.
|
// Returns the frame array index where the frame with offset is stored.
|
||||||
int get_index_from_offset(int32_t offset) const;
|
int get_index_from_offset(int32_t offset) const;
|
||||||
|
|
||||||
// Make sure that there's no uninitialized object exist on backward branch.
|
|
||||||
void check_new_object(
|
|
||||||
const StackMapFrame* frame, int32_t target, TRAPS) const;
|
|
||||||
|
|
||||||
void print_on(outputStream* str) const;
|
void print_on(outputStream* str) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -620,8 +620,6 @@ void ClassVerifier::verify_method(methodHandle m, TRAPS) {
|
||||||
// flow from current instruction to the next
|
// flow from current instruction to the next
|
||||||
// instruction in sequence
|
// instruction in sequence
|
||||||
|
|
||||||
set_furthest_jump(0);
|
|
||||||
|
|
||||||
Bytecodes::Code opcode;
|
Bytecodes::Code opcode;
|
||||||
while (!bcs.is_last_bytecode()) {
|
while (!bcs.is_last_bytecode()) {
|
||||||
// Check for recursive re-verification before each bytecode.
|
// Check for recursive re-verification before each bytecode.
|
||||||
|
@ -1780,7 +1778,7 @@ u2 ClassVerifier::verify_stackmap_table(u2 stackmap_index, u2 bci,
|
||||||
// If matched, current_frame will be updated by this method.
|
// If matched, current_frame will be updated by this method.
|
||||||
bool matches = stackmap_table->match_stackmap(
|
bool matches = stackmap_table->match_stackmap(
|
||||||
current_frame, this_offset, stackmap_index,
|
current_frame, this_offset, stackmap_index,
|
||||||
!no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0));
|
!no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0));
|
||||||
if (!matches) {
|
if (!matches) {
|
||||||
// report type error
|
// report type error
|
||||||
verify_error(ctx, "Instruction type does not match stack map");
|
verify_error(ctx, "Instruction type does not match stack map");
|
||||||
|
@ -1827,7 +1825,7 @@ void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, S
|
||||||
}
|
}
|
||||||
ErrorContext ctx;
|
ErrorContext ctx;
|
||||||
bool matches = stackmap_table->match_stackmap(
|
bool matches = stackmap_table->match_stackmap(
|
||||||
new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this));
|
new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this));
|
||||||
if (!matches) {
|
if (!matches) {
|
||||||
verify_error(ctx, "Stack map does not match the one at "
|
verify_error(ctx, "Stack map does not match the one at "
|
||||||
"exception handler %d", handler_pc);
|
"exception handler %d", handler_pc);
|
||||||
|
@ -2238,13 +2236,6 @@ void ClassVerifier::verify_invoke_init(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that this call is not jumped over.
|
|
||||||
if (bci < furthest_jump()) {
|
|
||||||
verify_error(ErrorContext::bad_code(bci),
|
|
||||||
"Bad <init> method call from inside of a branch");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure that this call is not done from within a TRY block because
|
// Make sure that this call is not done from within a TRY block because
|
||||||
// that can result in returning an incomplete object. Simply checking
|
// that can result in returning an incomplete object. Simply checking
|
||||||
// (bci >= start_pc) also ensures that this call is not done after a TRY
|
// (bci >= start_pc) also ensures that this call is not done after a TRY
|
||||||
|
|
|
@ -258,9 +258,6 @@ class ClassVerifier : public StackObj {
|
||||||
|
|
||||||
ErrorContext _error_context; // contains information about an error
|
ErrorContext _error_context; // contains information about an error
|
||||||
|
|
||||||
// Used to detect illegal jumps over calls to super() nd this() in ctors.
|
|
||||||
int32_t _furthest_jump;
|
|
||||||
|
|
||||||
void verify_method(methodHandle method, TRAPS);
|
void verify_method(methodHandle method, TRAPS);
|
||||||
char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
|
char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
|
||||||
void verify_exception_handler_table(u4 code_length, char* code_data,
|
void verify_exception_handler_table(u4 code_length, char* code_data,
|
||||||
|
@ -407,19 +404,6 @@ class ClassVerifier : public StackObj {
|
||||||
|
|
||||||
TypeOrigin ref_ctx(const char* str, TRAPS);
|
TypeOrigin ref_ctx(const char* str, TRAPS);
|
||||||
|
|
||||||
// Keep track of the furthest branch done in a method to make sure that
|
|
||||||
// there are no branches over calls to super() or this() from inside of
|
|
||||||
// a constructor.
|
|
||||||
int32_t furthest_jump() { return _furthest_jump; }
|
|
||||||
|
|
||||||
void set_furthest_jump(int32_t target) {
|
|
||||||
_furthest_jump = target;
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_furthest_jump(int32_t target) {
|
|
||||||
if (target > _furthest_jump) _furthest_jump = target;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int ClassVerifier::change_sig_to_verificationType(
|
inline int ClassVerifier::change_sig_to_verificationType(
|
||||||
|
|
|
@ -987,17 +987,6 @@ ConstantPoolCacheEntry *cp_entry))
|
||||||
int index = cp_entry->field_index();
|
int index = cp_entry->field_index();
|
||||||
if ((ik->field_access_flags(index) & JVM_ACC_FIELD_ACCESS_WATCHED) == 0) return;
|
if ((ik->field_access_flags(index) & JVM_ACC_FIELD_ACCESS_WATCHED) == 0) return;
|
||||||
|
|
||||||
switch(cp_entry->flag_state()) {
|
|
||||||
case btos: // fall through
|
|
||||||
case ctos: // fall through
|
|
||||||
case stos: // fall through
|
|
||||||
case itos: // fall through
|
|
||||||
case ftos: // fall through
|
|
||||||
case ltos: // fall through
|
|
||||||
case dtos: // fall through
|
|
||||||
case atos: break;
|
|
||||||
default: ShouldNotReachHere(); return;
|
|
||||||
}
|
|
||||||
bool is_static = (obj == NULL);
|
bool is_static = (obj == NULL);
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
|
|
||||||
|
|
|
@ -283,6 +283,13 @@ address Method::bcp_from(int bci) const {
|
||||||
return bcp;
|
return bcp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
address Method::bcp_from(address bcp) const {
|
||||||
|
if (is_native() && bcp == NULL) {
|
||||||
|
return code_base();
|
||||||
|
} else {
|
||||||
|
return bcp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int Method::size(bool is_native) {
|
int Method::size(bool is_native) {
|
||||||
// If native, then include pointers for native_function and signature_handler
|
// If native, then include pointers for native_function and signature_handler
|
||||||
|
|
|
@ -649,6 +649,7 @@ class Method : public Metadata {
|
||||||
// Returns the byte code index from the byte code pointer
|
// Returns the byte code index from the byte code pointer
|
||||||
int bci_from(address bcp) const;
|
int bci_from(address bcp) const;
|
||||||
address bcp_from(int bci) const;
|
address bcp_from(int bci) const;
|
||||||
|
address bcp_from(address bcp) const;
|
||||||
int validate_bci_from_bcp(address bcp) const;
|
int validate_bci_from_bcp(address bcp) const;
|
||||||
int validate_bci(int bci) const;
|
int validate_bci(int bci) const;
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,8 @@ jint frame::interpreter_frame_bci() const {
|
||||||
|
|
||||||
address frame::interpreter_frame_bcp() const {
|
address frame::interpreter_frame_bcp() const {
|
||||||
assert(is_interpreted_frame(), "interpreted frame expected");
|
assert(is_interpreted_frame(), "interpreted frame expected");
|
||||||
return (address)*interpreter_frame_bcp_addr();
|
address bcp = (address)*interpreter_frame_bcp_addr();
|
||||||
|
return interpreter_frame_method()->bcp_from(bcp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void frame::interpreter_frame_set_bcp(address bcp) {
|
void frame::interpreter_frame_set_bcp(address bcp) {
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
##
|
##
|
||||||
## @ignore 8025519
|
|
||||||
## @test Test7107135.sh
|
## @test Test7107135.sh
|
||||||
## @bug 7107135
|
## @bug 7107135
|
||||||
## @bug 8021296
|
## @bug 8021296
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -147,7 +147,8 @@ class VerifyErrorCases {
|
||||||
"no stackmap frame at jump location or bad jump",
|
"no stackmap frame at jump location or bad jump",
|
||||||
"Inconsistent stackmap frames at branch target "),
|
"Inconsistent stackmap frames at branch target "),
|
||||||
|
|
||||||
new Case("case15", "stackMapTable.cpp", true, "check_new_object",
|
/* Backward jump with uninit is allowed starting with JDK 8 */
|
||||||
|
new Case("case15", "stackMapTable.cpp", false, "check_new_object",
|
||||||
"backward jump with uninit",
|
"backward jump with uninit",
|
||||||
"Uninitialized object exists on backward branch "),
|
"Uninitialized object exists on backward branch "),
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,7 @@
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* @ignore JDK-8043896
|
/* @test LimitSharedSizes
|
||||||
* @test LimitSharedSizes
|
|
||||||
* @summary Test handling of limits on shared space size
|
* @summary Test handling of limits on shared space size
|
||||||
* @library /testlibrary
|
* @library /testlibrary
|
||||||
* @run main LimitSharedSizes
|
* @run main LimitSharedSizes
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
##
|
##
|
||||||
## @ignore 8028806
|
|
||||||
## @test Test8017498.sh
|
## @test Test8017498.sh
|
||||||
## @bug 8017498
|
## @bug 8017498
|
||||||
## @bug 8020791
|
## @bug 8020791
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue