hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/Address.java
author roland
Tue, 09 Oct 2012 10:11:38 +0200
changeset 13969 d2a189b83b87
parent 5547 f4b087cbb361
child 32357 43087bc6dd04
permissions -rw-r--r--
7054512: Compress class pointers after perm gen removal Summary: support of compress class pointers in the compilers. Reviewed-by: kvn, twisti
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
     2
 * Copyright (c) 2000, 2008, Oracle and/or its affiliates. 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
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
package sun.jvm.hotspot.debugger;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
/** <P> This is the bottom-most interface which abstracts address
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
    access for both debugging and introspection. In the situation of
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
    debugging a target VM, these routines can throw the specified
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
    RuntimeExceptions to indicate failure and allow recovery of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
    debugging system. If these are used for introspecting the current
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
    VM and implementing functionality in it, however, it is expected
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
    that these kinds of failures will not occur and, in fact, a crash
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
    will occur if the situation arises where they would have been
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
    thrown. </P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
    <P> Addresses are immutable. Further, it was decided not to expose
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
    the representation of the Address (and provide a corresponding
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
    factory method from, for example, long to Address). Unfortunately,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
    because of the existence of C and "reuse" of low bits of pointers,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
    it is occasionally necessary to perform logical operations like
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
    masking off the low bits of an "address". While these operations
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
    could be used to generate arbitrary Address objects, allowing this
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
    is not the intent of providing these operations. </P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
    <P> This interface is able to fetch all Java primitive types,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
    addresses, oops, and C integers of arbitrary size (see @see
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
    sun.jvm.hotspot.types.CIntegerType for further discussion). Note
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
    that the result of the latter is restricted to fitting into a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
    64-bit value and the high-order bytes will be silently discarded
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
    if too many bytes are requested. </P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
    <P> Implementations may have restrictions, for example that the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
    Java-related routines may not be called until a certain point in
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
    the bootstrapping process once the sizes of the Java primitive
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
    types are known. (The current implementation has that property.)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
    </P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
    <P> A note of warning: in C addresses, when represented as
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
    integers, are usually represented with unsigned types.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
    Unfortunately, there are no unsigned primitive types in Java, so
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
    care will have to be taken in the implementation of this interface
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
    if using longs as the representation for 64-bit correctness. This
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
    is not so simple for the comparison operators. </P> */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
public interface Address {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  /** This is stated explicitly here because it is important for
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
      implementations to understand that equals() and hashCode() must
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
      absolutely, positively work properly -- i.e., two Address
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
      objects representing the same address are both equal (via
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
      equals()) and have the same hash code. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  public boolean equals(Object arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  /** This is stated explicitly here because it is important for
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
      implementations to understand that equals() and hashCode() must
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
      absolutely, positively work properly -- i.e., two Address
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
      objects representing the same address are both equal (via
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
      equals()) and have the same hash code. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
  public int hashCode();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  // C/C++-related routines
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  public long       getCIntegerAt      (long offset, long numBytes, boolean isUnsigned)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  /** This returns null if the address at the given offset is NULL. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  public Address    getAddressAt       (long offset) throws UnmappedAddressException, UnalignedAddressException;
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    90
  /** Returns the decoded address at the given offset */
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    91
  public Address    getCompOopAddressAt (long offset) throws UnmappedAddressException, UnalignedAddressException;
13969
d2a189b83b87 7054512: Compress class pointers after perm gen removal
roland
parents: 5547
diff changeset
    92
  public Address    getCompKlassAddressAt (long offset) throws UnmappedAddressException, UnalignedAddressException;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  // Java-related routines
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  public boolean    getJBooleanAt      (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  public byte       getJByteAt         (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  public char       getJCharAt         (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  public double     getJDoubleAt       (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  public float      getJFloatAt        (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  public int        getJIntAt          (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  public long       getJLongAt         (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  public short      getJShortAt        (long offset) throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
  /** This returns null if the address at the given offset is NULL. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  public OopHandle  getOopHandleAt     (long offset)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
    throws UnmappedAddressException, UnalignedAddressException, NotInHeapException;
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   109
  public OopHandle  getCompOopHandleAt (long offset)
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   110
    throws UnmappedAddressException, UnalignedAddressException, NotInHeapException;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
  // C/C++-related mutators. These throw UnmappedAddressException if
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
  // the target is read-only (for example, a core file rather than an
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
  // active process), if the target address is unmapped, or if it is
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
  // read-only. The implementation may supply extra detail messages.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
  /** Sets a C integer numBytes in size at the specified offset. Note
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
      that there is no "unsigned" flag for the accessor since the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
      value will not be sign-extended; the number of bytes are simply
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
      copied from the value into the target address space. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  public void setCIntegerAt(long offset, long numBytes, long value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  /** Sets an Address at the specified location. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  public void setAddressAt(long offset, Address value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  // Java-related mutators -- see above.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  public void       setJBooleanAt      (long offset, boolean value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  public void       setJByteAt         (long offset, byte value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  public void       setJCharAt         (long offset, char value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  public void       setJDoubleAt       (long offset, double value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  public void       setJFloatAt        (long offset, float value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  public void       setJIntAt          (long offset, int value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  public void       setJLongAt         (long offset, long value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
  public void       setJShortAt        (long offset, short value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
  public void       setOopHandleAt     (long offset, OopHandle value)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
    throws UnmappedAddressException, UnalignedAddressException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  // Arithmetic operations -- necessary evil.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  /** This throws an UnsupportedOperationException if this address happens
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
      to actually be an OopHandle, because interior object pointers
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
      are not allowed. Negative offsets are allowed and handle the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
      subtraction case. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
  public Address    addOffsetTo        (long offset) throws UnsupportedOperationException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  /** This method had to be added in order to support heap iteration
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
      in the debugging system, and is effectively the dangerous
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
      operation of allowing interior object pointers. For this reason
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
      it was kept as a separate API and its use is forbidden in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
      non-debugging (i.e., reflective system) case. It is strongly
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
      recommended that this not be called by clients: it is currently
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
      wrapped up in the Space's iteration mechanism. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
  public OopHandle  addOffsetToAsOopHandle(long offset) throws UnsupportedOperationException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
  /** Performs the subtraction "this - arg", returning the resulting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
      offset in bytes. Note that this must handle a null argument
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
      properly, and can be used to convert an Address into a long for
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
      further manipulation, but that the reverse conversion is not
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
      possible. (FIXME: any signed/unsigned issues? Should this work
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
      for OopHandles?) */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  public long       minus(Address arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  /** Performs unsigned comparison "this < arg".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
      (FIXME: should this work for OopHandles?) */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  public boolean    lessThan          (Address arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  /** Performs unsigned comparison "this <= arg".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
      (FIXME: should this work for OopHandles?) */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  public boolean    lessThanOrEqual   (Address arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
  /** Performs unsigned comparison "this > arg".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
      (FIXME: should this work for OopHandles?) */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  public boolean    greaterThan       (Address arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  /** Performs unsigned comparison "this >= arg".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
      (FIXME: should this work for OopHandles?) */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  public boolean    greaterThanOrEqual(Address arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  /** This throws an UnsupportedOperationException if this address happens
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
      to actually be an OopHandle. Performs a logical "and" operation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
      of the bits of the address and the mask (least significant bits
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
      of the Address and the mask are aligned) and returns the result
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
      as an Address. Returns null if the result was zero. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  public Address    andWithMask(long mask) throws UnsupportedOperationException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  /** This throws an UnsupportedOperationException if this address happens
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
      to actually be an OopHandle. Performs a logical "or" operation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
      of the bits of the address and the mask (least significant bits
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
      of the Address and the mask are aligned) and returns the result
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
      as an Address. Returns null if the result was zero. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
  public Address    orWithMask(long mask) throws UnsupportedOperationException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  /** This throws an UnsupportedOperationException if this address happens
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
      to actually be an OopHandle. Performs a logical "exclusive or"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
      operation of the bits of the address and the mask (least
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
      significant bits of the Address and the mask are aligned) and
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
      returns the result as an Address. Returns null if the result was
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
      zero. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  public Address    xorWithMask(long mask) throws UnsupportedOperationException;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
}