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/boo... ============================================================================== --- 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@ha addi %r8,%r10,ofw_functions_addr@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/boo... ============================================================================== --- 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@ha - li %r3,0x8000@l - - lis %r4,_binary_freeldr_tmp_end@ha - addi %r4,%r4,_binary_freeldr_tmp_end@l - lis %r5,_binary_freeldr_tmp_start@ha - addi %r5,%r5,_binary_freeldr_tmp_start@l - sub %r4,%r4,%r5 - li %r5,0x1000 - - bl ofw_claim - - /* Now copy freeldr */ - lis %r3,0x8000@ha - addi %r3,%r3,0x8000@l - - lis %r4,_binary_freeldr_tmp_end@ha - addi %r4,%r4,_binary_freeldr_tmp_end@l - lis %r5,_binary_freeldr_tmp_start@ha - addi %r5,%r5,_binary_freeldr_tmp_start@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@ha - addi %r4,%r4,_binary_freeldr_tmp_end@l - lis %r3,_binary_freeldr_tmp_start@ha - addi %r3,%r3,_binary_freeldr_tmp_start@l - - lis %r5,0x8000@ha - addi %r5,%r5,0x8000@l - - bl ofw_dumpregs - bl copy_bits bl zero_registers
/* Zero CTR */ mtcr %r31
- lis %r3,0x8000@ha - addi %r3,%r3,0x8000@l + lis %r3,0xe17000@ha + addi %r3,%r3,0xe17000@l
mtlr %r3
Modified: branches/powerpc/reactos/tools/ofw_interface/calls.ofw URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ofw_interf... ============================================================================== --- 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%2... ============================================================================== --- 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