/*
*      Human68k .x file structure definitions
*
*      written by ITOH Yasufumi
*      public domain
*
*      $NetBSD: hux.h,v 1.4 2011/02/21 02:31:58 itohy Exp $
*/
/*
* Human68k ".x" executable format
*
*      ----------------------------
*      |  file header (64 bytes)  |
*      |--------------------------|
*      |  text                    |
*      |--------------------------|
*      |  data                    |
*      |--------------------------|
*      |  relocation table        |
*      |--------------------------|
*      |  symbol table            |
*      |--------------------------|
*      |  debugging information   |
*      ----------------------------
*
* text and data sections are loaded contiguous
*/

/* file header */

#define HUXMAGIC        0x4855          /* "HU" */

struct huxhdr {
       be_uint16_t     x_magic;        /* HUXMAGIC */
       u_int8_t        x_reserved1;    /* 0 */
       u_int8_t        x_loadmode;     /* 0: normal, 1: minimal memory,
                                          2: high address */
       be_uint32_t     x_base;         /* base address (normally 0) */
       be_uint32_t     x_entry;        /* execution entry */
       be_uint32_t     x_text;         /* size of text section */
       be_uint32_t     x_data;         /* size of data section */
       be_uint32_t     x_bss;          /* size of bss */
       be_uint32_t     x_rsize;        /* size of relocation table */
       be_uint32_t     x_syms;         /* size of symbol info */
       be_uint32_t     x_db_line;      /* size of debugging info (line #) */
       be_uint32_t     x_db_syms;      /* size of debugging info (symbol) */
       be_uint32_t     x_db_str;       /* size of debugging info (string) */
       be_uint32_t     x_reserved2[4]; /* 0 */
       be_uint32_t     x_bindlist;     /* bind list offset */
};

/*
* relocation information
*/

/* short format */
struct relinf_s {
       be_uint16_t     locoff_s;       /* offset */
};

/* long format */
#define HUXLRELMAGIC    0x0001
struct relinf_l {
       be_uint16_t     lrelmag;        /* HUXLRELMAGIC */
       be_uint16_t     locoff_l[2];    /* this would be  be_uint32_t
                                        * if there were no alignment problems
                                        */
};

#define HUX_MINLREL     0x10000         /* minimal value for long format */