struct aout_m68k {
be_uint32_t a_magic;
be_uint32_t a_text;
be_uint32_t a_data;
be_uint32_t a_bss;
be_uint32_t a_syms;
be_uint32_t a_entry;
be_uint32_t a_trsize;
be_uint32_t a_drsize;
};
#define AOUT_GET_MAGIC(e) (((e)->a_magic.val[2]<<8) | (e)->a_magic.val[3])
#define AOUT_OMAGIC 0407
#define AOUT_NMAGIC 0410
#define AOUT_ZMAGIC 0413
#define AOUT_GET_FLAGS(e) ((e)->a_magic.val[0] >> 2)
#define AOUT_FLAG_PIC 0x10
#define AOUT_FLAG_DYNAMIC 0x20
#define AOUT_GET_MID(e) ((((e)->a_magic.val[0] & 0x03) << 8) | \
(e)->a_magic.val[1])
#define AOUT_MID_M68K 135
#define AOUT_MID_M68K4K 136
#define AOUT_PAGESIZE(e) (AOUT_GET_MAGIC(e) == AOUT_OMAGIC ? 1 : \
AOUT_GET_MID(e) == AOUT_MID_M68K ? 8192 : 4096)
struct elf_m68k_hdr {
#define EI_MAG0 0
#define EI_MAG1 1
#define EI_MAG2 2
#define EI_MAG3 3
#define EI_CLASS 4
#define EI_DATA 5
#define EI_VERSION 6
#define EL_NIDENT 16
u_int8_t e_ident[EL_NIDENT];
#define ELFMAG0 0x7f
#define ELFMAG1 0x45
#define ELFMAG2 0x4c
#define ELFMAG3 0x46
#define ELFCLASS32 1
#define ELFDATA2MSB 2
be_uint16_t e_type;
#define ET_EXEC 2
be_uint16_t e_machine;
#define EM_68K 4
be_uint32_t e_version;
#define EV_CURRENT 1
be_uint32_t e_entry;
be_uint32_t e_phoff;
be_uint32_t e_shoff;
be_uint32_t e_flags;
be_uint16_t e_ehsize;
be_uint16_t e_phentsize;
be_uint16_t e_phnum;
be_uint16_t e_shentsize;
be_uint16_t e_shnum;
be_uint16_t e_shstrndx;
};
#define SIZE_ELF68K_HDR (sizeof(struct elf_m68k_hdr))
struct elf_m68k_shdr {
be_uint32_t sh_name;
be_uint32_t sh_type;
#define SHT_PROGBITS 1
be_uint32_t sh_flags;
#define SHF_WRITE 1
#define SHF_ALLOC 2
#define SHF_EXECINSTR 4
be_uint32_t sh_addr;
be_uint32_t sh_offset;
be_uint32_t sh_size;
be_uint32_t sh_link;
be_uint32_t sh_info;
be_uint32_t sh_addralign;
be_uint32_t sh_entsize;
};
#define ELF68K_ISDATASEG(sh) \
(get_uint32(&(sh)->sh_type) == SHT_PROGBITS && \
(get_uint32(&(sh)->sh_flags) & \
(SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR)) == \
(SHF_WRITE | SHF_ALLOC))
#define SIZE_ELF68K_SHDR (sizeof(struct elf_m68k_shdr))
struct elf_m68k_phdr {
be_uint32_t p_type;
#define PT_LOAD 1
be_uint32_t p_offset;
be_uint32_t p_vaddr;
be_uint32_t p_paddr;
be_uint32_t p_filesz;
be_uint32_t p_memsz;
be_uint32_t p_flags;
#define PF_R 4
#define PF_W 2
#define PF_X 1
be_uint32_t p_align;
};
#define SIZE_ELF68K_PHDR (sizeof(struct elf_m68k_phdr))