This is the mail archive of the cygwin-xfree@cygwin.com mailing list for the Cygwin XFree86 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [XFree86-4.2.0] Now that we have an improved ld, please make libXt a shared library.


	ago
>
> BTW: there are some design problems with the shared library.
>
<snip>

> This test is also done in other shared libraries. On linux (and most unices)
> there is no problem with this. But on windows the symbol XtInherit in the
> other library points to the import table and is different to the pointer
> stored in the struct. The comparisation will not work.

Do you have really tried this ?
On the assembly level every reference of the above symbol uses the same
symbolname, which is the address of the stub coming from the libxxx.dll.a or any
other import library (or build internally by ld in case of using the
direct-to-dll-linking feature see info ld ->machine depended->Win32).

I have build a real working example with a symbol of libX11, which seems to be
the same

#include <stdio.h>

void _Xwcsncmp(void);

typedef struct {
  void (*func)(void);
} Str ;

 Str x = { 0};


/*And on some places they test if x.func is set: */

main()
{
	if (x.func != _Xwcsncmp)
		printf("test failed\n");
	else
		printf("test passed\n");

	x.func = _Xwcsncmp;

	if (x.func != _Xwcsncmp)
		printf("test failed\n");
	else
		printf("test passed\n");

}

$ gcc test.c  -save-temps -lX11  -L/usr/X11R6/lib


$ ./a.exe
test failed
test passed

Cheers
Ralf


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]