[fpc-devel] Support for FreeBSD PowerPC

Curtis Hamilton clhamilto at gmail.com
Tue Oct 20 02:32:04 CEST 2020

Op 2020-10-18 om 23:03 schreef Jonas Maebe via fpc-devel:
>>//>>>/I’ve been able to create a cross compiler using the guidance and some />>>/additional information.  But I’ve been unable to create the proper FPC />>>/startup code (prt0.as) needed. />>>//>>>/Any help would be appreciated. />>/I believe these files are generally created by disassembling the />>/system's crt1.o (objdump -d) and then changing the call(s) to the libc />>/intialisation code with calls to the FPC RTL intialisation code. />Afaik mostly gcc -S.  Trunk SVN also contains an untested and incomplete 
>attempt at translating the C startup files to pascal.


I think I maybe in over my head on this. I've taken a look and now I'm not sure what the issue is.  The
segfault occurs in the FPC RTL initiazation code (see backtrace below).

Any ideas?

root at blackbird:/usr/ports/tmp/fpc-powerpc64/lib/fpc/3.2.0 # gdb ./ppcppc64 ppcppc64.core
GNU gdb (GDB) 8.3 [GDB v8.3 for FreeBSD]
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "powerpc64-portbld-freebsd12.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
Find the GDB manual and other documentation resources online at:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./ppcppc64...

warning: core file may not match specified executable file.
[New LWP 100454]
Core was generated by `./ppcppc64'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x7c0802a6fbe1fff8 in ?? ()
(gdb) backtrace
#0  0x7c0802a6fbe1fff8 in ?? ()
#1  0x000000001001fed8 in $fpc_initializeunits () at ../inc/system.inc:969
#2  0x0000000010000720 in $main () at pp.pas:256
(gdb) disass
No function contains program counter for selected frame.
(gdb) frame 1
#1  0x000000001001fed8 in $fpc_initializeunits () at ../inc/system.inc:969
969	         Procs[i].InitProc();
(gdb) disass
Dump of assembler code for function $fpc_initializeunits:
    0x000000001001fe60 <+0>:	mflr    r0
    0x000000001001fe64 <+4>:	std     r31,-8(r1)
    0x000000001001fe68 <+8>:	std     r30,-16(r1)
    0x000000001001fe6c <+12>:	std     r29,-24(r1)
    0x000000001001fe70 <+16>:	std     r28,-32(r1)
    0x000000001001fe74 <+20>:	std     r0,16(r1)
    0x000000001001fe78 <+24>:	stdu    r1,-128(r1)
    0x000000001001fe7c <+28>:	bl      0x10002768 <fpc_cpuinit>
    0x000000001001fe80 <+32>:	nop
    0x000000001001fe84 <+36>:	addi    r3,r2,15080
    0x000000001001fe88 <+40>:	ld      r28,0(r3)
    0x000000001001fe8c <+44>:	cmpldi  r28,1
    0x000000001001fe90 <+48>:	blt     0x1001feec <$fpc_initializeunits+140>
    0x000000001001fe94 <+52>:	li      r31,0
    0x000000001001fe98 <+56>:	addi    r3,r31,1
    0x000000001001fe9c <+60>:	mr      r31,r3
    0x000000001001fea0 <+64>:	rldicr  r4,r31,4,59
    0x000000001001fea4 <+68>:	addi    r3,r2,15080
    0x000000001001fea8 <+72>:	ldx     r3,r4,r3
    0x000000001001feac <+76>:	cmpldi  r3,0
    0x000000001001feb0 <+80>:	beq     0x1001fedc <$fpc_initializeunits+124>
    0x000000001001feb4 <+84>:	rldicr  r4,r31,4,59
    0x000000001001feb8 <+88>:	addi    r3,r2,15080
    0x000000001001febc <+92>:	ldx     r29,r4,r3
    0x000000001001fec0 <+96>:	ld      r30,0(r29)
    0x000000001001fec4 <+100>:	std     r2,40(r1)
    0x000000001001fec8 <+104>:	mtctr   r30
    0x000000001001fecc <+108>:	ld      r2,8(r29)
    0x000000001001fed0 <+112>:	ld      r11,16(r29)
    0x000000001001fed4 <+116>:	bctrl
=> 0x000000001001fed8 <+120>:	ld      r2,40(r1)
    0x000000001001fedc <+124>:	addi    r3,r2,15080
    0x000000001001fee0 <+128>:	std     r31,8(r3)
    0x000000001001fee4 <+132>:	cmpld   r31,r28
    0x000000001001fee8 <+136>:	blt     0x1001fe98 <$fpc_initializeunits+56>
    0x000000001001feec <+140>:	addi    r3,r2,18272
    0x000000001001fef0 <+144>:	ld      r3,0(r3)
    0x000000001001fef4 <+148>:	cmpldi  r3,0
    0x000000001001fef8 <+152>:	beq     0x1001ff20 <$fpc_initializeunits+192>
    0x000000001001fefc <+156>:	addi    r3,r2,18272
    0x000000001001ff00 <+160>:	ld      r31,0(r3)
    0x000000001001ff04 <+164>:	ld      r30,0(r31)
    0x000000001001ff08 <+168>:	std     r2,40(r1)
    0x000000001001ff0c <+172>:	mtctr   r30
    0x000000001001ff10 <+176>:	ld      r2,8(r31)
    0x000000001001ff14 <+180>:	ld      r11,16(r31)
    0x000000001001ff18 <+184>:	bctrl
    0x000000001001ff1c <+188>:	ld      r2,40(r1)
    0x000000001001ff20 <+192>:	addi    r1,r1,128
    0x000000001001ff24 <+196>:	ld      r31,-8(r1)
    0x000000001001ff28 <+200>:	ld      r30,-16(r1)
    0x000000001001ff2c <+204>:	ld      r29,-24(r1)
    0x000000001001ff30 <+208>:	ld      r28,-32(r1)
    0x000000001001ff34 <+212>:	ld      r0,16(r1)
    0x000000001001ff38 <+216>:	mtlr    r0
    0x000000001001ff3c <+220>:	blr
End of assembler dump.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20201019/d233b884/attachment.htm>

More information about the fpc-devel mailing list