StupidOS/include/coff.h

255 lines
4.8 KiB
C
Raw Permalink Normal View History

2024-03-20 15:51:27 +00:00
#ifndef COFF_H
# define COFF_H 1
# include <stdint.h>
typedef struct filehdr
{
uint16_t f_magic;
uint16_t f_nscns;
int32_t f_timdat;
int32_t f_symptr;
int32_t f_nsyms;
uint16_t f_opthdr;
uint16_t f_flags;
} FILHDR;
# define FILHSZ sizeof(FILHDR)
2024-06-10 08:05:10 +00:00
# define F_MACH_UNKNOWN 0x0
# define F_MACH_AM33 0x1d3
# define F_MACH_AMD64 0x8664
# define F_MACH_ARM 0x1c0
# define F_MACH_ARMNT 0x1c4
# define F_MACH_EBC 0xebc
# define F_MACH_I386 0x14c
# define F_MACH_IA64 0x200
# define F_MACH_M32R 0x9041
# define F_MACH_MIPS16 0x266
# define F_MACH_MIPSFPU 0x366
# define F_MACH_MIPSFPU16 0x466
# define F_MACH_POWERPC 0x1f0
# define F_MACH_POWERPCFP 0x1f1
# define F_MACH_R4000 0x166
# define F_MACH_RISCV32 0x5032
# define F_MACH_RISCV64 0x5064
# define F_MACH_RISCV128 0x5128
# define F_MACH_SH3 0x1a2
# define F_MACH_SH3DSP 0x1a3
# define F_MACH_SH4 0x1a6
# define F_MACH_SH5 0x1a8
# define F_MACH_THUMB 0x1c2
# define F_MACH_WCEMIPSV2 0x169
2024-03-20 15:51:27 +00:00
# define F_RELFLG 0x0001
# define F_EXEC 0x0002
# define F_LNNO 0x0004
# define F_LSYMS 0x0008
# define F_LITTLE 0x0100
# define F_BIG 0x0200
# define F_SYMMERGE 0x1000
typedef struct aouthdr
{
int16_t magic;
int16_t vstamp;
int32_t tsize;
int32_t dsize;
int32_t bsize;
int32_t entry;
int32_t text_start;
int32_t data_start;
} AOUTHDR;
# define AOUTHSZ sizeof(AOUTHDR)
# define OMAGIC 0404
# define ZMAGIC 0413
# define STMAGIC 0401
# define SHMAGIC 0443
typedef struct scnhdr
{
int8_t s_name[8];
int32_t s_paddr;
int32_t s_vaddr;
int32_t s_size;
int32_t s_scnptr;
int32_t s_relptr;
int32_t s_lnnoptr;
uint16_t s_nreloc;
uint16_t s_nlnno;
int32_t s_flags;
2024-03-21 12:18:23 +00:00
} __attribute__((packed)) SCNHDR;
2024-03-20 15:51:27 +00:00
# define SCNHSZ sizeof(SCNHDR)
# define STYP_REG 0x000
# define STYP_DSECT 0x001
# define STYP_NOLOAD 0x002
# define STYP_GROUP 0x004
# define STYP_PAD 0x008
# define STYP_COPY 0x010
# define STYP_TEXT 0x020
# define STYP_DATA 0x040
# define STYP_BSS 0x080
# define STYP_INFO 0x200
# define STYP_OVER 0x400
# define STYP_LIB 0x800
typedef struct reloc
{
uint32_t r_vaddr;
uint32_t r_symndx;
uint16_t r_type;
2024-03-21 12:18:23 +00:00
} __attribute__((packed)) RELOC;
2024-03-20 15:51:27 +00:00
# define RELSZ 10
2024-06-10 08:05:10 +00:00
# define R_ABS 0
# define R_DIR16 01
# define R_REL16 02
# define R_DIR32 06
# define R_SEG12 011
# define R_PCRLONG 024
2024-03-20 15:51:27 +00:00
typedef struct lineno
{
union
{
uint32_t l_symndx;
uint32_t l_paddr;
} l_addr;
uint16_t l_lnno;
2024-03-21 12:18:23 +00:00
} __attribute__((packed)) LINENO;
2024-03-20 15:51:27 +00:00
# define LINESZ 6
2024-06-10 08:05:10 +00:00
# define N_UNDEF (0x0)
# define N_ABS (-0x1)
# define N_DEBUG (-0x2)
# define C_EFCN -1 /* physical end of a function */
# define C_NULL 0
# define C_AUTO 1
# define C_EXT 2 /* external symbol */
# define C_STAT 3 /* static */
# define C_REG 4 /* register var */
# define C_EXTDEF 5 /* external definition */
# define C_LABEL 6
# define C_ULABEL 7 /* undefined label */
# define C_MOS 8 /* member of struct */
# define C_ARG 9
# define C_STRTAG 10 /* struct tag */
# define C_MOU 11 /* member of union */
# define C_UNTAG 12 /* union tag */
# define C_TPDEF 13 /* typedef */
# define C_USTATIC 14
# define C_ENTAG 15
# define C_MOE 16
# define C_REGPARM 17
# define C_FIELD 18
# define C_BLOCK 100
# define C_FCN 101
# define C_EOS 102
# define C_FILE 103
# define C_LINE 104
# define C_ALIAS 105
# define C_HIDDEN 106
# define T_NULL 0
# define T_ARG 1
# define T_CHAR 2
# define T_SHORT 3
# define T_INT 4
# define T_LONG 5
# define T_FLOAT 6
# define T_DOUBLE 7
# define T_STRUCT 8
# define T_UNION 9
# define T_ENUM 10
# define T_MOE 11
# define T_UCHAR 12
# define T_USHORT 13
# define T_UINT 14
# define T_ULONG 15
# define DT_NON 0
# define DT_PTR 1
# define DT_FCN 2
# define DT_ARY 3
typedef struct syment
2024-03-21 12:18:23 +00:00
{
2024-06-10 08:05:10 +00:00
union
{
char _n_name[8]; /* symbol name */
struct
{
int32_t _n_zeroes; /* symbol name */
int32_t _n_offset; /* loc in str table */
} _n_n;
uint32_t _n_nptr[2];
} _n;
uint32_t n_value;
2024-03-21 12:18:23 +00:00
int16_t n_scnum;
uint16_t n_type;
2024-06-10 08:05:10 +00:00
int8_t n_sclass;
int8_t n_numaux;
} __attribute__((packed)) SYMENT;
2024-03-21 12:18:23 +00:00
2024-06-10 08:05:10 +00:00
# define SYMESZ 18
# define n_name _n._n_name
# define n_zeroes _n._n_n._n_zeroes
# define n_offset _n._n_n._n_offset
# define n_nptr _n._n_nptr[1]
typedef union auxent
{
struct
{
int32_t x_tagndx;
union
{
struct
{
uint16_t x_lnno;
uint16_t x_size;
} x_lnsz;
int32_t x_fsize;
} x_misc;
union
{
struct
{
int32_t x_lnnoptr;
int32_t x_endndx;
} x_fcn;
struct
{
uint16_t x_dimen[4];
} x_ary;
} x_fcnary;
uint16_t x_tvndx;
} x_sym;
struct
{
char x_fname[14];
} x_file;
struct
{
int32_t x_scnlen;
uint16_t x_nreloc;
uint16_t x_nlinno;
} x_scn;
struct
{
int32_t x_tvfill;
uint16_t x_tvlen;
uint16_t x_tvran[2];
} x_tv;
} AUXENT;
2024-03-21 12:18:23 +00:00
2024-06-10 08:05:10 +00:00
# define AUXESZ 18
2024-03-21 12:18:23 +00:00
2024-03-20 15:51:27 +00:00
#endif /* !COFF_H */