This is the mail archive of the
pthreads-win32@sources.redhat.com
mailing list for the pthreas-win32 project.
MT exception support
- To: Mingw <mingw-users at lists dot sourceforge dot net>, pthreads-win32 at sources dot redhat dot com
- Subject: MT exception support
- From: Danny Smith <danny_r_smith_2001 at yahoo dot co dot nz>
- Date: Thu, 5 Apr 2001 07:22:32 +1200 (NZST)
Hello all
Following is an alternative way of implementing Franco Bez idea to
put exception handling code in dll and and Thomas Pfaff's idea to combine
with mthread support. Any comments/criticisms/suggestions are more
than welcome
The attached makefile builds mthread support dll (mingwm10ex.dll) that
contains the EH code from libgcc -- viz the C++ EH code (CXX _LIB2FUNCS
in gcc's makefile) plus the generic EH code in _eh.o --
with the code in mingwm10.dll.
libgcc.a remains unaltered. To get mthread exception handling, link in
the import lib (libmingwthrex.a) for mingwm10ex.dll before libgcc.a
Note, the dll contains only EH code from libgcc.a There may be good reason
export other libgcc functions from the dll but I've tried to keep this dll
as small as possible (~53k).
I get the big congratulations message with this with pthreads-snap-2000-
12-29 testsuite, but need to make following change to GNUmakefile
at line 31 change
LD = gcc -mdll
to
LD = gcc -mdll -mthreads
To use, copy attched makefile to empty dir, edit to reflect location
of libgcc.a and src for mingwm10.dll,
"make install", and change specs file like so:
--- specs.orig Wed Mar 28 11:49:04 2001
+++ specs Wed Apr 04 21:35:41 2001
@@ -23,7 +23,7 @@
%{pg:-lgmon} %{mwindows:-lgdi32 -lcomdlg32} -luser32
-lkernel32 -ladvapi32 -lshell32
*libgcc:
-%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lmoldname -lmsvcrt
+%{mthreads:-lmingwthrex} -lmingw32 -lgcc -lmoldname -lmsvcrt
*startfile:
%{shared|mdll:dllcrt2%O%s} %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s}
I have also tested with libodbc++.dll, which uses exceptions extensively
when communicating with database drivers, and with STLPort4.1b5 iostream
lib as dll.
Note, I have built and tested with NT4 and gcc 2.95.3 (with w32-specific
patches), but see no reason why it shouldn't work with 2.95.2-1.
Danny
#makefile for mingwm10ex.dll
#=========================================================================
# These will need to changed to suit
# Location of libgcc.a
PREFIX=D:/mingw
GCCLIBDIR=$(PREFIX)/lib/gcc-lib/mingw32/2.95.3
# Location of mingwm10.dll src
MINGWSRCDIR=D:/Users/Danny/src/winsup/mingw
SHELL=/bin/sh.exe
CP=cp -f
MV=mv -f
CXX_LIB2OBJS = tinfo.o tinfo2.o new.o opnew.o opnewnt.o opvnew.o \
opvnewnt.o opdel.o opdelnt.o opvdel.o opvdelnt.o exception.o frame.o
EH_OBJS = $(CXX_LIB2OBJS) _eh.o
MTHR_OBJS=mthr.o mthr_init.o
EH_DEF=EH.def
all: libmingwthrex.a
install: all
$(CP) libmingwthrex.a $(PREFIX)/mingw32/lib
$(CP) mingwm10ex.dll $(PREFIX)/bin
cleanbin:
$(RM) *.a *.dll
clean: cleanbin
$(RM) *.o
libmingwthrex.a: $(EH_DEF) $(EH_OBJS) $(MTHR_OBJS) CRTmt.o
gcc -shared -o mingwm10ex.dll -Wl,--out-implib,libmingwthrex.a \
-Wl,--image-base,0x6FBC0000 \
$(EH_DEF) $(EH_OBJS) $(MTHR_OBJS) CRTmt.o
ar -rs libmingwthrex.a CRTmt.o
$(EH_DEF): $(EH_OBJS)
dlltool --export-all --output-def $(EH_DEF).tmp $(EH_OBJS)
#This gets rid of the comments, which ld doesn't like
cut -f1 -d';' $(EH_DEF).tmp > $(EH_DEF)
$(EH_OBJS):$(GCCLIBDIR)/libgcc.a
ar -x $(GCCLIBDIR)/libgcc.a $(EH_OBJS)
mthr.o : $(MINGWSRCDIR)/mthr.c
gcc -O2 -c -o mthr.o $(MINGWSRCDIR)/mthr.c
mthr_init.o : $(MINGWSRCDIR)/mthr_init.c
gcc -O2 -c -o mthr_init.o $(MINGWSRCDIR)/mthr_init.c
CRTmt.o : $(MINGWSRCDIR)/CRTmt.c
gcc -O0 -c -o CRTmt.o $(MINGWSRCDIR)/CRTmt.c
_____________________________________________________________________________
http://my.yahoo.com.au - My Yahoo!
- Have news, stocks, weather, sports and more in one place.