[fpc-pascal] Crosscompiled ARM program crashes with segfault

Hartmut Eilers hartmut at eilers.net
Wed Aug 26 21:48:47 CEST 2009


Hallo All,

I have the problem that a bit more complex programs just crash with segfault.
Simpler programs work.
I had a lot of problems to get things done, and perhaps I did something wrong.
So I describe my setup as detailed as possible:

I use the crosscompiler version 2.3.1 for windows from
ftp://ftp.freepascal.org/pub/fpc/snapshot/v23/arm-linux/
I use Windows XP as compile host. with the standard setup I can compile simpler
programs, and they run fine on the target ( Calao USB-A9263
http://www.calao-systems.com )

To get more complex things done I did the following:

my fpc.cfg
-Tlinux
-FuC:\Programme\fpc4arm\units\arm-linux
-FlC:\Programme\fpc4arm\libs\arm-linux
-XParm-linux-
-FDC:\Programme\fpc4arm
-FDC:\Programme\fpc4arm\bin\arm-linux

in C:\Programme\fpc4arm\libs\arm-linux I copied the libs from /lib
of the target system.

Heres the list of the libs ( don't be confused I use cygwin )

rwxr-xr-x  1 root Kein  18768 Aug 25 13:27 ld-uClibc-0.9.28.so
rwxr-xr-x  1 root Kein  18768 Aug 25 15:02 ld-uClibc.so.0
rwxrwxrwx+ 2 root Kein      0 Aug 25 22:52 lib
rwxr-xr-x  1 root Kein 321756 Aug 26 16:43 libc.so
rwxr-xr-x  1 root Kein 321756 Aug 26 16:40 libc.so.0
rwxr-xr-x  1 root Kein  10612 Aug 25 22:51 libcrypt-0.9.28.so
rwxr-xr-x  1 root Kein   6900 Aug 25 22:51 libdl-0.9.28.so
rwxr-xr-x  1 root Kein   6900 Aug 25 22:51 libdl.so
rwxr-xr-x  1 root Kein  53672 Aug 25 22:51 libm-0.9.28.so
rwxr-xr-x  1 root Kein 256220 Aug 25 22:51 libncurses.so.5.5
rwxr-xr-x  1 root Kein   1172 Aug 25 22:51 libnsl-0.9.28.so
rwxr-xr-x  1 root Kein  83058 Aug 25 22:51 libpthread-0.9.28.so
rwxr-xr-x  1 root Kein   1176 Aug 25 22:51 libresolv-0.9.28.so
rwxr-xr-x  1 root Kein   3048 Aug 25 22:51 librt-0.9.28.so
rwxr-xr-x  1 root Kein 321756 Aug 25 22:51 libuClibc-0.9.28.so
rwxr-xr-x  1 root Kein   3948 Aug 25 22:51 libutil-0.9.28.so
rwxr-xr-x  1 root Kein  72020 Aug 25 22:51 libz.so.1.2.3

I copied libuClibc-0.9.28.so to libc.so Because the linker comlained about
missing symbols I got deeper in and did:

fetched uprt0.as from the compiler source package and assembled it on
windows with arm-linux-as.exe. I named the resulting object file cprt21.o
to satisfy the linker.

Now I use the commandline:

ppcarm -FL/lib/ld-uClibc.so.0 -Fl/lib/ thread.pas

to compile the following program:

{$mode objfpc}


uses
 sysutils {$ifdef unix},cthreads{$endif} ;

const
 threadcount = 100;
 stringlen = 10000;

var
  finished : longint;

threadvar
  thri : longint;

function f(p : pointer) : longint;

var
 s : ansistring;

begin
 Writeln('thread ',longint(p),' started');
 thri:=0;
 while (thri>0) do
   begin
   s:=s+'1';
   inc(thri);
   end;
 Writeln('thread ',longint(p),' finished');
 InterLockedIncrement(finished);
 f:=0;
end;

var
  i : longint;

begin
  finished:=0;
  for i:=1 to threadcount do
    BeginThread(@f,pointer(i));
  while (finished=0) do
  Writeln(finished);
end.

Now everything compiles and links fine, but the program crashes on the
target platform with segmentation fault.

even with strace I get:

# /root/thread
Segmentation fault
# strace /root/thread
execve("/root/thread", ["/root/thread"], [/* 16 vars */]) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Process 1403 detached

Can anybody give me hints how to tackle down this problem ?

Thanks a lot for your help

regards Hartmut
--
Hartmut Eilers                          <hartmut at eilers.net>
Dorffer Str. 53                           http://www.eilers.net
52076 Aachen                           01522/1656914



More information about the fpc-pascal mailing list