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