diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-05-08 18:45:17 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-05-08 20:16:23 -0400 |
commit | 5f64ec64e7f9b246c0a94f34cdf7782f98a6e55d (patch) | |
tree | 4dc7b26bfd240866bd32c9df7f72910328697ce4 /arch/x86/boot/compressed | |
parent | bd2a36984c50bb546a7d04cb395fddcf98a1092c (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.S | 170 |
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 |
33 | ENTRY(startup_32) | 33 | ENTRY(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 |
47 | 1: | 49 | 1: |
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 |
58 | 1: popl %ebp | 61 | 1: 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 |
114 | ENDPROC(startup_32) | 119 | ENDPROC(startup_32) |
115 | 120 | ||
116 | .section ".text" | 121 | .text |
117 | relocated: | 122 | relocated: |
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 | ||
169 | 1: subl $4, %edi | 175 | 1: 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 |
175 | 2: | 181 | 2: |
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 | ||
187 | boot_heap: | 195 | boot_heap: |
188 | .fill BOOT_HEAP_SIZE, 1, 0 | 196 | .fill BOOT_HEAP_SIZE, 1, 0 |
189 | boot_stack: | 197 | boot_stack: |