[Bug 33320] New: WinRT/ARM port of Audacity needs msvcp110.dll.??0id at locale@std@@QAA at I@Z

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Apr 2 16:29:02 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=33320

             Bug #: 33320
           Summary: WinRT/ARM port of Audacity needs
                    msvcp110.dll.??0id at locale@std@@QAA at I@Z
           Product: Wine
           Version: 1.5.27
          Platform: arm
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: msvcp
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: focht at gmx.net
    Classification: Unclassified


Hello folks,

as the summary says ...

--- snip ---
$ wine ./Audacity.exe 
wine: Call from 0x403a4164 to unimplemented function
msvcp110.dll.??0id at locale@std@@QAA at I@Z, aborting
err:module:attach_process_dlls "wxbase28u_vc_custom.dll" failed to initialize,
aborting
err:module:LdrInitializeThunk Main exe initialization for
L"Z:\\home\\linaro\\wine-apps\\audacity\\Audacity\\Audacity.exe" failed, status
80000100
--- snip ---

I found a nice online demangler that supports both, g++ and msvc++ demangling
scheme: http://slush.warosu.org/c++filtjs/

??0id at locale@std@@QAA at I@Z -> public: __cdecl std::locale::id::id(unsigned int)

>From C++ standard documentation:

--- quote ---
The id class provides facets with an index used to identify them. Every facet
class must define a public static member locale::id, or be derived from a facet
that provides this member, otherwise the facet cannot be used in a locale. The
locale::id ensures that each class type gets a unique identifier.
--- quote ---

I'm a bit curious why Microsoft's std::locale::id class has an explicit
constructor with init? value.
The id needs to be unique for each kind of facet.
Nathan C. Myers article about standard C++ locale implementation at
http://www.cantrip.org/locale.html states that constructor based initialization
for std::locale::id is not advised:

--- quote ---
Recall that each facet type contains a static member of type locale::id. Thus,
there is one static instance per facet type. The default constructor id()
(carefully) does not initialize the member index_. Because "static
constructors" are called at times that are (for most practical purposes)
random, they may be called after the value has already been used, so it is
essential that initialization not depend on a constructor. The members of each
static instance are reliably set to zero by the program loader, and remain zero
until they are set to something else.
...
The [locale template] constructor begins by copying the implementation vector
from other, which increments all the facet reference counts. Then it sets
Facet::id.index_ to assign the facet an identity if it has none yet, and (if
necessary) grows the new vector to fit. Finally, it installs the new facet,
being careful to keep the reference counts right. Thus, the id::index_ member
is zero until it is actually used, and it is considered used only when a locale
object exists which contains the facet that owns it.
--- quote ---

So it seems Microsoft moves in mysterious ways as always ;-)

$ wine --version
wine-1.5.27-123-g2c2cf10

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list