http://bugs.winehq.org/show_bug.cgi?id=34842
Bug #: 34842 Summary: Garmin BaseCamp 4.1.2 sometimes fails to run when late-bound riched20.dll preferred load base address is already occupied and PE mapped into >2 GiB address range Product: Wine Version: 1.7.5 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello folks,
Garmin BaseCamp 4.1.2 runs pretty good with MS .NET Framework 3.5 installed.
There are (albeit rare) cases of startup failures when Wine loader fails to map builtin RichEd20.dll to its preferred load base address because it is already taken by another module.
RichEd20 needs a load address in lower 2 GiB virtual address space. See bug 22551 "Multiple .NET apps fail to load riched20.dll into memory (.NET Framework/Windows Forms wants riched20.dll loaded into lower 2GiB address space range)" for info.
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Garmin/BaseCamp ... $ wine ./BaseCamp.exe ... err:eventlog:ReportEventW L"clr20r3" err:eventlog:ReportEventW L"basecamp.exe" err:eventlog:ReportEventW L"4.1.2.0" err:eventlog:ReportEventW L"5134f30b" err:eventlog:ReportEventW L"system.windows.forms" err:eventlog:ReportEventW L"2.0.0.0" err:eventlog:ReportEventW L"471ebf68" err:eventlog:ReportEventW L"4ecd" err:eventlog:ReportEventW L"5b" err:eventlog:ReportEventW L"system.componentmodel.win32" err:eventlog:ReportEventW L"NIL" fixme:advapi:DeregisterEventSource (0xcafe4242) stub err:ole:CoInitializeEx Attempt to change threading model of this apartment from multi-threaded to apartment threaded err:ole:CoInitializeEx Attempt to change threading model of this apartment from multi-threaded to apartment threaded fixme:richedit:ME_HandleMessage EM_SETMARGINS: stub fixme:richedit:ME_HandleMessage EM_SETMARGINS: stub err:ole:CoUninitialize Mismatched CoUninitialize err:ole:CoUninitialize Mismatched CoUninitialize
Unhandled Exception: System.ComponentModel.Win32Exception: Cannot load the "RichEd20.DLL" DLL into memory. at System.Windows.Forms.RichTextBox.get_CreateParams() at System.Windows.Forms.Control..ctor(Boolean autoInstallSyncContext) at System.Windows.Forms.TextBoxBase..ctor() at System.Windows.Forms.RichTextBox..ctor() at bc.FatalErrorDialog_t.InitializeComponent() at bc.FatalErrorDialog_t..ctor(basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
- aAppName)
at bc.FatalError_t.Display(SByte* aFilename, UInt16 aLineNumber, basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >* aWhat, basic_string<char,std::char_traits<char>,std::allocator<char> >* aSubId, Optional_t<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
- aOpenGLVersion,
vector<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> ,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
- aFileList)
at bc.FatalError_t..ctor(Exception aException, Optional_t<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
- aOpenGLVersion,
vector<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> ,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>
- aFileList)
at main(String[] aArgs) at mainCRTStartupStrArray(String[] arguments) wine: Unhandled exception 0xe0434f4d in thread 33 at address 0x7b83a8bf (thread 0033), starting debugger... --- snip ---
RichEd20.dll has a preferred load address:
--- snip --- EXTRADLLFLAGS = -Wl,--image-base,0x7ac00000 --- snip ---
Address space layout in case of collision:
--- snip --- Module Address Debug info Name (139 modules) PE 340000- 362000 Deferred zlibwapi PE 400000- 25a7000 Deferred basecamp PE 25b0000- 278d000 Deferred xerceslib PE 2790000- 2bc6000 Deferred ogckml PE 2df0000- 337f000 Export mscorwks PE e610000- e6ae000 Deferred system.drawing PE e9c0000- ecb2000 Deferred system PE f270000- f73a000 Deferred system.windows.forms PE 10000000-100e5000 Deferred exiv2 PE 5e3a0000-5e42d000 Deferred diasymreader PE 60000000-60008000 Deferred accessibility PE 637a0000-6399c000 Deferred system.xml PE 64020000-64033000 Deferred mscorsec PE 64890000-648fc000 Deferred system.configuration PE 67510000-6756e000 Deferred system.management PE 6a310000-6a31a000 Deferred wminet_utils PE 74e60000-74e79000 Deferred wmiutils PE 78130000-781cb000 Deferred msvcr80 PE 783f0000-78433000 Deferred msvcm90 PE 79000000-79046000 Export mscoree PE 79060000-790b6000 Deferred mscorjit PE 790c0000-79500000 Deferred mscorlib ELF 79afa000-7b800000 Deferred libnvidia-glcore.so.304.108 ELF 7b800000-7ba60000 Dwarf kernel32<elf> -PE 7b810000-7ba60000 \ kernel32 ... ELF f6a22000-f6a89000 Deferred riched20<elf> -PE f6a30000-f6a89000 \ riched20 --- snip ---
"libnvidia-glcore.so.304.108" took the place earlier and "riched20.dll" was mapped into > 2 GiB address space which .NET runtime doesn't like.
Maybe Wine loader could try to map dlls which have requirements of preferred load address always in < 2 GiB address range for Windows compatiblity.
Regards