xref: /netbsd-src/sys/arch/powerpc/stand/mkbootimage/pef.h (revision 625c110fa29980c2fbedb0d8e1becff5bc686d7f)
1 /*	$NetBSD: pef.h,v 1.3 2014/04/22 21:37:52 phx Exp $	*/
2 
3 /*-
4  * Copyright (C) 1995-1997 Gary Thomas (gdt@linuxppc.org)
5  * All rights reserved.
6  *
7  * Structure of a PEF format file
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. All advertising materials mentioning features or use of this software
18  *    must display the following acknowledgement:
19  *      This product includes software developed by Gary Thomas.
20  * 4. The name of the author may not be used to endorse or promote products
21  *    derived from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 struct FileHeader
36 {
37 	uint32_t magic;
38 	uint32_t fileTypeID;
39 	uint32_t archID;
40 	uint32_t versionNumber;
41 	uint32_t dateTimeStamp;
42 	uint32_t definVersion;
43 	uint32_t implVersion;
44 	uint32_t currentVersion;
45 	uint16_t numSections;
46 	uint16_t loadableSections;
47 	uint32_t memoryAddress;
48 };
49 
50 #define PEF_MAGIC 0x4A6F7921  /* Joy! */
51 #define PEF_FILE  0x70656666  /* peff */
52 #define PEF_PPC   0x70777063  /* pwpc */
53 
54 struct SectionHeader
55 {
56 	uint32_t sectionName;
57 	uint32_t sectionAddress;
58 	uint32_t execSize;
59 	uint32_t initSize;
60 	uint32_t rawSize;
61 	uint32_t fileOffset;
62 	uint8_t regionKind;
63 	uint8_t shareKind;
64 	uint8_t alignment;
65 	uint8_t _reserved;
66 };
67 
68 #define CodeSection	0
69 #define DataSection	1
70 #define PIDataSection	2
71 #define ConstantSection	3
72 #define LoaderSection	4
73 
74 #define NeverShare	0
75 #define ContextShare	1
76 #define TeamShare	2
77 #define TaskShare	3
78 #define GlobalShare	4
79 
80 struct LoaderHeader
81 {
82 	uint32_t entryPointSection;
83 	uint32_t entryPointOffset;
84 	uint32_t initPointSection;
85 	uint32_t initPointOffset;
86 	uint32_t termPointSection;
87 	uint32_t termPointOffset;
88 	uint32_t numImportFiles;
89 	uint32_t numImportSyms;
90 	uint32_t numSections;
91 	uint32_t relocationsOffset;
92 	uint32_t stringsOffset;
93 	uint32_t hashSlotTable;
94 	uint32_t hashSlotTableSize;
95 	uint32_t numExportSyms;
96 };
97