# HG changeset patch # User ehelin # Date 1522833926 -7200 # Node ID 8263950638ed25e66ce66602dda56803ec2a7e42 # Parent 2fef34f043147f05f8196ccad2afd161f1cff86d# Parent 55f8f5635ef73d782dde7944626dcc0df2834435 Merge diff -r 2fef34f04314 -r 8263950638ed make/autoconf/flags-cflags.m4 --- a/make/autoconf/flags-cflags.m4 Wed Apr 04 10:12:02 2018 +0200 +++ b/make/autoconf/flags-cflags.m4 Wed Apr 04 11:25:26 2018 +0200 @@ -455,6 +455,7 @@ elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_DEPRECATE \ -D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -DIAL" + ALWAYS_DEFINES_JVM="-DNOMINMAX" fi ############################################################################### diff -r 2fef34f04314 -r 8263950638ed make/test/JtregNativeHotspot.gmk --- a/make/test/JtregNativeHotspot.gmk Wed Apr 04 10:12:02 2018 +0200 +++ b/make/test/JtregNativeHotspot.gmk Wed Apr 04 11:25:26 2018 +0200 @@ -65,8 +65,11 @@ exeinvoke.c exestack-gap.c endif +BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm + ifeq ($(OPENJDK_TARGET_OS), windows) BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT + BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c endif $(eval $(call SetupTestFilesCompilation, BUILD_HOTSPOT_JTREG_LIBRARIES, \ diff -r 2fef34f04314 -r 8263950638ed src/hotspot/os/linux/os_linux.cpp --- a/src/hotspot/os/linux/os_linux.cpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/os/linux/os_linux.cpp Wed Apr 04 11:25:26 2018 +0200 @@ -152,6 +152,13 @@ static int clock_tics_per_sec = 100; +// If the VM might have been created on the primordial thread, we need to resolve the +// primordial thread stack bounds and check if the current thread might be the +// primordial thread in places. If we know that the primordial thread is never used, +// such as when the VM was created by one of the standard java launchers, we can +// avoid this +static bool suppress_primordial_thread_resolution = false; + // For diagnostics to print a message once. see run_periodic_checks static sigset_t check_signal_done; static bool check_signals = true; @@ -917,6 +924,9 @@ // Check if current thread is the primordial thread, similar to Solaris thr_main. bool os::is_primordial_thread(void) { + if (suppress_primordial_thread_resolution) { + return false; + } char dummy; // If called before init complete, thread stack bottom will be null. // Can be called if fatal error occurs before initialization. @@ -4933,7 +4943,11 @@ if (Posix::set_minimum_stack_sizes() == JNI_ERR) { return JNI_ERR; } - Linux::capture_initial_stack(JavaThread::stack_size_at_create()); + + suppress_primordial_thread_resolution = Arguments::created_by_java_launcher(); + if (!suppress_primordial_thread_resolution) { + Linux::capture_initial_stack(JavaThread::stack_size_at_create()); + } #if defined(IA32) workaround_expand_exec_shield_cs_limit(); diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1CollectorState.hpp --- a/src/hotspot/share/gc/g1/g1CollectorState.hpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/g1CollectorState.hpp Wed Apr 04 11:25:26 2018 +0200 @@ -64,6 +64,10 @@ // of the initial mark pause to the end of the Cleanup pause. bool _mark_or_rebuild_in_progress; + // The next bitmap is currently being cleared or about to be cleared. TAMS and bitmap + // may be out of sync. + bool _clearing_next_bitmap; + // Set during a full gc pause. bool _in_full_gc; @@ -76,6 +80,7 @@ _initiate_conc_mark_if_possible(false), _mark_or_rebuild_in_progress(false), + _clearing_next_bitmap(false), _in_full_gc(false) { } // Phase setters @@ -89,6 +94,7 @@ void set_initiate_conc_mark_if_possible(bool v) { _initiate_conc_mark_if_possible = v; } void set_mark_or_rebuild_in_progress(bool v) { _mark_or_rebuild_in_progress = v; } + void set_clearing_next_bitmap(bool v) { _clearing_next_bitmap = v; } // Phase getters bool in_young_only_phase() const { return _in_young_only_phase && !_in_full_gc; } @@ -102,6 +108,7 @@ bool initiate_conc_mark_if_possible() const { return _initiate_conc_mark_if_possible; } bool mark_or_rebuild_in_progress() const { return _mark_or_rebuild_in_progress; } + bool clearing_next_bitmap() const { return _clearing_next_bitmap; } G1YCType yc_type() const { if (in_initial_mark_gc()) { diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1ConcurrentMark.cpp --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp Wed Apr 04 11:25:26 2018 +0200 @@ -50,6 +50,7 @@ #include "gc/shared/taskqueue.inline.hpp" #include "gc/shared/vmGCOperations.hpp" #include "gc/shared/weakProcessor.hpp" +#include "include/jvm.h" #include "logging/log.hpp" #include "memory/allocation.hpp" #include "memory/resourceArea.hpp" @@ -372,7 +373,6 @@ _concurrent(false), _has_aborted(false), _restart_for_overflow(false), - _concurrent_marking_in_progress(false), _gc_timer_cm(new (ResourceObj::C_HEAP, mtGC) ConcurrentGCTimer()), _gc_tracer_cm(new (ResourceObj::C_HEAP, mtGC) G1OldTracer()), @@ -492,6 +492,8 @@ } void G1ConcurrentMark::reset() { + _has_aborted = false; + reset_marking_for_restart(); // Reset all tasks, since different phases will use different number of active @@ -505,10 +507,6 @@ _top_at_rebuild_starts[i] = NULL; _region_mark_stats[i].clear(); } - - // we need this to make sure that the flag is on during the evac - // pause with initial mark piggy-backed - set_concurrent_marking_in_progress(); } void G1ConcurrentMark::clear_statistics_in_region(uint region_idx) { @@ -519,15 +517,7 @@ _region_mark_stats[region_idx].clear(); } -void G1ConcurrentMark::humongous_object_eagerly_reclaimed(HeapRegion* r) { - assert_at_safepoint_on_vm_thread(); - - // Need to clear mark bit of the humongous object if already set and during a marking cycle. - if (_next_mark_bitmap->is_marked(r->bottom())) { - _next_mark_bitmap->clear(r->bottom()); - } - - // Clear any statistics about the region gathered so far. +void G1ConcurrentMark::clear_statistics(HeapRegion* r) { uint const region_idx = r->hrm_index(); if (r->is_humongous()) { assert(r->is_starts_humongous(), "Got humongous continues region here"); @@ -540,6 +530,22 @@ } } +void G1ConcurrentMark::humongous_object_eagerly_reclaimed(HeapRegion* r) { + assert_at_safepoint_on_vm_thread(); + + // Need to clear mark bit of the humongous object. + if (_next_mark_bitmap->is_marked(r->bottom())) { + _next_mark_bitmap->clear(r->bottom()); + } + + if (!_g1h->collector_state()->mark_or_rebuild_in_progress()) { + return; + } + + // Clear any statistics about the region gathered so far. + clear_statistics(r); +} + void G1ConcurrentMark::reset_marking_for_restart() { _global_mark_stack.set_empty(); @@ -577,19 +583,10 @@ set_concurrency(active_tasks); _concurrent = concurrent; - // We propagate this to all tasks, not just the active ones. - for (uint i = 0; i < _max_num_tasks; ++i) { - _tasks[i]->set_concurrent(concurrent); - } - - if (concurrent) { - set_concurrent_marking_in_progress(); - } else { - // We currently assume that the concurrent flag has been set to - // false before we start remark. At this point we should also be - // in a STW phase. + + if (!concurrent) { + // At this point we should be in a STW phase, and completed marking. assert_at_safepoint_on_vm_thread(); - assert(!concurrent_marking_in_progress(), "invariant"); assert(out_of_regions(), "only way to get here: _finger: " PTR_FORMAT ", _heap_end: " PTR_FORMAT, p2i(_finger), p2i(_heap.end())); @@ -601,7 +598,6 @@ // not doing marking. reset_marking_for_restart(); _num_active_tasks = 0; - clear_concurrent_marking_in_progress(); } G1ConcurrentMark::~G1ConcurrentMark() { @@ -745,8 +741,6 @@ }; void G1ConcurrentMark::pre_initial_mark() { - _has_aborted = false; - // Initialize marking structures. This has to be done in a STW phase. reset(); @@ -954,6 +948,8 @@ } void G1ConcurrentMark::concurrent_cycle_end() { + _g1h->collector_state()->set_clearing_next_bitmap(false); + _g1h->trace_heap_after_gc(_gc_tracer_cm); if (has_aborted()) { @@ -987,6 +983,24 @@ print_stats(); } +void G1ConcurrentMark::verify_during_pause(G1HeapVerifier::G1VerifyType type, VerifyOption vo, const char* caller) { + G1HeapVerifier* verifier = _g1h->verifier(); + + verifier->verify_region_sets_optional(); + + if (VerifyDuringGC) { + GCTraceTime(Debug, gc, phases) trace(caller, _gc_timer_cm); + + size_t const BufLen = 512; + char buffer[BufLen]; + + jio_snprintf(buffer, BufLen, "During GC (%s)", caller); + verifier->verify(type, vo, buffer); + } + + verifier->check_bitmaps(caller); +} + class G1UpdateRemSetTrackingBeforeRebuild : public HeapRegionClosure { G1CollectedHeap* _g1h; G1ConcurrentMark* _cm; @@ -1036,35 +1050,24 @@ return; } - if (VerifyDuringGC) { - _g1h->verifier()->verify(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UsePrevMarking, "During GC (Remark before)"); - } - _g1h->verifier()->check_bitmaps("Remark Start"); - G1Policy* g1p = _g1h->g1_policy(); g1p->record_concurrent_mark_remark_start(); double start = os::elapsedTime(); - finalize_marking(); + verify_during_pause(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UsePrevMarking, "Remark before"); + + { + GCTraceTime(Debug, gc, phases) trace("Finalize Marking", _gc_timer_cm); + finalize_marking(); + } double mark_work_end = os::elapsedTime(); - weak_refs_work(false /* clear_all_soft_refs */); - - if (has_overflown()) { - // We overflowed. Restart concurrent marking. - _restart_for_overflow = true; - - // Verify the heap w.r.t. the previous marking bitmap. - if (VerifyDuringGC) { - _g1h->verifier()->verify(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UsePrevMarking, "During GC (Remark overflow)"); - } - - // Clear the marking state because we will be restarting - // marking due to overflowing the global mark stack. - reset_marking_for_restart(); - } else { + bool const mark_finished = !has_overflown(); + if (mark_finished) { + weak_refs_work(false /* clear_all_soft_refs */); + SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); // We're done with marking. // This is the end of the marking cycle, we're expected all @@ -1085,13 +1088,25 @@ _g1h->num_regions(), cl.num_selected_for_rebuild()); } - if (VerifyDuringGC) { - _g1h->verifier()->verify(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UseNextMarking, "During GC (Remark after)"); - } - _g1h->verifier()->check_bitmaps("Remark End"); + verify_during_pause(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UseNextMarking, "Remark after"); + assert(!restart_for_overflow(), "sanity"); // Completely reset the marking state since marking completed reset_at_marking_complete(); + } else { + // We overflowed. Restart concurrent marking. + _restart_for_overflow = true; + + verify_during_pause(G1HeapVerifier::G1VerifyRemark, VerifyOption_G1UsePrevMarking, "Remark overflow"); + + // Clear the marking state because we will be restarting + // marking due to overflowing the global mark stack. + reset_marking_for_restart(); + } + + { + GCTraceTime(Debug, gc, phases)("Report Object Count"); + report_object_count(); } // Statistics @@ -1101,9 +1116,6 @@ _remark_times.add((now - start) * 1000.0); g1p->record_concurrent_mark_remark_end(); - - G1CMIsAliveClosure is_alive(_g1h); - _gc_tracer_cm->report_object_count_after_gc(&is_alive); } class G1CleanupTask : public AbstractGangTask { @@ -1145,6 +1157,8 @@ _g1h->free_region(hr, _local_cleanup_list, false /* skip_remset */, false /* skip_hcc */, true /* locked */); } hr->clear_cardtable(); + _g1h->concurrent_mark()->clear_statistics_in_region(hr->hrm_index()); + log_trace(gc)("Reclaimed empty region %u (%s) bot " PTR_FORMAT, hr->hrm_index(), hr->get_short_type_str(), p2i(hr->bottom())); } else { hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task); } @@ -1198,6 +1212,7 @@ workers->run_task(&cl); if (!empty_regions_list.is_empty()) { + log_debug(gc)("Reclaimed %u empty regions", empty_regions_list.length()); // Now print the empty regions list. G1HRPrinter* hrp = _g1h->hr_printer(); if (hrp->is_active()) { @@ -1220,28 +1235,19 @@ return; } - _g1h->verifier()->verify_region_sets_optional(); - - if (VerifyDuringGC) { // While rebuilding the remembered set we used the next marking... - _g1h->verifier()->verify(G1HeapVerifier::G1VerifyCleanup, VerifyOption_G1UseNextMarking, "During GC (Cleanup before)"); - } - _g1h->verifier()->check_bitmaps("Cleanup Start"); - G1Policy* g1p = _g1h->g1_policy(); g1p->record_concurrent_mark_cleanup_start(); double start = os::elapsedTime(); + verify_during_pause(G1HeapVerifier::G1VerifyCleanup, VerifyOption_G1UseNextMarking, "Cleanup before"); + { GCTraceTime(Debug, gc, phases)("Update Remembered Set Tracking After Rebuild"); G1UpdateRemSetTrackingAfterRebuild cl(_g1h); _g1h->heap_region_iterate(&cl); } - double count_end = os::elapsedTime(); - double this_final_counting_time = (count_end - start); - _total_cleanup_time += this_final_counting_time; - if (log_is_enabled(Trace, gc, liveness)) { G1PrintRegionLivenessInfoClosure cl("Post-Cleanup"); _g1h->heap_region_iterate(&cl); @@ -1254,33 +1260,13 @@ reclaim_empty_regions(); } - { - GCTraceTime(Debug, gc, phases)("Finalize Concurrent Mark Cleanup"); - _g1h->g1_policy()->record_concurrent_mark_cleanup_end(); - } - - // Statistics. - double end = os::elapsedTime(); - _cleanup_times.add((end - start) * 1000.0); - // Cleanup will have freed any regions completely full of garbage. // Update the soft reference policy with the new heap occupancy. Universe::update_heap_info_at_gc(); - if (VerifyDuringGC) { - _g1h->verifier()->verify(G1HeapVerifier::G1VerifyCleanup, VerifyOption_G1UsePrevMarking, "During GC (Cleanup after)"); - } - - _g1h->verifier()->check_bitmaps("Cleanup End"); - - _g1h->verifier()->verify_region_sets_optional(); - - // We need to make this be a "collection" so any collection pause that - // races with it goes around and waits for completeCleanup to finish. - _g1h->increment_total_collections(); - // Clean out dead classes and update Metaspace sizes. if (ClassUnloadingWithConcurrentMark) { + GCTraceTime(Debug, gc, phases)("Purge Metaspace"); ClassLoaderDataGraph::purge(); } MetaspaceGC::compute_new_size(); @@ -1288,6 +1274,22 @@ // We reclaimed old regions so we should calculate the sizes to make // sure we update the old gen/space data. _g1h->g1mm()->update_sizes(); + + verify_during_pause(G1HeapVerifier::G1VerifyCleanup, VerifyOption_G1UsePrevMarking, "Cleanup after"); + + // We need to make this be a "collection" so any collection pause that + // races with it goes around and waits for Cleanup to finish. + _g1h->increment_total_collections(); + + // Local statistics + double recent_cleanup_time = (os::elapsedTime() - start); + _total_cleanup_time += recent_cleanup_time; + _cleanup_times.add(recent_cleanup_time); + + { + GCTraceTime(Debug, gc, phases)("Finalize Concurrent Mark Cleanup"); + _g1h->g1_policy()->record_concurrent_mark_cleanup_end(); + } } // Supporting Object and Oop closures for reference discovery @@ -1502,16 +1504,6 @@ } void G1ConcurrentMark::weak_refs_work(bool clear_all_soft_refs) { - if (has_overflown()) { - // Skip processing the discovered references if we have - // overflown the global marking stack. Reference objects - // only get discovered once so it is OK to not - // de-populate the discovered reference lists. We could have, - // but the only benefit would be that, when marking restarts, - // less reference objects are discovered. - return; - } - ResourceMark rm; HandleMark hm; @@ -1630,10 +1622,16 @@ } } +void G1ConcurrentMark::report_object_count() { + G1CMIsAliveClosure is_alive(_g1h); + _gc_tracer_cm->report_object_count_after_gc(&is_alive); +} + void G1ConcurrentMark::swap_mark_bitmaps() { G1CMBitMap* temp = _prev_mark_bitmap; _prev_mark_bitmap = _next_mark_bitmap; _next_mark_bitmap = temp; + _g1h->collector_state()->set_clearing_next_bitmap(true); } // Closure for marking entries in SATB buffers. @@ -1732,8 +1730,6 @@ ResourceMark rm; HandleMark hm; - GCTraceTime(Debug, gc, phases) trace("Finalize Marking", _gc_timer_cm); - _g1h->ensure_parsability(false); // this is remark, so we'll use up all active threads @@ -2115,7 +2111,7 @@ // If we are not concurrent (i.e. we're doing remark) we don't need // to check anything else. The other steps are only needed during // the concurrent marking phase. - if (!_concurrent) { + if (!_cm->concurrent()) { return; } @@ -2313,7 +2309,7 @@ _draining_satb_buffers = false; assert(has_aborted() || - _concurrent || + _cm->concurrent() || satb_mq_set.completed_buffers_num() == 0, "invariant"); // again, this was a potentially expensive operation, decrease the @@ -2468,7 +2464,6 @@ bool do_termination, bool is_serial) { assert(time_target_ms >= 1.0, "minimum granularity is 1ms"); - assert(_concurrent == _cm->concurrent(), "they should be the same"); _start_time_ms = os::elapsedVTime() * 1000.0; @@ -2688,17 +2683,6 @@ if (finished) { // We're all done. - if (_worker_id == 0) { - // Let's allow task 0 to do this - if (_concurrent) { - assert(_cm->concurrent_marking_in_progress(), "invariant"); - // We need to set this to false before the next - // safepoint. This way we ensure that the marking phase - // doesn't observe any more heap expansions. - _cm->clear_concurrent_marking_in_progress(); - } - } - // We can now guarantee that the global stack is empty, since // all other tasks have finished. We separated the guarantees so // that, if a condition is false, we can immediately find out @@ -2814,7 +2798,6 @@ _elapsed_time_ms(0.0), _termination_time_ms(0.0), _termination_start_time_ms(0.0), - _concurrent(false), _marking_step_diffs_ms() { guarantee(task_queue != NULL, "invariant"); diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1ConcurrentMark.hpp --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp Wed Apr 04 11:25:26 2018 +0200 @@ -27,6 +27,7 @@ #include "gc/g1/g1ConcurrentMarkBitMap.hpp" #include "gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp" +#include "gc/g1/g1HeapVerifier.hpp" #include "gc/g1/g1RegionMarkStatsCache.hpp" #include "gc/g1/heapRegionSet.hpp" #include "gc/shared/taskqueue.hpp" @@ -341,12 +342,6 @@ // another concurrent marking phase should start volatile bool _restart_for_overflow; - // This is true from the very start of concurrent marking until the - // point when all the tasks complete their work. It is really used - // to determine the points between the end of concurrent marking and - // time of remark. - volatile bool _concurrent_marking_in_progress; - ConcurrentGCTimer* _gc_timer_cm; G1OldTracer* _gc_tracer_cm; @@ -365,15 +360,23 @@ uint _num_concurrent_workers; // The number of marking worker threads we're using uint _max_concurrent_workers; // Maximum number of marking worker threads + void verify_during_pause(G1HeapVerifier::G1VerifyType type, VerifyOption vo, const char* caller); + void finalize_marking(); void weak_refs_work_parallel_part(BoolObjectClosure* is_alive, bool purged_classes); void weak_refs_work(bool clear_all_soft_refs); + void report_object_count(); + void swap_mark_bitmaps(); void reclaim_empty_regions(); + // Clear statistics gathered during the concurrent cycle for the given region after + // it has been reclaimed. + void clear_statistics(HeapRegion* r); + // Resets the global marking data structures, as well as the // task local ones; should be called during initial mark. void reset(); @@ -447,9 +450,6 @@ // true, periodically insert checks to see if this method should exit prematurely. void clear_bitmap(G1CMBitMap* bitmap, WorkGang* workers, bool may_yield); - // Clear statistics gathered during the concurrent cycle for the given region after - // it has been reclaimed. - void clear_statistics_in_region(uint region_idx); // Region statistics gathered during marking. G1RegionMarkStats* _region_mark_stats; // Top pointer for each region at the start of the rebuild remembered set process @@ -468,6 +468,9 @@ // TARS for the given region during remembered set rebuilding. inline HeapWord* top_at_rebuild_start(uint region) const; + // Clear statistics gathered during the concurrent cycle for the given region after + // it has been reclaimed. + void clear_statistics_in_region(uint region_idx); // Notification for eagerly reclaimed regions to clean up. void humongous_object_eagerly_reclaimed(HeapRegion* r); // Manipulation of the global mark stack. @@ -489,16 +492,6 @@ G1CMRootRegions* root_regions() { return &_root_regions; } - bool concurrent_marking_in_progress() const { - return _concurrent_marking_in_progress; - } - void set_concurrent_marking_in_progress() { - _concurrent_marking_in_progress = true; - } - void clear_concurrent_marking_in_progress() { - _concurrent_marking_in_progress = false; - } - void concurrent_cycle_start(); // Abandon current marking iteration due to a Full GC. void concurrent_cycle_abort(); @@ -697,12 +690,6 @@ // When this task got into the termination protocol double _termination_start_time_ms; - // True when the task is during a concurrent phase, false when it is - // in the remark phase (so, in the latter case, we do not have to - // check all the things that we have to check during the concurrent - // phase, i.e. SATB buffer availability...) - bool _concurrent; - TruncatedSeq _marking_step_diffs_ms; // Updates the local fields after this task has claimed @@ -746,8 +733,6 @@ // Clears all the fields that correspond to a claimed region. void clear_region_fields(); - void set_concurrent(bool concurrent) { _concurrent = concurrent; } - // The main method of this class which performs a marking step // trying not to exceed the given duration. However, it might exit // prematurely, according to some conditions (i.e. SATB buffers are diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1ConcurrentMarkThread.hpp diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1ConcurrentMarkThread.inline.hpp diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1HeapVerifier.cpp --- a/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Wed Apr 04 11:25:26 2018 +0200 @@ -651,10 +651,8 @@ bool res_p = verify_no_bits_over_tams("prev", prev_bitmap, ptams, end); bool res_n = true; - // We reset mark_or_rebuild_in_progress() before we reset _cmThread->in_progress() and in this window - // we do the clearing of the next bitmap concurrently. Thus, we can not verify the bitmap - // if we happen to be in that state. - if (_g1h->collector_state()->mark_or_rebuild_in_progress() || !_g1h->_cmThread->in_progress()) { + // We cannot verify the next bitmap while we are about to clear it. + if (!_g1h->collector_state()->clearing_next_bitmap()) { res_n = verify_no_bits_over_tams("next", next_bitmap, ntams, end); } if (!res_p || !res_n) { @@ -666,7 +664,9 @@ } void G1HeapVerifier::check_bitmaps(const char* caller, HeapRegion* hr) { - if (!G1VerifyBitmaps) return; + if (!G1VerifyBitmaps) { + return; + } guarantee(verify_bitmaps(caller, hr), "bitmap verification"); } @@ -693,7 +693,9 @@ }; void G1HeapVerifier::check_bitmaps(const char* caller) { - if (!G1VerifyBitmaps) return; + if (!G1VerifyBitmaps) { + return; + } G1VerifyBitmapClosure cl(caller, this); _g1h->heap_region_iterate(&cl); diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/g1Policy.cpp --- a/src/hotspot/share/gc/g1/g1Policy.cpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/g1Policy.cpp Wed Apr 04 11:25:26 2018 +0200 @@ -437,6 +437,7 @@ collector_state()->set_initiate_conc_mark_if_possible(need_to_start_conc_mark("end of Full GC", 0)); collector_state()->set_in_initial_mark_gc(false); collector_state()->set_mark_or_rebuild_in_progress(false); + collector_state()->set_clearing_next_bitmap(false); _short_lived_surv_rate_group->start_adding_regions(); // also call this on any additional surv rate groups diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/gc/g1/heapRegion.inline.hpp --- a/src/hotspot/share/gc/g1/heapRegion.inline.hpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/gc/g1/heapRegion.inline.hpp Wed Apr 04 11:25:26 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, 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 @@ -247,6 +247,7 @@ inline void HeapRegion::note_end_of_marking() { _prev_top_at_mark_start = _next_top_at_mark_start; + _next_top_at_mark_start = bottom(); _prev_marked_bytes = _next_marked_bytes; _next_marked_bytes = 0; } diff -r 2fef34f04314 -r 8263950638ed src/hotspot/share/prims/unsafe.cpp --- a/src/hotspot/share/prims/unsafe.cpp Wed Apr 04 10:12:02 2018 +0200 +++ b/src/hotspot/share/prims/unsafe.cpp Wed Apr 04 11:25:26 2018 +0200 @@ -123,6 +123,10 @@ assert_field_offset_sane(p, field_offset); jlong byte_offset = field_offset_to_byte_offset(field_offset); + if (p != NULL) { + p = Access<>::resolve(p); + } + if (sizeof(char*) == sizeof(jint)) { // (this constant folds!) return (address)p + (jint) byte_offset; } else { diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/TEST.groups --- a/test/hotspot/jtreg/TEST.groups Wed Apr 04 10:12:02 2018 +0200 +++ b/test/hotspot/jtreg/TEST.groups Wed Apr 04 11:25:26 2018 +0200 @@ -220,7 +220,8 @@ -runtime/containers/ \ sanity/ \ testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java \ - -:tier1_runtime_appcds_exclude + -:tier1_runtime_appcds_exclude \ + -runtime/signal hotspot_cds = \ runtime/SharedArchiveFile/ \ @@ -263,7 +264,8 @@ -runtime/containers/ \ -:tier1_runtime \ -:tier1_serviceability \ - -:hotspot_tier2_runtime_platform_agnostic + -:hotspot_tier2_runtime_platform_agnostic \ + -runtime/signal hotspot_tier2_runtime_platform_agnostic = \ runtime/SelectionResolution \ diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/README Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,59 @@ +Copyright (c) 2008, 2018, 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 +under the terms of the GNU General Public License version 2 only, as +published by the Free Software Foundation. + +This code is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +version 2 for more details (a copy is included in the LICENSE file that +accompanied this code). + +You should have received a copy of the GNU General Public License version +2 along with this work; if not, write to the Free Software Foundation, +Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + +Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +or visit www.oracle.com if you need additional information or have any +questions. + + +Briefly, the tests cover the following scenarios: +1. prepre + set signal handlers -> create JVM -> send signals -> destroy JVM -> check signal handlers were called + +2. prepost + set signal handlers -> create JVM -> destroy JVM -> send signals -> check signal handlers were called + +3. postpre + create JVM ->set signal handlers -> send signals -> destroy JVM -> check signal handlers were called + +4. postpost + create JVM -> set signal handlers -> destroy JVM -> send signals -> check signal handlers were called + +There is one more scenario called 'nojvm'. +In this case no jvm is created, so pure signal testing is done. + +Signal handlers don't do anything, so the only fact that signal handler was called is checked. +Also 2 different ways of setting signal handlers are tested: sigaction, sigset. + +For 'postpre' and 'postpro' libjsig.so is used to chain signal handlers behind VM installed ones. + +=> Current tests cover the following cases (don't count 'nojvm' scenario): +1. Support for pre-installed signal handlers when the HotSpot VM is created. +2. Support for signal handler installation after the HotSpot VM is created inside JNI code + + +Notes: + +SIGQUIT, SIGTERM, SIGINT, and SIGHUP signals cannot be chained. +If the application needs to handle these signals, the -Xrs option needs +to be specified. So, test these signals only with -Xrs flag. + +On Linux and Mac OS X, SIGUSR2 is used to implement suspend and resume. So, +don't test SIGUSR2 on Linux and Mac OS X. + +SIGJVM1 and SIGJVM2 exist only on Solaris and are reserved for exclusive use +by the JVM. So don't test SIGJVM1 and SIGJVM2. diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/SigTestDriver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/SigTestDriver.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2007, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.Utils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class SigTestDriver { + public static void main(String[] args) { + // No signal tests on Windows yet; so setting to no-op + if (Platform.isWindows()) { + System.out.println("SKIPPED: no signal tests on Windows, ignore."); + return; + } + + // At least one argument should be specified + if ( (args == null) || (args.length < 1) ) { + throw new IllegalArgumentException("At lease one argument should be specified, the signal name"); + } + + String signame = args[0]; + switch (signame) { + case "SIGWAITING": + case "SIGKILL": + case "SIGSTOP": { + System.out.println("SKIPPED: signals SIGWAITING, SIGKILL and SIGSTOP can't be tested, ignore."); + return; + } + case "SIGUSR2": { + if (Platform.isLinux()) { + System.out.println("SKIPPED: SIGUSR2 can't be tested on Linux, ignore."); + return; + } else if (Platform.isOSX()) { + System.out.println("SKIPPED: SIGUSR2 can't be tested on OS X, ignore."); + return; + } + } + } + + Path test = Paths.get(System.getProperty("test.nativepath")) + .resolve("sigtest") + .toAbsolutePath(); + String envVar = Platform.isWindows() ? "PATH" : + (Platform.isOSX() ? "DYLD_LIBRARY_PATH" : "LD_LIBRARY_PATH"); + + List cmd = new ArrayList<>(); + Collections.addAll(cmd, + test.toString(), + "-sig", + signame, + "-mode", + null, // modeIdx + "-scenario", + null // scenarioIdx + ); + int modeIdx = 4; + int scenarioIdx = 6; + + // add external flags + cmd.addAll(vmargs()); + + // add test specific arguments w/o signame + cmd.addAll(Arrays.asList(args) + .subList(1, args.length)); + + boolean passed = true; + + for (String mode : new String[]{"sigset", "sigaction"}) { + for (String scenario : new String[] {"nojvm", "prepre", "prepost", "postpre", "postpost"}) { + cmd.set(modeIdx, mode); + cmd.set(scenarioIdx, scenario); + System.out.printf("START TESTING: SIGNAL = %s, MODE = %s, SCENARIO=%s%n",signame, mode, scenario); + System.out.printf("Do execute: %s%n", cmd.toString()); + + ProcessBuilder pb = new ProcessBuilder(cmd); + pb.environment().merge(envVar, jvmLibDir().toString(), + (x, y) -> y + File.pathSeparator + x); + pb.environment().put("CLASSPATH", Utils.TEST_CLASS_PATH); + + switch (scenario) { + case "postpre": + case "postpost": { + pb.environment().merge("LD_PRELOAD", libjsig().toString(), + (x, y) -> y + File.pathSeparator + x); + } + } + + try { + OutputAnalyzer oa = ProcessTools.executeProcess(pb); + oa.reportDiagnosticSummary(); + int exitCode = oa.getExitValue(); + if (exitCode == 0) { + System.out.println("PASSED with exit code 0"); + } else { + System.out.println("FAILED with exit code " + exitCode); + passed = false; + } + } catch (Exception e) { + throw new Error("execution failed", e); + } + } + } + + if (!passed) { + throw new Error("test failed"); + } + } + + private static List vmargs() { + return Stream.concat(Arrays.stream(Utils.VM_OPTIONS.split(" ")), + Arrays.stream(Utils.JAVA_OPTIONS.split(" "))) + .filter(s -> !s.isEmpty()) + .filter(s -> s.startsWith("-X")) + .flatMap(arg -> Stream.of("-vmopt", arg)) + .collect(Collectors.toList()); + } + + private static Path libjsig() { + return jvmLibDir().resolve((Platform.isWindows() ? "" : "lib") + + "jsig." + Platform.sharedLibraryExt()); + } + + private static Path jvmLibDir() { + Path dir = Paths.get(Utils.TEST_JDK); + if (Platform.isWindows()) { + return dir.resolve("bin") + .resolve(variant()) + .toAbsolutePath(); + } else { + return dir.resolve("lib") + .resolve(variant()) + .toAbsolutePath(); + } + } + + private static String variant() { + if (Platform.isServer()) { + return "server"; + } else if (Platform.isClient()) { + return "client"; + } else if (Platform.isMinimal()) { + return "minimal"; + } else { + throw new Error("TESTBUG: unsupported vm variant"); + } + } +} diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigalrm.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigalrm.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigalrm01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGALRM + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigbus.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigbus.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigbus01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGBUS + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigcld.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigcld.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigcld01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGCLD + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigcont.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigcont.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigcont01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGCONT + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigemt.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigemt.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigemt01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGEMT + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigfpe.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigfpe.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigfpe01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGFPE + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigfreeze.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigfreeze.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigfreeze01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGFREEZE + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSighup.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSighup.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sighup01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGHUP -vmopt -XX:+PrintCommandLineFlags -vmopt -Xrs + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigill.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigill.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigill01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGILL + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigint.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigint.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigint01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGINT -vmopt -XX:+PrintCommandLineFlags -vmopt -Xrs + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigiot.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigiot.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigiot01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGIOT + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSiglost.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSiglost.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/siglost01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGLOST + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSiglwp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSiglwp.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/siglwp01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGLWP + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigpipe.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigpipe.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigpipe01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGPIPE + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigpoll.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigpoll.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigpoll01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGPOLL + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigprof.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigprof.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigprof01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGPROF + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigpwr.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigpwr.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigpwr01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGPWR + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigquit.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigquit.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigquit01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGQUIT -vmopt -XX:+PrintCommandLineFlags -vmopt -Xrs + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigsegv.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigsegv.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigsegv01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGSEGV + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigstop.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigstop.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigstop01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGSTOP + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigsys.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigsys.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigsys01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGSYS + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigterm.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigterm.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigterm01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTERM -vmopt -XX:+PrintCommandLineFlags -vmopt -Xrs + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigthaw.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigthaw.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigthaw01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTHAW + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigtrap.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigtrap.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigtrap01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTRAP + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigtstp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigtstp.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigtstp01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTSTP + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigttin.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigttin.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigttin01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTTIN + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigttou.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigttou.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigttou01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGTTOU + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigurg.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigurg.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigurg01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGURG + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigusr1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigusr1.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigusr101. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGUSR1 + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigusr2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigusr2.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigusr201. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGUSR2 + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigvtalrm.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigvtalrm.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigvtalrm01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGVTALRM + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigwinch.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigwinch.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigwinch01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGWINCH + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigxcpu.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigxcpu.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigxcpu01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGXCPU + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigxfsz.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigxfsz.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigxfsz01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGXFSZ + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/TestSigxres.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/TestSigxres.java Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @requires os.family != "windows" + * + * @summary converted from VM testbase runtime/signal/sigxres01. + * VM testbase keywords: [signal, runtime, linux, solaris, macosx] + * + * @library /test/lib + * @run main/native SigTestDriver SIGXRES + */ + diff -r 2fef34f04314 -r 8263950638ed test/hotspot/jtreg/runtime/signal/exesigtest.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/runtime/signal/exesigtest.c Wed Apr 04 11:25:26 2018 +0200 @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2007, 2018, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This is the main program to test the signal chaining/ handling functionality + * See bugs 6277077 and 6414402 + */ + +#define TRUE 1 +#define FALSE 0 +typedef int boolean; + +static JNIEnv *env; +static JavaVM *vm; + +// static int sigid = 0; + +// Define the test pass/ fail codes, may be we can use +// nsk/share/native/native_consts.h in future +static int TEST_PASSED=0; +static int TEST_FAILED=1; + +// This variable is used to notify whether signal has been received or not. +static volatile sig_atomic_t sig_received = 0; + +static char *mode = 0; +static char *scenario = 0; +static char *signal_name; +static int signal_num = -1; + +static JavaVMOption *options = 0; +static int numOptions = 0; + +typedef struct +{ + int sigNum; + const char* sigName; +} signalDefinition; + +static signalDefinition signals[] = +{ + {SIGINT, "SIGINT"}, + {SIGQUIT, "SIGQUIT"}, + {SIGILL, "SIGILL"}, + {SIGTRAP, "SIGTRAP"}, + {SIGIOT, "SIGIOT"}, +#ifdef SIGEMT + {SIGEMT, "SIGEMT"}, +#endif + {SIGFPE, "SIGFPE"}, + {SIGBUS, "SIGBUS"}, + {SIGSEGV, "SIGSEGV"}, + {SIGSYS, "SIGSYS"}, + {SIGPIPE, "SIGPIPE"}, + {SIGALRM, "SIGALRM"}, + {SIGTERM, "SIGTERM"}, + {SIGUSR1, "SIGUSR1"}, + {SIGUSR2, "SIGUSR2"}, +#ifdef SIGCLD + {SIGCLD, "SIGCLD"}, +#endif +#ifdef SIGPWR + {SIGPWR, "SIGPWR"}, +#endif + {SIGWINCH, "SIGWINCH"}, + {SIGURG, "SIGURG"}, +#ifdef SIGPOLL + {SIGPOLL, "SIGPOLL"}, +#endif + {SIGSTOP, "SIGSTOP"}, + {SIGTSTP, "SIGTSTP"}, + {SIGCONT, "SIGCONT"}, + {SIGTTIN, "SIGTTIN"}, + {SIGTTOU, "SIGTTOU"}, + {SIGVTALRM, "SIGVTALRM"}, + {SIGPROF, "SIGPROF"}, + {SIGXCPU, "SIGXCPU"}, + {SIGXFSZ, "SIGXFSZ"}, +#ifdef SIGWAITING + {SIGWAITING, "SIGWAITING"}, +#endif +#ifdef SIGLWP + {SIGLWP, "SIGLWP"}, +#endif +#ifdef SIGFREEZE + {SIGFREEZE, "SIGFREEZE"}, +#endif +#ifdef SIGTHAW + {SIGTHAW, "SIGTHAW"}, +#endif +#ifdef SIGLOST + {SIGLOST, "SIGLOST"}, +#endif +#ifdef SIGXRES + {SIGXRES, "SIGXRES"}, +#endif + {SIGHUP, "SIGHUP"} +}; + +boolean isSupportedSigScenario () +{ + if ( (!strcmp(scenario, "nojvm")) || (!strcmp(scenario, "prepre")) || (!strcmp(scenario, "prepost")) || + (!strcmp(scenario, "postpost")) || (!strcmp(scenario, "postpre")) ) + { + // printf("%s is a supported scenario\n", scenario); + return TRUE; + } + else + { + printf("ERROR: %s is not a supported scenario\n", scenario); + return FALSE; + } +} + +boolean isSupportedSigMode () +{ + if ( (!strcmp(mode, "sigset")) || (!strcmp(mode, "sigaction")) ) + { + // printf("%s is a supported mode\n", mode); + return TRUE; + } + else + { + printf("ERROR: %s is not a supported mode\n", mode); + return FALSE; + } +} + +int getSigNumBySigName(const char* sigName) +{ + int signals_len, sigdef_len, total_sigs, i=0; + + if (sigName == NULL) return -1; + + signals_len = sizeof(signals); + sigdef_len = sizeof(signalDefinition); + total_sigs = signals_len / sigdef_len; + for (i = 0; i < total_sigs; i++) + { + // printf("Inside for loop, i = %d\n", i); + if (!strcmp(sigName, signals[i].sigName)) + return signals[i].sigNum; + } + + return -1; +} + +// signal handler +void handler(int sig) +{ + printf("%s: signal handler for signal %d has been processed\n", signal_name, signal_num); + sig_received = 1; +} + +// Initialize VM with given options +void initVM() +{ + JavaVMInitArgs vm_args; + int i =0; + jint result; + + vm_args.nOptions = numOptions; + vm_args.version = JNI_VERSION_1_2; + vm_args.ignoreUnrecognized = JNI_FALSE; + vm_args.options = options; + +/* try hardcoding options + JavaVMOption option1[2]; + option1[0].optionString="-XX:+PrintCommandLineFlags"; + option1[1].optionString="-Xrs"; +*/ + vm_args.options=options; + vm_args.nOptions=numOptions; + + // Print the VM options in use + printf("initVM: numOptions = %d\n", vm_args.nOptions); + for (i = 0; i < vm_args.nOptions; i++) + { + printf("\tvm_args.options[%d].optionString = %s\n", i, vm_args.options[i].optionString); + } + + // Initialize VM with given options + result = JNI_CreateJavaVM( &vm, (void **) &env, &vm_args ); + + // Did the VM initialize successfully ? + if (result != 0) + { + printf("ERROR: cannot create Java VM.\n"); + exit(TEST_FAILED); + } + + (*vm)->AttachCurrentThread(vm, (void **) &env, (void *) 0); + printf("initVM: JVM started and attached\n"); +} + +// Function to set up signal handler +void setSignalHandler() +{ + int retval = 0 ; + + if (!strcmp(mode, "sigaction")) + { + struct sigaction act; + act.sa_handler = handler; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + retval = sigaction(signal_num, &act, 0); + if (retval != 0) { + printf("ERROR: failed to set signal handler using function %s, error=%s\n", mode, strerror(errno)); + exit(TEST_FAILED); + } + } // end - dealing with sigaction + else if (!strcmp(mode, "sigset")) + { + sigset(signal_num, handler); + } // end dealing with sigset + printf("%s: signal handler using function '%s' has been set\n", signal_name, mode); +} + +// Function to invoke given signal +void invokeSignal() +{ + int pid, retval; + sigset_t new_set, old_set; + + pid = getpid(); + retval = 0; + + // we need to unblock the signal in case it was previously blocked by JVM + // and as result inherited by child process + // (this is at least the case for SIGQUIT in case -Xrs flag is not used). + // Otherwise the test will timeout. + sigemptyset(&new_set); + sigaddset(&new_set, signal_num); + sigprocmask(SIG_UNBLOCK, &new_set, &old_set); + if (retval != 0) { + printf("ERROR: failed to unblock signal, error=%s\n", strerror(errno)); + exit(TEST_FAILED); + } + + // send the signal + retval = kill(pid, signal_num); + if (retval != 0) + { + printf("ERROR: failed to send signal %s, error=%s\n", signal_name, strerror(errno)); + exit(TEST_FAILED); + } + + // set original mask for the signal + retval = sigprocmask(SIG_SETMASK, &old_set, NULL); + if (retval != 0) { + printf("ERROR: failed to set original mask for signal, error=%s\n", strerror(errno)); + exit(TEST_FAILED); + } + + printf("%s: signal has been sent successfully\n", signal_name); +} + +// Usage function +void printUsage() +{ + printf("Usage: sigtest -sig {signal_name} -mode {signal | sigset | sigaction } -scenario {nojvm | postpre | postpost | prepre | prepost}> [-vmopt jvm_option] \n"); + printf("\n"); + exit(TEST_FAILED); +} + +// signal handler BEFORE VM initialization AND +// Invoke signal BEFORE VM exits +void scen_prepre() +{ + setSignalHandler(); + initVM(); + invokeSignal(); + (*vm)->DestroyJavaVM(vm); +} + +// signal handler BEFORE VM initialization AND +// Invoke signal AFTER VM exits +void scen_prepost() +{ + setSignalHandler(); + initVM(); + (*vm)->DestroyJavaVM(vm); + invokeSignal(); +} + +// signal handler AFTER VM initialization AND +// Invoke signal BEFORE VM exits +void scen_postpre() +{ + initVM(); + setSignalHandler(); + invokeSignal(); + (*vm)->DestroyJavaVM(vm); +} + +// signal handler AFTER VM initializationAND +// Invoke signal AFTER VM exits +void scen_postpost() +{ + initVM(); + setSignalHandler(); + (*vm)->DestroyJavaVM(vm); + invokeSignal(); +} + +// signal handler with no JVM in picture +void scen_nojvm() +{ + setSignalHandler(); + invokeSignal(); +} + +void run() +{ + // print the current scenario + if (!strcmp(scenario, "postpre")) + scen_postpre(); + else if (!strcmp(scenario, "postpost")) + scen_postpost(); + else if (!strcmp(scenario, "prepre")) + scen_prepre(); + else if (!strcmp(scenario, "prepost")) + scen_prepost(); + else if (!strcmp(scenario, "nojvm")) + scen_nojvm(); +} + +// main main +int main(int argc, char **argv) +{ + int i=0, j; + + signal_num = -1; + signal_name = NULL; + + // Parse the arguments and find out how many vm args we have + for (i=1; i= argc ) + { + printUsage(); + } + signal_name = argv[i]; + + } + else if (!strcmp(argv[i], "-mode")) + { + i++; + if ( i >= argc ) + { + printUsage(); + } + mode = argv[i]; + } + else if (!strcmp(argv[i], "-scenario")) + { + i++; + if ( i >= argc ) + { + printUsage(); + } + scenario = argv[i]; + } + else if (!strcmp(argv[i], "-vmopt")) + { + i++; + if ( i >= argc ) + { + printUsage(); + } + numOptions++; + } + else + { + printUsage(); + } + } + + if ( !isSupportedSigScenario() || !isSupportedSigMode() ) + { + printUsage(); + } + + // get signal number by it's name + signal_num = getSigNumBySigName(signal_name); + if (signal_num == -1) + { + printf("%s: unknown signal, perhaps is not supported on this platform, ignore\n", + signal_name); + exit(TEST_PASSED); + } + + j = 0; + // Initialize given number of VM options + if (numOptions > 0) + { + options = (JavaVMOption *) malloc(numOptions * sizeof(JavaVMOption)); + for (i=0; i= argc ) + { + printUsage(); + } + options[j].optionString = argv[i]; + j++; + } + } + } + + // do signal invocation + printf("%s: start testing: signal_num=%d, mode=%s, scenario=%s\n", signal_name, signal_num, mode, scenario); + run(); + + while (!sig_received) { + sleep(1); + printf("%s: waiting for getting signal 1sec ...\n", signal_name); + } + + printf("%s: signal has been received\n", signal_name); + + free(options); + + return (sig_received ? TEST_PASSED : TEST_FAILED); +}