https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57438
--- Comment #22 from Iain Sandoe <iains at gcc dot gnu.org> --- OK, So this has been biting me some more. It might be another case where Darwin has thrown up a more general problem. What's happening is that, where functions are ending up zero-sized, an FDE is still being emitted. we get for DWARF FDE, .globl foo foo: LFBxxx LFExxx and for .cfi_xxxx .globl foo foo: LFBxxx .cfi_startproc .cfi_endproc LFExxx ... both produce FDEs with 0 PC ranges. This upsets ld64. 1. GCC - it seems a waste of binary file space to emit FDEs with 0 PC range, since they can neither be the site of an exception, nor can they participate in unwinding; however, it might be rather intrusive for the current phase to fix that - if it's not causing any other port problems. * I haven't thought about it much harder than that - any reason anyone can see for wanting to emit an FDE with 0 PC range? 2. ld64 - should, perhaps, be more defensive, and discard 0-length FDEs when pulling in object files. I've patched my version to do this and testing - will post a revised version when it's done. Meanwhile, are there any other thoughts from folks on the best way forward?