Remove the need to relocate freeldr. We now use it in-place as stored in
authorArt Yerkes <art.yerkes@gmail.com>
Sun, 1 Oct 2006 03:30:06 +0000 (03:30 +0000)
committerArt Yerkes <art.yerkes@gmail.com>
Sun, 1 Oct 2006 03:30:06 +0000 (03:30 +0000)
ofwldr's .data.  Fix call_ofw for more modern macs.
Add more debugging type calls to calls.ofw.

svn path=/branches/powerpc/; revision=24327

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

index 7e0aa84..2d2b5ef 100644 (file)
@@ -25,56 +25,80 @@ call_ofw:
         * Other arg registers are unchanged.
         * Note that these 4 instructions are in reverse order due to
         * little-endian convention */
         * 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
        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
        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
        
        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      %r3,%r4
        mr      %r4,%r5
        mr      %r5,%r6
        mr      %r6,%r7
+       /* - */
        mr      %r7,%r8
        mr      %r8,%r9
        
        mr      %r7,%r8
        mr      %r8,%r9
        
-       /* Goto the swapped function */
+       /* Call ofw proxy function */
        bctrl
        bctrl
+       nop
 
 
-       lwz     %r8,16(%r1)
-       mtlr    %r8
-
-       lwz     %r8,4(%r1)
-       lwz     %r9,8(%r1)
-       lwz     %r10,12(%r1)
-
-       addi    %r1,%r1,0x100
        /* Ok, go back to little endian */
        /* Ok, go back to little endian */
-
-       .align  4
-       mfmsr   %r0
-       ori     %r0,%r0,1
-
+       mfmsr   %r10
+       ori     %r10,%r10,1
        nop
        nop
-       mtmsr   %r0
+       mtmsr   %r10
 
 
-       /* Note that this is little-endian from here on */
+       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
        blr
-       nop
+       addi    %r1,%r1,0x100
 
 prim_strlen:
        mr      %r5,%r3
 
 prim_strlen:
        mr      %r5,%r3
@@ -93,6 +117,10 @@ copy_bits:
        cmp     0,0,%r3,%r4
        bgelr
 
        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
        lwz     %r6,0(%r3)
        stw     %r6,0(%r5)
        addi    %r3,%r3,4
index ff49c65..4158d2d 100644 (file)
@@ -23,56 +23,14 @@ _begin:
        addi    %r3,%r3,freeldr_banner - _start
 
        bl      ofw_print_string
        addi    %r3,%r3,freeldr_banner - _start
 
        bl      ofw_print_string
-
        bl      ofw_print_eol
        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
 
        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
 
 
        mtlr    %r3
 
index e05463c..7d8f0be 100644 (file)
@@ -22,6 +22,8 @@ package-to-path         3       1       int char*:arg2 int int
 -dumpregs              0       0
 -print_string          1       0       char*
 -print_number          1       0       int
 -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
 # MMU Methods
 @phys2virt!translate   4       1       int int int int&0 int
 @virt2phys!translate   2       1       int int&1 int
index 3133822..ae44a7e 100755 (executable)
@@ -1,9 +1,10 @@
 #!/bin/sh -v
 
 export PATH=$PATH:/usr/local/pkg/reactos-powerpc/bin
 #!/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
 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
 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