--- a/src/hotspot/cpu/sparc/c1_MacroAssembler_sparc.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/c1_MacroAssembler_sparc.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -66,9 +66,9 @@
void C1_MacroAssembler::verified_entry() {
- if (C1Breakpoint) breakpoint_trap();
- // build frame
- verify_FPU(0, "method_entry");
+ if (C1Breakpoint) {
+ breakpoint_trap();
+ }
}
--- a/src/hotspot/cpu/sparc/interp_masm_sparc.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/interp_masm_sparc.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -91,7 +91,6 @@
// dispatch.
void InterpreterMacroAssembler::dispatch_epilog(TosState state, int bcp_incr) {
assert_not_delayed();
- verify_FPU(1, state);
interp_verify_oop(Otos_i, state, __FILE__, __LINE__);
jmp( IdispatchAddress, 0 );
if (bcp_incr != 0) delayed()->inc(Lbcp, bcp_incr);
@@ -264,7 +263,6 @@
// dispatch value in Lbyte_code and increment Lbcp
void InterpreterMacroAssembler::dispatch_Lbyte_code(TosState state, address* table, int bcp_incr, bool verify, bool generate_poll) {
- verify_FPU(1, state);
// %%%%% maybe implement +VerifyActivationFrameSize here
//verify_thread(); //too slow; we will just verify on method entry & exit
if (verify) interp_verify_oop(Otos_i, state, __FILE__, __LINE__);
@@ -2545,11 +2543,6 @@
}
-void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) {
- if (state == ftos || state == dtos) MacroAssembler::verify_FPU(stack_depth);
-}
-
-
// Jump if ((*counter_addr += increment) & mask) satisfies the condition.
void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
int increment, Address mask_addr,
--- a/src/hotspot/cpu/sparc/interp_masm_sparc.hpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/interp_masm_sparc.hpp Mon Nov 11 14:25:51 2019 +0000
@@ -321,7 +321,6 @@
// Debugging
void interp_verify_oop(Register reg, TosState state, const char * file, int line); // only if +VerifyOops && state == atos
void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
- void verify_FPU(int stack_depth, TosState state = ftos); // only if +VerifyFPU && (state == ftos || state == dtos)
// support for JVMTI/Dtrace
typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
--- a/src/hotspot/cpu/sparc/macroAssembler_sparc.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/macroAssembler_sparc.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -1130,21 +1130,6 @@
}
}
-
-// pushes double TOS element of FPU stack on CPU stack; pops from FPU stack
-void MacroAssembler::push_fTOS() {
- // %%%%%% need to implement this
-}
-
-// pops double TOS element from CPU stack and pushes on FPU stack
-void MacroAssembler::pop_fTOS() {
- // %%%%%% need to implement this
-}
-
-void MacroAssembler::empty_FPU_stack() {
- // %%%%%% need to implement this
-}
-
void MacroAssembler::_verify_oop(Register reg, const char* msg, const char * file, int line) {
// plausibility check for oops
if (!VerifyOops) return;
@@ -2826,47 +2811,6 @@
bind(done);
}
-
-
-void MacroAssembler::print_CPU_state() {
- // %%%%% need to implement this
-}
-
-void MacroAssembler::verify_FPU(int stack_depth, const char* s) {
- // %%%%% need to implement this
-}
-
-void MacroAssembler::push_IU_state() {
- // %%%%% need to implement this
-}
-
-
-void MacroAssembler::pop_IU_state() {
- // %%%%% need to implement this
-}
-
-
-void MacroAssembler::push_FPU_state() {
- // %%%%% need to implement this
-}
-
-
-void MacroAssembler::pop_FPU_state() {
- // %%%%% need to implement this
-}
-
-
-void MacroAssembler::push_CPU_state() {
- // %%%%% need to implement this
-}
-
-
-void MacroAssembler::pop_CPU_state() {
- // %%%%% need to implement this
-}
-
-
-
void MacroAssembler::verify_tlab() {
#ifdef ASSERT
if (UseTLAB && VerifyOops) {
--- a/src/hotspot/cpu/sparc/macroAssembler_sparc.hpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/macroAssembler_sparc.hpp Mon Nov 11 14:25:51 2019 +0000
@@ -649,10 +649,6 @@
inline void callr( Register s1, Register s2 );
inline void callr( Register s1, int simm13a, RelocationHolder const& rspec = RelocationHolder() );
- // Emits nothing on V8
- inline void iprefetch( address d, relocInfo::relocType rt = relocInfo::none );
- inline void iprefetch( Label& L);
-
inline void tst( Register s );
inline void ret( bool trace = false );
@@ -1056,23 +1052,6 @@
// check_and_forward_exception to handle exceptions when it is safe
void check_and_forward_exception(Register scratch_reg);
- // pushes double TOS element of FPU stack on CPU stack; pops from FPU stack
- void push_fTOS();
-
- // pops double TOS element from CPU stack and pushes on FPU stack
- void pop_fTOS();
-
- void empty_FPU_stack();
-
- void push_IU_state();
- void pop_IU_state();
-
- void push_FPU_state();
- void pop_FPU_state();
-
- void push_CPU_state();
- void pop_CPU_state();
-
// Returns the byte size of the instructions generated by decode_klass_not_null().
static int instr_size_for_decode_klass_not_null();
@@ -1092,15 +1071,11 @@
#define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
#define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
- // only if +VerifyOops
- void verify_FPU(int stack_depth, const char* s = "illegal FPU state");
- // only if +VerifyFPU
void stop(const char* msg); // prints msg, dumps registers and stops execution
void warn(const char* msg); // prints msg, but don't stop
void untested(const char* what = "");
void unimplemented(const char* what = "");
void should_not_reach_here() { stop("should not reach here"); }
- void print_CPU_state();
// oops in code
AddressLiteral allocate_oop_address(jobject obj); // allocate_index
--- a/src/hotspot/cpu/sparc/macroAssembler_sparc.inline.hpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/cpu/sparc/macroAssembler_sparc.inline.hpp Mon Nov 11 14:25:51 2019 +0000
@@ -278,13 +278,6 @@
inline void MacroAssembler::callr( Register s1, Register s2 ) { jmpl( s1, s2, O7 ); }
inline void MacroAssembler::callr( Register s1, int simm13a, RelocationHolder const& rspec ) { jmpl( s1, simm13a, O7, rspec); }
-// prefetch instruction
-inline void MacroAssembler::iprefetch( address d, relocInfo::relocType rt ) {
- Assembler::bp( never, true, xcc, pt, d, rt );
- Assembler::bp( never, true, xcc, pt, d, rt );
-}
-inline void MacroAssembler::iprefetch( Label& L) { iprefetch( target(L) ); }
-
inline void MacroAssembler::tst( Register s ) { orcc( G0, s, G0 ); }
inline void MacroAssembler::ret( bool trace ) {
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -3201,46 +3201,6 @@
}
}
-void
-PSParallelCompact::move_and_update(ParCompactionManager* cm, SpaceId space_id) {
- const MutableSpace* sp = space(space_id);
- if (sp->is_empty()) {
- return;
- }
-
- ParallelCompactData& sd = PSParallelCompact::summary_data();
- ParMarkBitMap* const bitmap = mark_bitmap();
- HeapWord* const dp_addr = dense_prefix(space_id);
- HeapWord* beg_addr = sp->bottom();
- HeapWord* end_addr = sp->top();
-
- assert(beg_addr <= dp_addr && dp_addr <= end_addr, "bad dense prefix");
-
- const size_t beg_region = sd.addr_to_region_idx(beg_addr);
- const size_t dp_region = sd.addr_to_region_idx(dp_addr);
- if (beg_region < dp_region) {
- update_and_deadwood_in_dense_prefix(cm, space_id, beg_region, dp_region);
- }
-
- // The destination of the first live object that starts in the region is one
- // past the end of the partial object entering the region (if any).
- HeapWord* const dest_addr = sd.partial_obj_end(dp_region);
- HeapWord* const new_top = _space_info[space_id].new_top();
- assert(new_top >= dest_addr, "bad new_top value");
- const size_t words = pointer_delta(new_top, dest_addr);
-
- if (words > 0) {
- ObjectStartArray* start_array = _space_info[space_id].start_array();
- MoveAndUpdateClosure closure(bitmap, cm, start_array, dest_addr, words);
-
- ParMarkBitMap::IterationStatus status;
- status = bitmap->iterate(&closure, dest_addr, end_addr);
- assert(status == ParMarkBitMap::full, "iteration not complete");
- assert(bitmap->find_obj_beg(closure.source(), end_addr) == end_addr,
- "live objects skipped because closure is full");
- }
-}
-
jlong PSParallelCompact::millis_since_last_gc() {
// We need a monotonically non-decreasing time in ms but
// os::javaTimeMillis() does not guarantee monotonicity.
--- a/src/hotspot/share/gc/parallel/psParallelCompact.hpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.hpp Mon Nov 11 14:25:51 2019 +0000
@@ -1130,9 +1130,6 @@
static inline HeapWord* dense_prefix(SpaceId space_id);
static inline ObjectStartArray* start_array(SpaceId space_id);
- // Move and update the live objects in the specified space.
- static void move_and_update(ParCompactionManager* cm, SpaceId space_id);
-
// Process the end of the given region range in the dense prefix.
// This includes saving any object not updated.
static void dense_prefix_regions_epilogue(ParCompactionManager* cm,
--- a/src/hotspot/share/services/attachListener.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/services/attachListener.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -237,19 +237,7 @@
// This helps reduces the amount of unreachable objects in the dump
// and makes it easier to browse.
HeapDumper dumper(live_objects_only /* request GC */);
- int res = dumper.dump(op->arg(0));
- if (res == 0) {
- out->print_cr("Heap dump file created");
- } else {
- // heap dump failed
- ResourceMark rm;
- char* error = dumper.error_as_C_string();
- if (error == NULL) {
- out->print_cr("Dump failed - reason unknown");
- } else {
- out->print_cr("%s", error);
- }
- }
+ dumper.dump(op->arg(0), out);
}
return JNI_OK;
}
--- a/src/hotspot/share/services/diagnosticCommand.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/services/diagnosticCommand.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -516,19 +516,7 @@
// This helps reduces the amount of unreachable objects in the dump
// and makes it easier to browse.
HeapDumper dumper(!_all.value() /* request GC if _all is false*/);
- int res = dumper.dump(_filename.value());
- if (res == 0) {
- output()->print_cr("Heap dump file created");
- } else {
- // heap dump failed
- ResourceMark rm;
- char* error = dumper.error_as_C_string();
- if (error == NULL) {
- output()->print_cr("Dump failed - reason unknown");
- } else {
- output()->print_cr("%s", error);
- }
- }
+ dumper.dump(_filename.value(), output());
}
int HeapDumpDCmd::num_arguments() {
--- a/src/hotspot/share/services/heapDumper.cpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/services/heapDumper.cpp Mon Nov 11 14:25:51 2019 +0000
@@ -1969,12 +1969,12 @@
}
// dump the heap to given path.
-int HeapDumper::dump(const char* path) {
+int HeapDumper::dump(const char* path, outputStream* out) {
assert(path != NULL && strlen(path) > 0, "path missing");
// print message in interactive case
- if (print_to_tty()) {
- tty->print_cr("Dumping heap to %s ...", path);
+ if (out != NULL) {
+ out->print_cr("Dumping heap to %s ...", path);
timer()->start();
}
@@ -1982,8 +1982,8 @@
DumpWriter writer(path);
if (!writer.is_open()) {
set_error(writer.error());
- if (print_to_tty()) {
- tty->print_cr("Unable to create %s: %s", path,
+ if (out != NULL) {
+ out->print_cr("Unable to create %s: %s", path,
(error() != NULL) ? error() : "reason unknown");
}
return -1;
@@ -2003,13 +2003,13 @@
set_error(writer.error());
// print message in interactive case
- if (print_to_tty()) {
+ if (out != NULL) {
timer()->stop();
if (error() == NULL) {
- tty->print_cr("Heap dump file created [" JULONG_FORMAT " bytes in %3.3f secs]",
+ out->print_cr("Heap dump file created [" JULONG_FORMAT " bytes in %3.3f secs]",
writer.bytes_written(), timer()->seconds());
} else {
- tty->print_cr("Dump file is incomplete: %s", writer.error());
+ out->print_cr("Dump file is incomplete: %s", writer.error());
}
}
@@ -2137,8 +2137,7 @@
dump_file_seq++; // increment seq number for next time we dump
HeapDumper dumper(false /* no GC before heap dump */,
- true /* send to tty */,
oome /* pass along out-of-memory-error flag */);
- dumper.dump(my_path);
+ dumper.dump(my_path, tty);
os::free(my_path);
}
--- a/src/hotspot/share/services/heapDumper.hpp Mon Nov 11 14:18:20 2019 +0000
+++ b/src/hotspot/share/services/heapDumper.hpp Mon Nov 11 14:25:51 2019 +0000
@@ -41,24 +41,22 @@
// }
//
+class outputStream;
+
class HeapDumper : public StackObj {
private:
char* _error;
- bool _print_to_tty;
bool _gc_before_heap_dump;
bool _oome;
elapsedTimer _t;
- HeapDumper(bool gc_before_heap_dump, bool print_to_tty, bool oome) :
- _error(NULL), _print_to_tty(print_to_tty), _gc_before_heap_dump(gc_before_heap_dump), _oome(oome) { }
+ HeapDumper(bool gc_before_heap_dump, bool oome) :
+ _error(NULL), _gc_before_heap_dump(gc_before_heap_dump), _oome(oome) { }
// string representation of error
char* error() const { return _error; }
void set_error(char* error);
- // indicates if progress messages can be sent to tty
- bool print_to_tty() const { return _print_to_tty; }
-
// internal timer.
elapsedTimer* timer() { return &_t; }
@@ -66,12 +64,13 @@
public:
HeapDumper(bool gc_before_heap_dump) :
- _error(NULL), _print_to_tty(false), _gc_before_heap_dump(gc_before_heap_dump), _oome(false) { }
+ _error(NULL), _gc_before_heap_dump(gc_before_heap_dump), _oome(false) { }
~HeapDumper();
// dumps the heap to the specified file, returns 0 if success.
- int dump(const char* path);
+ // additional info is written to out if not NULL.
+ int dump(const char* path, outputStream* out = NULL);
// returns error message (resource allocated), or NULL if no error
char* error_as_C_string() const;
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java Mon Nov 11 14:18:20 2019 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java Mon Nov 11 14:25:51 2019 +0000
@@ -484,7 +484,10 @@
}
for (FlightRecorderListener cl : PlatformRecorder.getListeners()) {
try {
- cl.recordingStateChanged(getRecording());
+ // Skip internal recordings
+ if (recording != null) {
+ cl.recordingStateChanged(recording);
+ }
} catch (RuntimeException re) {
Logger.log(JFR, WARN, "Error notifying recorder listener:" + re.getMessage());
}
--- a/test/jdk/java/net/CookieHandler/B6791927.java Mon Nov 11 14:18:20 2019 +0000
+++ b/test/jdk/java/net/CookieHandler/B6791927.java Mon Nov 11 14:25:51 2019 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,9 @@
/**
* @test
- * @bug 6791927
+ * @bug 6791927 8233886
* @summary Wrong Locale in HttpCookie::expiryDate2DeltaSeconds
+ * @run main/othervm B6791927
*/
import java.net.*;
@@ -32,12 +33,14 @@
import java.util.Locale;
public class B6791927 {
- public static final void main( String[] aaParamters ) throws Exception{
+ public static final void main(String[] aaParamters) throws Exception {
Locale reservedLocale = Locale.getDefault();
try {
// Forces a non US locale
Locale.setDefault(Locale.FRANCE);
- List<HttpCookie> cookies = HttpCookie.parse("set-cookie: CUSTOMER=WILE_E_COYOTE; expires=Sat, 09-Nov-2019 23:12:40 GMT");
+ List<HttpCookie> cookies = HttpCookie.parse("set-cookie:" +
+ " CUSTOMER=WILE_E_COYOTE;" +
+ " expires=Sat, 09-Nov-2041 23:12:40 GMT");
if (cookies == null || cookies.isEmpty()) {
throw new RuntimeException("No cookie found");
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/api/recorder/TestRecorderListenerWithDump.java Mon Nov 11 14:25:51 2019 +0000
@@ -0,0 +1,37 @@
+package jdk.jfr.api.recorder;
+
+import java.nio.file.Paths;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import jdk.jfr.FlightRecorder;
+import jdk.jfr.FlightRecorderListener;
+import jdk.jfr.Recording;
+/**
+ * @test TestRecorderListenerWithDump
+ *
+ * @key jfr
+ * @requires vm.hasJFR
+ * @run main/othervm jdk.jfr.api.recorder.TestRecorderListenerWithDump
+ */
+public class TestRecorderListenerWithDump {
+
+ public static void main(String... args) throws Exception {
+ AtomicBoolean nullRecording = new AtomicBoolean();
+ FlightRecorder.addListener(new FlightRecorderListener() {
+ public void recordingStateChanged(Recording r) {
+ if (r == null) {
+ nullRecording.set(true);
+ } else {
+ System.out.println("Recording " + r.getName() + " " + r.getState());
+ }
+ }
+ });
+ try (Recording r = new Recording()) {
+ r.start();
+ r.dump(Paths.get("dump.jfr"));
+ }
+ if (nullRecording.get()) {
+ throw new Exception("FlightRecorderListener returned null recording");
+ }
+ }
+}
--- a/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java Mon Nov 11 14:18:20 2019 +0000
+++ b/test/jdk/jdk/jfr/event/runtime/TestBiasedLockRevocationEvents.java Mon Nov 11 14:25:51 2019 +0000
@@ -101,8 +101,9 @@
}
// Retrieve all biased lock revocation events related to the provided lock class, sorted by start time
- static List<RecordedEvent> getRevocationEvents(Recording recording, String fieldName, Class<?> lockClass) throws Throwable {
+ static List<RecordedEvent> getRevocationEvents(Recording recording, String eventTypeName, String fieldName, Class<?> lockClass) throws Throwable {
return Events.fromRecording(recording).stream()
+ .filter(e -> e.getEventType().getName().equals(eventTypeName))
.filter(e -> ((RecordedClass)e.getValue(fieldName)).getName().equals(lockClass.getName()))
.sorted(Comparator.comparing(RecordedEvent::getStartTime))
.collect(Collectors.toList());
@@ -119,7 +120,7 @@
Thread biasBreaker = triggerRevocation(1, MyLock.class);
recording.stop();
- List<RecordedEvent> events = getRevocationEvents(recording, "lockClass", MyLock.class);
+ List<RecordedEvent> events = getRevocationEvents(recording, EventNames.BiasedLockRevocation, "lockClass", MyLock.class);
Asserts.assertEQ(events.size(), 1);
RecordedEvent event = events.get(0);
@@ -143,7 +144,7 @@
Thread biasBreaker = triggerRevocation(BULK_REVOKE_THRESHOLD, MyLock.class);
recording.stop();
- List<RecordedEvent> events = getRevocationEvents(recording, "revokedClass", MyLock.class);
+ List<RecordedEvent> events = getRevocationEvents(recording, EventNames.BiasedLockClassRevocation, "revokedClass", MyLock.class);
Asserts.assertEQ(events.size(), 1);
RecordedEvent event = events.get(0);
@@ -169,7 +170,7 @@
Thread.holdsLock(l);
recording.stop();
- List<RecordedEvent> events = getRevocationEvents(recording, "lockClass", MyLock.class);
+ List<RecordedEvent> events = getRevocationEvents(recording, EventNames.BiasedLockSelfRevocation, "lockClass", MyLock.class);
Asserts.assertEQ(events.size(), 1);
RecordedEvent event = events.get(0);
@@ -211,7 +212,7 @@
touch(l);
recording.stop();
- List<RecordedEvent> events = getRevocationEvents(recording, "lockClass", MyLock.class);
+ List<RecordedEvent> events = getRevocationEvents(recording, EventNames.BiasedLockRevocation, "lockClass", MyLock.class);
Asserts.assertEQ(events.size(), 1);
RecordedEvent event = events.get(0);
@@ -237,7 +238,7 @@
Thread biasBreaker1 = triggerRevocation(BULK_REVOKE_THRESHOLD, MyLock.class);
recording.stop();
- List<RecordedEvent> events = getRevocationEvents(recording, "revokedClass", MyLock.class);
+ List<RecordedEvent> events = getRevocationEvents(recording, EventNames.BiasedLockClassRevocation, "revokedClass", MyLock.class);
Asserts.assertEQ(events.size(), 2);
// The rebias event should occur before the noRebias one