aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/boot/compressed
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-05-08 18:45:17 -0400
committerH. Peter Anvin <hpa@zytor.com>2009-05-08 20:16:23 -0400
commit5f64ec64e7f9b246c0a94f34cdf7782f98a6e55d (patch)
tree4dc7b26bfd240866bd32c9df7f72910328697ce4 /arch/x86/boot/compressed
parentbd2a36984c50bb546a7d04cb395fddcf98a1092c (diff)
x86, boot: stylistic cleanups for boot/compressed/head_32.S
Reformat arch/x86/boot/compressed/head_32.S to be closer to currently preferred kernel assembly style, that is: - opcode and operand separated by tab - operands separated by ", " - C-style comments This also makes it more similar to head_64.S. [ Impact: cleanup, no object code change ] Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/boot/compressed')
-rw-r--r--arch/x86/boot/compressed/head_32.S170
1 files changed, 89 insertions, 81 deletions
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
index e3398f3d1b34..7bd7766ffabf 100644
--- a/arch/x86/boot/compressed/head_32.S
+++ b/arch/x86/boot/compressed/head_32.S
@@ -12,16 +12,16 @@
12 * the page directory. [According to comments etc elsewhere on a compressed 12 * the page directory. [According to comments etc elsewhere on a compressed
13 * kernel it will end up at 0x1000 + 1Mb I hope so as I assume this. - AC] 13 * kernel it will end up at 0x1000 + 1Mb I hope so as I assume this. - AC]
14 * 14 *
15 * Page 0 is deliberately kept safe, since System Management Mode code in 15 * Page 0 is deliberately kept safe, since System Management Mode code in
16 * laptops may need to access the BIOS data stored there. This is also 16 * laptops may need to access the BIOS data stored there. This is also
17 * useful for future device drivers that either access the BIOS via VM86 17 * useful for future device drivers that either access the BIOS via VM86
18 * mode. 18 * mode.
19 */ 19 */
20 20
21/* 21/*
22 * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 22 * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996
23 */ 23 */
24.text 24 .text
25 25
26#include <linux/linkage.h> 26#include <linux/linkage.h>
27#include <asm/segment.h> 27#include <asm/segment.h>
@@ -29,75 +29,80 @@
29#include <asm/boot.h> 29#include <asm/boot.h>
30#include <asm/asm-offsets.h> 30#include <asm/asm-offsets.h>
31 31
32.section ".text.head","ax",@progbits 32 .section ".text.head","ax",@progbits
33ENTRY(startup_32) 33ENTRY(startup_32)
34 cld 34 cld
35 /* test KEEP_SEGMENTS flag to see if the bootloader is asking 35 /*
36 * us to not reload segments */ 36 * Test KEEP_SEGMENTS flag to see if the bootloader is asking
37 testb $(1<<6), BP_loadflags(%esi) 37 * us to not reload segments
38 jnz 1f 38 */
39 testb $(1<<6), BP_loadflags(%esi)
40 jnz 1f
39 41
40 cli 42 cli
41 movl $(__BOOT_DS),%eax 43 movl $__BOOT_DS, %eax
42 movl %eax,%ds 44 movl %eax, %ds
43 movl %eax,%es 45 movl %eax, %es
44 movl %eax,%fs 46 movl %eax, %fs
45 movl %eax,%gs 47 movl %eax, %gs
46 movl %eax,%ss 48 movl %eax, %ss
471: 491:
48 50
49/* Calculate the delta between where we were compiled to run 51/*
52 * Calculate the delta between where we were compiled to run
50 * at and where we were actually loaded at. This can only be done 53 * at and where we were actually loaded at. This can only be done
51 * with a short local call on x86. Nothing else will tell us what 54 * with a short local call on x86. Nothing else will tell us what
52 * address we are running at. The reserved chunk of the real-mode 55 * address we are running at. The reserved chunk of the real-mode
53 * data at 0x1e4 (defined as a scratch field) are used as the stack 56 * data at 0x1e4 (defined as a scratch field) are used as the stack
54 * for this calculation. Only 4 bytes are needed. 57 * for this calculation. Only 4 bytes are needed.
55 */ 58 */
56 leal (BP_scratch+4)(%esi), %esp 59 leal (BP_scratch+4)(%esi), %esp
57 call 1f 60 call 1f
581: popl %ebp 611: popl %ebp
59 subl $1b, %ebp 62 subl $1b, %ebp
60 63
61/* %ebp contains the address we are loaded at by the boot loader and %ebx 64/*
65 * %ebp contains the address we are loaded at by the boot loader and %ebx
62 * contains the address where we should move the kernel image temporarily 66 * contains the address where we should move the kernel image temporarily
63 * for safe in-place decompression. 67 * for safe in-place decompression.
64 */ 68 */
65 69
66#ifdef CONFIG_RELOCATABLE 70#ifdef CONFIG_RELOCATABLE
67 movl %ebp, %ebx 71 movl %ebp, %ebx
68 addl $(CONFIG_PHYSICAL_ALIGN - 1), %ebx 72 addl $(CONFIG_PHYSICAL_ALIGN - 1), %ebx
69 andl $(~(CONFIG_PHYSICAL_ALIGN - 1)), %ebx 73 andl $(~(CONFIG_PHYSICAL_ALIGN - 1)), %ebx
70#else 74#else
71 movl $LOAD_PHYSICAL_ADDR, %ebx 75 movl $LOAD_PHYSICAL_ADDR, %ebx
72#endif 76#endif
73 77
74 /* Replace the compressed data size with the uncompressed size */ 78 /* Replace the compressed data size with the uncompressed size */
75 subl input_len(%ebp), %ebx 79 subl input_len(%ebp), %ebx
76 movl output_len(%ebp), %eax 80 movl output_len(%ebp), %eax
77 addl %eax, %ebx 81 addl %eax, %ebx
78 /* Add 8 bytes for every 32K input block */ 82 /* Add 8 bytes for every 32K input block */
79 shrl $12, %eax 83 shrl $12, %eax
80 addl %eax, %ebx 84 addl %eax, %ebx
81 /* Add 32K + 18 bytes of extra slack */ 85 /* Add 32K + 18 bytes of extra slack */
82 addl $(32768 + 18), %ebx 86 addl $(32768 + 18), %ebx
83 /* Align on a 4K boundary */ 87 /* Align on a 4K boundary */
84 addl $4095, %ebx 88 addl $4095, %ebx
85 andl $~4095, %ebx 89 andl $~4095, %ebx
86 90
87/* Copy the compressed kernel to the end of our buffer 91/*
92 * Copy the compressed kernel to the end of our buffer
88 * where decompression in place becomes safe. 93 * where decompression in place becomes safe.
89 */ 94 */
90 pushl %esi 95 pushl %esi
91 leal _ebss(%ebp), %esi 96 leal _ebss(%ebp), %esi
92 leal _ebss(%ebx), %edi 97 leal _ebss(%ebx), %edi
93 movl $(_ebss - startup_32), %ecx 98 movl $(_ebss - startup_32), %ecx
94 std 99 std
95 rep 100 rep movsb
96 movsb
97 cld 101 cld
98 popl %esi 102 popl %esi
99 103
100/* Compute the kernel start address. 104/*
105 * Compute the kernel start address.
101 */ 106 */
102#ifdef CONFIG_RELOCATABLE 107#ifdef CONFIG_RELOCATABLE
103 addl $(CONFIG_PHYSICAL_ALIGN - 1), %ebp 108 addl $(CONFIG_PHYSICAL_ALIGN - 1), %ebp
@@ -109,81 +114,84 @@ ENTRY(startup_32)
109/* 114/*
110 * Jump to the relocated address. 115 * Jump to the relocated address.
111 */ 116 */
112 leal relocated(%ebx), %eax 117 leal relocated(%ebx), %eax
113 jmp *%eax 118 jmp *%eax
114ENDPROC(startup_32) 119ENDPROC(startup_32)
115 120
116.section ".text" 121 .text
117relocated: 122relocated:
118 123
119/* 124/*
120 * Clear BSS 125 * Clear BSS
121 */ 126 */
122 xorl %eax,%eax 127 xorl %eax, %eax
123 leal _edata(%ebx),%edi 128 leal _edata(%ebx), %edi
124 leal _ebss(%ebx), %ecx 129 leal _ebss(%ebx), %ecx
125 subl %edi,%ecx 130 subl %edi, %ecx
126 cld 131 cld
127 rep 132 rep stosb
128 stosb
129 133
130/* 134/*
131 * Setup the stack for the decompressor 135 * Setup the stack for the decompressor
132 */ 136 */
133 leal boot_stack_end(%ebx), %esp 137 leal boot_stack_end(%ebx), %esp
134 138
135/* 139/*
136 * Do the decompression, and jump to the new kernel.. 140 * Do the decompression, and jump to the new kernel..
137 */ 141 */
138 movl output_len(%ebx), %eax 142 movl output_len(%ebx), %eax
139 pushl %eax 143 pushl %eax
140 # push arguments for decompress_kernel: 144 /* push arguments for decompress_kernel: */
141 pushl %ebp # output address 145 pushl %ebp /* output address */
142 movl input_len(%ebx), %eax 146 movl input_len(%ebx), %eax
143 pushl %eax # input_len 147 pushl %eax /* input_len */
144 leal input_data(%ebx), %eax 148 leal input_data(%ebx), %eax
145 pushl %eax # input_data 149 pushl %eax /* input_data */
146 leal boot_heap(%ebx), %eax 150 leal boot_heap(%ebx), %eax
147 pushl %eax # heap area 151 pushl %eax /* heap area */
148 pushl %esi # real mode pointer 152 pushl %esi /* real mode pointer */
149 call decompress_kernel 153 call decompress_kernel
150 addl $20, %esp 154 addl $20, %esp
151 popl %ecx 155 popl %ecx
152 156
153#if CONFIG_RELOCATABLE 157#if CONFIG_RELOCATABLE
154/* Find the address of the relocations. 158/*
159 * Find the address of the relocations.
155 */ 160 */
156 movl %ebp, %edi 161 movl %ebp, %edi
157 addl %ecx, %edi 162 addl %ecx, %edi
158 163
159/* Calculate the delta between where vmlinux was compiled to run 164/*
165 * Calculate the delta between where vmlinux was compiled to run
160 * and where it was actually loaded. 166 * and where it was actually loaded.
161 */ 167 */
162 movl %ebp, %ebx 168 movl %ebp, %ebx
163 subl $LOAD_PHYSICAL_ADDR, %ebx 169 subl $LOAD_PHYSICAL_ADDR, %ebx
164 jz 2f /* Nothing to be done if loaded at compiled addr. */ 170 jz 2f /* Nothing to be done if loaded at compiled addr. */
165/* 171/*
166 * Process relocations. 172 * Process relocations.
167 */ 173 */
168 174
1691: subl $4, %edi 1751: subl $4, %edi
170 movl 0(%edi), %ecx 176 movl (%edi), %ecx
171 testl %ecx, %ecx 177 testl %ecx, %ecx
172 jz 2f 178 jz 2f
173 addl %ebx, -__PAGE_OFFSET(%ebx, %ecx) 179 addl %ebx, -__PAGE_OFFSET(%ebx, %ecx)
174 jmp 1b 180 jmp 1b
1752: 1812:
176#endif 182#endif
177 183
178/* 184/*
179 * Jump to the decompressed kernel. 185 * Jump to the decompressed kernel.
180 */ 186 */
181 xorl %ebx,%ebx 187 xorl %ebx, %ebx
182 jmp *%ebp 188 jmp *%ebp
183 189
184.bss 190/*
185/* Stack and heap for uncompression */ 191 * Stack and heap for uncompression
186.balign 4 192 */
193 .bss
194 .balign 4
187boot_heap: 195boot_heap:
188 .fill BOOT_HEAP_SIZE, 1, 0 196 .fill BOOT_HEAP_SIZE, 1, 0
189boot_stack: 197boot_stack: