On Tuesday, 11 December 2018 at 10:30:54 UTC, Jacob Carlborg
wrote:
On 2018-12-10 12:26, Iain Buclaw wrote:
Is there any consideration apart from section/tls support?
There's the backtrace implementation for exceptions as well,
"rt.backtrace". I had to slight modify the DMD backend to get
that to work the same as it does on Linux and FreeBSD. I've
documented how it's implemented in the commit message [1].
We're covered by libbacktrace, rather than tthe druntime
implementation.
https://github.com/gcc-mirror/gcc/blob/master/libbacktrace/README
I'm just going to fork the current rt.sections stuff (I.e:
gcc.sections.{elf,macho,pef,x off}) as apart from linux/elf,
the rest is not of any use or is specific to dmd object format.
You should be able to reuse most parts of rt.sections_osx_x86.
I don't think there's anything in that file that won't work on
x86-64. But you would need to adjust it for the TLS
implementation you're using.
Unlike dmd, we don't really have full control over how things end
up in the object. There are a couple coaxing methods used which
allowed us to use elf_shared without modification. Other object
formats I don't think we'll be so lucky over.
I'll try really hard though to keep the same implementation used
for elf in others however - just different section names
depending on what is accepted by the assembler.
As for tls, well there is still no native support in gcc if I
understand correctly.
It was pretty straight forward (once I figured it out :) ) to
implement in DMD and it's pretty well documented you want to
implement it in GCC.
I'll leave that to the binutils people. Supporting emutls also
means we'll work on mingw too, which has a similar say story
regarding state of native tls.
Besides, it will only work for newer OSX releases, not ~10.5
which is roughly the base version aimed to support.