mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-27 08:10:07 +08:00
8dc965347d
We already have abort-on-error memory allocation and I/O operations in nasmlib, so use them for rdoff as well. Delete long-since-obsolete rdoff Mkfiles directory. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
170 lines
5.7 KiB
C
170 lines
5.7 KiB
C
/* ----------------------------------------------------------------------- *
|
|
*
|
|
* Copyright 1996-2017 The NASM Authors - All Rights Reserved
|
|
* See the file AUTHORS included with the NASM distribution for
|
|
* the specific copyright holders.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following
|
|
* conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* ----------------------------------------------------------------------- */
|
|
|
|
/*
|
|
* rdoff.h RDOFF Object File manipulation routines header file
|
|
*/
|
|
|
|
#ifndef RDOFF_H
|
|
#define RDOFF_H 1
|
|
|
|
/*
|
|
* RDOFF definitions. They are used by RDOFF utilities and by NASM's
|
|
* 'outrdf2.c' output module.
|
|
*/
|
|
|
|
/* RDOFF format revision (currently used only when printing the version) */
|
|
#define RDOFF2_REVISION "0.6.1"
|
|
|
|
/* RDOFF2 file signature */
|
|
#define RDOFF2_SIGNATURE "RDOFF2"
|
|
|
|
/* Maximum size of an import/export label (including trailing zero) */
|
|
#define EXIM_LABEL_MAX 256
|
|
|
|
/* Maximum size of library or module name (including trailing zero) */
|
|
#define MODLIB_NAME_MAX 128
|
|
|
|
/* Maximum number of segments that we can handle in one file */
|
|
#define RDF_MAXSEGS 64
|
|
|
|
/* Record types that may present the RDOFF header */
|
|
#define RDFREC_GENERIC 0
|
|
#define RDFREC_RELOC 1
|
|
#define RDFREC_IMPORT 2
|
|
#define RDFREC_GLOBAL 3
|
|
#define RDFREC_DLL 4
|
|
#define RDFREC_BSS 5
|
|
#define RDFREC_SEGRELOC 6
|
|
#define RDFREC_FARIMPORT 7
|
|
#define RDFREC_MODNAME 8
|
|
#define RDFREC_COMMON 10
|
|
|
|
/*
|
|
* Generic record - contains the type and length field, plus a 128 byte
|
|
* array 'data'
|
|
*/
|
|
struct GenericRec {
|
|
uint8_t type;
|
|
uint8_t reclen;
|
|
char data[128];
|
|
};
|
|
|
|
/*
|
|
* Relocation record
|
|
*/
|
|
struct RelocRec {
|
|
uint8_t type; /* must be 1 */
|
|
uint8_t reclen; /* content length */
|
|
uint8_t segment; /* only 0 for code, or 1 for data supported,
|
|
but add 64 for relative refs (ie do not require
|
|
reloc @ loadtime, only linkage) */
|
|
int32_t offset; /* from start of segment in which reference is loc'd */
|
|
uint8_t length; /* 1 2 or 4 bytes */
|
|
uint16_t refseg; /* segment to which reference refers to */
|
|
};
|
|
|
|
/*
|
|
* Extern/import record
|
|
*/
|
|
struct ImportRec {
|
|
uint8_t type; /* must be 2 */
|
|
uint8_t reclen; /* content length */
|
|
uint8_t flags; /* SYM_* flags (see below) */
|
|
uint16_t segment; /* segment number allocated to the label for reloc
|
|
records - label is assumed to be at offset zero
|
|
in this segment, so linker must fix up with offset
|
|
of segment and of offset within segment */
|
|
char label[EXIM_LABEL_MAX]; /* zero terminated, should be written to file
|
|
until the zero, but not after it */
|
|
};
|
|
|
|
/*
|
|
* Public/export record
|
|
*/
|
|
struct ExportRec {
|
|
uint8_t type; /* must be 3 */
|
|
uint8_t reclen; /* content length */
|
|
uint8_t flags; /* SYM_* flags (see below) */
|
|
uint8_t segment; /* segment referred to (0/1/2) */
|
|
int32_t offset; /* offset within segment */
|
|
char label[EXIM_LABEL_MAX]; /* zero terminated as in import */
|
|
};
|
|
|
|
/*
|
|
* DLL record
|
|
*/
|
|
struct DLLRec {
|
|
uint8_t type; /* must be 4 */
|
|
uint8_t reclen; /* content length */
|
|
char libname[MODLIB_NAME_MAX]; /* name of library to link with at load time */
|
|
};
|
|
|
|
/*
|
|
* BSS record
|
|
*/
|
|
struct BSSRec {
|
|
uint8_t type; /* must be 5 */
|
|
uint8_t reclen; /* content length */
|
|
int32_t amount; /* number of bytes BSS to reserve */
|
|
};
|
|
|
|
/*
|
|
* Module name record
|
|
*/
|
|
struct ModRec {
|
|
uint8_t type; /* must be 8 */
|
|
uint8_t reclen; /* content length */
|
|
char modname[MODLIB_NAME_MAX]; /* module name */
|
|
};
|
|
|
|
/*
|
|
* Common variable record
|
|
*/
|
|
struct CommonRec {
|
|
uint8_t type; /* must be 10 */
|
|
uint8_t reclen; /* equals 7+label length */
|
|
uint16_t segment; /* segment number */
|
|
int32_t size; /* size of common variable */
|
|
uint16_t align; /* alignment (power of two) */
|
|
char label[EXIM_LABEL_MAX]; /* zero terminated as in import */
|
|
};
|
|
|
|
/* Flags for ExportRec */
|
|
#define SYM_DATA 1
|
|
#define SYM_FUNCTION 2
|
|
#define SYM_GLOBAL 4
|
|
#define SYM_IMPORT 8
|
|
|
|
#endif /* RDOFF_H */
|