Watcom compiler notes | |
===================== | |
Status | |
------ | |
Not yet usable. Although the library builds under Watcom it | |
substantially fails the test suite. | |
There is a working Wmakefile for wmake for the library build. | |
invoke as any of: | |
wmake -f Wmakefile clean WC | |
wmake -f Wmakefile clean WC-inlined | |
wmake -f Wmakefile clean WCE | |
wmake -f Wmakefile clean WCE-inlined | |
These build pthreadWC.dll and pthreadWCE.dll. | |
There is a working Wmakefile for wmake for the test suite. | |
invoke as any of: | |
wmake -f Wmakefile clean WC | |
wmake -f Wmakefile clean WCX | |
wmake -f Wmakefile clean WCE | |
wmake -f Wmakefile clean WC-bench | |
wmake -f Wmakefile clean WCX-bench | |
wmake -f Wmakefile clean WCE-bench | |
Current known problems | |
---------------------- | |
Library build: | |
The Watcom compiler uses a different default call convention to MS C or GNU C and so | |
applications are not compatible with pthreadVC.dll etc using pre 2003-10-14 versions | |
of pthread.h, sched.h, or semaphore.h. The cdecl attribute can be used on exposed | |
function prototypes to force compatibility with MS C built DLLs. | |
However, there appear to be other incompatibilities. Errno.h, for example, defines | |
different values for the standard C and POSIX errors to those defined by the MS C | |
errno.h. It may be that references to Watcom's threads compatible 'errno' do set | |
and return translated numbers consistently, but I have not verified this. | |
Watcom defines errno as a dereferenced pointer returned by the function | |
_get_errno_ptr(). This is similar to both the MS and GNU C environments for | |
multithreaded use. However, the Watcom version appears to have a number of problems: | |
- different threads return the same pointer value. Compare with the MS and GNU C | |
versions which correctly return different values (since each thread must maintain | |
a thread specific errno value). | |
- an errno value set within the DLL appears as zero in the application even though | |
both share the same thread. | |
Therefore applications built using the Watcom compiler may need to use | |
a Watcom built version of the library (pthreadWC.dll). If this is the case, then | |
the cdecl function attribute should not be required. | |
Application builds: | |
The test suite fails with the Watcom compiler. | |
Test semaphore1.c fails for pthreadWC.dll because errno returns 0 instead of EAGAIN. |