Copyright 1993, 1994, 2003 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
that describe how NLM is represented internally in the BFD library.
I.E. it describes the in-memory representation of NLM. It requires
the nlm/common.h file which contains the portions that are common to
both the internal and external representations. */
#if 0
typedef unsigned long Nlm32_Addr;
typedef unsigned long Nlm32_Off;
typedef long Nlm32_Sword;
typedef unsigned long Nlm32_Word;
typedef unsigned short Nlm32_Half;
typedef unsigned char Nlm32_Char;
#ifdef BFD_HOST_64_BIT
typedef unsigned BFD_HOST_64_BIT Nlm64_Addr;
typedef unsigned BFD_HOST_64_BIT Nlm64_Off;
typedef BFD_HOST_64_BIT Nlm64_Sxword;
typedef unsigned BFD_HOST_64_BIT Nlm64_Xword;
#endif
typedef long Nlm64_Sword;
typedef unsigned long Nlm64_Word;
typedef unsigned short Nlm64_Half;
#endif
header that is fixed length. */
typedef struct nlm_internal_fixed_header
{
the signature string, which depends upon the NLM target. */
char signature[NLM_SIGNATURE_SIZE];
is 4. */
long version;
by a period and a 1-3 character extension. The first byte is the byte
length of the name and the last byte is a null terminator byte. This
field is fixed length, and any unused bytes should be null bytes. The
value is set by the OUTPUT keyword to NLMLINK. */
char moduleName[NLM_MODULE_NAME_SIZE];
file_ptr codeImageOffset;
bfd_size_type codeImageSize;
file_ptr dataImageOffset;
bfd_size_type dataImageSize;
allocated at load time. Uninitialized data follows the initialized
data in the NLM address space. */
bfd_size_type uninitializedDataSize;
custom data is set by the CUSTOM keyword to NLMLINK. */
file_ptr customDataOffset;
bfd_size_type customDataSize;
The module dependencies are determined by the MODULE keyword in
NLMLINK. */
file_ptr moduleDependencyOffset;
long numberOfModuleDependencies;
file_ptr relocationFixupOffset;
long numberOfRelocationFixups;
file_ptr externalReferencesOffset;
long numberOfExternalReferences;
file_ptr publicsOffset;
long numberOfPublics;
file_ptr debugInfoOffset;
long numberOfDebugRecords;
file_ptr codeStartOffset;
file_ptr exitProcedureOffset;
file_ptr checkUnloadProcedureOffset;
long moduleType;
long flags;
} Nlm_Internal_Fixed_Header;
#define nlm32_internal_fixed_header nlm_internal_fixed_header
#define Nlm32_Internal_Fixed_Header Nlm_Internal_Fixed_Header
#define nlm64_internal_fixed_header nlm_internal_fixed_header
#define Nlm64_Internal_Fixed_Header Nlm_Internal_Fixed_Header
variable in size in the external representation, or else are not at a
fixed offset relative to the start of the NLM header due to preceding
variable sized fields.
Note that all the fields must exist in the external header, and in
the order used here (the same order is used in the internal form
for consistency, not out of necessity). */
typedef struct nlm_internal_variable_header
{
descriptionText, excluding the null terminator. The descriptionText
field contains the NLM description obtained from the DESCRIPTION
keyword in NLMLINK plus the null byte terminator. The descriptionText
can be up to NLM_MAX_DESCRIPTION_LENGTH characters. */
unsigned char descriptionLength;
char descriptionText[NLM_MAX_DESCRIPTION_LENGTH + 1];
specified by the STACK or STACKSIZE keyword in NLMLINK. If no size
is specified, the default is NLM_DEFAULT_STACKSIZE. */
long stackSize;
zero. */
long reserved;
space), and is unused. */
char oldThreadName[NLM_OLD_THREAD_NAME_LENGTH];
in the screenName field, excluding the null byte terminator. The
screenName field contains the screen name as specified by the SCREENNAME
keyword in NLMLINK, and can be up to NLM_MAX_SCREEN_NAME_LENGTH
characters. */
unsigned char screenNameLength;
char screenName[NLM_MAX_SCREEN_NAME_LENGTH + 1];
in the threadName field, excluding the null byte terminator. The
threadName field contains the thread name as specified by the THREADNAME
keyword in NLMLINK, and can be up to NLM_MAX_THREAD_NAME_LENGTH
characters. */
unsigned char threadNameLength;
char threadName[NLM_MAX_THREAD_NAME_LENGTH + 1];
} Nlm_Internal_Variable_Header;
#define nlm32_internal_variable_header nlm_internal_variable_header
#define Nlm32_Internal_Variable_Header Nlm_Internal_Variable_Header
#define nlm64_internal_variable_header nlm_internal_variable_header
#define Nlm64_Internal_Variable_Header Nlm_Internal_Variable_Header
follows the fixed length and variable length NLM headers. */
typedef struct nlm_internal_version_header
{
char stamp[8];
long majorVersion;
long minorVersion;
long revision;
long year;
long month;
long day;
} Nlm_Internal_Version_Header;
#define nlm32_internal_version_header nlm_internal_version_header
#define Nlm32_Internal_Version_Header Nlm_Internal_Version_Header
#define nlm64_internal_version_header nlm_internal_version_header
#define Nlm64_Internal_Version_Header Nlm_Internal_Version_Header
typedef struct nlm_internal_copyright_header
{
char stamp[10];
unsigned char copyrightMessageLength;
char copyrightMessage[NLM_MAX_COPYRIGHT_MESSAGE_LENGTH];
} Nlm_Internal_Copyright_Header;
#define nlm32_internal_copyright_header nlm_internal_copyright_header
#define Nlm32_Internal_Copyright_Header Nlm_Internal_Copyright_Header
#define nlm64_internal_copyright_header nlm_internal_copyright_header
#define Nlm64_Internal_Copyright_Header Nlm_Internal_Copyright_Header
typedef struct nlm_internal_extended_header
{
char stamp[8];
long languageID;
file_ptr messageFileOffset;
bfd_size_type messageFileLength;
long messageCount;
file_ptr helpFileOffset;
bfd_size_type helpFileLength;
file_ptr RPCDataOffset;
bfd_size_type RPCDataLength;
file_ptr sharedCodeOffset;
bfd_size_type sharedCodeLength;
file_ptr sharedDataOffset;
bfd_size_type sharedDataLength;
file_ptr sharedRelocationFixupOffset;
long sharedRelocationFixupCount;
file_ptr sharedExternalReferenceOffset;
long sharedExternalReferenceCount;
file_ptr sharedPublicsOffset;
long sharedPublicsCount;
file_ptr sharedDebugRecordOffset;
long sharedDebugRecordCount;
bfd_vma SharedInitializationOffset;
bfd_vma SharedExitProcedureOffset;
long productID;
long reserved0;
long reserved1;
long reserved2;
long reserved3;
long reserved4;
long reserved5;
} Nlm_Internal_Extended_Header;
#define nlm32_internal_extended_header nlm_internal_extended_header
#define Nlm32_Internal_Extended_Header Nlm_Internal_Extended_Header
#define nlm64_internal_extended_header nlm_internal_extended_header
#define Nlm64_Internal_Extended_Header Nlm_Internal_Extended_Header
from the external format. This is how we store a custom header
which we do not recognize. */
typedef struct nlm_internal_custom_header
{
char stamp[8];
bfd_size_type hdrLength;
file_ptr dataOffset;
bfd_size_type dataLength;
char dataStamp[8];
void *hdr;
} Nlm_Internal_Custom_Header;
#define nlm32_internal_custom_header nlm_internal_custom_header
#define Nlm32_Internal_Custom_Header Nlm_Internal_Custom_Header
#define nlm64_internal_custom_header nlm_internal_custom_header
#define Nlm64_Internal_Custom_Header Nlm_Internal_Custom_Header
header. We don't try to replicate that structure here. */
typedef struct nlm_internal_cygnus_ext_header
{
char stamp[8];
file_ptr offset;
bfd_size_type length;
} Nlm_Internal_Cygnus_Ext_Header;
#define nlm32_internal_cygnus_ext_header nlm_internal_cygnus_ext_header
#define Nlm32_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header
#define nlm64_internal_cygnus_ext_header nlm_internal_cygnus_ext_header
#define Nlm64_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header