123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /* ----------------------------------------------------------------------- *
- *
- * 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 */
|