summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorRussell King <rmk@flint.arm.linux.org.uk>2002-08-21 18:12:08 +0100
committerRussell King <rmk@flint.arm.linux.org.uk>2002-08-21 18:12:08 +0100
commit5e2076c4f736fe2a5b57907946de11b54ea31cdb (patch)
tree83e9c0d5943e3bb882bcc49408fa5c2b5b3b0f38 /arch/arm
parent3e6157d0f593e485fea4d8023ece283d412b1587 (diff)
[ARM] Make "bootp" Image generation know that the zImage is now PIC.
Since a bootp image contains a zImage and an initrd (or maybe later an initramfs) image, and the zImage is now PIC, we don't have to copy the zImage to a specific address before calling it. We just call it where it got loaded into memory and let it sort itself out.
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/boot/bootp/Makefile3
-rw-r--r--arch/arm/boot/bootp/bootp.lds8
-rw-r--r--arch/arm/boot/bootp/init.S21
3 files changed, 10 insertions, 22 deletions
diff --git a/arch/arm/boot/bootp/Makefile b/arch/arm/boot/bootp/Makefile
index cf6e4ec78973..8dc2b818016f 100644
--- a/arch/arm/boot/bootp/Makefile
+++ b/arch/arm/boot/bootp/Makefile
@@ -5,8 +5,7 @@
ZSYSTEM =$(TOPDIR)/arch/arm/boot/zImage
ZLDFLAGS =-p -X -T bootp.lds \
--defsym initrd_addr=$(INITRD_PHYS) \
- --defsym params=$(PARAMS_PHYS) \
- --defsym kernel_addr=$(ZTEXTADDR)
+ --defsym params=$(PARAMS_PHYS)
all: bootp
diff --git a/arch/arm/boot/bootp/bootp.lds b/arch/arm/boot/bootp/bootp.lds
index 8c4e6895f2df..6fbd9ce0bbeb 100644
--- a/arch/arm/boot/bootp/bootp.lds
+++ b/arch/arm/boot/bootp/bootp.lds
@@ -1,7 +1,7 @@
/*
* linux/arch/arm/boot/bootp/bootp.lds
*
- * Copyright (C) 2000 Russell King
+ * Copyright (C) 2000-2002 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -15,13 +15,9 @@ SECTIONS
_text = .;
.text : {
_stext = .;
- _start = .;
- init.o(.start)
- kernel_start = .;
+ *(.start)
kernel.o
- kernel_len = . - kernel_start;
. = ALIGN(32);
- *(.text)
initrd_start = .;
initrd.o
initrd_len = . - initrd_start;
diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S
index 39f31a35e4f7..21c28e25d8f9 100644
--- a/arch/arm/boot/bootp/init.S
+++ b/arch/arm/boot/bootp/init.S
@@ -1,7 +1,7 @@
/*
* linux/arch/arm/boot/bootp/init.S
*
- * Copyright (C) 2000 Russell King
+ * Copyright (C) 2000-2002 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -11,8 +11,9 @@
* r0 through to r3 straight through.
*/
.section .start,#alloc,#execinstr
- .type _entry, #function
-_entry: adr r10, initdata
+ .type _start, #function
+ .globl _start
+_start: adr r10, initdata
ldr r11, initdata
sub r11, r10, r11 @ work out exec offset
b splitify
@@ -22,17 +23,11 @@ _entry: adr r10, initdata
initdata: .word initdata @ compiled address of this
.size initdata,. - initdata
- .text
splitify: adr r13, data
ldmia r13!, {r4-r6} @ move the initrd
add r4, r4, r11 @ correction
bl move
- ldmia r13!, {r4-r6} @ then the kernel
- mov r12, r5
- add r4, r4, r11 @ correction
- bl move
-
/*
* Setup the initrd parameters to pass to the kernel. This can either be
* passed in via a param_struct or a tag list. We spot the param_struct
@@ -76,6 +71,7 @@ taglist: ldr r9, [r8, #0] @ tag length
mov r4, #16 @ length of initrd tag
mov r9, #0 @ end of tag list terminator
stmia r8, {r4, r5, r6, r7, r9}
+ adr r12, kernel_start
mov pc, r12 @ call kernel
/*
@@ -97,15 +93,12 @@ data: .word initrd_start
.word initrd_addr
.word initrd_len
- .word kernel_start
- .word kernel_addr
- .word kernel_len
-
.word 0x54410001 @ r4 = ATAG_CORE
.word 0x54420005 @ r5 = ATAG_INITRD
.word initrd_addr @ r6
.word initrd_len @ r7
.word params @ r8
- .type kernel_start,#object
.type initrd_start,#object
+
+kernel_start: