mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user