提交 c0b69ecc 编写于 作者: P phh

8206075: On x86, assert on unbound assembler Labels used as branch targets

8208480: Test failure: assert(is_bound() || is_unused()) after JDK-8206075 in C1
Summary: Combine unbound Label assertion checking backports
Reviewed-by: andrew, coffeys
上级 7149fb98
/* /*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2018, 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
...@@ -1445,5 +1445,7 @@ void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, ...@@ -1445,5 +1445,7 @@ void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
incrementl(scratch, increment); incrementl(scratch, increment);
movl(counter_addr, scratch); movl(counter_addr, scratch);
andl(scratch, mask); andl(scratch, mask);
jcc(cond, *where); if (where != NULL) {
jcc(cond, *where);
}
} }
/* /*
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2018, 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
...@@ -1505,5 +1505,7 @@ void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, ...@@ -1505,5 +1505,7 @@ void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
incrementl(scratch, increment); incrementl(scratch, increment);
movl(counter_addr, scratch); movl(counter_addr, scratch);
andl(scratch, mask); andl(scratch, mask);
jcc(cond, *where); if (where != NULL) {
jcc(cond, *where);
}
} }
/* /*
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2018, 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
...@@ -1640,15 +1640,16 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) { ...@@ -1640,15 +1640,16 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
// Increment the MDO backedge counter // Increment the MDO backedge counter
const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) + const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) +
in_bytes(InvocationCounter::counter_offset())); in_bytes(InvocationCounter::counter_offset()));
__ increment_mask_and_jump(mdo_backedge_counter, increment, mask, __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, rax, false, Assembler::zero,
rax, false, Assembler::zero, &backedge_counter_overflow); UseOnStackReplacement ? &backedge_counter_overflow : NULL);
__ jmp(dispatch); __ jmp(dispatch);
} }
__ bind(no_mdo); __ bind(no_mdo);
// Increment backedge counter in MethodCounters* // Increment backedge counter in MethodCounters*
__ movptr(rcx, Address(rcx, Method::method_counters_offset())); __ movptr(rcx, Address(rcx, Method::method_counters_offset()));
__ increment_mask_and_jump(Address(rcx, be_offset), increment, mask, __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask,
rax, false, Assembler::zero, &backedge_counter_overflow); rax, false, Assembler::zero,
UseOnStackReplacement ? &backedge_counter_overflow : NULL);
} else { } else {
// increment counter // increment counter
__ movptr(rcx, Address(rcx, Method::method_counters_offset())); __ movptr(rcx, Address(rcx, Method::method_counters_offset()));
......
/* /*
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2018, 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
...@@ -1665,15 +1665,16 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) { ...@@ -1665,15 +1665,16 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
// Increment the MDO backedge counter // Increment the MDO backedge counter
const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) + const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) +
in_bytes(InvocationCounter::counter_offset())); in_bytes(InvocationCounter::counter_offset()));
__ increment_mask_and_jump(mdo_backedge_counter, increment, mask, __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, rax, false, Assembler::zero,
rax, false, Assembler::zero, &backedge_counter_overflow); UseOnStackReplacement ? &backedge_counter_overflow : NULL);
__ jmp(dispatch); __ jmp(dispatch);
} }
__ bind(no_mdo); __ bind(no_mdo);
// Increment backedge counter in MethodCounters* // Increment backedge counter in MethodCounters*
__ movptr(rcx, Address(rcx, Method::method_counters_offset())); __ movptr(rcx, Address(rcx, Method::method_counters_offset()));
__ increment_mask_and_jump(Address(rcx, be_offset), increment, mask, __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask,
rax, false, Assembler::zero, &backedge_counter_overflow); rax, false, Assembler::zero,
UseOnStackReplacement ? &backedge_counter_overflow : NULL);
} else { } else {
// increment counter // increment counter
__ movptr(rcx, Address(rcx, Method::method_counters_offset())); __ movptr(rcx, Address(rcx, Method::method_counters_offset()));
......
/* /*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2018, 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
...@@ -169,6 +169,14 @@ class Label VALUE_OBJ_CLASS_SPEC { ...@@ -169,6 +169,14 @@ class Label VALUE_OBJ_CLASS_SPEC {
Label() { Label() {
init(); init();
} }
~Label() {
assert(is_bound() || is_unused(), "Label was never bound to a location, but it was used as a jmp target");
}
void reset() {
init(); //leave _patch_overflow because it points to CodeBuffer.
}
}; };
// A union type for code which has to assemble both constant and // A union type for code which has to assemble both constant and
......
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2018, 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
...@@ -128,6 +128,9 @@ LIR_Assembler::LIR_Assembler(Compilation* c): ...@@ -128,6 +128,9 @@ LIR_Assembler::LIR_Assembler(Compilation* c):
LIR_Assembler::~LIR_Assembler() { LIR_Assembler::~LIR_Assembler() {
// The unwind handler label may be unbound if this destructor is invoked because of a bail-out.
// Reset it here to avoid an assertion.
_unwind_handler_entry.reset();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册