148905Srnordier/*
248905Srnordier * Copyright (c) 1999 Global Technology Associates, Inc.
348905Srnordier * All rights reserved.
448905Srnordier *
548905Srnordier * Redistribution and use in source and binary forms, with or without
648905Srnordier * modification, are permitted provided that the following conditions
748905Srnordier * are met:
848905Srnordier * 1. Redistributions of source code must retain the above copyright
948905Srnordier *    notice, this list of conditions and the following disclaimer.
1048905Srnordier * 2. Redistributions in binary form must reproduce the above copyright
1148905Srnordier *    notice, this list of conditions and the following disclaimer in the
1248905Srnordier *    documentation and/or other materials provided with the distribution.
1348905Srnordier *
1448905Srnordier * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND
1548905Srnordier * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1648905Srnordier * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1748905Srnordier * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
1848905Srnordier * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
1948905Srnordier * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
2048905Srnordier * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2148905Srnordier * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2248905Srnordier * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2348905Srnordier * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2448905Srnordier * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2548905Srnordier *
2650479Speter * $FreeBSD$
2748905Srnordier */
2848905Srnordier
2976224Sobrien#include <sys/types.h>
30110330Sru#define	__ELF_WORD_SIZE	32
31110330Sru#include <sys/elf32.h>
32110330Sru#include <sys/elf_generic.h>
3348905Srnordier#include "kgz.h"
3448905Srnordier
3548905Srnordier/* Section header indices */
3648905Srnordier#define KGZ_SH_SYMTAB		1
3748905Srnordier#define KGZ_SH_SHSTRTAB 	2
3848905Srnordier#define KGZ_SH_STRTAB		3
3948905Srnordier#define KGZ_SH_DATA		4
4048905Srnordier#define KGZ_SHNUM		5
4148905Srnordier
4248905Srnordier/* Section header strings */
4348905Srnordier#define KGZ_SHSTR_ZERO		""
4448905Srnordier#define KGZ_SHSTR_SYMTAB	".symtab"
4548905Srnordier#define KGZ_SHSTR_SHSTRTAB	".shstrtab"
4648905Srnordier#define KGZ_SHSTR_STRTAB	".strtab"
4748905Srnordier#define KGZ_SHSTR_DATA		".data"
4848905Srnordier
4948905Srnordier/* Section header string table */
5048905Srnordierstruct kgz_shstrtab {
5148905Srnordier    char zero[sizeof(KGZ_SHSTR_ZERO)];
5248905Srnordier    char symtab[sizeof(KGZ_SHSTR_SYMTAB)];
5348905Srnordier    char shstrtab[sizeof(KGZ_SHSTR_SHSTRTAB)];
5448905Srnordier    char strtab[sizeof(KGZ_SHSTR_STRTAB)];
5548905Srnordier    char data[sizeof(KGZ_SHSTR_DATA)];
5648905Srnordier};
5748905Srnordier
5848905Srnordier/* Symbol table indices */
5948905Srnordier#define KGZ_ST_KGZ		1
6048905Srnordier#define KGZ_ST_KGZ_NDATA	2
6148905Srnordier#define KGZ_STNUM		3
6248905Srnordier
6348905Srnordier/* Symbol table strings */
6448905Srnordier#define KGZ_STR_ZERO		""
6548905Srnordier#define KGZ_STR_KGZ		"kgz"
6648905Srnordier#define KGZ_STR_KGZ_NDATA	"kgz_ndata"
6748905Srnordier
6848905Srnordier/* String table */
6948905Srnordierstruct kgz_strtab {
7048905Srnordier    char zero[sizeof(KGZ_STR_ZERO)];
7148905Srnordier    char kgz[sizeof(KGZ_STR_KGZ)];
7248905Srnordier    char kgz_ndata[sizeof(KGZ_STR_KGZ_NDATA)];
7348905Srnordier};
7448905Srnordier
7548905Srnordier/* Relocatable header format */
7648905Srnordierstruct kgz_elfhdr {
7748905Srnordier    Elf32_Ehdr e;
7848905Srnordier    Elf32_Shdr sh[KGZ_SHNUM];
7948905Srnordier    Elf32_Sym st[KGZ_STNUM];
8048905Srnordier    struct kgz_shstrtab shstrtab;
8148905Srnordier    struct kgz_strtab strtab;
8248905Srnordier};
8348905Srnordier
8448905Srnordierextern const struct kgz_elfhdr elfhdr;
85