Dmitry Timoshkov wrote:

Foo.spec:

@ stdcall [EMAIL PROTECTED]@8(long long) fnFooSTD
@ cdecl   fnFooC  (long long) fnFooC

resulted Foo.spec.c:

asm(".data\n"
   "\t.align 4\n"
   "__wine_spec_exports:\n"
   "\t.long 0\n"
   "\t.long 0\n"
   "\t.long 0\n"
   "\t.long __wine_spec_exp_names\n"
   "\t.long 1\n"
   "\t.long 2\n"
   "\t.long 2\n"
   "\t.long __wine_spec_exports_funcs\n"
   "\t.long __wine_spec_exp_name_ptrs\n"
   "\t.long __wine_spec_exp_ordinals\n"
   "__wine_spec_exports_funcs:\n"
   "\t.long fnFooC\n"
   "\t.long fnFooSTD\n"
   "__wine_spec_exp_name_ptrs:\n"
   "\t.long __wine_spec_exp_names+8\n"
   "\t.long __wine_spec_exp_names+15\n"
   "\t.text\n"
   "__wine_spec_exp_names:\n"
   "\t.string \"Foo.dll\"\n"
   "\t.string \"fnFooC\"\n"
   "\t.string \"[EMAIL PROTECTED]"\n"
                ^^^^^^^^^^<----------------------------<<<<<<<<<
   "\t.data\n"
   "__wine_spec_exp_ordinals:\n"
   "\t.short 0\n"
   "\t.short 1\n"
   "\tjmp fnFooC\n"
   "\tret\n"
   "\t.short 8\n"
   "\t.long fnFooC,0x00000000\n"
   "\tjmp fnFooSTD\n"
   "\tret $8\n"
   "\t.long fnFooSTD,0x00000000\n"
   "\t.text\n"
   "\t.align 4\n"
);

As you can see it works for me.




Dear Dmitry you have been most patience with me and I already feel silly but please I am not able to reproduce your results.


1) I have put above two lines in a Foo.dll.spec file

2) Here is my command line dump:
* gcc -c -I. -I/home/wine/include/wine/windows -g -fPIC -D_REENTRANT -o fooapp.o fooapp.c
* LD_LIBRARY_PATH="/home/wine/lib" /home/wine/bin/winebuild -fPIC -o libFoo.def --def Foo.dll.spec
* LD_LIBRARY_PATH="/home/wine/lib" /home/wine/bin/winebuild -fPIC -o fooapp.exe.spec.c --exe fooapp.exe fooapp.o -L. -lFoo -L/home/wine/lib/wine -ladvapi32 -lkernel32 -lshell32 -luser32




3) Here is my result fooapp.exe.spec.c:
....

} imports = {
 {
   { 0, 0, 0, "Foo.dll", &imports.data[0] },
   { 0, 0, 0, "kernel32.dll", &imports.data[2] },
   { 0, 0, 0, 0, 0 },
 },
 {
   /* Foo.dll */
   "\001\000fnFooC",
   0,
   /* kernel32.dll */
   "\045\001ExitProcess",
   "\215\001GetCommandLineA",
   "\373\001GetModuleHandleA",
   "\056\002GetStartupInfoA",
   0,
 }
};

#ifndef __GNUC__
static void __asm__dummy_import(void) {
#endif

asm(".data\n\t.align 8\n"
   "\t.type fnFooC,@function\n"
   "\t.globl fnFooC\n"
   "fnFooC:\n\tjmp *(imports+60)\n\tmovl %esi,%esi\n"
   "\t.type ExitProcess,@function\n"
   "\t.globl ExitProcess\n"
   "ExitProcess:\n\tjmp *(imports+68)\n\tmovl %esi,%esi\n"
   "\t.type GetCommandLineA,@function\n"
   "\t.globl GetCommandLineA\n"
   "GetCommandLineA:\n\tjmp *(imports+72)\n\tmovl %esi,%esi\n"
   "\t.type GetModuleHandleA,@function\n"
   "\t.globl GetModuleHandleA\n"
   "GetModuleHandleA:\n\tjmp *(imports+76)\n\tmovl %esi,%esi\n"
   "\t.type GetStartupInfoA,@function\n"
   "\t.globl GetStartupInfoA\n"
   "GetStartupInfoA:\n\tjmp *(imports+80)\n\tmovl %esi,%esi\n"
".text");
#ifndef __GNUC__
}
#endif
....

I have noticed that my .spec.c file is very different than your .spec.c file from above. I am using winebuild downloaded from source forge, as of 20031212.

Now if I use your suggested .spec file. I am missing the FooSTD altogether. If I remove one of the @8 than I am back to my old problem.

[Q-1] Why is my .spec.c file so different than yours? could you please check my command line switches? could you please send me your makefiles (command line) that produced above results.

[Q-2] I Have mandrake 9.1, GCC 3.3.1, winebuild extracted from Wine-20031212-i386-S9nodebug-2.tgz downloaded from sourceforge. Is winebuild a simple elf program that only dependent on GLIBC? or is it using other binary files/libraries that I should check versions of? Mainly is it dependent on any other wine utility/library?

Thanks in advance. And happy holidays
Boaz




Reply via email to