<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>I did some investigations on the FreeBSD problems yesterday, with
      some results:</p>
    <pre>FreeBSD 12.1 x86_64:

1 starting compiler 3.0.4 might misalign sections. Linker LLD simply silently fails to reads objects with non aligned sections. (32-bit? 64-bit? both?) -> always use BFD with starting compiler.
2 Don Alfredo: compile works with -dFPC_USE_LIBC: true but needs ld.bfd (because of (1)?  tbt)
    -> FPC stat record definition doesn't change in that case. Maybe only syscall nr changed but not record definition? TBD/TBT
3 "old syscalls" I replaced lseek, mmap and ftruncate with newer variants (300 something) that seem to omit the zeroed registers. Result remains the same "can't find ../"
    I used a defined FREEBSDNEWSYSCALL for this (not committed yet, I don't have internet atm, this goes out via mobile)
    -> sounds like canocalization problem (fexpand). I see getcwd output in truss but they all return "0".  Seems getcwd does a lot of calls to the same directory.
    -> disable getcwd usage and do it the old way tbt
4 tried truss but there are very few syscalls in the output. I don't trust the result very much. I see that it calls stat11, so stat syscall number is also old.


issues to be resolved:
- syscall port still doesn't work
- compiler needs parameter to force compiler to use ld.bfd or just ld. (or lld?) So probably setting name of linker in general. I don't like to use platform specific environment variables, as FreeBSD suggests.



0. edit compiler/targets/t_bsd.pas. Go to method TLinkerBSD.setdefaultinfo and set "linkerprogram" to "ld.bfd"
1. install binutils
2. execute EXPORT PATH=/usr/local/bin:$PATH    -> this puts ld.bfd in /usr/local/bin before the one in /usr/bin and can be used to overcome the 3.0.4 bootstrap problems.
3  make with OPT=-dFPC_USE_LIBC</pre>
  </body>
</html>