elfh.c revision 55416
139092Srnordier/* 239092Srnordier * Copyright (c) 1998 Robert Nordier 339092Srnordier * All rights reserved. 439092Srnordier * 539092Srnordier * Redistribution and use in source and binary forms, with or without 639092Srnordier * modification, are permitted provided that the following conditions 739092Srnordier * are met: 839092Srnordier * 1. Redistributions of source code must retain the above copyright 939092Srnordier * notice, this list of conditions and the following disclaimer. 1039092Srnordier * 2. Redistributions in binary form must reproduce the above copyright 1139092Srnordier * notice, this list of conditions and the following disclaimer in the 1239092Srnordier * documentation and/or other materials provided with the distribution. 1339092Srnordier * 1439092Srnordier * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND 1539092Srnordier * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1639092Srnordier * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1739092Srnordier * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS 1839092Srnordier * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 1939092Srnordier * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 2039092Srnordier * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2139092Srnordier * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2239092Srnordier * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2339092Srnordier * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 2439092Srnordier * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2539092Srnordier * 2650479Speter * $FreeBSD: head/usr.sbin/btxld/elfh.c 55416 2000-01-04 14:10:36Z marcel $ 2739092Srnordier */ 2839092Srnordier 2955416Smarcel#include <sys/types.h> 3055416Smarcel 3139092Srnordier#include <stddef.h> 3239092Srnordier#include "elfh.h" 3339092Srnordier 3439092Srnordier#define SET_ME 0xeeeeeeee /* filled in by btxld */ 3539092Srnordier 3639092Srnordier/* 3739092Srnordier * ELF header template. 3839092Srnordier */ 3939092Srnordierconst struct elfh elfhdr = { 4039092Srnordier { 4139092Srnordier { 4239092Srnordier ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3, /* e_ident */ 4339092Srnordier ELFCLASS32, ELFDATA2LSB, EV_CURRENT, 0, 4439092Srnordier 'F', 'r', 'e', 'e', 'B', 'S', 'D', 0 4539092Srnordier }, 4639092Srnordier ET_EXEC, /* e_type */ 4739092Srnordier EM_386, /* e_machine */ 4839092Srnordier EV_CURRENT, /* e_version */ 4939092Srnordier SET_ME, /* e_entry */ 5039092Srnordier offsetof(struct elfh, p), /* e_phoff */ 5139092Srnordier offsetof(struct elfh, sh), /* e_shoff */ 5239092Srnordier 0, /* e_flags */ 5339092Srnordier sizeof(elfhdr.e), /* e_ehsize */ 5439092Srnordier sizeof(elfhdr.p[0]), /* e_phentsize */ 5539092Srnordier sizeof(elfhdr.p) / sizeof(elfhdr.p[0]), /* e_phnum */ 5639092Srnordier sizeof(elfhdr.sh[0]), /* e_shentsize */ 5739092Srnordier sizeof(elfhdr.sh) / sizeof(elfhdr.sh[0]), /* e_shnum */ 5839092Srnordier 1 /* e_shstrndx */ 5939092Srnordier }, 6039092Srnordier { 6139092Srnordier { 6239092Srnordier PT_LOAD, /* p_type */ 6339092Srnordier sizeof(elfhdr), /* p_offset */ 6439092Srnordier SET_ME, /* p_vaddr */ 6539092Srnordier SET_ME, /* p_paddr */ 6639092Srnordier SET_ME, /* p_filesz */ 6739092Srnordier SET_ME, /* p_memsz */ 6839092Srnordier PF_R | PF_X, /* p_flags */ 6939092Srnordier 0x1000 /* p_align */ 7039092Srnordier }, 7139092Srnordier { 7239092Srnordier PT_LOAD, /* p_type */ 7339092Srnordier SET_ME, /* p_offset */ 7439092Srnordier SET_ME, /* p_vaddr */ 7539092Srnordier SET_ME, /* p_paddr */ 7639092Srnordier SET_ME, /* p_filesz */ 7739092Srnordier SET_ME, /* p_memsz */ 7839092Srnordier PF_R | PF_W, /* p_flags */ 7939092Srnordier 0x1000 /* p_align */ 8039092Srnordier } 8139092Srnordier }, 8239092Srnordier { 8339092Srnordier { 8439092Srnordier 0, SHT_NULL, 0, 0, 0, 0, SHN_UNDEF, 0, 0, 0 8539092Srnordier }, 8639092Srnordier { 8739092Srnordier 1, /* sh_name */ 8839092Srnordier SHT_STRTAB, /* sh_type */ 8939092Srnordier 0, /* sh_flags */ 9039092Srnordier 0, /* sh_addr */ 9139092Srnordier offsetof(struct elfh, shstrtab), /* sh_offset */ 9239092Srnordier sizeof(elfhdr.shstrtab), /* sh_size */ 9339092Srnordier SHN_UNDEF, /* sh_link */ 9439092Srnordier 0, /* sh_info */ 9539092Srnordier 1, /* sh_addralign */ 9639092Srnordier 0 /* sh_entsize */ 9739092Srnordier }, 9839092Srnordier { 9939092Srnordier 0xb, /* sh_name */ 10039092Srnordier SHT_PROGBITS, /* sh_type */ 10139092Srnordier SHF_EXECINSTR | SHF_ALLOC, /* sh_flags */ 10239092Srnordier SET_ME, /* sh_addr */ 10339092Srnordier SET_ME, /* sh_offset */ 10439092Srnordier SET_ME, /* sh_size */ 10539092Srnordier SHN_UNDEF, /* sh_link */ 10639092Srnordier 0, /* sh_info */ 10739092Srnordier 4, /* sh_addralign */ 10839092Srnordier 0 /* sh_entsize */ 10939092Srnordier }, 11039092Srnordier { 11139092Srnordier 0x11, /* sh_name */ 11239092Srnordier SHT_PROGBITS, /* sh_type */ 11339092Srnordier SHF_ALLOC | SHF_WRITE, /* sh_flags */ 11439092Srnordier SET_ME, /* sh_addr */ 11539092Srnordier SET_ME, /* sh_offset */ 11639092Srnordier SET_ME, /* sh_size */ 11739092Srnordier SHN_UNDEF, /* sh_link */ 11839092Srnordier 0, /* sh_info */ 11939092Srnordier 4, /* sh_addralign */ 12039092Srnordier 0 /* sh_entsize */ 12139092Srnordier } 12239092Srnordier }, 12339092Srnordier "\0.shstrtab\0.text\0.data" /* shstrtab */ 12439092Srnordier}; 125