This commit is contained in:
Erik Helin 2018-04-04 11:25:26 +02:00
commit 29bb7c8a05
49 changed files with 2078 additions and 151 deletions

View File

@ -455,6 +455,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER],
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
###############################################################################

View File

@ -65,8 +65,11 @@ else
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, \

View File

@ -152,6 +152,13 @@ static jlong initial_time_count=0;
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 @@ void os::free_thread(OSThread* osthread) {
// 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 @@ jint os::init_2(void) {
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();

View File

@ -64,6 +64,10 @@ class G1CollectorState {
// 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 @@ public:
_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 @@ public:
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 @@ public:
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()) {

View File

@ -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 @@ G1ConcurrentMark::G1ConcurrentMark(G1CollectedHeap* g1h,
_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 @@ G1ConcurrentMark::G1ConcurrentMark(G1CollectedHeap* g1h,
}
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 @@ void G1ConcurrentMark::reset() {
_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 @@ void G1ConcurrentMark::clear_statistics_in_region(uint region_idx) {
_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) {
}
}
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 @@ void G1ConcurrentMark::set_concurrency_and_phase(uint active_tasks, bool concurr
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 @@ void G1ConcurrentMark::reset_at_marking_complete() {
// not doing marking.
reset_marking_for_restart();
_num_active_tasks = 0;
clear_concurrent_marking_in_progress();
}
G1ConcurrentMark::~G1ConcurrentMark() {
@ -745,8 +741,6 @@ public:
};
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_start() {
}
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 @@ void G1ConcurrentMark::mark_from_roots() {
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 @@ void G1ConcurrentMark::remark() {
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 */);
bool const mark_finished = !has_overflown();
if (mark_finished) {
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 {
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 @@ void G1ConcurrentMark::remark() {
_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 @@ void G1ConcurrentMark::remark() {
_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 @@ class G1CleanupTask : public AbstractGangTask {
_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 @@ void G1ConcurrentMark::reclaim_empty_regions() {
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 @@ void G1ConcurrentMark::cleanup() {
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 @@ void G1ConcurrentMark::cleanup() {
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 @@ void G1ConcurrentMark::cleanup() {
// 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 G1CMRefProcTaskExecutor::execute(EnqueueTask& enq_task) {
}
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::weak_refs_work(bool clear_all_soft_refs) {
}
}
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 @@ void G1ConcurrentMark::finalize_marking() {
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 @@ void G1CMTask::regular_clock_call() {
// 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 @@ void G1CMTask::drain_satb_buffers() {
_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 @@ void G1CMTask::do_marking_step(double time_target_ms,
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 @@ void G1CMTask::do_marking_step(double time_target_ms,
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 @@ G1CMTask::G1CMTask(uint worker_id,
_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");

View File

@ -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 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
// 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 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
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 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
// 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 @@ public:
// 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 @@ public:
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 @@ private:
// 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 @@ public:
// 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

View File

@ -651,10 +651,8 @@ bool G1HeapVerifier::verify_bitmaps(const char* caller, HeapRegion* hr) {
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 @@ bool G1HeapVerifier::verify_bitmaps(const char* caller, HeapRegion* hr) {
}
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 @@ public:
};
void G1HeapVerifier::check_bitmaps(const char* caller) {
if (!G1VerifyBitmaps) return;
if (!G1VerifyBitmaps) {
return;
}
G1VerifyBitmapClosure cl(caller, this);
_g1h->heap_region_iterate(&cl);

View File

@ -437,6 +437,7 @@ void G1Policy::record_full_collection_end() {
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

View File

@ -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_start_of_marking() {
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;
}

View File

@ -123,6 +123,10 @@ static inline void* index_oop_from_field_offset_long(oop p, jlong field_offset)
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 {

View File

@ -220,7 +220,8 @@ tier1_runtime = \
-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 @@ hotspot_tier2_runtime = \
-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 \

View File

@ -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.

View File

@ -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<String> 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<String> 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");
}
}
}

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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 <jni.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
/*
* 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; i++)
{
if (! strcmp(argv[i], "-sig") )
{
i++;
if ( 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; i++)
{
// parse VM options
if (!strcmp(argv[i], "-vmopt"))
{
i++;
if ( 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);
}