Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

enum {
        Ehdr32sz        = 52,
        Phdr32sz        = 32,
        Shdr32sz        = 40,

        Ehdr64sz        = 64,
        Phdr64sz        = 56,
        Shdr64sz        = 64,
};

/* from /sys/src/libmach/elf.h */
enum {
        /* Ehdr codes */
        MAG0 = 0,               /* ident[] indexes */
        MAG1 = 1,
        MAG2 = 2,
        MAG3 = 3,
        CLASS = 4,
        DATA = 5,
        VERSION = 6,

        ELFCLASSNONE = 0,       /* ident[CLASS] */
        ELFCLASS32 = 1,
        ELFCLASS64 = 2,
        ELFCLASSNUM = 3,

        ELFDATANONE = 0,        /* ident[DATA] */
        ELFDATA2LSB = 1,
        ELFDATA2MSB = 2,
        ELFDATANUM = 3,

        NOETYPE = 0,            /* type */
        REL = 1,
        EXEC = 2,
        DYN = 3,
        CORE = 4,

        NONE = 0,               /* machine */
        M32 = 1,                /* AT&T WE 32100 */
        SPARC = 2,              /* Sun SPARC */
        I386 = 3,               /* Intel 80386 */
        M68K = 4,               /* Motorola 68000 */
        M88K = 5,               /* Motorola 88000 */
        I486 = 6,               /* Intel 80486 */
        I860 = 7,               /* Intel i860 */
        MIPS = 8,               /* Mips R2000 */
        S370 = 9,               /* Amdhal       */
        MIPSR4K = 10,           /* Mips R4000 */
        SPARC64 = 18,           /* Sun SPARC v9 */
        POWER = 20,             /* PowerPC */
        POWER64 = 21,           /* PowerPC64 */
        ARM = 40,               /* ARM */
        AMD64 = 62,             /* Amd64 */
        ARM64 = 183,            /* ARM64 */

        NO_VERSION = 0,         /* version, ident[VERSION] */
        CURRENT = 1,

        /* Phdr Codes */
        NOPTYPE = 0,            /* type */
        PT_LOAD = 1,
        DYNAMIC = 2,
        INTERP = 3,
        NOTE = 4,
        SHLIB = 5,
        PHDR = 6,

        R = 0x4,                /* flags */
        W = 0x2,
        X = 0x1,

        /* Shdr Codes */
        Progbits = 1,   /* section types */
        Strtab = 3,
        Nobits = 8,

        Swrite = 1,     /* section attributes (flags) */
        Salloc = 2,
        Sexec = 4,
};

typedef void (*Putl)(long);

void    elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl));
void    elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr,
        ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align);
void    elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags,
        ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl,
        ulong align, ulong entsz);

void    elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl));
void    elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type,
        uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz,
        ulong prots, uvlong align);
void    elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name,
        ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz,
        ulong link, ulong addnl, uvlong align, uvlong entsz);