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.


svn path=/branches/powerpc/; revision=24327
This commit is contained in:
Art Yerkes
2006-10-01 03:30:06 +00:00
parent 77caf5c3c7
commit 6421038be3
4 changed files with 59 additions and 70 deletions
+50 -22
View 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 */
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
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 */
.align 4
mfmsr %r0
ori %r0,%r0,1
mfmsr %r10
ori %r10,%r10,1
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
nop
addi %r1,%r1,0x100
prim_strlen:
mr %r5,%r3
@@ -93,6 +117,10 @@ copy_bits:
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
+2 -44
View File
@@ -23,56 +23,14 @@ _begin:
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
+2
View 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
-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
+5 -4
View File
@@ -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