Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4497235 authored by Olaf Hering's avatar Olaf Hering Committed by Paul Mackerras
Browse files

[PATCH] ppc64 boot: make the zImage relocateable



Make the zImage relocateable.  So yaboot could just load and run any ELF
binary, without worrying about its load address.

Signed-off-by: default avatarOlaf Hering <olh@suse.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Anton Blanchard <anton@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent afbe8c4b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@


HOSTCC		:= gcc
BOOTCFLAGS	:= $(HOSTCFLAGS) -fno-builtin -nostdinc -isystem $(shell $(CROSS32CC) -print-file-name=include)
BOOTCFLAGS	:= $(HOSTCFLAGS) -fno-builtin -nostdinc -isystem $(shell $(CROSS32CC) -print-file-name=include) -fPIC
BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
BOOTLFLAGS	:= -Ttext 0x00400000 -e _start -T $(srctree)/$(src)/zImage.lds
OBJCOPYFLAGS    := contents,alloc,load,readonly,data
+29 −0
Original line number Diff line number Diff line
@@ -14,9 +14,38 @@
	.text
	.globl	_start
_start:
	bl	reloc_offset

reloc_offset:
	mflr	r0
	lis	r9,reloc_offset@ha
	addi	r9,r9,reloc_offset@l
	subf.	r0,r9,r0
	beq	clear_caches

reloc_got2:
	lis	r9,__got2_start@ha
	addi	r9,r9,__got2_start@l
	lis	r8,__got2_end@ha
	addi	r8,r8,__got2_end@l
	subf.	r8,r9,r8
	beq	clear_caches
	srwi.	r8,r8,2
	mtctr	r8
	add	r9,r0,r9
reloc_got2_loop:
	lwz	r8,0(r9)
	add	r8,r8,r0
	stw	r8,0(r9)
	addi	r9,r9,4
	bdnz	reloc_got2_loop

clear_caches:
	lis	r9,_start@h
	add	r9,r0,r9
	lis	r8,_etext@ha
	addi	r8,r8,_etext@l
	add	r8,r0,r8
1:	dcbf	r0,r9
	icbi	r0,r9
	addi	r9,r9,0x20
+3 −1
Original line number Diff line number Diff line
@@ -13,7 +13,9 @@ SECTIONS
    *(.rodata*)
    *(.data*)
    *(.sdata*)
    *(.got*)
    __got2_start = .;
    *(.got2)
    __got2_end = .;
  }

  . = ALIGN(4096);