On Tue, 26 Jun 2018, Jacek Caban wrote:
On 06/26/2018 01:44 PM, Martin Storsjö wrote:
On Tue, 26 Jun 2018, Jacek Caban wrote:
I still need to run some test, but I it seems ready for review.
The important change is __forceinline. We add extern to GCC macro,
because that matches closer intended behaviour. clang supports
__forceinline itself if -fms-extensions is used, so we should just leave
it to the compiler in that case (also __ptr32, __unaligned and __w64, so
I changed them as well while I was at it). Without -fms-extensions,
__always_inline__ is expected and as far as I can tell (and my testing
conforms that), it matches intended behaviour without additional
attributes.
Signed-off-by: Jacek Caban <[email protected]>
---
mingw-w64-headers/crt/_mingw.h.in | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
I think the patch is fine, but it took me a couple re-reads until I
got the full explanation of the commit message.
Sorry, I probably could explain that cleaner.
I can try to put this patch through test building of a number of
projects that I build with clang+mingw, I'll let you know how it goes.
Thanks would be great. Thanks!
I did a test build with this patch, and it failed at building winpthreads,
with the following error:
libtool: link: i686-w64-mingw32-clang -shared
src/.libs/libwinpthread_la-barrier.o src/.libs/libwinpthread_la-cond.o
src/.libs/libwinpthread_la-misc.o src/.libs/libwinp
thread_la-mutex.o src/.libs/libwinpthread_la-rwlock.o
src/.libs/libwinpthread_la-spinlock.o src/.libs/libwinpthread_la-thread.o
src/.libs/libwinpthread_la-ref.o src/.lib
s/libwinpthread_la-sem.o src/.libs/libwinpthread_la-sched.o src/.libs/libwinpthread_la-clock.o src/.libs/libwinpthread_la-nanosleep.o src/.libs/version.o -L./fakelib
-g -O2 -no-pthread -o .libs/libwinpthread-1.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libwinpthread.dll.a
lld-link: error: duplicate symbol: _wcsnlen_s in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _NtCurrentTeb in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _GetCurrentFiber in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _GetFiberData in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpInitializeCallbackEnviron in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackThreadpool in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackCleanupGroup in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackActivationContext in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackNoActivationContext in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackLongFunction in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackRaceWithDll in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackFinalizationCallback in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpSetCallbackPersistent in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: _TpDestroyCallbackEnviron in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedAnd64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedOr64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedXor64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedIncrement64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedDecrement64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: duplicate symbol: __InterlockedExchange64 in
src/.libs/libwinpthread_la-barrier.o and in src/.libs/libwinpthread_la-cond.o
lld-link: error: too many errors emitted, stopping now (use /errorlimit:0 to
see all errors)
clang-7: error: linker command failed with exit code 1 (use -v to see
invocation)
Makefile:680: recipe for target 'libwinpthread.la' failed
make[2]: *** [libwinpthread.la] Error 1
This is unrelated to the issue that Mateusz referred to, because I used a
new enough clang version where that issue should have been fixed, and that
issue only manifests itself when linking with GNU binutils ld, while I
linked with lld.
// Martin
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public