Add support for relocating gzboot's .text out of flash and into
RAM (while still decompressing the image directly from flash). This makes gzboot run a LOT faster.
This commit is contained in:
parent
5f15cedc89
commit
39c165f331
|
@ -1,7 +1,7 @@
|
||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
|
||||||
"elf32-littlearm")
|
"elf32-littlearm")
|
||||||
OUTPUT_ARCH(arm)
|
OUTPUT_ARCH(arm)
|
||||||
ENTRY(start)
|
ENTRY(FLASH)
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
/* We will locate the .text section in flash, and run directly
|
/* We will locate the .text section in flash, and run directly
|
||||||
|
@ -12,27 +12,32 @@ MEMORY
|
||||||
}
|
}
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
FLASH = 0x80000;
|
||||||
|
|
||||||
/* Read-only sections, merged into text segment: */
|
/* Read-only sections, merged into text segment: */
|
||||||
|
__text_store = FLASH;
|
||||||
.text :
|
.text :
|
||||||
|
AT (FLASH)
|
||||||
{
|
{
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.text.*)
|
*(.text.*)
|
||||||
*(.stub)
|
*(.stub)
|
||||||
*(.glue_7t) *(.glue_7)
|
*(.glue_7t) *(.glue_7)
|
||||||
*(.rodata) *(.rodata.*)
|
*(.rodata) *(.rodata.*)
|
||||||
} > flash =0
|
} > sdram =0
|
||||||
PROVIDE (__etext = .);
|
PROVIDE (__etext = .);
|
||||||
PROVIDE (_etext = .);
|
PROVIDE (_etext = .);
|
||||||
PROVIDE (etext = .);
|
PROVIDE (etext = .);
|
||||||
|
__data_store = FLASH + SIZEOF(.text);
|
||||||
.data :
|
.data :
|
||||||
AT (ADDR(.text) + SIZEOF(.text))
|
AT (FLASH + SIZEOF(.text))
|
||||||
{
|
{
|
||||||
__data_start = . ;
|
__data_start = . ;
|
||||||
*(.data)
|
*(.data)
|
||||||
*(.data.*)
|
*(.data.*)
|
||||||
} > sdram
|
} > sdram
|
||||||
.sdata :
|
.sdata :
|
||||||
AT (ADDR(.text) + SIZEOF(.text) + SIZEOF(.data))
|
AT (FLASH + SIZEOF(.text) + SIZEOF(.data))
|
||||||
{
|
{
|
||||||
*(.sdata)
|
*(.sdata)
|
||||||
*(.sdata.*)
|
*(.sdata.*)
|
||||||
|
@ -67,4 +72,9 @@ SECTIONS
|
||||||
_end = .;
|
_end = .;
|
||||||
_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
|
_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
|
.image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) :
|
||||||
|
AT (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata))
|
||||||
|
{
|
||||||
|
*(.image)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $NetBSD: Makefile.gzboot,v 1.3 2002/02/23 20:19:52 thorpej Exp $
|
# $NetBSD: Makefile.gzboot,v 1.4 2002/02/24 20:29:44 thorpej Exp $
|
||||||
|
|
||||||
NOMAN= # defined
|
NOMAN= # defined
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ LIBCRTEND=
|
||||||
.PATH: ${EVBARM_STAND}/gzboot
|
.PATH: ${EVBARM_STAND}/gzboot
|
||||||
.PATH: ${EVBARM_STAND}/board
|
.PATH: ${EVBARM_STAND}/board
|
||||||
|
|
||||||
SRCS+= gzboot.c image.c
|
SRCS+= gzboot.c image.S
|
||||||
|
|
||||||
STARTFILE= srtbegin.o
|
STARTFILE= srtbegin.o
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ cleandir distclean: cleanlibdir
|
||||||
cleanlibdir:
|
cleanlibdir:
|
||||||
rm -rf lib
|
rm -rf lib
|
||||||
|
|
||||||
LDFLAGS= -M -e start -T ${LDSCRIPT}
|
LDFLAGS= -M -T ${LDSCRIPT}
|
||||||
|
|
||||||
LIBLIST=${LIBSA} ${LIBZ} ${LIBSA} ${LIBKERN} ${LIBSA}
|
LIBLIST=${LIBSA} ${LIBZ} ${LIBSA} ${LIBKERN} ${LIBSA}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* $NetBSD: image.S,v 1.1 2002/02/24 20:29:44 thorpej Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2002 Wasabi Systems, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Written by Jason R. Thorpe for Wasabi Systems, Inc.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed for the NetBSD Project by
|
||||||
|
* Wasabi Systems, Inc.
|
||||||
|
* 4. The name of Wasabi Systems, Inc. may not be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
.section .image,"a",%progbits
|
||||||
|
|
||||||
|
.global _C_LABEL(md_root_loadaddr)
|
||||||
|
_C_LABEL(md_root_loadaddr):
|
||||||
|
.word LOADADDR
|
||||||
|
|
||||||
|
.global _C_LABEL(md_root_size)
|
||||||
|
_C_LABEL(md_root_size):
|
||||||
|
.word MAXIMAGESIZE
|
||||||
|
|
||||||
|
.global _C_LABEL(md_root_image)
|
||||||
|
_C_LABEL(md_root_image):
|
||||||
|
.asciz "|This is the gzboot image!\n"
|
||||||
|
.org _C_LABEL(md_root_image) + MAXIMAGESIZE;
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: srtbegin.S,v 1.2 2002/02/23 18:19:09 thorpej Exp $ */
|
/* $NetBSD: srtbegin.S,v 1.3 2002/02/24 20:29:44 thorpej Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002 Wasabi Systems, Inc.
|
* Copyright (c) 2002 Wasabi Systems, Inc.
|
||||||
|
@ -55,7 +55,31 @@ ENTRY(start)
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check to see if &_etext == &__data_start. If not,
|
* Check to see if __text_store == &start. If not, we're most
|
||||||
|
* likely running from flash. Flash is slow, and we'd
|
||||||
|
* really like to run the code from RAM. Copy it out.
|
||||||
|
*/
|
||||||
|
add r1, pc, #(Ltext - . - 8)
|
||||||
|
ldmia r1, {r1-r3}
|
||||||
|
cmp r1, r2 /* RELOC == &start? */
|
||||||
|
beq relocated /* yes, in RAM */
|
||||||
|
|
||||||
|
/* Copy text segment from ROM to RAM */
|
||||||
|
1: ldrb r0, [r1], #0x01
|
||||||
|
strb r0, [r2], #0x01
|
||||||
|
cmp r2, r3 /* copy done? */
|
||||||
|
bne 1b
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Okay, we are finished relocating the text segment. Now
|
||||||
|
* we need to leap to the next instruction.
|
||||||
|
*/
|
||||||
|
add r1, pc, #(Lrelocated - . - 8)
|
||||||
|
ldr pc, [r1]
|
||||||
|
|
||||||
|
relocated:
|
||||||
|
/*
|
||||||
|
* Check to see if __data_store == __data_start. If not,
|
||||||
* we're most likely built for running from flash,
|
* we're most likely built for running from flash,
|
||||||
* and must copy the data segment out to RAM.
|
* and must copy the data segment out to RAM.
|
||||||
*/
|
*/
|
||||||
|
@ -88,8 +112,16 @@ ENTRY(start)
|
||||||
|
|
||||||
b _C_LABEL(main)
|
b _C_LABEL(main)
|
||||||
|
|
||||||
Ldata:
|
Lrelocated:
|
||||||
|
.word relocated
|
||||||
|
|
||||||
|
Ltext:
|
||||||
|
.word _C_LABEL(__text_store)
|
||||||
|
.word _C_LABEL(start)
|
||||||
.word _C_LABEL(_etext)
|
.word _C_LABEL(_etext)
|
||||||
|
|
||||||
|
Ldata:
|
||||||
|
.word _C_LABEL(__data_store)
|
||||||
.word _C_LABEL(__data_start)
|
.word _C_LABEL(__data_start)
|
||||||
|
|
||||||
Lbss:
|
Lbss:
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
$NetBSD: version,v 1.1 2002/02/23 05:41:14 thorpej Exp $
|
$NetBSD: version,v 1.2 2002/02/24 20:29:44 thorpej Exp $
|
||||||
|
|
||||||
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
|
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
|
||||||
file is important - make sure the entries are appended on end, last item
|
file is important - make sure the entries are appended on end, last item
|
||||||
is taken as the current.
|
is taken as the current.
|
||||||
|
|
||||||
1.0: Gzip Boot, for booting compressed kernel images from flash.
|
1.0: Gzip Boot, for booting compressed kernel images from flash.
|
||||||
|
1.1: Add support for relocating gzboot .text from flash to RAM.
|
||||||
|
|
Loading…
Reference in New Issue