Put WARNS?=6 in usr.sbin/Makefile.inc (like in usr.bin/ etc.).
[dragonfly.git] / usr.sbin / kgzip / elfhdr.c
... / ...
CommitLineData
1/*
2 * Copyright (c) 1999 Global Technology Associates, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
18 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
19 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
20 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
21 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
23 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * $FreeBSD: src/usr.sbin/kgzip/elfhdr.c,v 1.2 1999/08/28 01:16:43 peter Exp $
27 * $DragonFly: src/usr.sbin/kgzip/elfhdr.c,v 1.2 2003/06/17 04:29:55 dillon Exp $
28 */
29
30#include <stddef.h>
31#include "elfhdr.h"
32
33#define KGZ_FIX_NSIZE 0 /* Run-time fixup */
34
35/*
36 * Relocatable header template.
37 */
38const struct kgz_elfhdr elfhdr = {
39 /* ELF header */
40 {
41 {
42 ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3, /* e_ident */
43 ELFCLASS32, ELFDATA2LSB, EV_CURRENT, 0,
44 'F', 'r', 'e', 'e', 'B', 'S', 'D', 0
45 },
46 ET_EXEC, /* e_type */
47 EM_386, /* e_machine */
48 EV_CURRENT, /* e_version */
49 0, /* e_entry */
50 0, /* e_phoff */
51 offsetof(struct kgz_elfhdr, sh), /* e_shoff */
52 0, /* e_flags */
53 sizeof(Elf32_Ehdr), /* e_ehsize */
54 0, /* e_phentsize */
55 0, /* e_phnum */
56 sizeof(Elf32_Shdr), /* e_shentsize */
57 KGZ_SHNUM, /* e_shnum */
58 KGZ_SH_SHSTRTAB /* e_shstrndx */
59 },
60 /* Section header */
61 {
62 {
63 0, /* sh_name */
64 SHT_NULL, /* sh_type */
65 0, /* sh_flags */
66 0, /* sh_addr */
67 0, /* sh_offset */
68 0, /* sh_size */
69 SHN_UNDEF, /* sh_link */
70 0, /* sh_info */
71 0, /* sh_addralign */
72 0 /* sh_entsize */
73 },
74 {
75 offsetof(struct kgz_shstrtab, symtab), /* sh_name */
76 SHT_SYMTAB, /* sh_type */
77 0, /* sh_flags */
78 0, /* sh_addr */
79 offsetof(struct kgz_elfhdr, st), /* sh_offset */
80 sizeof(Elf32_Sym) * KGZ_STNUM, /* sh_size */
81 KGZ_SH_STRTAB, /* sh_link */
82 1, /* sh_info */
83 4, /* sh_addralign */
84 sizeof(Elf32_Sym) /* sh_entsize */
85 },
86 {
87 offsetof(struct kgz_shstrtab, shstrtab), /* sh_name */
88 SHT_STRTAB, /* sh_type */
89 0, /* sh_flags */
90 0, /* sh_addr */
91 offsetof(struct kgz_elfhdr, shstrtab), /* sh_offset */
92 sizeof(struct kgz_shstrtab), /* sh_size */
93 SHN_UNDEF, /* sh_link */
94 0, /* sh_info */
95 1, /* sh_addralign */
96 0 /* sh_entsize */
97 },
98 {
99 offsetof(struct kgz_shstrtab, strtab), /* sh_name */
100 SHT_STRTAB, /* sh_type */
101 0, /* sh_flags */
102 0, /* sh_addr */
103 offsetof(struct kgz_elfhdr, strtab), /* sh_offset */
104 sizeof(struct kgz_strtab), /* sh_size */
105 SHN_UNDEF, /* sh_link */
106 0, /* sh_info */
107 1, /* sh_addralign */
108 0 /* sh_entsize */
109 },
110 {
111 offsetof(struct kgz_shstrtab, data), /* sh_name */
112 SHT_PROGBITS, /* sh_type */
113 SHF_ALLOC | SHF_WRITE, /* sh_flags */
114 0, /* sh_addr */
115 sizeof(struct kgz_elfhdr), /* sh_offset */
116 sizeof(struct kgz_hdr) + KGZ_FIX_NSIZE, /* sh_size */
117 SHN_UNDEF, /* sh_link */
118 0, /* sh_info */
119 4, /* sh_addralign */
120 0 /* sh_entsize */
121 }
122 },
123 /* Symbol table */
124 {
125 {
126 0, /* st_name */
127 0, /* st_value */
128 0, /* st_size */
129 0, /* st_info */
130 0, /* st_other */
131 SHN_UNDEF /* st_shndx */
132 },
133 {
134 offsetof(struct kgz_strtab, kgz), /* st_name */
135 0, /* st_value */
136 sizeof(struct kgz_hdr), /* st_size */
137 ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT), /* st_info */
138 0, /* st_other */
139 KGZ_SH_DATA /* st_shndx */
140 },
141 {
142 offsetof(struct kgz_strtab, kgz_ndata), /* st_name */
143 sizeof(struct kgz_hdr), /* st_value */
144 KGZ_FIX_NSIZE, /* st_size */
145 ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT), /* st_info */
146 0, /* st_other */
147 KGZ_SH_DATA /* st_shndx */
148 }
149 },
150 /* Section header string table */
151 {
152 KGZ_SHSTR_ZERO, /* zero */
153 KGZ_SHSTR_SYMTAB, /* symtab */
154 KGZ_SHSTR_SHSTRTAB, /* shstrtab */
155 KGZ_SHSTR_STRTAB, /* strtab */
156 KGZ_SHSTR_DATA /* data */
157 },
158 /* String table */
159 {
160 KGZ_STR_ZERO, /* zero */
161 KGZ_STR_KGZ, /* kgz */
162 KGZ_STR_KGZ_NDATA /* kgz_ndata */
163 }
164};