2026年1月22日 17:20:03 (+09:00) で、Takashi Yano via Cygwin さんが書きました:

> >
> > If you are planning to provide a package built with compiler-rt, especially
> > one that contains a DLL, I would say, "Please don't do that." It's very
> > different if someone decides to build their own application with compiler-rt
> > and takes responsibility for doing so. Before providing such a package, the
> > implementation of native TLS in cygwin1.dll is needed, as well as an update
> > to the toolchains to use it (and, I guess, it is impossible to switch with
> > keeping ABI). That changes the fundamental design of the distribution.
> 
> I attempted to build the entire compiler-rt (builtins) as a shared library,
> similar to the suggestions in:
> https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/builtins/emutls.c#L388-L389
> , and could successfully solve the problem.
> Could you please try 21.1.4-2 (Test)?
> 


I’m concerned this makes the situation worse than providing a static library. I 
guess
that the upstream has never built it as a shared library. Consequently, that 
configuration
appears to be largely untested.
And then, what is the benefit of "specifying -rtlib=compiler-rt makes us 
cyggcc_s.dll free but
requires a dependency on cygclang_rt.builtins-21-x86_64.dll" ? Is there another 
benefit?

Furthermore, if you really intend to provide a DLL linked with compiler-rt, the
DLL comes with limitations that are hard to notice.
(If this is not what you are planning, please feel free to ignore this.)
- Linking the DLL without -rtlib=compiler-rt breaks the EmuTLS functionality 
silently. There is
  no way to know that the linking needs compiler-rt except inspecting the DLL 
with ldd or objdump.
- GCC doesn't support -rtlib=compiler-rt. That effectively enforces the use of 
clang.
- A single module (EXE or DLL) can link against only one of the TLS 
implementations, either the
  one from libgcc_s or the one from compiler-rt. A TLS variable that relies on 
the other
  implementation would be broken (again, silently).

Of course that might not matter if EmuTLS is never used, however, I worry about 
the
assumptions that are not enforced or validators automatically would be broken 
silently.

Therefore, my conclusion remains unchanged -- "Please don't do that."

Just to note, we're now focusing on compiler-rt because my original attention 
is about
EmuTLS, but the same discussion is applicable to libc++. A DLL that exports C++ 
interfaces
and linked to libc++ (if such a DLL were to be provided, would it be 
cygLLVM-X.dll?) can't be
linked together with another libstdc++-ed C++ library (e.g., boost).


> Actually, profiler itself was included, but did not work at all. Both the
> compiler-rt package and the llvm package had their own issues. I have
> uploaded llvm 21.1.4-2 (Test) and compiler-rt 21.1.4-2 (Test), so please
> test the profiler as well.
> 

That's great. Thanks.
-- 
Tomohiro Kashiwada (@kikairoya)

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to