root/sys/arch/x68k/stand/common/execkern.h
/*
 *      definitions for exec_kernel()
 *
 *      written by ITOH Yasufumi
 *      public domain
 *
 *      $NetBSD: execkern.h,v 1.5 2011/02/21 02:31:58 itohy Exp $
 */

#ifndef X68K_BOOT_EXECKERN_H
#define X68K_BOOT_EXECKERN_H

/*
 * Max number of ``sections''.
 * Currently this includes: .text, .data, size sym, Elf32_Ehdr, Elf32_Shdr x 4,
 *      .shstrtab, .symtab, .strtab, .stab
 */
#define XK_NSEC                 12

#ifndef __ASSEMBLER__

#include <sys/types.h>
#include <sys/exec_elf.h>

struct execkern_arg {
        /* Don't change this structure (see exec_sub.c). */
        u_long          load_addr;      /* text start address */

        struct execkern_section {
                void    *sec_image;     /* section image source address */
                u_long  sec_size;       /* section size */
                u_long  sec_pad;        /* zero fill size after the image */
        } sec[XK_NSEC];

        unsigned        d5;             /* reserved */
        int             rootdev;
        u_long          boothowto;
        u_long          entry_addr;
        /* end of "Don't change this" */

        int             elfsymsiz;
        Elf32_Ehdr      ehdr;           /* saved ELF header */

#define SHSTRTAB_FAKE   "\0.shstrtab\0.symtab\0.strtab\0.stab"
#define SIZE_SHSTRTAB_FAKE_WITH_STAB    33      /* sizeof SHSTRTAB_FAKE */
#define SIZE_SHSTRTAB_FAKE              27      /*   - sizeof ".stab" */
#define SHNAME_OFF_SHSTRTAB             1
#define SHNAME_OFF_SYMTAB               11
#define SHNAME_OFF_STRTAB               19
#define SHNAME_OFF_STAB                 27
        char shstrtab_fake[SIZE_SHSTRTAB_FAKE_WITH_STAB];
};

int xk_load(struct execkern_arg *, void *, u_long);
void __dead exec_kernel(struct execkern_arg *);

#endif /* __ASSEMBLER__ */

#endif /* X68K_BOOT_EXECKERN_H */