
CHANGELOG:
==========

2.5.15
  * added alternative locking implementation in sem_inc.c
    using critical sections.
    code from Peter Harris, see
    http://code.google.com/p/electric-fence-win32/
  * added Windows Threading to testmt.c
    added win32-msvc.net project file
  * use of WIN32_SEMAPHORES on Win32-Cygwin in sem_inc.c
      - the locking mechanism for multi-threading,
      with this configuration testmt.c works either
      with pthreads and with the Win32 API
  * CreateSemaphore() now used with maximum count = initial count = 1
  (2008-08-03, HA)
  * removed usage of strlen() in strncpy()
  (2009-03-19, HA)
  * PATCH from Andre Landwehr <andrel@cybernoia.de>
    fixes race condition when using preprocessor macro 'delete'
  (2009-04-07, HA)
  * bugfix in strncpy()
    Roman Jokl reported the bug: error check was too rigorous
  (2009-04-11, HA)

2.5.14
  * added suggested ~/.gdbinit as gdbinit.rc
  * added hint in mprotectFailed()
  * removed (gcc) compiler warnings
  * rename of sem_inc.h to duma_sem.h, cause needed by dumapp.h
  (2008-03-12, HA)
  * update of README for Microsoft's pageheap.exe,
    a built in heap debugging tool
  (2008-04-20, HA)
  * PATCH from Philip Mucci <mucci@cs.utk.edu> on behalf of SiCortex
  * Fix for malloc(0) which previously always returned NULL.
    added environment switch DUMA_MALLOC_0_STRATEGY, which may
      return a special protected piece of memory for malloc(0)
  * Moved malloc/SHOW_ALLOC printouts before all abort checks
  (2008-04-20, Philip Mucci, HA)
  * remove some warnings for "-Wall -Wextra" especially for cygwin
  * detailed some messages when source filename and lineno were available
  (2008-04-21, HA)
  * removed environment variable "DUMA_ALLOW_MALLOC_0"
    DUMA_MALLOC_0_STRATEGY = 0 is equivalent to previous
    DUMA_ALLOW_MALLOC_0=0. default is 3.
  (2008-04-22, HA)
  * return unique pointer for C++ operator new
    for DUMA_MALLOC_0_STRATEGY == 3. now it should be really standard conform
  (2008-04-26, HA)
  * Fix for C++ operator new with size zero
    added environment switch DUMA_NEW_0_STRATEGY
  (2008-04-27, HA)

2.5.13
  * applied PATCH(es) from Philip Mucci <mucci@cs.utk.edu>
      from the company SiCortex www.sicortex.com :
    - Fix for pthread_self() and hang of testoperators test case on 64 bit
      linux platforms (x86_64 and MIPS64)
    - Added -Wall to Makefile
    - Properly versioned symbolic library to have the version triple 0.0.0
    - Removed control-M's from the sources. Please do not ship unix sources
      with control-M's (stop editing on Windows)
    - Make sure ranlib is run on the static library,
      various platforms require this
    - Add -DPIC for shared library builds
    - Added install targets for headers (INC_INSTALL_DIR)
    - Added install targets for documentation (DOC_INSTALL_DIR)
    - Added separate 'make test' target
    - Added proper install target that also refers to
      GNU standard DESTDIR usage.
    - Added 'distclean clobber' targets to remove configuration
    - Added 'reconfig' target to regenerate duma_config.h
    - Changed makefile flow to recursively run if duma_config.h doesn't exist
    - Fixed return value error in testmt.c
    - Fixed args in thread-test.c
  * updated Makefile: updated PACKAGE_SOURCE and added target dos2unix
  (2008-03-09, HA)

2.5.12
  * enhancement: added environment variable 'DUMA_CHECK_FREQ' to autmatically
      check all memories no man's land at each n'th allocation/deallocation.
      n=0 to deactivate automatic checks.
  (2008-01-24, HA)
  * updated README.txt for environment variables DUMA_CHECK_FREQ and
      DUMA_SKIPCOUNT_INIT.
  (2008-01-25, HA)

2.5.11
  * bugfix on thread safety in sem_inc.c
      thanks to Andrew Kornev writing the right hint as bugreport:
      "[ 1875926 ] non-thread safe lock() implementation"
  (2008-01-20, HA)

2.5.10
  * added small test program to demonstrate crashing on multithreaded
      programs from
      http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=67838
  (2008-01-15, HA)
  * added html comparison charts/text and C source code examples from
      http://www.cs.utexas.edu/~jpmartin/memCheckers.html
      into subdir comparisons
      with kind permission of Jean-Philippe Martin
  * added Makefile for each C source file
  (2008-01-14, HA)
  * bugfix for Makefile target install, when DUMASO is empty
      bug was reported from Louis Strous
  (2008-01-09, HA)
  * added hint where no man's land was overwritten:
    below or above userSpace
  (2008-01-03, HA)

2.5.9
  * added link to mpatrol in README
  * added shell environment variable 'DUMA_SKIPCOUNT_INIT'
  (2007-08-22, HA)
  * added section for NetBSD in Makefile
    there is always 1 memory leak on NetBSD-3.1
      .. but the functionality works
  (2007-08-28, HA)
  * tested on powerpc-apple-darwin8.0.0 inside of PearPC 0.4 (Windows):
    compiles and passes all confidence tests. trying to debug example1
    from within gdb crashes whole PearPC; running without gdb creates
    a core dump one can analyse afterwards with gdb.
  (2007-09-02, HA)
  * bugfix for _duma_strncpy(): no more call to strlen()
      bug was reported from kamallneet <kamalneet@gmail.com>
  * applied patch from  Eddy Pronk <epronk at users.sourceforge.net>
      submitted to sourceforge with title "libduma.so on Solaris"
  (2007-11-13, HA)
  * added minor error check in print.c about DUMA_OUTPUT_FILE
  * some comments in duma.h and dumapp.h
  (2007-12-23, HA)

2.5.8
  * fix: set DUMA_PREFER_GETENV for osx; it doesn't link with environ
  * fix: MinGW wanted exact declaration as in definition for
      function DUMA_strerror in print.h
  * fix: workaround testmt.c to compile on Windows
  * fix: call duma_init() ifdef DUMA_EXPLICIT_INIT in testoperators.cpp
  * added notes on prepackaged .rpm files provided by
    Dries Verachtert <dries@ulyssis.org> at
    http://dries.ulyssis.org/apt/packages/duma/info.html
    in README
  (2007-08-17, HA)
  * added environment variable 'DUMA_REPORT_ALL_LEAKS' defaulting to 0.
  * added empty definitions for macro functions DUMA_SET_ALIGNMENT(),
    DUMA_SET_PROTECT_BELOW() and DUMA_SET_FILL()
  * updated README on shell environment variable options, added some
    entries to section 'OTHER ALTERNATIVE/ADDITIONAL DEBUGGING SOFTWARE/TOOLS'
    and added section 'COMPILATION NOTES FOR RELEASE/PRODUCTION'
  (2007-08-18, HA)
  * added single line function 'duma_alloc_return()'. all memory allocated
    from DUMA is returned through this function. This allows you to set a
    conditional breakpoint on this function to catch a specific allocation
  (2007-08-19, HA)

2.5.7
  * reformatting: converted tabs to spaces
  * added test program testenv.c using global environ variable as
    alternative to getenv()
  (2007-08-15, HA)
  * added output of some configuration settings with banner
  * switched off leak detection in shared library for any platform.
    use the static library for finding leaks - with information where
    the piece of memory got allocated. Meanwhile I think leak-checking
    without further information is quite useless! Too many correct
    programs don't free all memory, cause the system frees memory up at
    program end. Thus, too many platforms/environments are reported
    "broken" from DUMA.
  * output allocator type (malloc, strdup, ..) with leak report for each
    non freed memory block
  * removed option DUMA_USE_FRAMENO and the frameno variable
    i suppose nobody is using it. but additionally it is not thread safe.
  * added option DUMA_PREFER_GETENV
     if you prefer standard C library getenv() over global char **environ
  * added function duma_check(void*) and its macro DUMA_CHECK():
      it checks the No Mans Land - especially the unprotected end - of
      the memory block
  * added function duma_checkAll() and its macro DUMA_CHECKALL():
      it checks the No Mans Land - especially the unprotected end - of
      all allocated memory blocks
  (2007-08-17, HA)

2.5.6
  * modified example Makefiles for not linking to pthreads on Windows
  (2007-08-12, HA)
  * added win32-msvc.net project file for testoperators.cpp
  * bugfix: obey for option DUMA_NO_LEAKDETECTION:
    check for this option before calling any non-existing operators
    with leak parameters
  * enhanced comments in Makefile for DUMA_SO_* and DUMA_LIB_* options
  * changes in Makefile to build dynamic library on osx
  * preloading duma library now works on osx
  * added Debian Bug report logs - #241156 as testmt.c
  (2007-08-14, HA)

2.5.5
  * support for Solaris (Solaris 10 with the GNU toolchain from Companion CD)
  * fix for solaris: strerror() calls calloc() leading to recursion
    added preprocessor option DUMA_NO_STRERROR
  * internal redesign:
    collected several global static variables to one structure
    and several global non static variables to other structure
    each with prepended and appended protection space
  (2007-08-11, HA)

2.5.4
  * support for win32 mingw when calling make with OSTYPE=msys
      call "mingw32-make OSTYPE=msys" from Windows command prompt
      having added the PATH for MINGW/bin
  (2007-07-28, HA)
  * echo single dot '.' for windows command shell
  (2007-07-31, HA)

2.5.3
  * added simple Makefiles for examples in subdir example_makes/ex*/
  * modified Makefile to avoid build of shared libs/executables specific to OS
  * dumapp.h now keeps C macro definitions
  * support for max osx when calling make with OS=osx
  * support for win32 cygwin when calling make with OSTYPE=cygwin
  (2007-07-14, HA)
  * bugfix in createconf.c for Win32 but non Visual C++
  * got cygwin to work:
      switched off stacktrace (before trying to integrate in Makefile)
      caddr_t and u_int were already defined
      use signals as on Linux/Unix in dumatest.c
      updated Makefile
  (2007-07-13, HA)

2.5.2
  * minor corrections
  * added preprocessor option "DUMA_SEMAPHORES" to select pthreads
      locking mechanism: semaphores or mutexes
  * removed automatically generated visual c++ file detoursexample1.ncb
      from CVS and archives
  (2007-07-12, HA)

2.5.1
  * turned global variables DUMA_PROTECT_BELOW, DUMA_ALIGNMENT and DUMA_FILL
    to thread local variables. Acces now with new function macros
      DUMA_SET_ALIGNMENT(), DUMA_SET_PROTECT_BELOW() and DUMA_SET_FILL()
  * support for posix_memalign()
  * pthread_mutex implementation alternative to semaphores
  (2007-07-03, HA)

2.5
  * Documentation updates.  Now using Natural Docs
  * win32: Detours support for using DUMA with just binaries
  * win32: Can compile a duma dll
  * win32: DUMA can perform stacktraces of each allocation
  * win32: Support for Visual Studio 2005
  * win32: Support for output to debug console
  * Support for output to a file
  * Can control output via environmental variables


2.4.28 fix/enhancement: reworked initialization for RequestID 1458083 on SF
         checks for recursive calls in _duma_init() and duma_init()
       (2006-06-17, HA)
       bugfix in new[] operators occured on alpha-linux1 on sf compile farm
       (2006-06-18, HA)
       bugfix in Makefile: DUMA_OPTIONS was not used
         when compiling createconf.o
       bugfix: compile error when DUMA_NO_LEAKDETECTION was set
         in testoperators.cpp
       fix: obey EXPLICIT_INIT in testoperators.cpp
       (2006-06-18, HA)
       fix: as in RequestID 1482267 on SF:
         updated install directory for manual. $prefix/share/man/man3 should fit
         the Filesystem Hierarchy Standard 2.3 for /usr and /usr/local
       (2006-06-18, HA)

2.4.27 this version is now reachable via cvs on sourceforge.net

2.4.27 published a german article on DUMA on http://duma.sourceforge.net/
       bugfix: removed buffer overflow in DUMA_sprintf() for long filenames:
         added parameter maxsize for output buffers in some functions.
         incremented STRING_BUFFER_SIZE to reduce this risk.
         this bug was reported by <loigu@volny.cz>
       (2006-01-09, HA)

2.4.26 new project file for Dev-C++ 4.9.9.2 for createconf from
         Benjamin Berkels <benjamin.berkels@ins.uni-bonn.de>
       bugfix/enhancement: avoid recursion from sem_init() in Linux/U*ix
         where sem_init() may call malloc() which again calls semaphore locking
       (2005-10-25, HA)
       bugfix in delete macro: Magic must be a single variable!
         reported from Benjamin Berkels <benjamin.berkels@ins.uni-bonn.de>
       some more TLS preparation
       (2005-10-28, HA)

2.4.25 bugfix: semaphores were not initialized correctly; this lead to a hang.
         thanks for reporting and providing a test environment
         to Tim Braun <braun@informatik.uni-kl.de>
       updated project files for Dev-C++ 4.9.9.2 / GCC 3.3.1
         and bugfixed compiler error for Dev-C++/gcc both reported from
         Benjamin Berkels <benjamin.berkels@ins.uni-bonn.de>
       modified delete macros
       DUMA_Magic now array (call_depth)
       (2005-10-21, HA)

2.4.24 new program testoperators: writes its own member new/delete operator
         with filename and line number forwarding to DUMA
       reworked Makefile: added tstheap_so which runs with shared library
       output in banner now shows which library (static/shared) is used
       (2005-10-09, HA)

2.4.23 write DUMA's preprocessor flags at compile time of the library
         to duma_config.h. Thus one no more would have to provide the same
         flags when compiling his own objects files.
       changed Makefile, to take care for this
       (2005-10-07, HA)

2.4.22 C++ 'new' operators now (more) standard conform:
         allocation of size==0 now returns non 0 pointer
       new option 'DUMA_SUPPRESS_ATEXIT' as environment variable
         from Tim Braun <braun@informatik.uni-kl.de>:
         suppress call to C library's atexit() function for DUMA's leak
         checking function in buggy environments, where atexit() hangs.
       implemented alternative for C library's atexit() using GNU C compiler's
         'destructor' function attribute.
       new preprocessor flag 'DUMA_PREFER_ATEXIT' in Makefile
       got updated project files for Dev-C++ 4.9.9.2 / GCC 3.3.1 from
         Benjamin Berkels <benjamin.berkels@ins.uni-bonn.de>
       updated TODO
       bugfix: "EF_" was not replaced by "DUMA_" in tstheap.c
       bugfix: rules how to build test objects; DUMA_OPTIONS were not passed
       (2005-10-06, HA)

2.4.21 modified Makefile: name for shared library and symbolic links now
         configurable at start
       update of README
       updated TODO; sorted by priority
       (2005-10-04, HA)
       bugfix: follow enum _DUMA_FailReturn in _duma_allocate() function
       bugfix: initialize userAddr in _duma_allocate() function
         may lead to bug when allocation failed
       new operators now (nearly) C++ conform
       (2005-09-29, HA)

2.4.20 integrated patches from Zbynek Vyskovsky <kvr@centrum.cz> :
         use tighter alignment when size is smaller than default alignment
         replaced calls to EF_Exit() by EF_Abort()
         modified README
       (2005-09-19 - 2005-09-23, ZV)
       reworked Zbynek's patch to use long in internal adress calculations:
         autodetect compatible integer types DUMA_ADDR and DUMA_SIZE in
         createconf. write them to duma_config.h
       autodetect DUMA_MIN_ALIGNMENT in createconf, write value to
         duma_config.h
       use autodetected values in code
       reworked DUMA_sprintf() and its format specifier
       bugfixed Makefile: DUMA_SO_OPTIONS also used DUMA_OPTIONS
       removed '-DDUMA_NO_CPP_SUPPORT', as LD_PRELOAD works for C++
         new, new[], delete and delete[] operators
       (2005-09-24, HA)
       bugfixed reduceProtectedMemory():  Windows VirtualFree(,,MEM_RELEASE)
         can only free whole allocations. not parts.
       bugfix in memory allocation: try allocation in loop until
         reduceProtectedMemory() fails deallocating more memory.
         long running programs with much memory handling should benefit.
       (2005-09-26, HA)
       added project files for Visual C++ .NET 2003
       applied one more patch from Zbynek Vyskovsky concerning alignment
         his calculation of next lower power of 2 is much smaller
       bugfix: return '(void*)0' in _duma_allocate(), when userSize==0
       (2005-09-27, HA)

2.4.19 fixed compile error in duma.c introduced in 2.4.18
       fixed/enhanced Makefile
       (2005-09-19, HA)
       added runtime check for DUMA_PAGE_SIZE from duma_config.h
       (2005-09-17, HA)
       added check for initialization function "__attribute ((constructor))"
       (2005-09-18, HA)

2.4.18 checked Source code: DUMA_get_sem() is nor more called,
         when DUMA_NO_THREAD_SAFETY is set
       splitted this document into two files: TODO and CHANGELOG
       created INSTALL document
       modified Makefile: added special rules for building shared library
       (2005-09-10, HA)
       modified README
       (2005-09-16, HA)
       removed option DUMA_FREE_WIPES
       documented the options DUMA_SLACKFILL, DUMA_MALLOC_FAILEXIT,
         DUMA_MAX_ALLOC, DUMA_FREE_ACCESS, DUMA_SHOW_ALLOC and
         DUMA_DISABLE_BANNER in README.
       new preprocessor flag 'DUMA_NO_HANG_MSG' in Makefile
       (2005-09-16, HA)

2.4.17 forked Electric Fence cause Bruce Perens wrote:
         > Hayati Ayguen must choose another name for his program.
         > "Electric Fence" is a trademark he is not permitted to use.
       opened a "new" project DUMA - Detect Unintended Memory Access
         rename efence to duma
         rename Electric Fence to DUMA
         rename EF_ to DUMA_
         rename ef_ to duma_
         rename eff_ to duma_
         and so on ...
       (2005-09-10, HA)

2.4.16 added examples for article
       portability: use standardized strerror() instead sys_nerr
         and sys_errlist[].
       bugfix: error when defined EF_NO_LEAKDETECTION in _eff_allocate()
       bugfix: error when defined EF_NO_LEAKDETECTION in _eff_deallocate()
       enhancement: mark allocations from standard libraries
         before ef_init() is called with lineno = -1
         to allow special treatment in leak_checking
       changed default in eftest to use two signals: SIGSEGV and SIGBUS
         instead of single PAGE_PROTECTION_VIOLATED_SIGNAL
       define functions (memcpy, strcpy, strcat) as non-intrinsic
         for Visual C++ compiler in Release mode
       (2005-08-28, HA)
       enhancement: allow alignments bigger than page size
       (2005-08-23, HA)
       documented EF_NO_THREAD_SAFETY preprocessor flag in Makefile
       added EF_EXPLICIT_INIT preprocessor flag to workaround buggy
         environments: initialisation is done in 2 steps:
         1- must do things when allocation is called
         2- non must-do like retrieving environment variables, registering atexit()
           calls to functions getenv(), atexit() and write() are avoided in
           first step.
         3- avoid semaphore locking before 2.step is done
       (2005-08-21, HA)

2.4.15 bugfixed page management under Windows: virtual address space never got
         released. unfortunately this "quick" fix avoids memory pooling (under
         Windows).
       remove double "Electric Fence:" messages when calling EF_Abort()
         or EF_Exit()
       (2005-07-24, HA)
       added parameter ExitOnFail to Page_Create().
       added warning when allocation failed and ExitOnFail is off.
       extended _eff_allocate() for this. prepared new for standard conformity.
       (2005-07-20, HA)

2.4.14 integrated code from Tim Braun <braun@informatik.uni-kl.de>
         new EF_SHOW_ALLOC environment variable, which prints allocations
           and deallocation when variable set
         check if malloc() and free() are bound to efence
       (2005-07-15, HA)
       integrated a patch from Zbynek Vyskovsky <kvr@centrum.cz>
         in his words: "I modified Electric Efence a little, to be able
           to catch free-ing memory via watch point in debugger. The patch
           (attached) solves the problem when you are watching expression for
           change and suddenly realize the memory containing expression
           disappeared. It has no other effect, just makes debugging easier."
       (2005-07-11, HA)
       bugfix for internal slot mode EFST_DEALLOCATED reported by
         Mikolas Patocka: error occured when userSpace memory region of freed
         memory is reused from system and freed again: efence claimed freeing
         already freed memory.
       (2005-03-02, HA)
       now defining macros/functions also for str[n]cpy() and str[n]cat()
         checking for overlapping memory regions.
       (2005-02-17, HA)
       now defining macros/functions also for strdup(), memcpy().
         memcpy() checks if memory regions overlap.
       (2005-02-16, HA)
       added EF_OLD_DEL_MACRO preprocessor flag to keep compatibility to old
         DEL_ELEM() / DEL_ARRAY() macros. when not defined a macro for "delete"
         is defined which has standard conform syntax.
       (2005-02-14, HA)

2.4.13 added internal flag saving the source (allocation/deallocation)
         for filename and lineno.
       added EF_OLD_NEW_MACRO preprocessor flag to keep compatibility to old
         NEW_ELEM() / NEW_ARRAY() macros. when not defined a macro for "new"
         is defined which has standard conform syntax. unfortunately you have
         to use DEL_ELEM/DEL_ARRAY further to utilize filename and linenumber
         of deallocation calls.
       (2005-02-10, HA)
       reworked/revised ALL internal functions !!!
       freeing already freed memory is now detected (much better)
         this disallows coalescing memory regions and also stores __FILE__
         and __LINE__ of free() to be able to print position of first free.
       added EF_USE_FRAMENO preprocessor flag. changed not to support
         EF_newFrame() and EF_delFrame() by default.
       (2005-02-07, HA)
       applied bugfix posted by Luis Gonzalez. bug was occuring under
         SuSE Linux 9.1 when calling eftest with a higher number f.e. 10000.
       (2005-02-02, HA)
       bugfixed memalign() which was not exported as extern "C". this bug lead
         to crashes when freeing memory allocated by memalign(). bug was
         reported by Grant Goodyear and Steven G. Johnson.
       now defining macros/functions also for valloc()
       (2005-02-03, HA)

2.4.12 added EF_NO_GLOBAL_MALLOC_FREE preprocessor flag to workaround buggy
         environments:
       no malloc(),free(),realloc(),calloc() are put into the global namespace
       of the efence library, thus only files which include efence.h call the
       efence malloc(),.. replacement functions.
       this flag is also helpful where linking order cannot get controlled
       f.e. when memory is allocated from a library not using efence but free
       is called from efence using efence. this is a problem when using .dll
       libraries which are linked against msvcrt.dll and its malloc/free under
       MS Windows. the same problem applies when libstdc++ / libgcc is not
       linked in correct order.
       (2005-01-04, HA)

2.4.11 bugfixed signal handling in confidence test (eftest),
         which lead to false errors with my newly installed MandrakeLinux 10.1
       (2005-01-03, HA)

       bugfixed checking at free(), when EF_PROTECT_BELOW flag changed:
         which lead to false positives.
       bugfixed error message output to stderr: length of messages were
         calculated too short. fixed functions EF_Abort() and EF_Exit().
       (2004-08-15, HA)

2.4.10 added preprocessor macros for CA_DECLARE, CA_DEFINE, CA_REF in efence.h
         for declaration, definition and reference to Checked Arrays.
         these macros allow checks of arrays which are allocated on stack,
         but they are very slow on references cause every reference has to
         be checked.
       added EF_ASSERT() which definitely halts (for debugging)
       precompiled headers have to be switched off in MS Visual C++ to get all
         the C++ operators to work. but don't ask me why!
       implemented all the various new/delete/new[]/delete[] C++ operators.
         the implementations are not C++ conform concerning their behaviour
       added type mismatch detection between malloc()/free(), new/delete,
         new[]/delete[]. This is deactivated when EF_NO_LEAKDETECTION is set.
       added EF_MALLOC_FAILEXIT parameter. (for now not implemented)
       extended semantics of EF_PROTECT_FREE.
       added EF_MAX_ALLOC parameter.
       bugfix: why should we ever use Page_Delete() when setting up
         the "dead" page?
       bugfix: EF_PROTECT_FREE did exactly the opposite of that, what it
        should do up from Bruce's version 2.2.2 maybe earlier.
       (2004-07-16, HA)

       confidence test now PASSes again
       removed problems when used EF_NO_LEAKDETECTION preprocessor flag
       got Makefile to work again, also included automatic generation of
         efence_config.h
       added automatic generation and inclusion of efence_config.h instead
         function Page_Size()
       (2004-07-15, HA)

       added code for thread safety: only one thread at once is allowed to enter
       some internal functions. this can be deactivated using the EF_NO_THREAD_SAFETY
       preprocessor flag. there may be flaws concering threads, when using the c++ operators
       for leak detection: use the EF_NO_LEAKDETECTION preprocessor flag if you encounter problems!
       some files (page.c and print.c) have turned to header files,
       the needed functions are now declared static
       and are no more visible outside efence.c this way
       the NDEBUG preprocessor flag has been replaced by EF_NO_EFENCE, EF_NO_CPP_SUPPORT.
       so be careful not to include efence in your release builds!
       (2004-03-21, HA)

2.4.9  added checks for no mans land (= space which cannot get protected from
         the MMU): this area gets filled with EF_FILL on allocation, and gets
         checked on deallocation.
       (2002-12-04, HA)

2.4.8  one big fix and many improvements for C++ code. old macros NEW_ELEM,
         NEW_ARRAY were not usable when allocating classes, which have
         constructor/destructor. the usage of these macros has not changed
         (see 2.4.3).
       (2002-12-04, HA)

2.4.7  get to work with Borland Free Commandline Tools: Borland C++ Builder 5.5
       thrown away unnecessary declarations of malloc(), free(), ..
         Borland didn't like them,
         and neither MS-Visual C++ 6.0 nor gcc (Dev-C++) needs them.
       added project files in subdir "win32-vide" for VIDE 1.24
         using Borland C++
       Builder 5.5 (see http://www.objectcentral.com)
       (2002-11-22, HA)

2.4.6  remove memory leak in eftest
       allowed re-inclusion of efence.h after inclusion of efenceint.h
       added some project files in subdir "win32-devcpp" for Dev-C++ 4.9.6
         using gcc (see http://www.bloodshed.net)
         and saved its generated makefiles
       left tstheap's memory leaks
       (2002-11-17, HA)

2.4.5  modifications in print routines (EF_Print, EF_Abort, ..)
       added direct output to visual c++ debug output window.
       some additions to Makefile
       (2002-11-17, HA)

2.4.4  several modifications
         seperation of c++ files: efencepp.h, efencepp.cpp
         renamed EF_push()/EF_pop() to EF_newFrame()/EF_delFrame()
         new compile option "EF_NO_LEAKDETECTION"
         new compile option "EF_NO_CPP"
         splitted efence.h to efence.h and efenceint.h
         added Copyright and License information to many files
         renamed COPYING to COPYING-GPL
       (2002-11-03, HA)

2.4.3  added following PreProcessor Macros for Release and Debug Mode
         #define NEW_ELEM(TYPE)          new TYPE
         #define NEW_ARRAY(TYPE,COUNT)   new (TYPE)[COUNT]
         #define DEL_ELEM(PTR)           delete PTR
         #define DEL_ARRAY(PTR)          delete []PTR
       which are mapped to malloc() and free() in Debug Mode.
       Use these macros to get filename and linenumber of a C++ style
         memory leak.
       (2002-10-07, HA)

2.4.2  added support for implicit and explicit leak checking:
         void EF_push(void) creates a new memory frame.
         void EF_pop(void)  checks for memory leaks allocated after EF_push().
       this function is called automatically onexit(),
       even without EF_push().
       (2002-10-07, HA)

2.4.1  Port to Windows (NT/2000/XP) by adding sections to following functions:
         Page_AllowAccess(), Page_Create(), Page_Delete(),
         Page_DenyAccess(), Page_Size()
       (2002-10-06, HA)

2.4.0  added support for C++ operators new, new[], delete and delete[].
       added some project files in subdir "win32-msvc" for MS-Visual C++ 6.0
       (2002-10-03, HA)



2.2.2  Oops. Shared library must be position-independent code.

2.2.0
  Merge in bug-fixes, multi-thread patch, shared library patch,
  debian/ subdirectory used for building the Debian package

2.0.1
  Add work-arounds for kernel and library bugs under HP-UX.
  HP has been notified and will repair these soon.

2.0.2
  Add support for DEC Alpha. Add %a pattern for printing addresses, which
  assumes they are passed in a void *.

2.0.3 30-Sep-1993
  When realloc is passed a zero address, it should work the same
  way as malloc(). Fix forward declaration of mprotect() in page.c to
  use void *, not caddr_t, for addresses. IRIX 5.0.1 complained about that.

2.0.4 29-May-1994
  Don't attempt to allow access to a zero-sized page when
  EF_ALLOW_MALLOC_0 is set. Attempt to un-map memory from
  Page_Delete(). If that doesn't work, fall back by protecting the
  page from all references. Un-mapping small segments of a mapping
  used to crash my SGI IRIX 5.0 system. I assume that nobody is running
  5.0 any longer.

2.0.5 20-January-1995
  Port to Linux.
