On Tue, 30 Apr 2024, Martin Storsjö wrote:

On Mon, 29 Apr 2024, Pali Rohár wrote:

So based on these experiments when building library, I can conclude that:

 X = Y

is the same as:

 Y == X

and it means that function named X in the source code is present in the
result DLL library under name Y.

So `foo = bar` is also renaming of the symbol, and not aliasing.


For completeness, what happens when both = and == are used at the same line:

$ cat test.def
LIBRARY "test.dll"
EXPORTS
foo = func == bar

$ cat test.c
void func(void) { }

$ i686-w64-mingw32-gcc -shared test.c test.def -o test.dll

$ readpe -e test.dll
Exported functions
   Library
       Name:                            test.dll
       Functions
           Function
               Ordinal:                         1
               Address:                         0x1410
               Name:                            bar


So line "X = Y == Z" has same meaning as "Y == Z" and so same as "Z = X".

Such logic does not make sense for me, but whatever. It shows that
documentation is incomplete and ambiguous.

As far as I know, they're used in different circumstances. When linking a DLL, you'd use the syntax "X = Y" to export a symbol under a different name. MS link also supports this syntax for this purpose.

When creating an import library with dlltool, the == syntax is used with the purpose of creating an import library with a symbol with one name, pointing at a DLL export with a different name.

I see you only inspected the export table of the linked DLLs in your experiment, but you also should create an import library at the same time (-Wl,--out-implib) and inspect what symbols it provides - which hopefully would link against the export names of the DLL that was created at the same time.

It's probably also interesting to test and see what dlltool does with this kind of def file.

// Martin

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to