From: "tip-bot for H. Peter Anvin" <hpa@linux.intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
tglx@linutronix.de, hpa@linux.intel.com
Subject: [tip:x86/setup] x86, setup: Allow global variables and functions in the decompressor
Date: Tue, 3 Aug 2010 03:30:53 GMT [thread overview]
Message-ID: <tip-22a57f5896df218356bae6203dfaf04bcfd6c88c@git.kernel.org> (raw)
In-Reply-To: <4C57382E.8050501@zytor.com>
Commit-ID: 22a57f5896df218356bae6203dfaf04bcfd6c88c
Gitweb: http://git.kernel.org/tip/22a57f5896df218356bae6203dfaf04bcfd6c88c
Author: H. Peter Anvin <hpa@linux.intel.com>
AuthorDate: Mon, 2 Aug 2010 15:34:44 -0700
Committer: H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Mon, 2 Aug 2010 15:34:44 -0700
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>
---
arch/x86/boot/compressed/head_32.S | 13 +++++++++++++
arch/x86/boot/compressed/head_64.S | 13 +++++++++++++
arch/x86/boot/compressed/vmlinux.lds.S | 6 ++++++
3 files changed, 32 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
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
index faff0dc..52f85a1 100644
--- a/arch/x86/boot/compressed/head_64.S
+++ b/arch/x86/boot/compressed/head_64.S
@@ -280,6 +280,19 @@ relocated:
rep stosq
/*
+ * Adjust our own GOT
+ */
+ leaq _got(%rip), %rdx
+ leaq _egot(%rip), %rcx
+1:
+ cmpq %rcx, %rdx
+ jae 2f
+ addq %rbx, (%rdx)
+ addq $8, %rdx
+ jmp 1b
+2:
+
+/*
* Do the decompression, and jump to the new kernel..
*/
pushq %rsi /* Save the real mode argument */
diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S
index 5ddabce..34d047c 100644
--- a/arch/x86/boot/compressed/vmlinux.lds.S
+++ b/arch/x86/boot/compressed/vmlinux.lds.S
@@ -41,6 +41,12 @@ SECTIONS
*(.rodata.*)
_erodata = . ;
}
+ .got : {
+ _got = .;
+ KEEP(*(.got.plt))
+ KEEP(*(.got))
+ _egot = .;
+ }
.data : {
_data = . ;
*(.data)
next prev parent reply other threads:[~2010-08-03 3:31 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-02 7:13 [PATCH 1/2] x86, setup: reorgize the early_console_setup Yinghai Lu
2010-08-02 7:14 ` [PATCH 2/2] x86: more early console output from compressed/misc.c Yinghai Lu
2010-08-02 7:16 ` [PATCH 1/2] x86, setup: reorgize the early_console_setup H. Peter Anvin
2010-08-02 8:24 ` [PATCH -v2 " Yinghai Lu
2010-08-02 8:26 ` [PATCH -v2 2/2] x86: more early console output from compressed/misc.c Yinghai Lu
2010-08-02 9:17 ` [PATCH -v3 1/2] x86, setup: reorgize the early_console_setup Yinghai Lu
2010-08-02 9:18 ` [PATCH -v3 2/2] x86: more early console output from compressed/misc.c Yinghai Lu
2010-08-02 17:49 ` Cyrill Gorcunov
2010-08-02 18:38 ` H. Peter Anvin
2010-08-02 18:54 ` Cyrill Gorcunov
2010-08-02 18:58 ` H. Peter Anvin
2010-08-02 19:35 ` Yinghai Lu
2010-08-02 20:38 ` H. Peter Anvin
2010-08-02 20:59 ` H. Peter Anvin
2010-08-02 21:08 ` H. Peter Anvin
2010-08-02 21:22 ` Yinghai Lu
2010-08-02 21:27 ` H. Peter Anvin
2010-08-02 21:36 ` Yinghai Lu
2010-08-02 22:30 ` Yinghai Lu
2010-08-02 22:46 ` H. Peter Anvin
2010-08-02 22:51 ` Yinghai Lu
2010-08-02 23:21 ` Yinghai Lu
2010-08-03 4:10 ` [tip:x86/setup] x86, setup: move isdigit.h to ctype.h, header files on top tip-bot for H. Peter Anvin
2010-08-03 3:30 ` tip-bot for H. Peter Anvin [this message]
2010-08-02 17:43 ` [PATCH -v3 1/2] x86, setup: reorgize the early_console_setup Cyrill Gorcunov
2010-08-02 19:15 ` Yinghai Lu
2010-08-03 3:31 ` [tip:x86/setup] x86, setup: reorganize the early console setup tip-bot for Yinghai Lu
2010-08-02 7:18 ` [PATCH 1/2] x86, setup: reorgize the early_console_setup H. Peter Anvin
2010-08-02 15:09 ` Cyrill Gorcunov
2010-08-02 19:23 ` Yinghai Lu
2010-08-02 20:17 ` Cyrill Gorcunov
2010-08-02 20:30 ` Yinghai Lu
2010-08-02 20:36 ` Cyrill Gorcunov
2010-08-03 7:14 ` [PATCH -v3] x86: Setup early console as early as possible Yinghai Lu
2010-08-03 9:06 ` Andrew Morton
2010-08-03 9:09 ` Yinghai Lu
2010-08-03 10:14 ` Yinghai Lu
2010-08-03 15:07 ` Cyrill Gorcunov
2010-08-02 17:56 ` [PATCH 1/2] x86, setup: reorgize the early_console_setup Thiago Farina
2010-08-02 18:00 ` Thiago Farina
2010-08-02 18:27 ` H. Peter Anvin
2010-08-02 19:09 ` Thiago Farina
2010-08-02 20:33 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-22a57f5896df218356bae6203dfaf04bcfd6c88c@git.kernel.org \
--to=hpa@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox