]> git.lizzy.rs Git - plan9front.git/blob - sys/src/boot/efi/pe32.s
merge
[plan9front.git] / sys / src / boot / efi / pe32.s
1 TEXT mzhdr(SB), 1, $0
2         BYTE $'M'; BYTE $'Z'
3
4         WORD $0         /* e_cblp UNUSED */
5         WORD $0         /* e_cp UNUSED */
6         WORD $0         /* e_crlc UNUSED */
7         WORD $0         /* e_cparhdr UNUSED */
8         WORD $0         /* e_minalloc UNUSED */
9         WORD $0         /* e_maxalloc UNUSED */
10         WORD $0         /* e_ss UNUSED */
11         WORD $0         /* e_sp UNUSED */
12         WORD $0         /* e_csum UNUSED */
13         WORD $0         /* e_ip UNUSED */
14         WORD $0         /* e_cs UNUSED */
15         WORD $0         /* e_lsarlc UNUSED */
16         WORD $0         /* e_ovno UNUSED */
17
18         WORD $0         /* e_res UNUSED */
19         WORD $0
20         WORD $0
21         WORD $0
22         WORD $0
23
24         WORD $0         /* e_oemid UNUSED */
25
26         WORD $0         /* e_res2 UNUSED */
27         WORD $0
28         WORD $0
29         WORD $0
30         WORD $0
31         WORD $0
32         WORD $0
33         WORD $0
34         WORD $0
35         WORD $0
36
37         LONG $pehdr-IMAGEBASE(SB)       /* offset to pe header */
38
39 TEXT pehdr(SB), 1, $0
40         BYTE $'P'; BYTE $'E'; BYTE $0; BYTE $0
41
42         WORD $0x014C            /* Machine (Intel 386) */
43         WORD $1                 /* NumberOfSections */
44         LONG $0                 /* TimeDateStamp UNUSED */
45         LONG $0                 /* PointerToSymbolTable UNUSED */
46         LONG $0                 /* NumberOfSymbols UNUSED */
47         WORD $0xE0              /* SizeOfOptionalHeader */
48         WORD $2103              /* Characteristics (no relocations, executable, 32 bit) */
49
50         WORD $0x10B             /* Magic (PE32) */
51         BYTE $9                 /* MajorLinkerVersion UNUSED */
52         BYTE $0                 /* MinorLinkerVersion UNUSED */
53         LONG $0                 /* SizeOfCode UNUSED */
54         LONG $0                 /* SizeOfInitializedData UNUSED */
55         LONG $0                 /* SizeOfUninitializedData UNUSED */
56         LONG $start-IMAGEBASE(SB)/* AddressOfEntryPoint */
57         LONG $0                 /* BaseOfCode UNUSED */
58         LONG $0                 /* BaseOfData UNUSED */
59         LONG $IMAGEBASE         /* ImageBase */
60         LONG $0x200             /* SectionAlignment */
61         LONG $0x200             /* FileAlignment */
62         WORD $4                 /* MajorOperatingSystemVersion UNUSED */
63         WORD $0                 /* MinorOperatingSystemVersion UNUSED */
64         WORD $0                 /* MajorImageVersion UNUSED */
65         WORD $0                 /* MinorImageVersion UNUSED */
66         WORD $4                 /* MajorSubsystemVersion */
67         WORD $0                 /* MinorSubsystemVersion UNUSED */
68         LONG $0                 /* Win32VersionValue UNUSED */
69         LONG $end-IMAGEBASE(SB) /* SizeOfImage */
70         LONG $start-IMAGEBASE(SB)/* SizeOfHeaders */
71         LONG $0                 /* CheckSum UNUSED */
72         WORD $10                /* Subsystem (10 = efi application) */
73         WORD $0                 /* DllCharacteristics UNUSED */
74         LONG $0                 /* SizeOfStackReserve UNUSED */
75         LONG $0                 /* SizeOfStackCommit UNUSED */
76         LONG $0                 /* SizeOfHeapReserve UNUSED */
77         LONG $0                 /* SizeOfHeapCommit UNUSED */
78         LONG $0                 /* LoaderFlags UNUSED */
79         LONG $16                /* NumberOfRvaAndSizes UNUSED */
80
81         LONG $0; LONG $0
82         LONG $0; LONG $0
83         LONG $0; LONG $0                /* RVA */
84         LONG $0; LONG $0                /* RVA */
85         LONG $0; LONG $0                /* RVA */
86         LONG $0; LONG $0                /* RVA */
87         LONG $0; LONG $0                /* RVA */
88         LONG $0; LONG $0                /* RVA */
89         LONG $0; LONG $0                /* RVA */
90         LONG $0; LONG $0                /* RVA */
91         LONG $0; LONG $0                /* RVA */
92         LONG $0; LONG $0                /* RVA */
93         LONG $0; LONG $0                /* RVA */
94         LONG $0; LONG $0                /* RVA */
95         LONG $0; LONG $0                /* RVA */
96         LONG $0; LONG $0                /* RVA */
97
98         BYTE $'.'; BYTE $'t'; BYTE $'e'; BYTE $'x'
99         BYTE $'t'; BYTE $0;   BYTE $0;   BYTE $0
100         LONG $edata-(IMAGEBASE+0x200)(SB)               /* VirtualSize */
101         LONG $start-IMAGEBASE(SB)                       /* VirtualAddress */
102         LONG $edata-(IMAGEBASE+0x200)(SB)               /* SizeOfData */
103         LONG $start-IMAGEBASE(SB)                       /* PointerToRawData */
104         LONG $0                 /* PointerToRelocations UNUSED */
105         LONG $0                 /* PointerToLinenumbers UNUSED */
106         WORD $0                 /* NumberOfRelocations UNUSED */
107         WORD $0                 /* NumberOfLinenumbers UNUSED */
108         LONG $0x86000020        /* Characteristics (code, execute, read, write) */
109
110         /* padding to get start(SB) at IMAGEBASE+0x200 */
111         LONG $0; LONG $0; LONG $0; LONG $0;
112         LONG $0; LONG $0; LONG $0; LONG $0;
113         LONG $0; LONG $0; LONG $0; LONG $0;
114         LONG $0; LONG $0; LONG $0; LONG $0;
115         LONG $0; LONG $0; LONG $0; LONG $0;
116         LONG $0; LONG $0; LONG $0; LONG $0;
117         LONG $0; LONG $0; LONG $0; LONG $0;
118         LONG $0; LONG $0; LONG $0; LONG $0;
119         LONG $0; LONG $0; LONG $0; LONG $0;
120         LONG $0; LONG $0; LONG $0; LONG $0;
121
122 TEXT start(SB), 1, $0
123         CALL reloc(SP)
124
125 TEXT reloc(SB), 1, $0
126         MOVL 0(SP), SI
127         SUBL $reloc-IMAGEBASE(SB), SI
128         MOVL $IMAGEBASE, DI
129         MOVL $edata-IMAGEBASE(SB), CX
130         CLD
131         REP; MOVSB
132         MOVL $efimain(SB), DI
133         MOVL DI, (SP)
134         RET
135
136 TEXT jump(SB), $0
137         CLI
138         MOVL 4(SP), AX
139         JMP *AX
140
141 TEXT eficall(SB), 1, $0
142         MOVL SP, SI
143         MOVL SP, DI
144         MOVL $(4*16), CX
145         SUBL CX, DI
146         ANDL $~15ULL, DI
147         SUBL $8, DI
148
149         MOVL 4(SI), AX
150         LEAL 8(DI), SP
151
152         CLD
153         REP; MOVSB
154         SUBL $(4*16), SI
155
156         CALL AX
157
158         MOVL SI, SP
159         RET