lkml.org 
[lkml]   [2007]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[x86 setup 08/33] Define zero-page offset 0x1e4 as a scratch field, and use it
    Date
    From: H. Peter Anvin <hpa@zytor.com>

    The relocatable kernel code needs a scratch field for the decompressor
    to determine its own location. It was using a location inside
    struct screen_info; reserve a free location and document it as scratch
    instead.

    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    ---
    Documentation/i386/zero-page.txt | 1 +
    arch/i386/boot/compressed/head.S | 6 +++---
    arch/x86_64/boot/compressed/head.S | 6 +++---
    3 files changed, 7 insertions(+), 6 deletions(-)
    diff --git a/Documentation/i386/zero-page.txt b/Documentation/i386/zero-page.txt
    index c04a421..75b3680 100644
    --- a/Documentation/i386/zero-page.txt
    +++ b/Documentation/i386/zero-page.txt
    @@ -37,6 +37,7 @@ Offset Type Description
    0x1d0 unsigned long EFI memory descriptor map pointer
    0x1d4 unsigned long EFI memory descriptor map size
    0x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb
    +0x1e4 unsigned long Scratch field for the kernel setup code
    0x1e8 char number of entries in E820MAP (below)
    0x1e9 unsigned char number of entries in EDDBUF (below)
    0x1ea unsigned char number of entries in EDD_MBR_SIG_BUFFER (below)
    diff --git a/arch/i386/boot/compressed/head.S b/arch/i386/boot/compressed/head.S
    index 3517a32..f35ea22 100644
    --- a/arch/i386/boot/compressed/head.S
    +++ b/arch/i386/boot/compressed/head.S
    @@ -45,10 +45,10 @@ startup_32:
    * at and where we were actually loaded at. This can only be done
    * with a short local call on x86. Nothing else will tell us what
    * address we are running at. The reserved chunk of the real-mode
    - * data at 0x34-0x3f are used as the stack for this calculation.
    - * Only 4 bytes are needed.
    + * data at 0x1e4 (defined as a scratch field) are used as the stack
    + * for this calculation. Only 4 bytes are needed.
    */
    - leal 0x40(%esi), %esp
    + leal (0x1e4+4)(%esi), %esp
    call 1f
    1: popl %ebp
    subl $1b, %ebp
    diff --git a/arch/x86_64/boot/compressed/head.S b/arch/x86_64/boot/compressed/head.S
    index f9d5692..1312bfa 100644
    --- a/arch/x86_64/boot/compressed/head.S
    +++ b/arch/x86_64/boot/compressed/head.S
    @@ -46,10 +46,10 @@ startup_32:
    * at and where we were actually loaded at. This can only be done
    * with a short local call on x86. Nothing else will tell us what
    * address we are running at. The reserved chunk of the real-mode
    - * data at 0x34-0x3f are used as the stack for this calculation.
    - * Only 4 bytes are needed.
    + * data at 0x1e4 (defined as a scratch field) are used as the stack
    + * for this calculation. Only 4 bytes are needed.
    */
    - leal 0x40(%esi), %esp
    + leal (0x1e4+4)(%esi), %esp
    call 1f
    1: popl %ebp
    subl $1b, %ebp
    --
    1.5.2.2
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-07-11 21:29    [from the cache]
    ©2003-2014 Jasper Spaans. Advertise on this site