[ros-diffs] [arty] 24327: Remove the need to relocate freeldr. We now use it in-place as stored in ofwldr's .data. Fix call_ofw for more modern macs. Add more debugging type calls to calls.ofw.

arty at svn.reactos.org arty at svn.reactos.org
Sun Oct 1 05:30:07 CEST 2006


Author: arty
Date: Sun Oct  1 07:30:06 2006
New Revision: 24327

URL: http://svn.reactos.org/svn/reactos?rev=24327&view=rev
Log:
Remove the need to relocate freeldr.  We now use it in-place as stored in
ofwldr's .data.  Fix call_ofw for more modern macs.
Add more debugging type calls to calls.ofw.


Modified:
    branches/powerpc/reactos/boot/freeldr/bootsect/ofw_util.s
    branches/powerpc/reactos/boot/freeldr/bootsect/ofwboot.s
    branches/powerpc/reactos/tools/ofw_interface/calls.ofw
    branches/powerpc/reactos/tools/ppc.lost+found/link-freeldr

Modified: branches/powerpc/reactos/boot/freeldr/bootsect/ofw_util.s
URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/boot/freeldr/bootsect/ofw_util.s?rev=24327&r1=24326&r2=24327&view=diff
==============================================================================
--- branches/powerpc/reactos/boot/freeldr/bootsect/ofw_util.s (original)
+++ branches/powerpc/reactos/boot/freeldr/bootsect/ofw_util.s Sun Oct  1 07:30:06 2006
@@ -25,56 +25,80 @@
 	 * Other arg registers are unchanged.
 	 * Note that these 4 instructions are in reverse order due to
 	 * little-endian convention */
+	stw	%r8,24(%r1)
+	subi	%r1,%r1,0x100
+	stw	%r8,0(%r1)
+	mflr	%r8
+	/* - */
+	stw	%r3,4(%r1)
+	stw	%r4,8(%r1)
+	stw	%r5,12(%r1)
+	stw	%r6,16(%r1)
+	/* - */
+	stw	%r7,20(%r1)
+	stw	%r9,28(%r1)
+	stw	%r10,32(%r1)
+	stw	%r20,36(%r1)
+	
+	/* - */	
 	subi	%r20,%r20,1
 	mfmsr	%r20
 	mtmsr	%r20
 	nop
-	/* Now normal ordering resumes */
-	subi	%r1,%r1,0x100
-
-	stw	%r8,4(%r1)
-	stw	%r9,8(%r1)
-	stw	%r10,12(%r1)
+
+	sync
+	isync
+
+	/* BE MODE */
 	mflr	%r8
 	stw	%r8,16(%r1)
 
 	lis	%r10,0xe00000 at ha
 	addi	%r8,%r10,ofw_functions_addr at l
+	/* - */
 	lwz	%r9,0(%r8)
 	add	%r8,%r3,%r9
 	lwz	%r9,0(%r8)
 	mtctr	%r9
 	
+	/* - */
 	mr	%r3,%r4
 	mr	%r4,%r5
 	mr	%r5,%r6
 	mr	%r6,%r7
+	/* - */
 	mr	%r7,%r8
 	mr	%r8,%r9
 	
-	/* Goto the swapped function */
+	/* Call ofw proxy function */
 	bctrl
-
-	lwz	%r8,16(%r1)
-	mtlr	%r8
-
-	lwz	%r8,4(%r1)
-	lwz	%r9,8(%r1)
-	lwz	%r10,12(%r1)
-
+	nop
+
+	/* Ok, go back to little endian */
+	mfmsr	%r10
+	ori	%r10,%r10,1
+	nop
+	mtmsr	%r10
+
+	sync
+	isync
+
+	/* LE MODE */
+	mtlr	%r8
+	lwz	%r8,0(%r1)
+	lwz	%r4,8(%r1)
+	lwz	%r5,12(%r1)
+	/* - */
+	lwz	%r6,16(%r1)
+	lwz	%r7,20(%r1)
+	lwz	%r8,24(%r1)
+	lwz	%r9,28(%r1)
+	/* - */
+	lwz	%r10,32(%r1)
+	lwz	%r20,36(%r1)
+	/* - */
+	blr
 	addi	%r1,%r1,0x100
-	/* Ok, go back to little endian */
-
-	.align	4
-	mfmsr	%r0
-	ori	%r0,%r0,1
-
-	nop
-	mtmsr	%r0
-
-	/* Note that this is little-endian from here on */
-	blr
-	nop
 
 prim_strlen:
 	mr	%r5,%r3
@@ -93,6 +117,10 @@
 	cmp	0,0,%r3,%r4
 	bgelr
 
+	andi.	%r6,%r3,0xfff
+	beql	ofw_dumpregs
+	mtdec	%r3
+	
 	lwz	%r6,0(%r3)
 	stw	%r6,0(%r5)
 	addi	%r3,%r3,4

Modified: branches/powerpc/reactos/boot/freeldr/bootsect/ofwboot.s
URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/boot/freeldr/bootsect/ofwboot.s?rev=24327&r1=24326&r2=24327&view=diff
==============================================================================
--- branches/powerpc/reactos/boot/freeldr/bootsect/ofwboot.s (original)
+++ branches/powerpc/reactos/boot/freeldr/bootsect/ofwboot.s Sun Oct  1 07:30:06 2006
@@ -23,56 +23,14 @@
 	addi	%r3,%r3,freeldr_banner - _start
 
 	bl	ofw_print_string
-
 	bl	ofw_print_eol
-
-	/* Claim enough bytes to place freeldr at 0x8000 */
-	lis	%r3,0x8000 at ha
-	li	%r3,0x8000 at l
-		
-	lis	%r4,_binary_freeldr_tmp_end at ha
-	addi	%r4,%r4,_binary_freeldr_tmp_end at l
-	lis	%r5,_binary_freeldr_tmp_start at ha
-	addi	%r5,%r5,_binary_freeldr_tmp_start at l
-	sub	%r4,%r4,%r5
-	li	%r5,0x1000
-	
-	bl	ofw_claim
-
-	/* Now copy freeldr */	
-	lis	%r3,0x8000 at ha
-	addi	%r3,%r3,0x8000 at l
-
-	lis	%r4,_binary_freeldr_tmp_end at ha
-	addi	%r4,%r4,_binary_freeldr_tmp_end at l
-	lis	%r5,_binary_freeldr_tmp_start at ha
-	addi	%r5,%r5,_binary_freeldr_tmp_start at l
-	/* Make sufficient room for .bss */
-	sub	%r4,%r4,%r5
-	addi	%r4,%r4,0x6000
-		
-	xor	%r5,%r5,%r5
-	li	%r5,0x1000
-
-	bl	ofw_claim
-
-	lis	%r4,_binary_freeldr_tmp_end at ha
-	addi	%r4,%r4,_binary_freeldr_tmp_end at l
-	lis	%r3,_binary_freeldr_tmp_start at ha
-	addi	%r3,%r3,_binary_freeldr_tmp_start at l
-
-	lis	%r5,0x8000 at ha
-	addi	%r5,%r5,0x8000 at l
-
-	bl	ofw_dumpregs
-	bl	copy_bits
 	bl	zero_registers
 
 	/* Zero CTR */
 	mtcr	%r31
 
-	lis	%r3,0x8000 at ha
-	addi	%r3,%r3,0x8000 at l
+	lis	%r3,0xe17000 at ha
+	addi	%r3,%r3,0xe17000 at l
 
 	mtlr	%r3
 

Modified: branches/powerpc/reactos/tools/ofw_interface/calls.ofw
URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ofw_interface/calls.ofw?rev=24327&r1=24326&r2=24327&view=diff
==============================================================================
--- branches/powerpc/reactos/tools/ofw_interface/calls.ofw (original)
+++ branches/powerpc/reactos/tools/ofw_interface/calls.ofw Sun Oct  1 07:30:06 2006
@@ -22,6 +22,8 @@
 -dumpregs		0	0
 -print_string		1	0	char*
 -print_number		1	0	int
+-print_eol		0	0	
+-print_space		0	0	
 # MMU Methods
 @phys2virt!translate	4	1	int int int int&0 int
 @virt2phys!translate	2	1	int int&1 int

Modified: branches/powerpc/reactos/tools/ppc.lost+found/link-freeldr
URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ppc.lost%2Bfound/link-freeldr?rev=24327&r1=24326&r2=24327&view=diff
==============================================================================
--- branches/powerpc/reactos/tools/ppc.lost+found/link-freeldr (original)
+++ branches/powerpc/reactos/tools/ppc.lost+found/link-freeldr Sun Oct  1 07:30:06 2006
@@ -1,9 +1,10 @@
 #!/bin/sh -v
 
 export PATH=$PATH:/usr/local/pkg/reactos-powerpc/bin
-ld -EL -g -nostartfiles -nostdlib -N -Ttext=0x8000 -o freeldr.elf obj-ppc/boot/freeldr/freeldr/arch/powerpc/boot.o obj-ppc/boot/freeldr/freeldr/cache/blocklist.o obj-ppc/boot/freeldr/freeldr/cache/cache.o obj-ppc/boot/freeldr/freeldr/comm/rs232.o obj-ppc/boot/freeldr/freeldr/disk/disk.o obj-ppc/boot/freeldr/freeldr/disk/partition.o obj-ppc/boot/freeldr/freeldr/fs/ext2.o obj-ppc/boot/freeldr/freeldr/fs/fat.o obj-ppc/boot/freeldr/freeldr/fs/fs.o obj-ppc/boot/freeldr/freeldr/fs/fsrec.o obj-ppc/boot/freeldr/freeldr/fs/iso.o obj-ppc/boot/freeldr/freeldr/fs/ntfs.o obj-ppc/boot/freeldr/freeldr/inifile/ini_init.o obj-ppc/boot/freeldr/freeldr/inifile/inifile.o obj-ppc/boot/freeldr/freeldr/inifile/parse.o obj-ppc/boot/freeldr/freeldr/math/libgcc2.o obj-ppc/boot/freeldr/freeldr/mm/meminit.o obj-ppc/boot/freeldr/freeldr/mm/mm.o obj-ppc/boot/freeldr/freeldr/reactos/registry.o obj-ppc/boot/freeldr/freeldr/reactos/binhive.o obj-ppc/boot/freeldr/freeldr/reactos/arcname.o obj-ppc/boot/freeldr/freeldr/reactos/reactos.o obj-ppc/boot/freeldr/freeldr/rtl/list.o obj-ppc/boot/freeldr/freeldr/ui/gui.o obj-ppc/boot/freeldr/freeldr/ui/tui.o obj-ppc/boot/freeldr/freeldr/ui/tuimenu.o obj-ppc/boot/freeldr/freeldr/ui/ui.o obj-ppc/boot/freeldr/freeldr/video/bank.o obj-ppc/boot/freeldr/freeldr/video/fade.o obj-ppc/boot/freeldr/freeldr/video/palette.o obj-ppc/boot/freeldr/freeldr/video/pixel.o obj-ppc/boot/freeldr/freeldr/video/video.o obj-ppc/boot/freeldr/freeldr/freeldr.o obj-ppc/boot/freeldr/freeldr/debug.o obj-ppc/boot/freeldr/freeldr/version.o obj-ppc/boot/freeldr/freeldr/cmdline.o obj-ppc/boot/freeldr/freeldr/machine.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mach.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/ofw.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mmu.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mboot.o obj-ppc/boot/freeldr/freeldr/bootmgr.o obj-ppc/boot/freeldr/freeldr/drivemap.o obj-ppc/boot/freeldr/freeldr/miscboot.o obj-ppc/boot/freeldr/freeldr/options.o obj-ppc/boot/freeldr/freeldr/linuxboot.o obj-ppc/boot/freeldr/freeldr/oslist.o obj-ppc/boot/freeldr/freeldr/custom.o obj-ppc/lib/rossym/rossym.a obj-ppc/lib/cmlib/cmlib.a obj-ppc/lib/string/string.a obj-ppc/lib/rtl/rtl.a /usr/local/pkg/reactos-powerpc/lib/libgcc.a
-objcopy -O binary freeldr.elf freeldr.tmp.le
+powerpc-unknown-linux-gnu-ld -EL -g -nostartfiles -nostdlib -N -Ttext=0xe17000 -o freeldr.elf obj-ppc/boot/freeldr/freeldr/arch/powerpc/boot.o obj-ppc/boot/freeldr/freeldr/cache/blocklist.o obj-ppc/boot/freeldr/freeldr/cache/cache.o obj-ppc/boot/freeldr/freeldr/comm/rs232.o obj-ppc/boot/freeldr/freeldr/disk/disk.o obj-ppc/boot/freeldr/freeldr/disk/partition.o obj-ppc/boot/freeldr/freeldr/fs/ext2.o obj-ppc/boot/freeldr/freeldr/fs/fat.o obj-ppc/boot/freeldr/freeldr/fs/fs.o obj-ppc/boot/freeldr/freeldr/fs/fsrec.o obj-ppc/boot/freeldr/freeldr/fs/iso.o obj-ppc/boot/freeldr/freeldr/fs/ntfs.o obj-ppc/boot/freeldr/freeldr/inifile/ini_init.o obj-ppc/boot/freeldr/freeldr/inifile/inifile.o obj-ppc/boot/freeldr/freeldr/inifile/parse.o obj-ppc/boot/freeldr/freeldr/math/libgcc2.o obj-ppc/boot/freeldr/freeldr/mm/meminit.o obj-ppc/boot/freeldr/freeldr/mm/mm.o obj-ppc/boot/freeldr/freeldr/reactos/registry.o obj-ppc/boot/freeldr/freeldr/reactos/binhive.o obj-ppc/boot/freeldr/freeldr/reactos/arcname.o obj-ppc/boot/freeldr/freeldr/reactos/reactos.o obj-ppc/boot/freeldr/freeldr/rtl/list.o obj-ppc/boot/freeldr/freeldr/ui/gui.o obj-ppc/boot/freeldr/freeldr/ui/tui.o obj-ppc/boot/freeldr/freeldr/ui/tuimenu.o obj-ppc/boot/freeldr/freeldr/ui/ui.o obj-ppc/boot/freeldr/freeldr/video/bank.o obj-ppc/boot/freeldr/freeldr/video/fade.o obj-ppc/boot/freeldr/freeldr/video/palette.o obj-ppc/boot/freeldr/freeldr/video/pixel.o obj-ppc/boot/freeldr/freeldr/video/video.o obj-ppc/boot/freeldr/freeldr/freeldr.o obj-ppc/boot/freeldr/freeldr/debug.o obj-ppc/boot/freeldr/freeldr/version.o obj-ppc/boot/freeldr/freeldr/cmdline.o obj-ppc/boot/freeldr/freeldr/machine.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mach.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/ofw.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mmu.o obj-ppc/boot/freeldr/freeldr/arch/powerpc/mboot.o obj-ppc/boot/freeldr/freeldr/bootmgr.o obj-ppc/boot/freeldr/freeldr/drivemap.o obj-ppc/boot/freeldr/freeldr/miscboot.o obj-ppc/boot/freeldr/freeldr/options.o obj-ppc/boot/freeldr/freeldr/linuxboot.o obj-ppc/boot/freeldr/freeldr/oslist.o obj-ppc/boot/freeldr/freeldr/custom.o obj-ppc/lib/rossym/rossym.a obj-ppc/lib/cmlib/cmlib.a obj-ppc/lib/string/string.a obj-ppc/lib/rtl/rtl.a /usr/local/pkg/reactos-powerpc/lib/libgcc.a
+powerpc-unknown-linux-gnu-objcopy -O binary freeldr.elf freeldr.tmp.le
 output-ppc/tools/ppc-le2be freeldr.tmp.le freeldr.tmp
-objcopy -I binary -B powerpc:common -O elf32-powerpc freeldr.tmp ofwldr.payload
+powerpc-unknown-linux-gnu-objcopy -I binary -B powerpc:common -O elf32-powerpc freeldr.tmp ofwldr.payload
 reactos-powerpc-as -mbig -o ofwboot.o boot/freeldr/bootsect/ofwboot.s boot/freeldr/bootsect/ofw_util.s boot/freeldr/bootsect/ofw.s
-ld -EB -Ttext 0xe00000 -Tdata 0xe17000 -e _begin -o ofwldr ofwboot.o ofwldr.payload
+powerpc-unknown-linux-gnu-ld -EB -Ttext 0xe00000 -Tdata 0xe17000 -e _begin -o ofwldr.x ofwboot.o ofwldr.payload
+powerpc-unknown-linux-gnu-objcopy --only-section=.text --only-section=.data ofwldr.x ofwldr




More information about the Ros-diffs mailing list