mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-10-10 00:25:06 -04:00
SPDX is an international standard for documenting software license requirements. Remove the existing headers and replace with a brief SPDX preamble. See: https://spdx.dev/use/specifications/ The script used to convert the files is added to "tools", and the file header templates in headers/ are updated. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
140 lines
4.2 KiB
C
140 lines
4.2 KiB
C
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
/* Copyright 1996-2017 The NASM Authors - All Rights Reserved */
|
|
|
|
/*
|
|
* 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 */
|