^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Some ECOFF definitions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <stdint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) typedef struct filehdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) uint16_t f_magic; /* magic number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) uint16_t f_nscns; /* number of sections */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) int32_t f_timdat; /* time & date stamp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) int32_t f_symptr; /* file pointer to symbolic header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) int32_t f_nsyms; /* sizeof(symbolic hdr) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) uint16_t f_opthdr; /* sizeof(optional hdr) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) uint16_t f_flags; /* flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) } FILHDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define FILHSZ sizeof(FILHDR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define MIPSEBMAGIC 0x160
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define MIPSELMAGIC 0x162
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) typedef struct scnhdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) char s_name[8]; /* section name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) int32_t s_paddr; /* physical address, aliased s_nlib */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) int32_t s_vaddr; /* virtual address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) int32_t s_size; /* section size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) int32_t s_scnptr; /* file ptr to raw data for section */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) int32_t s_relptr; /* file ptr to relocation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) int32_t s_lnnoptr; /* file ptr to gp histogram */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) uint16_t s_nreloc; /* number of relocation entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) uint16_t s_nlnno; /* number of gp histogram entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) int32_t s_flags; /* flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) } SCNHDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define SCNHSZ sizeof(SCNHDR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define SCNROUND ((int32_t)16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) typedef struct aouthdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) int16_t magic; /* see above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) int16_t vstamp; /* version stamp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) int32_t tsize; /* text size in bytes, padded to DW bdry*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) int32_t dsize; /* initialized data " " */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) int32_t bsize; /* uninitialized data " " */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) int32_t entry; /* entry pt. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) int32_t text_start; /* base of text used for this file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) int32_t data_start; /* base of data used for this file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) int32_t bss_start; /* base of bss used for this file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) int32_t gprmask; /* general purpose register mask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) int32_t cprmask[4]; /* co-processor register masks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) int32_t gp_value; /* the gp value used for this object */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) } AOUTHDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define AOUTHSZ sizeof(AOUTHDR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define OMAGIC 0407
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define NMAGIC 0410
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define ZMAGIC 0413
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define SMAGIC 0411
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define LIBMAGIC 0443
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define N_TXTOFF(f, a) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ((a).magic == ZMAGIC || (a).magic == LIBMAGIC ? 0 : \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) ((a).vstamp < 23 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) ((FILHSZ + AOUTHSZ + (f).f_nscns * SCNHSZ + 7) & 0xfffffff8) : \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) ((FILHSZ + AOUTHSZ + (f).f_nscns * SCNHSZ + SCNROUND-1) & ~(SCNROUND-1)) ) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define N_DATOFF(f, a) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) N_TXTOFF(f, a) + (a).tsize;