On Sat, Nov 27, 2010 at 10:36 AM, Andreas Färber andreas.faerber@web.de wrote:
Am 27.11.2010 um 11:22 schrieb Blue Swirl:
On Sat, Nov 27, 2010 at 1:16 AM, Andreas Färber andreas.faerber@web.de wrote:
Am 26.11.2010 um 20:52 schrieb Blue Swirl:
On Thu, Nov 25, 2010 at 10:04 PM, Andreas Färber andreas.faerber@web.de wrote:
Starting with [r969],
qemu-system-ppc64 -bios .../obj-ppc64/openbios-qemu.elf -prom-env 'auto-boot?=false'
should take you to the Forth prompt.
I still get this: GEN bootstrap.dict panic: segmentation violation at 0x9034862c dict=0x2aae90348010 here=0x2aae90348638(dict+0x628) pc=0x0(dict+0x6fcb7ff0) dstackcnt=0 rstackcnt=0 instruction=deadbeef dstack: 0x0 rstack: 0x0 Writing dictionary core file
This happens on a 64 bit host, but not on a 32 bit host.
So I guess it might be an issue with the HOST_EQUALS_NATIVE_BITWIDTH path? The addresses are not confined to lower 32 bits so cannot be saved in ucells.
I built forthstrap on a 32 bit host to get further, but then I got: LINK openbios-qemu.elf libqemu.a(init.o): In function `go': /src/openbios-devel/obj-ppc64/../arch/ppc/qemu/init.c:533: undefined reference to `.call_elf'
[snip]
Sounds as if -m32 or the like is being passed to powerpc64-linux-ld? Dotted symbols only get generated for ppc64 target.
No, LINK equals to (with V=1):
powerpc64-linux-ld --warn-common -N -T ../arch/ppc64/qemu/ldscript -o openbios-qemu.elf.nostrip --whole-archive target/arch/ppc/qemu/start.o target/arch/ppc/timebase.o libqemu.a libbootstrap.a libopenbios.a libpackages.a libdrivers.a libfs.a liblibc.a libgcc.a
Ah, right, it would've warned about architecture mismatch then. What about CC for start.o? And could you try 4.5.1 to rule out your 4.6 snapshot? I'll try if Darwin/ppc64 works.
It looks like GLOBL macro is not correct. With this patch (using Linux arch/powerpc/include/asm/ppc_asm.h except for the .sections which don't work for some reason), the link succeeds: diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S index 4b6df3f..8439542 100644 --- a/arch/ppc/qemu/start.S +++ b/arch/ppc/qemu/start.S @@ -285,14 +285,13 @@ call_isi_exception: exception_return: EXCEPTION_EPILOGUE
- .globl __divide_error -__divide_error: +GLOBL(__divide_error): trap_error: mflr r3 b BRANCH_LABEL(unexpected_excep)
VECTOR( 0x100, "SRE" ): - b _entry + b BRANCH_LABEL(_entry)
ILLEGAL_VECTOR( 0x200 )
@@ -358,7 +357,7 @@ VECTOR( 0x2200, "ISI_64" ): GLOBL(__vectors_end):
/************************************************************************/ -/* entry */ +/* _entry */ /************************************************************************/
GLOBL(_entry): @@ -453,7 +452,7 @@ GLOBL(_entry): #endif
bl BRANCH_LABEL(setup_mmu) - bl BRANCH_LABEL(entry) + bl BRANCH_LABEL(_entry) 1: nop b 1b
@@ -678,4 +677,4 @@ compute_ramsize:
/* Hard reset vector */ .section .romentry,"ax" - bl _entry + bl BRANCH_LABEL(_entry) diff --git a/include/arch/ppc/asmdefs.h b/include/arch/ppc/asmdefs.h index 9c85ea5..b2cfa48 100644 --- a/include/arch/ppc/asmdefs.h +++ b/include/arch/ppc/asmdefs.h @@ -110,8 +110,25 @@ #endif
#ifndef __darwin__ +#ifdef __powerpc64__ +#define XGLUE(a,b) a##b +#define GLUE(a,b) XGLUE(a,b) + +#define GLOBL(name) \ + .align 2 ; \ + .globl name; \ + .globl GLUE(.,name); \ +name: \ + .quad GLUE(.,name); \ + .quad .TOC.@tocbase; \ + .quad 0; \ + .type GLUE(.,name),@function; \ +GLUE(.,name) +#define EXTERN(name) _##name +#else #define GLOBL( name ) .globl name ; name #define EXTERN( name ) name +#endif #else /* an underscore is needed on Darwin */ #define GLOBL( name ) .globl _##name ; name: ; _##name
I don't get the Forth prompt, screen remains black. According to qemu.log, execution stops at infinite loop: IN: .printk 0x00000000fff087c8: addi r1,r1,1168 0x00000000fff087cc: mr r3,r30 0x00000000fff087d0: b 0xfff29e10
IN: _restgpr0_29 0x00000000fff29e10: ld r0,16(r1) 0x00000000fff29e14: ld r29,-24(r1) 0x00000000fff29e18: mtlr r0 0x00000000fff29e1c: ld r30,-16(r1) 0x00000000fff29e20: ld r31,-8(r1) 0x00000000fff29e24: blr
IN: .unexpected_excep 0x00000000fff08db4: nop 0x00000000fff08db8: b 0xfff08db8
IN: .unexpected_excep 0x00000000fff08db8: b 0xfff08db8