180708Sjake/*
282895Sjake * Copyright (c) 1999 Global Technology Associates, Inc.
380708Sjake * All rights reserved.
480708Sjake *
580708Sjake * Redistribution and use in source and binary forms, with or without
680708Sjake * modification, are permitted provided that the following conditions
780708Sjake * are met:
880708Sjake * 1. Redistributions of source code must retain the above copyright
980708Sjake *    notice, this list of conditions and the following disclaimer.
1080708Sjake * 2. Redistributions in binary form must reproduce the above copyright
1180708Sjake *    notice, this list of conditions and the following disclaimer in the
1280708Sjake *    documentation and/or other materials provided with the distribution.
1380708Sjake *
1480708Sjake * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND
1581334Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1680708Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1780708Sjake * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
1881334Sobrien * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
1980708Sjake * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
2080708Sjake * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2180708Sjake * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2280708Sjake * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2380708Sjake * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2480708Sjake * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2580708Sjake *
2680708Sjake * $FreeBSD$
2782895Sjake */
2880708Sjake
2980708Sjake#include <sys/types.h>
3080708Sjake#define	__ELF_WORD_SIZE	32
3180709Sjake#include <sys/elf32.h>
3280709Sjake#include <sys/elf_generic.h>
3380709Sjake#include "kgz.h"
3480709Sjake
3580709Sjake/* Section header indices */
36225890Smarius#define KGZ_SH_SYMTAB		1
37225890Smarius#define KGZ_SH_SHSTRTAB 	2
38225890Smarius#define KGZ_SH_STRTAB		3
39225890Smarius#define KGZ_SH_DATA		4
4088617Sjake#define KGZ_SHNUM		5
4188617Sjake
4288617Sjake/* Section header strings */
4388617Sjake#define KGZ_SHSTR_ZERO		""
4488617Sjake#define KGZ_SHSTR_SYMTAB	".symtab"
4588617Sjake#define KGZ_SHSTR_SHSTRTAB	".shstrtab"
4688617Sjake#define KGZ_SHSTR_STRTAB	".strtab"
4780708Sjake#define KGZ_SHSTR_DATA		".data"
4880709Sjake
4980709Sjake/* Section header string table */
5080709Sjakestruct kgz_shstrtab {
5180709Sjake    char zero[sizeof(KGZ_SHSTR_ZERO)];
5280709Sjake    char symtab[sizeof(KGZ_SHSTR_SYMTAB)];
5380709Sjake    char shstrtab[sizeof(KGZ_SHSTR_SHSTRTAB)];
5480709Sjake    char strtab[sizeof(KGZ_SHSTR_STRTAB)];
5580709Sjake    char data[sizeof(KGZ_SHSTR_DATA)];
5680709Sjake};
5780709Sjake
5880709Sjake/* Symbol table indices */
5980709Sjake#define KGZ_ST_KGZ		1
6080709Sjake#define KGZ_ST_KGZ_NDATA	2
6180709Sjake#define KGZ_STNUM		3
6280709Sjake
6380709Sjake/* Symbol table strings */
6480709Sjake#define KGZ_STR_ZERO		""
6580709Sjake#define KGZ_STR_KGZ		"kgz"
6680709Sjake#define KGZ_STR_KGZ_NDATA	"kgz_ndata"
6780709Sjake
6880709Sjake/* String table */
6980709Sjakestruct kgz_strtab {
7080709Sjake    char zero[sizeof(KGZ_STR_ZERO)];
7180709Sjake    char kgz[sizeof(KGZ_STR_KGZ)];
7280709Sjake    char kgz_ndata[sizeof(KGZ_STR_KGZ_NDATA)];
7380709Sjake};
7480709Sjake
75108153Sjake/* Relocatable header format */
7680709Sjakestruct kgz_elfhdr {
77225889Smarius    Elf32_Ehdr e;
78225889Smarius    Elf32_Shdr sh[KGZ_SHNUM];
79225889Smarius    Elf32_Sym st[KGZ_STNUM];
80225889Smarius    struct kgz_shstrtab shstrtab;
81228222Smarius    struct kgz_strtab strtab;
82225889Smarius};
83225889Smarius
84225889Smariusextern const struct kgz_elfhdr elfhdr;
8580709Sjake