summaryrefslogtreecommitdiff
path: root/arch/x86/boot/compressed/head_32.S
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2010-08-02 22:34:44 (GMT)
committerH. Peter Anvin <hpa@linux.intel.com>2010-08-02 22:34:44 (GMT)
commit22a57f5896df218356bae6203dfaf04bcfd6c88c (patch)
treee956ddcf7edf8457978d324a2e9c954b31be2206 /arch/x86/boot/compressed/head_32.S
parent70b0d22d581a5deef7b2876b0c3774635b8d846c (diff)
downloadlinux-fsl-qoriq-22a57f5896df218356bae6203dfaf04bcfd6c88c.tar.xz
x86, setup: Allow global variables and functions in the decompressor
In order for global variables and functions to work in the decompressor, we need to fix up the GOT in assembly code. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> LKML-Reference: <4C57382E.8050501@zytor.com>
Diffstat (limited to 'arch/x86/boot/compressed/head_32.S')
-rw-r--r--arch/x86/boot/compressed/head_32.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
index f543b70..67a655a 100644
--- a/arch/x86/boot/compressed/head_32.S
+++ b/arch/x86/boot/compressed/head_32.S
@@ -124,6 +124,19 @@ relocated:
rep stosl
/*
+ * Adjust our own GOT
+ */
+ leal _got(%ebx), %edx
+ leal _egot(%ebx), %ecx
+1:
+ cmpl %ecx, %edx
+ jae 2f
+ addl %ebx, (%edx)
+ addl $4, %edx
+ jmp 1b
+2:
+
+/*
* Do the decompression, and jump to the new kernel..
*/
leal z_extract_offset_negative(%ebx), %ebp