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/bo…
==============================================================================
--- 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/bo…
==============================================================================
--- 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_inter…
==============================================================================
--- 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%…
==============================================================================
--- 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