I'm getting an ICE in d-target.cc/critsecsize when I create a synchronized block. Looking at the source code, it's pretty obvious why - my target (ARM Cortex-M bare metal) isn't any of the ones listed:

if (global.params.isWindows)
  ...
else if (global.params.isLinux)
  ...
else if (global.params.isFreeBSD)
  ...
else if (global.params.isOpenBSD)
  ...
else if (global.params.isOSX)
  ...
else if (global.params.isSolaris)
  ...

gcc_unreachable();  //ARM cortex-M (ARM Thumb): Ouch!

Interestingly, it only lists OSs, not CPU architectures. If I look at the Param struct in mars.h, it seems there is no parameter that suits my target.

I may be able to submit a pull request to change this (at least partially), but I'm looking for advice on how to add support for my target.

* Does GDC/DMD need a new isARMThumb/isBareMetal/isWhatever param?
* Should critsecsize return sizeof(target's size_t) if not otherwise specified instead of calling gcc_unreachable()?

I realize there is a broader problem here than support for synchronized. What's the correct way to go about adding support for my target platform.

Thanks,
Mike



Reply via email to