/*
* Copyright (c) 2000, 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.
*
*/
package sun.jvm.hotspot.debugger.win32.coff;
Describes a COFF symbol. (Some of the descriptions are taken
directly from Microsoft's documentation and are copyrighted by
Microsoft.) /** Describes a COFF symbol. (Some of the descriptions are taken
directly from Microsoft's documentation and are copyrighted by
Microsoft.) */
public interface COFFSymbol {
Offset within the file of this record. (FIXME: Now that we have
the auxiliary records exposed, it may not be necessary to expose
this.) /** Offset within the file of this record. (FIXME: Now that we have
the auxiliary records exposed, it may not be necessary to expose
this.) */
public int getOffset();
public String getName();
Value associated with the symbol. The interpretation of this
field depends on Section Number and Storage Class. A typical
meaning is the relocatable address. /** Value associated with the symbol. The interpretation of this
field depends on Section Number and Storage Class. A typical
meaning is the relocatable address. */
public int getValue();
Signed integer identifying the section, using a one-based index into the Section Table. Some values have special meaning defined in COFFSymbolConstants
. /** Signed integer identifying the section, using a one-based index
into the Section Table. Some values have special meaning defined
in {@link sun.jvm.hotspot.debugger.win32.coff.COFFSymbolConstants}. */
public short getSectionNumber();
The Type field of a symbol table entry contains two bytes,
each byte representing type information. The least-significant
byte represents simple (base) data type, and the
most-significant byte represents complex type, if any:
MSB: Complex type: none, pointer, function, array.
LSB: Base type: integer, floating-point, etc.
The possible base type values are listed in COFFSymbolConstants
under the IMAGE_SYM_TYPE constants.
The most significant byte specifies whether the symbol is a
pointer to, function returning, or array of the base type
specified in the least significant byte. Microsoft tools use
this field only to indicate whether or not the symbol is a
function, so that the only two resulting values are 0x0 and 0x20
for the Type field. However, other tools can use this field to
communicate more information.
It is very important to specify the function attribute
correctly. This information is required for incremental linking
to work correctly. For some architectures the information may be
required for other purposes.
The possible function types are listed in COFFSymbolConstants
under the IMAGE_SYM_DTYPE constants.
/** <P> The Type field of a symbol table entry contains two bytes,
each byte representing type information. The least-significant
byte represents simple (base) data type, and the
most-significant byte represents complex type, if any: </P>
<P> MSB: Complex type: none, pointer, function, array. </P>
<P> LSB: Base type: integer, floating-point, etc. </P>
<P> The possible base type values are listed in {@link
sun.jvm.hotspot.debugger.win32.coff.COFFSymbolConstants} under the
IMAGE_SYM_TYPE constants. </P>
<P> The most significant byte specifies whether the symbol is a
pointer to, function returning, or array of the base type
specified in the least significant byte. Microsoft tools use
this field only to indicate whether or not the symbol is a
function, so that the only two resulting values are 0x0 and 0x20
for the Type field. However, other tools can use this field to
communicate more information. </P>
<P> It is very important to specify the function attribute
correctly. This information is required for incremental linking
to work correctly. For some architectures the information may be
required for other purposes. </P>
<P> The possible function types are listed in {@link
sun.jvm.hotspot.debugger.win32.coff.COFFSymbolConstants} under the
IMAGE_SYM_DTYPE constants. </P> */
public short getType();
Enumerated value representing storage class. See COFFSymbolConstants
under the IMAGE_SYM_CLASS constants. /** Enumerated value representing storage class. See {@link
sun.jvm.hotspot.debugger.win32.coff.COFFSymbolConstants} under the
IMAGE_SYM_CLASS constants. */
public byte getStorageClass();
Number of auxiliary symbol table entries that follow this
record. (FIXME: the APIs below which fetch such an auxiliary
symbol are only currently capable of fetching the first one.) /** Number of auxiliary symbol table entries that follow this
record. (FIXME: the APIs below which fetch such an auxiliary
symbol are only currently capable of fetching the first one.) */
public byte getNumberOfAuxSymbols();
Indicates whether this symbol is a function definition: storage class EXTERNAL (2), a Type value indicating it is a function (0x20), and a section number greater than zero. This indicates that the function is followed by an AuxFunctionDefinitionRecord
. Note that a symbol table record that has a section number of UNDEFINED (0) does not define the function and does not have an auxiliary record. /** Indicates whether this symbol is a function definition: storage
class EXTERNAL (2), a Type value indicating it is a function
(0x20), and a section number greater than zero. This indicates
that the function is followed by an {@link
sun.jvm.hotspot.debugger.win32.coff.AuxFunctionDefinitionRecord}.
Note that a symbol table record that has a section number of
UNDEFINED (0) does not define the function and does not have an
auxiliary record. */
public boolean isFunctionDefinition();
This should only be called if isFunctionDefinition
returns true. /** This should only be called if {@link #isFunctionDefinition}
returns true. */
public AuxFunctionDefinitionRecord getAuxFunctionDefinitionRecord();
Indicates whether this symbol is a .bf or .ef symbol record and is therefore followed by an AuxBfEfRecord
. /** Indicates whether this symbol is a .bf or .ef symbol record and
is therefore followed by an {@link
sun.jvm.hotspot.debugger.win32.coff.AuxBfEfRecord}. */
public boolean isBfOrEfSymbol();
This should only be called if isBfOrEfSymbol
returns true. /** This should only be called if {@link #isBfOrEfSymbol} returns
true. */
public AuxBfEfRecord getAuxBfEfRecord();
Indicates whether this symbol is a weak external and is therefore followed by an AuxWeakExternalRecord
. /** Indicates whether this symbol is a weak external and is
therefore followed by an {@link
sun.jvm.hotspot.debugger.win32.coff.AuxWeakExternalRecord}. */
public boolean isWeakExternal();
This should only be called if isWeakExternal
returns true. /** This should only be called if {@link #isWeakExternal} returns
true. */
public AuxWeakExternalRecord getAuxWeakExternalRecord();
Indicates whether this symbol has storage class FILE and is therefore followed by a AuxFileRecord
. /** Indicates whether this symbol has storage class FILE and is
therefore followed by a {@link
sun.jvm.hotspot.debugger.win32.coff.AuxFileRecord}. */
public boolean isFile();
This should only be called if isFile
returns true. /** This should only be called if {@link #isFile} returns
true. */
public AuxFileRecord getAuxFileRecord();
Indicates whether this symbol defines a section and is therefore followed by an AuxSectionDefinitionsRecord
. /** Indicates whether this symbol defines a section and is therefore
followed by an {@link
sun.jvm.hotspot.debugger.win32.coff.AuxSectionDefinitionsRecord}. */
public boolean isSectionDefinition();
This should only be called if isSectionDefinition
returns true. /** This should only be called if {@link #isSectionDefinition} returns
true. */
public AuxSectionDefinitionsRecord getAuxSectionDefinitionsRecord();
}