Trying to link all freebsd packages with lld I found that mono is one of the packages that fails.
The problem is from
#define MONO_TLS_FAST __attribute__((tls_model("local-dynamic")))
being used at
extern __thread MONO_TLS_FAST void* GC_thread_tls;
That requests that the variable be accessed using the local dynamic model. That only works if the variable is defined in the local DSO. The problem is that the variable has default visibility, so it is legal for the dynamic linker to preempt it and lld, being more strict than the gnu linker, complains.
Changing the visibility to hidden or protected solves the problem.
Is this still an issue with commit 7f76306? That commit removed the local dynamic model from GC_thread_tls.