exploring/possibly porting winelib app to support 64bit.

jordan triplesquarednine at gmail.com
Sun Mar 31 23:23:11 CDT 2013


Hi list.

A friend of mine and myself, have been exploring expanding a (currently,
32bit only) winelib app to support 64bit plugins in wine (64). The app is
called FSThost, which is used to host win32 VST instruments and effects
(.dll) as a standalone app in Gnu/linux. Webpage:
http://sourceforge.net/projects/fsthost/

We currently have a example/test app in the source code, which compile as
test64.exe / test.exe.so ... you then use the exeutable 'foo'.   ~ in this
case 'foo' could be /path/to/your/64bitVSTplugin. Currently, the code fails
to load the 64bit dll. We are not sure exactly why it is failing, but
suspect a couple of reasons. this is where we at at;

1) LoadLibrary - OK
2) GetProcAddress (get address of VSTPluginMain function from DLL library)
- OK
3) Initialize plugin - i.e. call VSTPluginMain function from library - FAIL.

Potential reasons:
- Vestige mismatch
- Wine GetProcAddress on 64 bit platform

My friend thought someone more familiar with Wine / WinAPI could take a
look on this 64bit DLL and at least confirm that address returned by
GetProcAddress is correct. (or give us good tips and/or adive). Since, i am
already subbed (to wine-devel), i thought i would see if any one was
interested in having a look and/or giving us some pointers, tips, etc.

Here's an example (with WINEDEBUG="+relay'), full ouput:
http://pastebin.com/5b5srr2a

A little snippet:
0042:Call ntdll.RtlEncodePointer(002c4620) ret=18002d9aa
0042:Ret  ntdll.RtlEncodePointer() retval=c90b263e5a54eb02 ret=18002d9aa
0042:Ret  PE DLL (proc=0x18002f27c,module=0x180000000
L"Automaton.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1
0042:Ret  KERNEL32.LoadLibraryA() retval=180000000 ret=7f77bb394167
0042:Call KERNEL32.GetProcAddress(180000000,7f77bb3950b0 "VSTPluginMain")
ret=7f77bb394182
0042:Ret  KERNEL32.GetProcAddress() retval=180012900 ret=7f77bb394182
Revive plugin: Automaton
0042:Call KERNEL32.UnhandledExceptionFilter(0023e7f0) ret=7f77bbf1fc1a
wine: Unhandled page fault on read access to 0x0000022f at address 0x22f
(thread 0042), starting debugger...
fixme:dbghelp:elf_search_auxv can't find symbol in module
fixme:dbghelp:elf_search_auxv can't find symbol in module
fixme:dbghelp:elf_search_auxv can't find symbol in module

(goto pastebin for the rest / just scroll to bottom of page)

If you want to take a look and/or test the code yourself (you need latest
code): svn checkout svn://svn.code.sf.net/p/fsthost/code/trunk fsthost-code

the source tree is small (like 2 seconds to download). Makefile64 is used
to compile the test app (test.c). (just use 'make -f makefile64' from /src
dir).  alternatively, on sourceforge you can view the test64 app / source
code online / here; http://sourceforge.net/p/fsthost/code/154/

(there are several commits following this one, but i believe this one is
the most relevant.

then to run it (from source dircetory); './test64.exe
/path/to/64bitVSTplugin

You can get a 'tester' 64bit VST (.dll) to load into test64.exe from here:
http://kunz.corrupt.ch/products/tal-elek7ro

anyway, any of your insights, help, tips, comments, etc would be both
appreciated and helpful.

thanks.

Jordan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20130401/6443a7c5/attachment.html>


More information about the wine-devel mailing list