Changeset 9d944b2


Ignore:
Timestamp:
Mar 31, 2017, 12:16:14 PM (5 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
077810d
Parents:
95448f1e
Message:

Implemented interposing for abort and exit, implemented safer debug output

Location:
src
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • src/driver/cfa.cc

    r95448f1e r9d944b2  
    269269                args[nargs] = "-lpthread";
    270270                nargs += 1;
     271                args[nargs] = "-ldl";
     272                nargs += 1;
     273                args[nargs] = "-Xlinker";
     274                nargs += 1;
     275                args[nargs] = "--undefined=__lib_debug_write";
     276                nargs += 1;
     277
    271278        } // if
    272279#endif //HAVE_LIBCFA
  • src/libcfa/Makefile.am

    r95448f1e r9d944b2  
    4949
    5050libobjs = ${headers:=.o}
    51 libsrc = libcfa-prelude.c ${headers:=.c}
     51libsrc = libcfa-prelude.c interpose.c libhdr/debug.c ${headers:=.c}
    5252
    5353# not all platforms support concurrency, add option do disable it
  • src/libcfa/Makefile.in

    r95448f1e r9d944b2  
    4343
    4444# not all platforms support concurrency, add option do disable it
    45 @BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
     45@BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
    4646
    4747# not all platforms support concurrency, add option do disable it
     
    9797libcfa_d_a_AR = $(AR) $(ARFLAGS)
    9898libcfa_d_a_LIBADD =
    99 am__libcfa_d_a_SOURCES_DIST = libcfa-prelude.c limits.c stdlib.c \
    100         math.c iostream.c fstream.c iterator.c rational.c assert.c \
    101         containers/vector.c concurrency/coroutine.c \
    102         concurrency/thread.c concurrency/kernel.c \
    103         concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
    104         concurrency/invoke.c
     99am__libcfa_d_a_SOURCES_DIST = libcfa-prelude.c interpose.c \
     100        libhdr/debug.c limits.c stdlib.c math.c iostream.c fstream.c \
     101        iterator.c rational.c assert.c containers/vector.c \
     102        concurrency/coroutine.c concurrency/thread.c \
     103        concurrency/kernel.c concurrency/monitor.c \
     104        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
    105105am__dirstamp = $(am__leading_dot)dirstamp
    106 @BUILD_CONCURRENCY_TRUE@am__objects_1 = containers/libcfa_d_a-vector.$(OBJEXT) \
    107 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
     106@BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
    108107@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-thread.$(OBJEXT) \
    109108@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-kernel.$(OBJEXT) \
     
    113112        libcfa_d_a-iostream.$(OBJEXT) libcfa_d_a-fstream.$(OBJEXT) \
    114113        libcfa_d_a-iterator.$(OBJEXT) libcfa_d_a-rational.$(OBJEXT) \
    115         libcfa_d_a-assert.$(OBJEXT) $(am__objects_1)
     114        libcfa_d_a-assert.$(OBJEXT) \
     115        containers/libcfa_d_a-vector.$(OBJEXT) $(am__objects_1)
    116116@BUILD_CONCURRENCY_TRUE@am__objects_3 = concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT) \
    117117@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-invoke.$(OBJEXT)
    118 am__objects_4 = libcfa_d_a-libcfa-prelude.$(OBJEXT) $(am__objects_2) \
     118am__objects_4 = libcfa_d_a-libcfa-prelude.$(OBJEXT) \
     119        libcfa_d_a-interpose.$(OBJEXT) \
     120        libhdr/libcfa_d_a-debug.$(OBJEXT) $(am__objects_2) \
    119121        $(am__objects_3)
    120122am_libcfa_d_a_OBJECTS = $(am__objects_4)
     
    122124libcfa_a_AR = $(AR) $(ARFLAGS)
    123125libcfa_a_LIBADD =
    124 am__libcfa_a_SOURCES_DIST = libcfa-prelude.c limits.c stdlib.c math.c \
    125         iostream.c fstream.c iterator.c rational.c assert.c \
    126         containers/vector.c concurrency/coroutine.c \
    127         concurrency/thread.c concurrency/kernel.c \
    128         concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
    129         concurrency/invoke.c
    130 @BUILD_CONCURRENCY_TRUE@am__objects_5 =  \
    131 @BUILD_CONCURRENCY_TRUE@        containers/libcfa_a-vector.$(OBJEXT) \
    132 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-coroutine.$(OBJEXT) \
     126am__libcfa_a_SOURCES_DIST = libcfa-prelude.c interpose.c \
     127        libhdr/debug.c limits.c stdlib.c math.c iostream.c fstream.c \
     128        iterator.c rational.c assert.c containers/vector.c \
     129        concurrency/coroutine.c concurrency/thread.c \
     130        concurrency/kernel.c concurrency/monitor.c \
     131        concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
     132@BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \
    133133@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-thread.$(OBJEXT) \
    134134@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-kernel.$(OBJEXT) \
     
    138138        libcfa_a-fstream.$(OBJEXT) libcfa_a-iterator.$(OBJEXT) \
    139139        libcfa_a-rational.$(OBJEXT) libcfa_a-assert.$(OBJEXT) \
    140         $(am__objects_5)
     140        containers/libcfa_a-vector.$(OBJEXT) $(am__objects_5)
    141141@BUILD_CONCURRENCY_TRUE@am__objects_7 = concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT) \
    142142@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-invoke.$(OBJEXT)
    143 am__objects_8 = libcfa_a-libcfa-prelude.$(OBJEXT) $(am__objects_6) \
    144         $(am__objects_7)
     143am__objects_8 = libcfa_a-libcfa-prelude.$(OBJEXT) \
     144        libcfa_a-interpose.$(OBJEXT) libhdr/libcfa_a-debug.$(OBJEXT) \
     145        $(am__objects_6) $(am__objects_7)
    145146am_libcfa_a_OBJECTS = $(am__objects_8)
    146147libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     
    308309AM_CCASFLAGS = @CFA_FLAGS@
    309310headers = limits stdlib math iostream fstream iterator rational assert \
    310         $(am__append_3)
     311        containers/vector $(am__append_3)
    311312libobjs = ${headers:=.o}
    312 libsrc = libcfa-prelude.c ${headers:=.c} $(am__append_4)
     313libsrc = libcfa-prelude.c interpose.c libhdr/debug.c ${headers:=.c} \
     314        $(am__append_4)
    313315libcfa_a_SOURCES = ${libsrc}
    314316libcfa_a_CFLAGS = -nodebug -O2
     
    383385clean-libLIBRARIES:
    384386        -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
     387libhdr/$(am__dirstamp):
     388        @$(MKDIR_P) libhdr
     389        @: > libhdr/$(am__dirstamp)
     390libhdr/$(DEPDIR)/$(am__dirstamp):
     391        @$(MKDIR_P) libhdr/$(DEPDIR)
     392        @: > libhdr/$(DEPDIR)/$(am__dirstamp)
     393libhdr/libcfa_d_a-debug.$(OBJEXT): libhdr/$(am__dirstamp) \
     394        libhdr/$(DEPDIR)/$(am__dirstamp)
    385395containers/$(am__dirstamp):
    386396        @$(MKDIR_P) containers
     
    415425        $(AM_V_AR)$(libcfa_d_a_AR) libcfa-d.a $(libcfa_d_a_OBJECTS) $(libcfa_d_a_LIBADD)
    416426        $(AM_V_at)$(RANLIB) libcfa-d.a
     427libhdr/libcfa_a-debug.$(OBJEXT): libhdr/$(am__dirstamp) \
     428        libhdr/$(DEPDIR)/$(am__dirstamp)
    417429containers/libcfa_a-vector.$(OBJEXT): containers/$(am__dirstamp) \
    418430        containers/$(DEPDIR)/$(am__dirstamp)
     
    447459        -rm -f containers/libcfa_a-vector.$(OBJEXT)
    448460        -rm -f containers/libcfa_d_a-vector.$(OBJEXT)
     461        -rm -f libhdr/libcfa_a-debug.$(OBJEXT)
     462        -rm -f libhdr/libcfa_d_a-debug.$(OBJEXT)
    449463
    450464distclean-compile:
     
    453467@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-assert.Po@am__quote@
    454468@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-fstream.Po@am__quote@
     469@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-interpose.Po@am__quote@
    455470@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-iostream.Po@am__quote@
    456471@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-iterator.Po@am__quote@
     
    462477@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-assert.Po@am__quote@
    463478@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-fstream.Po@am__quote@
     479@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-interpose.Po@am__quote@
    464480@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-iostream.Po@am__quote@
    465481@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-iterator.Po@am__quote@
     
    482498@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@
    483499@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_d_a-vector.Po@am__quote@
     500@AMDEP_TRUE@@am__include@ @am__quote@libhdr/$(DEPDIR)/libcfa_a-debug.Po@am__quote@
     501@AMDEP_TRUE@@am__include@ @am__quote@libhdr/$(DEPDIR)/libcfa_d_a-debug.Po@am__quote@
    484502
    485503.S.o:
     
    522540@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
    523541
     542libcfa_d_a-interpose.o: interpose.c
     543@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-interpose.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-interpose.Tpo -c -o libcfa_d_a-interpose.o `test -f 'interpose.c' || echo '$(srcdir)/'`interpose.c
     544@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-interpose.Tpo $(DEPDIR)/libcfa_d_a-interpose.Po
     545@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='interpose.c' object='libcfa_d_a-interpose.o' libtool=no @AMDEPBACKSLASH@
     546@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     547@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-interpose.o `test -f 'interpose.c' || echo '$(srcdir)/'`interpose.c
     548
     549libcfa_d_a-interpose.obj: interpose.c
     550@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-interpose.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-interpose.Tpo -c -o libcfa_d_a-interpose.obj `if test -f 'interpose.c'; then $(CYGPATH_W) 'interpose.c'; else $(CYGPATH_W) '$(srcdir)/interpose.c'; fi`
     551@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-interpose.Tpo $(DEPDIR)/libcfa_d_a-interpose.Po
     552@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='interpose.c' object='libcfa_d_a-interpose.obj' libtool=no @AMDEPBACKSLASH@
     553@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     554@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-interpose.obj `if test -f 'interpose.c'; then $(CYGPATH_W) 'interpose.c'; else $(CYGPATH_W) '$(srcdir)/interpose.c'; fi`
     555
     556libhdr/libcfa_d_a-debug.o: libhdr/debug.c
     557@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libhdr/libcfa_d_a-debug.o -MD -MP -MF libhdr/$(DEPDIR)/libcfa_d_a-debug.Tpo -c -o libhdr/libcfa_d_a-debug.o `test -f 'libhdr/debug.c' || echo '$(srcdir)/'`libhdr/debug.c
     558@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) libhdr/$(DEPDIR)/libcfa_d_a-debug.Tpo libhdr/$(DEPDIR)/libcfa_d_a-debug.Po
     559@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='libhdr/debug.c' object='libhdr/libcfa_d_a-debug.o' libtool=no @AMDEPBACKSLASH@
     560@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     561@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libhdr/libcfa_d_a-debug.o `test -f 'libhdr/debug.c' || echo '$(srcdir)/'`libhdr/debug.c
     562
     563libhdr/libcfa_d_a-debug.obj: libhdr/debug.c
     564@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libhdr/libcfa_d_a-debug.obj -MD -MP -MF libhdr/$(DEPDIR)/libcfa_d_a-debug.Tpo -c -o libhdr/libcfa_d_a-debug.obj `if test -f 'libhdr/debug.c'; then $(CYGPATH_W) 'libhdr/debug.c'; else $(CYGPATH_W) '$(srcdir)/libhdr/debug.c'; fi`
     565@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) libhdr/$(DEPDIR)/libcfa_d_a-debug.Tpo libhdr/$(DEPDIR)/libcfa_d_a-debug.Po
     566@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='libhdr/debug.c' object='libhdr/libcfa_d_a-debug.obj' libtool=no @AMDEPBACKSLASH@
     567@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     568@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libhdr/libcfa_d_a-debug.obj `if test -f 'libhdr/debug.c'; then $(CYGPATH_W) 'libhdr/debug.c'; else $(CYGPATH_W) '$(srcdir)/libhdr/debug.c'; fi`
     569
    524570libcfa_d_a-limits.o: limits.c
    525571@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-limits.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-limits.Tpo -c -o libcfa_d_a-limits.o `test -f 'limits.c' || echo '$(srcdir)/'`limits.c
     
    717763@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    718764@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
     765
     766libcfa_a-interpose.o: interpose.c
     767@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-interpose.o -MD -MP -MF $(DEPDIR)/libcfa_a-interpose.Tpo -c -o libcfa_a-interpose.o `test -f 'interpose.c' || echo '$(srcdir)/'`interpose.c
     768@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-interpose.Tpo $(DEPDIR)/libcfa_a-interpose.Po
     769@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='interpose.c' object='libcfa_a-interpose.o' libtool=no @AMDEPBACKSLASH@
     770@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     771@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-interpose.o `test -f 'interpose.c' || echo '$(srcdir)/'`interpose.c
     772
     773libcfa_a-interpose.obj: interpose.c
     774@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-interpose.obj -MD -MP -MF $(DEPDIR)/libcfa_a-interpose.Tpo -c -o libcfa_a-interpose.obj `if test -f 'interpose.c'; then $(CYGPATH_W) 'interpose.c'; else $(CYGPATH_W) '$(srcdir)/interpose.c'; fi`
     775@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-interpose.Tpo $(DEPDIR)/libcfa_a-interpose.Po
     776@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='interpose.c' object='libcfa_a-interpose.obj' libtool=no @AMDEPBACKSLASH@
     777@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     778@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-interpose.obj `if test -f 'interpose.c'; then $(CYGPATH_W) 'interpose.c'; else $(CYGPATH_W) '$(srcdir)/interpose.c'; fi`
     779
     780libhdr/libcfa_a-debug.o: libhdr/debug.c
     781@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libhdr/libcfa_a-debug.o -MD -MP -MF libhdr/$(DEPDIR)/libcfa_a-debug.Tpo -c -o libhdr/libcfa_a-debug.o `test -f 'libhdr/debug.c' || echo '$(srcdir)/'`libhdr/debug.c
     782@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) libhdr/$(DEPDIR)/libcfa_a-debug.Tpo libhdr/$(DEPDIR)/libcfa_a-debug.Po
     783@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='libhdr/debug.c' object='libhdr/libcfa_a-debug.o' libtool=no @AMDEPBACKSLASH@
     784@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     785@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libhdr/libcfa_a-debug.o `test -f 'libhdr/debug.c' || echo '$(srcdir)/'`libhdr/debug.c
     786
     787libhdr/libcfa_a-debug.obj: libhdr/debug.c
     788@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libhdr/libcfa_a-debug.obj -MD -MP -MF libhdr/$(DEPDIR)/libcfa_a-debug.Tpo -c -o libhdr/libcfa_a-debug.obj `if test -f 'libhdr/debug.c'; then $(CYGPATH_W) 'libhdr/debug.c'; else $(CYGPATH_W) '$(srcdir)/libhdr/debug.c'; fi`
     789@am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) libhdr/$(DEPDIR)/libcfa_a-debug.Tpo libhdr/$(DEPDIR)/libcfa_a-debug.Po
     790@AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='libhdr/debug.c' object='libhdr/libcfa_a-debug.obj' libtool=no @AMDEPBACKSLASH@
     791@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     792@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libhdr/libcfa_a-debug.obj `if test -f 'libhdr/debug.c'; then $(CYGPATH_W) 'libhdr/debug.c'; else $(CYGPATH_W) '$(srcdir)/libhdr/debug.c'; fi`
    719793
    720794libcfa_a-limits.o: limits.c
     
    10481122        -rm -f containers/$(DEPDIR)/$(am__dirstamp)
    10491123        -rm -f containers/$(am__dirstamp)
     1124        -rm -f libhdr/$(DEPDIR)/$(am__dirstamp)
     1125        -rm -f libhdr/$(am__dirstamp)
    10501126
    10511127maintainer-clean-generic:
     
    10571133
    10581134distclean: distclean-am
    1059         -rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR)
     1135        -rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR) libhdr/$(DEPDIR)
    10601136        -rm -f Makefile
    10611137distclean-am: clean-am distclean-compile distclean-generic \
     
    11031179
    11041180maintainer-clean: maintainer-clean-am
    1105         -rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR)
     1181        -rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR) libhdr/$(DEPDIR)
    11061182        -rm -f Makefile
    11071183maintainer-clean-am: distclean-am maintainer-clean-generic \
  • src/libcfa/assert.c

    r95448f1e r9d944b2  
    1717#include "stdlib"                                                                               // abort
    1818
     19#include "libhdr/libdebug.h"
     20
    1921extern "C" {
    2022        #include <stdarg.h>                                                             // varargs
     
    2325        extern const char * __progname;                                         // global name of running executable (argv[0])
    2426
    25         #define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\""
     27        #define CFA_ASSERT_FMT "Cforall Assertion error from program \"%s\" in \"%s\" at line %d in file \"%s\""
    2628
    2729        // called by macro assert in assert.h
    2830        void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) {
    29                 fprintf( stderr, CFA_ASSERT_FMT ".\n", __progname, function, line, file );
     31                __lib_debug_print_safe( CFA_ASSERT_FMT ".\n", __progname, function, line, file );
    3032                abort();
    3133        }
     
    3335        // called by macro assertf
    3436        void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) {
    35                 fprintf( stderr, CFA_ASSERT_FMT ": ", __progname, function, line, file );
     37                __lib_debug_acquire();
     38                __lib_debug_print_nolock( CFA_ASSERT_FMT ": ", __progname, function, line, file );
     39
    3640                va_list args;
    3741                va_start( args, fmt );
    38                 vfprintf( stderr, fmt, args );
     42                __lib_debug_print_vararg( fmt, args );
    3943                va_end( args );
    40                 fprintf( stderr, "\n" );
     44
     45                __lib_debug_print_nolock( "\n" );
     46                __lib_debug_release();
    4147                abort();
    4248        }
  • src/libcfa/concurrency/kernel.c

    r95448f1e r9d944b2  
    1515//
    1616
     17#include "startup.h"
     18
    1719//Start and stop routine for the kernel, declared first to make sure they run first
    18 void kernel_startup(void)  __attribute__((constructor(101)));
    19 void kernel_shutdown(void) __attribute__((destructor(101)));
     20void kernel_startup(void)  __attribute__(( constructor( STARTUP_PRIORITY_KERNEL ) ));
     21void kernel_shutdown(void) __attribute__(( destructor ( STARTUP_PRIORITY_KERNEL ) ));
    2022
    2123//Header
     
    2527#include <stddef.h>
    2628extern "C" {
     29#include <stdio.h>
    2730#include <fenv.h>
    2831#include <sys/resource.h>
     32#include <signal.h>
     33#include <unistd.h>
    2934}
    3035
     
    146151
    147152        this->runner = runner;
    148         LIB_DEBUG_PRINTF("Kernel : constructing processor context %p\n", runner);
     153        LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner);
    149154        runner{ this };
    150155}
     
    152157void ^?{}(processor * this) {
    153158        if( ! this->is_terminated ) {
    154                 LIB_DEBUG_PRINTF("Kernel : core %p signaling termination\n", this);
     159                LIB_DEBUG_PRINT_SAFE("Kernel : core %p signaling termination\n", this);
    155160                this->is_terminated = true;
    156161                wait( &this->terminated );
     
    173178void main(processorCtx_t * runner) {
    174179        processor * this = runner->proc;
    175         LIB_DEBUG_PRINTF("Kernel : core %p starting\n", this);
     180        LIB_DEBUG_PRINT_SAFE("Kernel : core %p starting\n", this);
    176181
    177182        thread_desc * readyThread = NULL;
     
    195200        }
    196201
    197         LIB_DEBUG_PRINTF("Kernel : core %p unlocking thread\n", this);
     202        LIB_DEBUG_PRINT_SAFE("Kernel : core %p unlocking thread\n", this);
    198203        signal( &this->terminated );
    199         LIB_DEBUG_PRINTF("Kernel : core %p terminated\n", this);
     204        LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this);
    200205}
    201206
     
    255260        processorCtx_t proc_cor_storage = { proc, &info };
    256261
    257         LIB_DEBUG_PRINTF("Coroutine : created stack %p\n", proc_cor_storage.__cor.stack.base);
     262        LIB_DEBUG_PRINT_SAFE("Coroutine : created stack %p\n", proc_cor_storage.__cor.stack.base);
    258263
    259264        //Set global state
     
    262267
    263268        //We now have a proper context from which to schedule threads
    264         LIB_DEBUG_PRINTF("Kernel : core %p created (%p, %p)\n", proc, proc->runner, &ctx);
     269        LIB_DEBUG_PRINT_SAFE("Kernel : core %p created (%p, %p)\n", proc, proc->runner, &ctx);
    265270
    266271        // SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't
     
    273278
    274279        // Main routine of the core returned, the core is now fully terminated
    275         LIB_DEBUG_PRINTF("Kernel : core %p main ended (%p)\n", proc, proc->runner);     
     280        LIB_DEBUG_PRINT_SAFE("Kernel : core %p main ended (%p)\n", proc, proc->runner);
    276281
    277282        return NULL;
     
    279284
    280285void start(processor * this) {
    281         LIB_DEBUG_PRINTF("Kernel : Starting core %p\n", this);
     286        LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this);
    282287       
    283288        // pthread_attr_t attributes;
     
    288293        // pthread_attr_destroy( &attributes );
    289294
    290         LIB_DEBUG_PRINTF("Kernel : core %p started\n", this);   
     295        LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this);       
    291296}
    292297
     
    334339// Kernel boot procedures
    335340void kernel_startup(void) {
    336         LIB_DEBUG_PRINTF("Kernel : Starting\n");       
     341        LIB_DEBUG_PRINT_SAFE("Kernel : Starting\n");   
    337342
    338343        // Start by initializing the main thread
     
    369374
    370375        // THE SYSTEM IS NOW COMPLETELY RUNNING
    371         LIB_DEBUG_PRINTF("Kernel : Started\n--------------------------------------------------\n\n");
     376        LIB_DEBUG_PRINT_SAFE("Kernel : Started\n--------------------------------------------------\n\n");
    372377}
    373378
    374379void kernel_shutdown(void) {
    375         LIB_DEBUG_PRINTF("\n--------------------------------------------------\nKernel : Shutting down\n");
     380        LIB_DEBUG_PRINT_SAFE("\n--------------------------------------------------\nKernel : Shutting down\n");
    376381
    377382        // SKULLDUGGERY: Notify the systemProcessor it needs to terminates.
     
    392397        ^(mainThread){};
    393398
    394         LIB_DEBUG_PRINTF("Kernel : Shutdown complete\n");       
     399        LIB_DEBUG_PRINT_SAFE("Kernel : Shutdown complete\n");   
     400}
     401
     402static spinlock kernel_abort_lock;
     403static spinlock kernel_debug_lock;
     404static bool kernel_abort_called = false;
     405
     406void * kernel_abort    (void) __attribute__ ((__nothrow__)) {
     407        // abort cannot be recursively entered by the same or different processors because all signal handlers return when
     408        // the globalAbort flag is true.
     409        lock( &kernel_abort_lock );
     410
     411        // first task to abort ?
     412        if ( !kernel_abort_called ) {                   // not first task to abort ?
     413                kernel_abort_called = true;
     414                unlock( &kernel_abort_lock );
     415        }
     416        else {
     417                unlock( &kernel_abort_lock );
     418               
     419                sigset_t mask;
     420                sigemptyset( &mask );
     421                sigaddset( &mask, SIGALRM );                    // block SIGALRM signals
     422                sigaddset( &mask, SIGUSR1 );                    // block SIGUSR1 signals
     423                sigsuspend( &mask );                            // block the processor to prevent further damage during abort
     424                _exit( EXIT_FAILURE );                          // if processor unblocks before it is killed, terminate it             
     425        }
     426
     427        return this_thread();
     428}
     429
     430void kernel_abort_msg( void * kernel_data, char * abort_text, int abort_text_size ) {
     431        thread_desc * thrd = kernel_data;
     432
     433        int len = snprintf( abort_text, abort_text_size, "Error occurred while executing task %.256s (%p)", thrd->cor.name, thrd );
     434        __lib_debug_write( STDERR_FILENO, abort_text, len );
     435
     436        if ( thrd != this_coroutine() ) {
     437                len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine()->name, this_coroutine() );
     438                __lib_debug_write( STDERR_FILENO, abort_text, len );
     439        }
     440        else {
     441                __lib_debug_write( STDERR_FILENO, ".\n", 2 );
     442        }
     443}
     444
     445extern "C" {
     446        void __lib_debug_acquire() {
     447                lock(&kernel_debug_lock);
     448        }
     449
     450        void __lib_debug_release() {
     451                unlock(&kernel_debug_lock);
     452        }
    395453}
    396454
  • src/libcfa/concurrency/thread.c

    r95448f1e r9d944b2  
    7171        this_processor->current_coroutine = thrd_c;
    7272
    73         LIB_DEBUG_PRINTF("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);
     73        LIB_DEBUG_PRINT_SAFE("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);
    7474
    7575        create_stack(&thrd_c->stack, thrd_c->stack.size);
  • src/libcfa/libhdr/libdebug.h

    r95448f1e r9d944b2  
    2525#endif
    2626
     27#ifdef __cforall
     28extern "C" {
     29#endif
     30      #include <stdarg.h>
     31
     32      extern void __lib_debug_write( int fd, const char *buffer, int len );
     33      extern void __lib_debug_acquire();
     34      extern void __lib_debug_release();
     35      extern void __lib_debug_print_safe  ( const char fmt[], ... ) __attribute__(( format (printf, 1, 2) ));
     36      extern void __lib_debug_print_nolock( const char fmt[], ... ) __attribute__(( format (printf, 1, 2) ));
     37      extern void __lib_debug_print_vararg( const char fmt[], va_list arg );
     38      extern void __lib_debug_print_buffer( char buffer[], int buffer_size, const char fmt[], ... ) __attribute__(( format (printf, 3, 4) ));
     39#ifdef __cforall
     40}
     41#endif
     42
    2743#ifdef __CFA_DEBUG_PRINT__
    28       #define LIB_DEBUG_PRINTF(...)   printf (__VA_ARGS__)
    29       #define LIB_DEBUG_FPRINTF(...) fprintf (stderr, __VA_ARGS__)
     44      #define LIB_DEBUG_WRITE( fd, buffer, len )  __lib_debug_write( fd, buffer, len )
     45      #define LIB_DEBUG_ACQUIRE()                 __lib_debug_acquire()
     46      #define LIB_DEBUG_RELEASE()                 __lib_debug_release()
     47      #define LIB_DEBUG_PRINT_SAFE(...)           __lib_debug_print_safe   (__VA_ARGS__)
     48      #define LIB_DEBUG_PRINT_NOLOCK(...)         __lib_debug_print_nolock (__VA_ARGS__)
     49      #define LIB_DEBUG_PRINT_BUFFER(...)         __lib_debug_print_buffer (__VA_ARGS__)
    3050#else
    31       #define LIB_DEBUG_PRINTF(...)  ((void)0)
    32       #define LIB_DEBUG_FPRINTF(...) ((void)0)
     51      #define LIB_DEBUG_WRITE(...)          ((void)0)
     52      #define LIB_DEBUG_ACQUIRE()           ((void)0)
     53      #define LIB_DEBUG_RELEASE()           ((void)0)
     54      #define LIB_DEBUG_PRINT_SAFE(...)     ((void)0)
     55      #define LIB_DEBUG_PRINT_NOLOCK(...)   ((void)0)
     56      #define LIB_DEBUG_PRINT_BUFFER(...)   ((void)0)
    3357#endif
    3458
Note: See TracChangeset for help on using the changeset viewer.