Hi Karel, I'm not sure if I have. I'll take a look, when I have time. Currently, I'm moving a mail server that will take up the day or so. It's a very busy time I don't know if I can even boot aimee vm this week.
Thank you for the hint. Best Regards, -peter On Mon, Jun 03, 2019 at 08:22:39PM +0200, Karel Gardas wrote: > > Peter, > > seeing you writing about openfirmware, pmap.c etc. Have you investigated > NetBSD's PS3 files? Tsubai Masanari was kind to my ask and made them > available again on http://nandra.segv.jp/NetBSD/ps3/ > > Certainly some low level files like atomic.S, setjmp.S, pmap.c are there and > may be at least interesting for reading if not for direct inclusion. > > Cheers, > Karel > > On 5/9/19 8:25 AM, Peter J. Philipp wrote: > > Hi all, > > > > I'm back at looking why my powerpc64 work didn't work out, and I think I > > made > > some progress (I think). For one I determined that there was no problem > > jumping to compiled code from the asm, which I thought before was a problem. > > > > I compiled the kernel with gcc crosscompiler in the old aimee vm that I had > > set up, I feel more comfortable with this, but I don't know why exactly. > > aimee now runs on my MBP in vmware, that's another change I did. This way > > I can poke at it on weekends. The OS is still 6.4-current from last year. > > > > Instead of using my G5 I'm using qemu with its built-in monitor to debug > > the registers, this works faster and quieter IMO, I'm using the > > floating-point registers as an indicator how far I got in the code > > (instruction > > I use is (lis %21, 1; lfsux %fX, %r21, %r21; <-- I know life sucks, the > > console is not initialized at this point so I can't printf). And right now > > I'm still on ofwreal.S, which anyone would agree with me is hard ASM > > code. I started last week not knowing a lot about PowerPC asm, I try > > though. > > > > I reworked ofwreal.S in that I pulled out the macppc version and had it run > > through, and it worked and got me further into pmap.c in execution but the > > openfirmware stuff was so mangled it couldn't even figure out how much > > physmem it had, big stopper there. So I went back to redo ofwreal.S, it > > dawned on me yesterday that fwcall is supposed to be .long size as it's an > > instruction holder. I made a little progress from then on but am stuck on > > a big thing (I think). > > > > When I executed the bsd kernel, last, it gets stuck trying to store to some > > location offset from register 2 (a book I recently got says this is the TOC > > pointer, an ELF thing). And here is my question about this TOC (table of > > contents), how would I best define an area for it? Or how is this done? As > > far as the FreeBSD code is concerned they set up a __tocbase area at > > locore64.S but then they do relocations, which I am unable to do in the > > short > > term. I'M pretty much confused by now. I'll show you where in the qemu > > emulator the execution flow stops: > > > > 00000000001b7a2c <OF_finddevice>: > > 1b7a2c: 3c 40 00 84 lis r2,132 > > 1b7a30: 38 42 73 00 addi r2,r2,29440 > > 1b7a34: 7c 08 02 a6 mflr r0 > > 1b7a38: fb e1 ff f8 std r31,-8(r1) > > 1b7a3c: 7c 7f 1b 78 mr r31,r3 > > 1b7a40: f8 01 00 10 std r0,16(r1) > > 1b7a44: f8 21 ff d1 stdu r1,-48(r1) > > 1b7a48: 48 34 25 59 bl 4f9fa0 <ofw_stack> > > 1b7a4c: 60 00 00 00 nop > > 1b7a50: 60 00 00 00 nop > > 1b7a54: 60 00 00 00 nop > > 1b7a58: 38 62 fd 60 addi r3,r2,-672 > > 1b7a5c: fb e2 fd 70 std r31,-656(r2) <---- > > here > > 1b7a60: 48 34 25 11 bl 4f9f70 <openfirmware> > > 1b7a64: 60 00 00 00 nop > > 1b7a68: 2f 83 ff ff cmpwi cr7,r3,-1 > > 1b7a6c: 41 9e 00 0c beq- cr7,1b7a78 <OF_finddevice+0x4c> > > 1b7a70: 60 00 00 00 nop > > 1b7a74: e8 62 fd 7a lwa r3,-648(r2) > > 1b7a78: 38 21 00 30 addi r1,r1,48 > > > > > > I think I got ofw_stack right (but not sure) at least it went through it. > > But now it tries to access register r2 which is not defined in this. Here > > is a register dump: > > > > ----> > > (qemu) info registers > > NIP 00000000fff096bc LR 00000000fff096bc CTR 00000000fff0e7e4 XER > > 000000000000 > > 0000 CPU#0 > > MSR 0000000000001000 HID0 0000000060000000 HF 0000000000000000 iidx 3 didx > > 3 > > TB 00000000 2549640032 DECR 1745327192 > > GPR00 00000000fff096bc 0000000000000ff0 0000000000000000 0000000000000029 > > <- r2 > > GPR04 0000000000000003 0000000000000000 0000000000000034 0000000000000020 > > GPR08 0000000000000000 0000000000000000 0000000000000001 0000000000000ff0 > > GPR12 0000000048800402 00000000fffbcce0 0000000000000000 0000000000030000 > > GPR16 0000000000000001 0000000000030000 0000000000000000 0000000000030000 > > GPR20 0000000000003030 0000000000000002 0000000000031f1f 00000000fffbcf08 > > GPR24 0000000000035be0 0000000000031f68 00000000000351e0 00000000fffbcd0f > > GPR28 000000000000002f 0000000000100a50 00000000fffbcce0 00000000ffddabe0 > > CR 28800402 [ E L L - - G - E ] RES ffffffffffffffff > > FPR00 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR04 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR20 37e00a5000000000 0000000000000000 0000000000000000 0000000000000000 > > FPR24 3b83000200000000 0000000000000000 0000000000000000 0000000000000000 > > FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > > FPSCR 0000000000000000 > > SRR0 00000000001b7a5c SRR1 8000000000003030 PVR 00000000003c0301 > > VRSAVE 000 > > 0000000000000 > > SPRG0 000000007fe00000 SPRG1 00000000fffffc70 SPRG2 0000000044482004 > > SPRG3 000 > > 0000000000000 > > SPRG4 0000000000000000 SPRG5 0000000000000000 SPRG6 0000000000000000 > > SPRG7 000 > > 0000000000000 > > SDR1 000000007fe00000 DAR fffffffffffffd70 DSISR 0000000042000000 > > (qemu) quit > > <------- > > > > SRR0 shows the address I dumped above in the objdump, SRR1 shows the MSR at > > the > > time of execution (I think). > > > > Now, I'm poking away at this thing, I can't say it will ever boot and I see > > the pretty OpenBSD dmesg before a panic, but I'm drawn back at this work and > > it's 6 months later from when I left it off. I think using qemu is a good > > decision as it's faster, uses less power until the work can be put on the > > real machine. > > > > I'm looking for guidance I think. > > > > As a tid-bit I would say take a look at ofwreal.S in maccpc I'll dump you > > the > > code snippet (in function ofw_stack): > > > > ---> > > addi %r3,%r1,%r8 > > addi %r1,%r4,-16 > > subi %r5,%r5,%r8 > > subi %r4,%r4,%r8 > > <---- > > > > I think that's wrong, register 8 is mtmsr'ed at the top of that and not > > modified. What has register 4 and 5 have to do with MSR? Shouldn't this > > mean just 8 and not %r8? > > > > This is also an area I struggled with in 64-bit mode. > > > > Best regards, > > -peter > >