== Progress ==
TCWG-610 ARM Exceptions support Now fully committed upstream. We should now have support for exceptions in Shared Objects and Executables.
I've diagnosed problems when static linking after staring at a disassembly for most of a day. With some hacks I've managed to get a static link working using a recent Linaro sysroot. Next task is to resolve these in a more principled way.
TCWG-845 Static linking missing linker defined symbols - lld doesn't use a built in linker script so we need to add in symbols that libc.a is expecting the default linker script to generate. - lld is defining __tls_get_addr as it expects all TLS to be relaxed, this isn't the case for ARM or Mips so we need to not define it.
TCWG-829 Support for ifunc For some annoying reason that I can't work out why, ARM requires the R_ARM_IRELATIVE relocations to be in the .rel.dyn and not .rel.plt like all the other targets that lld supports including AArch64
TCWG-828 Static linking and TLS When static linking the TLS dynamic relocations in the .got must be resolved statically. - The other architectures that lld supports have the thread control block (tcb) after the data so the initial-exec relocations don't need to add the tcb size to the value put into the .got. - The module index dynamic relocation needs to be 1 and not 0 (LLD assumes general dynamic is relaxed away at static link-time).
TCWG-683 Support for branches to undefined weak references LLD doesn't resolve these to the next instruction so they just hang at runtime.
Some feedback and review for Linaro LLVM team processes.
== Plans ==
Work out a proper solution for TCWG-828 then start upstreaming. TCWG-683 can be worked around by providing an empty definition of the function, all the others need to be fixed to get a static libc to link.