hotspot/src/share/vm/prims/jniCheck.hpp
author ysr
Thu, 03 Dec 2009 15:01:57 -0800
changeset 4461 c17c526d36ef
parent 1623 a0dd9009e992
child 5547 f4b087cbb361
permissions -rw-r--r--
6906727: UseCompressedOops: some card-marking fixes related to object arrays Summary: Introduced a new write_ref_array(HeapWords* start, size_t count) method that does the requisite MemRegion range calculation so (some of the) clients of the erstwhile write_ref_array(MemRegion mr) do not need to worry. This removed all external uses of array_size(), which was also simplified and made private. Asserts were added to catch other possible issues. Further, less essential, fixes stemming from this investigation are deferred to CR 6904516 (to follow shortly in hs17). Reviewed-by: kvn, coleenp, jmasa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
1623
a0dd9009e992 6785258: Update copyright year
xdono
parents: 1618
diff changeset
     2
 * Copyright 2003-2008 Sun Microsystems, Inc.  All Rights Reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
 * have any questions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
1618
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    25
extern "C" {
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    26
  // Report a JNI failure caught by -Xcheck:jni.  Perform a core dump.
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    27
  // Note: two variations -- one to be called when in VM state (e.g. when
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    28
  // within IN_VM macro), one to be called when in NATIVE state.
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    29
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    30
  // When in VM state:
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    31
  static void ReportJNIFatalError(JavaThread* thr, const char *msg) {
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    32
    tty->print_cr("FATAL ERROR in native method: %s", msg);
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    33
    thr->print_stack();
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    34
    os::abort(true);
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    35
  }
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    36
}
2d86b9b84aa5 6739363: Xcheck jni doesn't check native function arguments
poonam
parents: 1
diff changeset
    37
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
// Checked JNI routines that are useful for outside of checked JNI
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
class jniCheck : public AllStatic {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  static oop validate_handle(JavaThread* thr, jobject obj);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  static oop validate_object(JavaThread* thr, jobject obj);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
  static klassOop validate_class(JavaThread* thr, jclass clazz, bool allow_primitive = false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  static void validate_class_descriptor(JavaThread* thr, const char* name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  static void validate_throwable_klass(JavaThread* thr, klassOop klass);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
  static void validate_call_object(JavaThread* thr, jobject obj, jmethodID method_id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  static void validate_call_class(JavaThread* thr, jclass clazz, jmethodID method_id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  static methodOop validate_jmethod_id(JavaThread* thr, jmethodID method_id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
};