On Sun, 22 Oct 2017, Tamar Christina wrote:

---- On Sun, 22 Oct 2017 19:28:04 +0000 Martin Storsjö <[email protected]> wrote 
----
> On Sun, 22 Oct 2017, Tamar Christina wrote:
>
> > Actually..
> >
> > This may not be the right fix. The regression I am trying to fix is a 
duplicate symbols error on _wassert when
> > linking both mscvrt and mingwex. But I now see that:
> >
> > commit 1035bed24e833ea5eb487c78f4f350ea48f31e8b
> > Author: Martin Storsjö <[email protected]>
> > Date:   Fri Sep 29 12:42:59 2017 +0300
> >
> >    crt: More strictly flag functions in the unified msvcrt.def.in
> >
> >    Now the output from the unified msvcrt.def.in should be almost identical
> >    to what it was before, except for some new *_dbg and __p_* functions.
> >
> >    The functions that were included for 32 and 64 bit x86 in the unification
> >    were originally believed to be harmless, but some of them turned out to
> >    be function that we have compatibility fallbacks for, that were missed
> >    when libmsvcrt.a suddenly started exporting them. This broke 
compatibility
> >    with XP in some cases.
> >
> >    Signed-off-by: Martin Storsjö <[email protected]>
> >
> > added the change
> >
> > -_wassert
> > +F_ARM_ANY(_wassert)
> >
> > and I don't know why... it's there on x86 as well.
>
> The issure you're seeing, is that when you've built with the absolutely
> latest master version that includes this commit?

I first noticed it when I just upgraded the ones in msys2, later I built from 
master
myself.

>
> Because if the issue you're seeing is duplicate symbols between msvcrt and
> mingwex, it doesn't sound like you have this commit, this commit actually
> would fix it.

Hmm, but this commit hides _wassert

say I have an object file requiring both _assert and _wassert.

if my link order is -lmsvcrt -lmingwex, it'll pick assert from msvcrt,

It shouldn't pick _assert from msvcrt as far as I can see. Since _assert in msvcrt.def.in is defined with DATA; it will only produce an __imp__assert symbol, not _assert. When I try this exact setup you're describing, I don't get any error even though I link -lmsvcrt before -lmingwex.

What form of the symbol does your object file refer to, _assert or __imp__assert?

and then pick _wassert from mingwex, but because in mingwex both
_assert and _wassert live in the same unit, when it loads the object file for
linking it has no choice but to error out on the duplicate definition for 
_assert.

The first path I submitted "solves" this by splitting the functions off into 
different units since they're
independent anyway.

So if you're saying your patch brings things back to how they were before, I 
don't quite understand what happened..
though I didn't go back very far in the history.

I would appreciate if you can crosscheck and test both before 2146d75d7fd027118fe267f2a8fb139bcab6a9b8 (before I first touched msvcrt) and after 1035bed24e833ea5eb487c78f4f350ea48f31e8b (when things should be fixed); I'm sure that you got errors about duplicate definitions of _wassert within that commit range though.

Currently the only way to use both _assert and _wassert is to link mingwex 
first, and this didn't used to be the case
c.a gcc 6.2 release time.

Given that you say they don't exist on XP, then maybe my original patch is the right approach after all.

I didn't say that these don't exist on XP - they do.

I don't know and haven't dug through all of the source history to figure out the exact reasoning for the mingw version of these functions (perhaps these functions didn't exist on win2k, mingw added a function of their own, which isn't necessary now once XP is the baseline?). I've just tried to maintain/restore the exact original behaviour, whatever that was, as well as possible while refactoring these files.

// 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

Reply via email to