The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

    • RT @MarcBerns1: @zeeger Je zou wel gek zijn als je op erfpacht woont en in verduurzaming investeert: wordt meteen je erfpacht verhoogt, kan… 12 minutes ago
    • RT @isotopp: TIL my potato server at home can create a million directories on XFS in 16s, single threaded. Using multiprocessing(10), it t… 12 minutes ago
    • RT @hansdamen: Dat ging snel, het Twitteraccount @MinBijleveld is binnen de kortste keren omgezet in het generieke @DefensieMin. Gemakkelij… 13 minutes ago
    • RT @locuta: OPROEP AAN ALLEN: Kijk vanavond om 20:25 naar 'Alleen Tegen De Staat' op NPO2, documentaire over de Toeslagenaffaire. 14 minutes ago
    • RT @LarsWienand: Ein Kunde in einer Tankstelle gerät wegen der fehlenden Maske in Streit, kommt umgezogen und mit Maske wieder und erschieß… 15 minutes ago
  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 2,465 other followers

OMF, COFF and the 32-bit/64-bit Delphi or C++ compilers

Posted by jpluimers on 2020/01/29

Via [WayBack] As far as I can tell (and documentation on that is reaaaaaaly hard to find), dcc64 can link in .obj files in OMF and COFF format. Bcc64 uses LLVM chain and therefore produces ELF .o files… – Primož Gabrijelčič – Google+:

David Heffernan:
dcc32 does coff and omf, dcc64 only coff

and later he commented:

One of the difficulties with linking objects is the handling of exceptions. The 64 bit exception model is table based, in contrast to the stack based 32 bit model.

I don’t think that the exception tables are written correctly for code linked in objects. If exceptions are raised then this can lead to abnormal process termination. Process just disappears. Poof!

One common way that this happens is floating point exceptions that are by default unmasked by the Delphi RTL. I have found it necessary to mask them when calling into any linked object code to avoid exceptions being raised.

And compiling with cl can be a bit of a game. It’s stack checking options need to be disabled. And there are a few other key switches that help. And then there’s the forward declaration trick to help the one pass compiler cope with C objects that are expected to be linked in a separate step.

Anyway, it can be quite a challenge at times, but I’ve yet to find a plain self contained C library that has defeated me!

–jeroen

2 Responses to “OMF, COFF and the 32-bit/64-bit Delphi or C++ compilers”

  1. These are my personal findings after almost a month struggling with all Delphi versions x64-capable:

    – Delphi x64 can link in COFF obj files (from XE2 and up)
    – Delphi x64 from 10.1 Berlin and up can link in ELF64 files
    – Delphi x86 must link in OMF obj files

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

 
%d bloggers like this: