diff options
| author | Russell King <rmk@flint.arm.linux.org.uk> | 2002-08-21 18:12:08 +0100 |
|---|---|---|
| committer | Russell King <rmk@flint.arm.linux.org.uk> | 2002-08-21 18:12:08 +0100 |
| commit | 5e2076c4f736fe2a5b57907946de11b54ea31cdb (patch) | |
| tree | 83e9c0d5943e3bb882bcc49408fa5c2b5b3b0f38 /arch/arm | |
| parent | 3e6157d0f593e485fea4d8023ece283d412b1587 (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/Makefile | 3 | ||||
| -rw-r--r-- | arch/arm/boot/bootp/bootp.lds | 8 | ||||
| -rw-r--r-- | arch/arm/boot/bootp/init.S | 21 |
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: |
