Hello,

Now that Mac OS X 10.5 has been (more or less) released, some notes on issues you may encounter when using FPC 2.2.0 (or earlier) on that new Mac OS X release. All issues are related to the fact the Apple now uses a different linker (the old 32 bit linker has been scrapped, and the old 64 bit linker has been extended to support all targets -- well, it already could link code for all targets in 10.4, but only 64 bit targets were supported by Apple).

Note that the information below is based on information gathered from testing on pre-release versions of Mac OS X 10.5, so the final version may still be different.


* The new linker refuses to link dynamic libraries containing non-PIC (position-independent code)
- Effect: you can't compile dynamic libraries anymore with FPC 2.2.0
- Occurs: whenever you compile a dynamic library. I don't know whether FPC-compiled dynamic libraries compiled on 10.4 still work on 10.5. - Fix: already in FPC 2.3.1 and FPC 2.2.1 (FPC now always generates PIC by default on Darwin)


* There is a bug in the new i386 linker regarding dealing with certain kinds of relocations, which is triggered by the instructions which FPC generates for jump tables.
- Effect: crash of the compiled code
- Occurs: when compiling i386 code with large case statements on Mac OS X 10.5, mostly when using -O1 and higher. i386 programs compiled on Mac OS X 10.4.x containing such jump tables however work fine when run on Mac OS X 10.5 (as the 10.4.x linker does handle those relocations correctly). - Fix: This will have to be fixed by Apple. I have however added a workaround in FPC 2.3.1 and FPC 2.2.1 which mostly avoids generating the crashing relocation (and the resulting code is faster to boot). The only case in which it can still happen is an enumeration or subrange type of which the lowest element has an ordinal value > 0, and you have a case statement which is translated to a jump table in which this lowest element is used. E.g.

type
  tmysub = 5..50;
var
  x: tmysub;
begin
  case x of
    5: writeln(5);
    6: writeln(6);
    ...
    50: writeln(50);
  end;
end.


* There is a bug in the new linker when dealing with certain kinds of (invalid?) Dwarf debug info - Effect: crash of the linker, e.g. when linking a compiler which is compiled with Dwarf debug info - Occurs: I have not yet been able to isolate which specific kind of Dwarf debug info causes the crash - Fix: It seems the Dwarf info generated by the latest FPC 2.3.1 no longer crashes the linker. I'm not sure if all Dwarf fixes have already been merged back to 2.2.1 though.


* The new linker deals differently with stabs debug information compared to previous versions, causing a lot of "Unknown stabs" warnings and also some errors during linking
- Effect: you can't compile code with stabs debug information
- Occurs: with any program compiled with stabs debug information (programs compiled on 10.4 with stabs may still be debuggable on 10.5 though)
- Fix: already in FPC 2.3.1 (not yet merged to FPC 2.2.1)


I will merge the fixes for the last two issues to FPC 2.2.1 some time during the coming days and put up snapshot installers with that version for PPC and i386 on the ftp site.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to