w3m

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/w3m.git/
Log | Files | Refs | README

commit 483ac295bc7b17b66cf5aacc48445b80685bff5c
parent 886395f1cf0444068587efe2e4342de6693d8e1d
Author: ukai <ukai>
Date:   Sun,  9 Mar 2003 19:43:05 +0000

remove gc

Diffstat:
Dgc/.cvsignore | 5-----
Dgc/AmigaOS.c | 623-------------------------------------------------------------------------------
Dgc/BCC_MAKEFILE | 87-------------------------------------------------------------------------------
Dgc/EMX_MAKEFILE | 141-------------------------------------------------------------------------------
Dgc/MacOS.c | 154-------------------------------------------------------------------------------
Dgc/MacProjects.sit.hqx | 886-------------------------------------------------------------------------------
Dgc/Mac_files/MacOS_Test_config.h | 91-------------------------------------------------------------------------------
Dgc/Mac_files/MacOS_config.h | 89-------------------------------------------------------------------------------
Dgc/Mac_files/dataend.c | 9---------
Dgc/Mac_files/datastart.c | 9---------
Dgc/Makefile | 632-------------------------------------------------------------------------------
Dgc/Makefile.DLLs | 107-------------------------------------------------------------------------------
Dgc/Makefile.am | 120-------------------------------------------------------------------------------
Dgc/Makefile.direct | 632-------------------------------------------------------------------------------
Dgc/Makefile.dj | 430-------------------------------------------------------------------------------
Dgc/Makefile.in | 673-------------------------------------------------------------------------------
Dgc/NT_MAKEFILE | 59-----------------------------------------------------------
Dgc/NT_THREADS_MAKEFILE | 2158-------------------------------------------------------------------------------
Dgc/OS2_MAKEFILE | 45---------------------------------------------
Dgc/PCR-Makefile | 68--------------------------------------------------------------------
Dgc/README.QUICK | 85-------------------------------------------------------------------------------
Dgc/SMakefile.amiga | 178-------------------------------------------------------------------------------
Dgc/WCC_MAKEFILE | 196-------------------------------------------------------------------------------
Dgc/acinclude.m4 | 1-
Dgc/aclocal.m4 | 823-------------------------------------------------------------------------------
Dgc/add_gc_prefix.c | 20--------------------
Dgc/allchblk.c | 821-------------------------------------------------------------------------------
Dgc/alloc.c | 1051-------------------------------------------------------------------------------
Dgc/alpha_mach_dep.S | 87-------------------------------------------------------------------------------
Dgc/backgraph.c | 447-------------------------------------------------------------------------------
Dgc/blacklst.c | 300-------------------------------------------------------------------------------
Dgc/callprocs | 4----
Dgc/checksums.c | 201-------------------------------------------------------------------------------
Dgc/config.guess | 1321-------------------------------------------------------------------------------
Dgc/config.sub | 1443-------------------------------------------------------------------------------
Dgc/configure | 8702-------------------------------------------------------------------------------
Dgc/configure.host | 53-----------------------------------------------------
Dgc/configure.in | 391-------------------------------------------------------------------------------
Dgc/cord/cordbscs.c | 915-------------------------------------------------------------------------------
Dgc/cord/cordprnt.c | 396-------------------------------------------------------------------------------
Dgc/cord/cordtest.c | 229-------------------------------------------------------------------------------
Dgc/cord/cordxtra.c | 621-------------------------------------------------------------------------------
Dgc/cord/de.c | 603-------------------------------------------------------------------------------
Dgc/cord/de_cmds.h | 33---------------------------------
Dgc/cord/de_win.ICO | 0
Dgc/cord/de_win.RC | 78------------------------------------------------------------------------------
Dgc/cord/de_win.c | 366-------------------------------------------------------------------------------
Dgc/cord/de_win.h | 104-------------------------------------------------------------------------------
Dgc/dbg_mlc.c | 1045-------------------------------------------------------------------------------
Dgc/depcomp | 436-------------------------------------------------------------------------------
Dgc/digimars.mak | 90-------------------------------------------------------------------------------
Dgc/doc/README | 618-------------------------------------------------------------------------------
Dgc/doc/README.DGUX386 | 215-------------------------------------------------------------------------------
Dgc/doc/README.Mac | 385-------------------------------------------------------------------------------
Dgc/doc/README.MacOSX | 27---------------------------
Dgc/doc/README.OS2 | 6------
Dgc/doc/README.amiga | 322-------------------------------------------------------------------------------
Dgc/doc/README.arm.cross | 68--------------------------------------------------------------------
Dgc/doc/README.autoconf | 59-----------------------------------------------------------
Dgc/doc/README.changes | 1653-------------------------------------------------------------------------------
Dgc/doc/README.contributors | 57---------------------------------------------------------
Dgc/doc/README.cords | 53-----------------------------------------------------
Dgc/doc/README.dj | 12------------
Dgc/doc/README.environment | 101-------------------------------------------------------------------------------
Dgc/doc/README.ews4800 | 81-------------------------------------------------------------------------------
Dgc/doc/README.hp | 18------------------
Dgc/doc/README.linux | 135-------------------------------------------------------------------------------
Dgc/doc/README.macros | 78------------------------------------------------------------------------------
Dgc/doc/README.rs6000 | 9---------
Dgc/doc/README.sgi | 41-----------------------------------------
Dgc/doc/README.solaris2 | 62--------------------------------------------------------------
Dgc/doc/README.uts | 2--
Dgc/doc/README.win32 | 164-------------------------------------------------------------------------------
Dgc/doc/barrett_diagram | 106-------------------------------------------------------------------------------
Dgc/doc/debugging.html | 291------------------------------------------------------------------------------
Dgc/doc/gc.man | 80-------------------------------------------------------------------------------
Dgc/doc/gcdescr.html | 438-------------------------------------------------------------------------------
Dgc/doc/tree.html | 198-------------------------------------------------------------------------------
Dgc/dyn_load.c | 1083-------------------------------------------------------------------------------
Dgc/finalize.c | 854-------------------------------------------------------------------------------
Dgc/gc.mak | 2158-------------------------------------------------------------------------------
Dgc/gc_cpp.cc | 61-------------------------------------------------------------
Dgc/gc_cpp.cpp | 2--
Dgc/gc_dlopen.c | 95-------------------------------------------------------------------------------
Dgc/gcc_support.c | 516-------------------------------------------------------------------------------
Dgc/gcj_mlc.c | 305------------------------------------------------------------------------------
Dgc/gcname.c | 13-------------
Dgc/headers.c | 358-------------------------------------------------------------------------------
Dgc/hpux_test_and_clear.s | 21---------------------
Dgc/ia64_save_regs_in_stack.s | 12------------
Dgc/if_mach.c | 28----------------------------
Dgc/if_not_there.c | 29-----------------------------
Dgc/include/cord.h | 327-------------------------------------------------------------------------------
Dgc/include/ec.h | 70----------------------------------------------------------------------
Dgc/include/gc.h | 968-------------------------------------------------------------------------------
Dgc/include/gc_alloc.h | 383-------------------------------------------------------------------------------
Dgc/include/gc_allocator.h | 232-------------------------------------------------------------------------------
Dgc/include/gc_amiga_redirects.h | 30------------------------------
Dgc/include/gc_backptr.h | 65-----------------------------------------------------------------
Dgc/include/gc_cpp.h | 352-------------------------------------------------------------------------------
Dgc/include/gc_gcj.h | 102-------------------------------------------------------------------------------
Dgc/include/gc_inl.h | 107-------------------------------------------------------------------------------
Dgc/include/gc_inline.h | 1-
Dgc/include/gc_local_alloc.h | 88-------------------------------------------------------------------------------
Dgc/include/gc_mark.h | 145-------------------------------------------------------------------------------
Dgc/include/gc_pthread_redirects.h | 67-------------------------------------------------------------------
Dgc/include/gc_typed.h | 93-------------------------------------------------------------------------------
Dgc/include/javaxfc.h | 41-----------------------------------------
Dgc/include/leak_detector.h | 7-------
Dgc/include/new_gc_alloc.h | 472-------------------------------------------------------------------------------
Dgc/include/private/cord_pos.h | 118-------------------------------------------------------------------------------
Dgc/include/private/dbg_mlc.h | 176-------------------------------------------------------------------------------
Dgc/include/private/gc_hdrs.h | 233-------------------------------------------------------------------------------
Dgc/include/private/gc_locks.h | 496-------------------------------------------------------------------------------
Dgc/include/private/gc_pmark.h | 379-------------------------------------------------------------------------------
Dgc/include/private/gc_priv.h | 1884-------------------------------------------------------------------------------
Dgc/include/private/gcconfig.h | 1986-------------------------------------------------------------------------------
Dgc/include/private/solaris_threads.h | 35-----------------------------------
Dgc/include/private/specific.h | 95-------------------------------------------------------------------------------
Dgc/include/weakpointer.h | 221-------------------------------------------------------------------------------
Dgc/install-sh | 251-------------------------------------------------------------------------------
Dgc/irix_threads.c | 730-------------------------------------------------------------------------------
Dgc/libtool.m4 | 3573-------------------------------------------------------------------------------
Dgc/linux_threads.c | 1896-------------------------------------------------------------------------------
Dgc/ltconfig | 3---
Dgc/ltmain.sh | 4984-------------------------------------------------------------------------------
Dgc/mach_dep.c | 581-------------------------------------------------------------------------------
Dgc/malloc.c | 476-------------------------------------------------------------------------------
Dgc/mallocx.c | 644-------------------------------------------------------------------------------
Dgc/mark.c | 1690-------------------------------------------------------------------------------
Dgc/mark_rts.c | 583-------------------------------------------------------------------------------
Dgc/mips_sgi_mach_dep.S | 41-----------------------------------------
Dgc/mips_ultrix_mach_dep.s | 26--------------------------
Dgc/misc.c | 982-------------------------------------------------------------------------------
Dgc/missing | 336-------------------------------------------------------------------------------
Dgc/mkinstalldirs | 101-------------------------------------------------------------------------------
Dgc/new_hblk.c | 263-------------------------------------------------------------------------------
Dgc/obj_map.c | 147-------------------------------------------------------------------------------
Dgc/os_dep.c | 3412-------------------------------------------------------------------------------
Dgc/pc_excludes | 21---------------------
Dgc/pcr_interface.c | 178-------------------------------------------------------------------------------
Dgc/powerpc_macosx_mach_dep.s | 95-------------------------------------------------------------------------------
Dgc/ptr_chck.c | 328-------------------------------------------------------------------------------
Dgc/real_malloc.c | 36------------------------------------
Dgc/reclaim.c | 1023-------------------------------------------------------------------------------
Dgc/rs6000_mach_dep.s | 114-------------------------------------------------------------------------------
Dgc/setjmp_t.c | 114-------------------------------------------------------------------------------
Dgc/solaris_pthreads.c | 178-------------------------------------------------------------------------------
Dgc/solaris_threads.c | 956-------------------------------------------------------------------------------
Dgc/sparc_mach_dep.S | 67-------------------------------------------------------------------
Dgc/sparc_netbsd_mach_dep.s | 34----------------------------------
Dgc/sparc_sunos4_mach_dep.s | 38--------------------------------------
Dgc/specific.c | 127-------------------------------------------------------------------------------
Dgc/stubborn.c | 326-------------------------------------------------------------------------------
Dgc/tests/leak_test.c | 21---------------------
Dgc/tests/test.c | 1773-------------------------------------------------------------------------------
Dgc/tests/test_cpp.cc | 286-------------------------------------------------------------------------------
Dgc/tests/thread_leak_test.c | 40----------------------------------------
Dgc/tests/trace_test.c | 28----------------------------
Dgc/threadlibs.c | 32--------------------------------
Dgc/typd_mlc.c | 832-------------------------------------------------------------------------------
Dgc/version.h | 11-----------
Dgc/win32_threads.c | 859-------------------------------------------------------------------------------
163 files changed, 0 insertions(+), 76281 deletions(-)

diff --git a/gc/.cvsignore b/gc/.cvsignore @@ -1,5 +0,0 @@ -base_lib -gctest -if_mach -if_not_there -threadlibs diff --git a/gc/AmigaOS.c b/gc/AmigaOS.c @@ -1,623 +0,0 @@ - - -/****************************************************************** - - AmigaOS-spesific routines for GC. - This file is normally included from os_dep.c - -******************************************************************/ - - -#if !defined(GC_AMIGA_DEF) && !defined(GC_AMIGA_SB) && !defined(GC_AMIGA_DS) && !defined(GC_AMIGA_AM) -# include "gc_priv.h" -# include <stdio.h> -# include <signal.h> -# define GC_AMIGA_DEF -# define GC_AMIGA_SB -# define GC_AMIGA_DS -# define GC_AMIGA_AM -#endif - - -#ifdef GC_AMIGA_DEF - -# ifndef __GNUC__ -# include <exec/exec.h> -# endif -# include <proto/exec.h> -# include <proto/dos.h> -# include <dos/dosextens.h> -# include <workbench/startup.h> - -#endif - - - - -#ifdef GC_AMIGA_SB - -/****************************************************************** - Find the base of the stack. -******************************************************************/ - -ptr_t GC_get_stack_base() -{ - struct Process *proc = (struct Process*)SysBase->ThisTask; - - /* Reference: Amiga Guru Book Pages: 42,567,574 */ - if (proc->pr_Task.tc_Node.ln_Type==NT_PROCESS - && proc->pr_CLI != NULL) { - /* first ULONG is StackSize */ - /*longPtr = proc->pr_ReturnAddr; - size = longPtr[0];*/ - - return (char *)proc->pr_ReturnAddr + sizeof(ULONG); - } else { - return (char *)proc->pr_Task.tc_SPUpper; - } -} - -#if 0 /* old version */ -ptr_t GC_get_stack_base() -{ - extern struct WBStartup *_WBenchMsg; - extern long __base; - extern long __stack; - struct Task *task; - struct Process *proc; - struct CommandLineInterface *cli; - long size; - - if ((task = FindTask(0)) == 0) { - GC_err_puts("Cannot find own task structure\n"); - ABORT("task missing"); - } - proc = (struct Process *)task; - cli = BADDR(proc->pr_CLI); - - if (_WBenchMsg != 0 || cli == 0) { - size = (char *)task->tc_SPUpper - (char *)task->tc_SPLower; - } else { - size = cli->cli_DefaultStack * 4; - } - return (ptr_t)(__base + GC_max(size, __stack)); -} -#endif - - -#endif - - -#ifdef GC_AMIGA_DS -/****************************************************************** - Register data segments. -******************************************************************/ - - void GC_register_data_segments() - { - struct Process *proc; - struct CommandLineInterface *cli; - BPTR myseglist; - ULONG *data; - - int num; - - -# ifdef __GNUC__ - ULONG dataSegSize; - GC_bool found_segment = FALSE; - extern char __data_size[]; - - dataSegSize=__data_size+8; - /* Can`t find the Location of __data_size, because - it`s possible that is it, inside the segment. */ - -# endif - - proc= (struct Process*)SysBase->ThisTask; - - /* Reference: Amiga Guru Book Pages: 538ff,565,573 - and XOper.asm */ - if (proc->pr_Task.tc_Node.ln_Type==NT_PROCESS) { - if (proc->pr_CLI == NULL) { - myseglist = proc->pr_SegList; - } else { - /* ProcLoaded 'Loaded as a command: '*/ - cli = BADDR(proc->pr_CLI); - myseglist = cli->cli_Module; - } - } else { - ABORT("Not a Process."); - } - - if (myseglist == NULL) { - ABORT("Arrrgh.. can't find segments, aborting"); - } - - /* xoper hunks Shell Process */ - - num=0; - for (data = (ULONG *)BADDR(myseglist); data != NULL; - data = (ULONG *)BADDR(data[0])) { - if (((ULONG) GC_register_data_segments < (ULONG) &data[1]) || - ((ULONG) GC_register_data_segments > (ULONG) &data[1] + data[-1])) { -# ifdef __GNUC__ - if (dataSegSize == data[-1]) { - found_segment = TRUE; - } -# endif - GC_add_roots_inner((char *)&data[1], - ((char *)&data[1]) + data[-1], FALSE); - } - ++num; - } /* for */ -# ifdef __GNUC__ - if (!found_segment) { - ABORT("Can`t find correct Segments.\nSolution: Use an newer version of ixemul.library"); - } -# endif - } - -#if 0 /* old version */ - void GC_register_data_segments() - { - extern struct WBStartup *_WBenchMsg; - struct Process *proc; - struct CommandLineInterface *cli; - BPTR myseglist; - ULONG *data; - - if ( _WBenchMsg != 0 ) { - if ((myseglist = _WBenchMsg->sm_Segment) == 0) { - GC_err_puts("No seglist from workbench\n"); - return; - } - } else { - if ((proc = (struct Process *)FindTask(0)) == 0) { - GC_err_puts("Cannot find process structure\n"); - return; - } - if ((cli = BADDR(proc->pr_CLI)) == 0) { - GC_err_puts("No CLI\n"); - return; - } - if ((myseglist = cli->cli_Module) == 0) { - GC_err_puts("No seglist from CLI\n"); - return; - } - } - - for (data = (ULONG *)BADDR(myseglist); data != 0; - data = (ULONG *)BADDR(data[0])) { -# ifdef AMIGA_SKIP_SEG - if (((ULONG) GC_register_data_segments < (ULONG) &data[1]) || - ((ULONG) GC_register_data_segments > (ULONG) &data[1] + data[-1])) { -# else - { -# endif /* AMIGA_SKIP_SEG */ - GC_add_roots_inner((char *)&data[1], - ((char *)&data[1]) + data[-1], FALSE); - } - } - } -#endif /* old version */ - - -#endif - - - -#ifdef GC_AMIGA_AM - -#ifndef GC_AMIGA_FASTALLOC - -void *GC_amiga_allocwrapper(size_t size,void *(*AllocFunction)(size_t size2)){ - return (*AllocFunction)(size); -} - -void *(*GC_amiga_allocwrapper_do)(size_t size,void *(*AllocFunction)(size_t size2)) - =GC_amiga_allocwrapper; - -#else - - - - -void *GC_amiga_allocwrapper_firsttime(size_t size,void *(*AllocFunction)(size_t size2)); - -void *(*GC_amiga_allocwrapper_do)(size_t size,void *(*AllocFunction)(size_t size2)) - =GC_amiga_allocwrapper_firsttime; - - -/****************************************************************** - Amiga-spesific routines to obtain memory, and force GC to give - back fast-mem whenever possible. - These hacks makes gc-programs go many times faster when - the amiga is low on memory, and are therefore strictly necesarry. - - -Kjetil S. Matheussen, 2000. -******************************************************************/ - - - -/* List-header for all allocated memory. */ - -struct GC_Amiga_AllocedMemoryHeader{ - ULONG size; - struct GC_Amiga_AllocedMemoryHeader *next; -}; -struct GC_Amiga_AllocedMemoryHeader *GC_AMIGAMEM=(struct GC_Amiga_AllocedMemoryHeader *)(int)~(NULL); - - - -/* Type of memory. Once in the execution of a program, this might change to MEMF_ANY|MEMF_CLEAR */ - -ULONG GC_AMIGA_MEMF = MEMF_FAST | MEMF_CLEAR; - - -/* Prevents GC_amiga_get_mem from allocating memory if this one is TRUE. */ -#ifndef GC_AMIGA_ONLYFAST -BOOL GC_amiga_dontalloc=FALSE; -#endif - -#ifdef GC_AMIGA_PRINTSTATS -int succ=0,succ2=0; -int nsucc=0,nsucc2=0; -int nullretries=0; -int numcollects=0; -int chipa=0; -int allochip=0; -int allocfast=0; -int cur0=0; -int cur1=0; -int cur10=0; -int cur50=0; -int cur150=0; -int cur151=0; -int ncur0=0; -int ncur1=0; -int ncur10=0; -int ncur50=0; -int ncur150=0; -int ncur151=0; -#endif - -/* Free everything at program-end. */ - -void GC_amiga_free_all_mem(void){ - struct GC_Amiga_AllocedMemoryHeader *gc_am=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(GC_AMIGAMEM)); - struct GC_Amiga_AllocedMemoryHeader *temp; - -#ifdef GC_AMIGA_PRINTSTATS - printf("\n\n" - "%d bytes of chip-mem, and %d bytes of fast-mem where allocated from the OS.\n", - allochip,allocfast - ); - printf( - "%d bytes of chip-mem were returned from the GC_AMIGA_FASTALLOC supported allocating functions.\n", - chipa - ); - printf("\n"); - printf("GC_gcollect was called %d times to avoid returning NULL or start allocating with the MEMF_ANY flag.\n",numcollects); - printf("%d of them was a success. (the others had to use allocation from the OS.)\n",nullretries); - printf("\n"); - printf("Succeded forcing %d gc-allocations (%d bytes) of chip-mem to be fast-mem.\n",succ,succ2); - printf("Failed forcing %d gc-allocations (%d bytes) of chip-mem to be fast-mem.\n",nsucc,nsucc2); - printf("\n"); - printf( - "Number of retries before succeding a chip->fast force:\n" - "0: %d, 1: %d, 2-9: %d, 10-49: %d, 50-149: %d, >150: %d\n", - cur0,cur1,cur10,cur50,cur150,cur151 - ); - printf( - "Number of retries before giving up a chip->fast force:\n" - "0: %d, 1: %d, 2-9: %d, 10-49: %d, 50-149: %d, >150: %d\n", - ncur0,ncur1,ncur10,ncur50,ncur150,ncur151 - ); -#endif - - while(gc_am!=NULL){ - temp=gc_am->next; - FreeMem(gc_am,gc_am->size); - gc_am=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(temp)); - } -} - -#ifndef GC_AMIGA_ONLYFAST - -/* All memory with address lower than this one is chip-mem. */ - -char *chipmax; - - -/* - * Allways set to the last size of memory tried to be allocated. - * Needed to ensure allocation when the size is bigger than 100000. - * - */ -size_t latestsize; - -#endif - - -/* - * The actual function that is called with the GET_MEM macro. - * - */ - -void *GC_amiga_get_mem(size_t size){ - struct GC_Amiga_AllocedMemoryHeader *gc_am; - -#ifndef GC_AMIGA_ONLYFAST - if(GC_amiga_dontalloc==TRUE){ -// printf("rejected, size: %d, latestsize: %d\n",size,latestsize); - return NULL; - } - - // We really don't want to use chip-mem, but if we must, then as little as possible. - if(GC_AMIGA_MEMF==(MEMF_ANY|MEMF_CLEAR) && size>100000 && latestsize<50000) return NULL; -#endif - - gc_am=AllocMem((ULONG)(size + sizeof(struct GC_Amiga_AllocedMemoryHeader)),GC_AMIGA_MEMF); - if(gc_am==NULL) return NULL; - - gc_am->next=GC_AMIGAMEM; - gc_am->size=size + sizeof(struct GC_Amiga_AllocedMemoryHeader); - GC_AMIGAMEM=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(gc_am)); - -// printf("Allocated %d (%d) bytes at address: %x. Latest: %d\n",size,tot,gc_am,latestsize); - -#ifdef GC_AMIGA_PRINTSTATS - if((char *)gc_am<chipmax){ - allochip+=size; - }else{ - allocfast+=size; - } -#endif - - return gc_am+1; - -} - - - - -#ifndef GC_AMIGA_ONLYFAST - -/* Tries very hard to force GC to find fast-mem to return. Done recursively - * to hold the rejected memory-pointers reachable from the collector in an - * easy way. - * - */ -#ifdef GC_AMIGA_RETRY -void *GC_amiga_rec_alloc(size_t size,void *(*AllocFunction)(size_t size2),const int rec){ - void *ret; - - ret=(*AllocFunction)(size); - -#ifdef GC_AMIGA_PRINTSTATS - if((char *)ret>chipmax || ret==NULL){ - if(ret==NULL){ - nsucc++; - nsucc2+=size; - if(rec==0) ncur0++; - if(rec==1) ncur1++; - if(rec>1 && rec<10) ncur10++; - if(rec>=10 && rec<50) ncur50++; - if(rec>=50 && rec<150) ncur150++; - if(rec>=150) ncur151++; - }else{ - succ++; - succ2+=size; - if(rec==0) cur0++; - if(rec==1) cur1++; - if(rec>1 && rec<10) cur10++; - if(rec>=10 && rec<50) cur50++; - if(rec>=50 && rec<150) cur150++; - if(rec>=150) cur151++; - } - } -#endif - - if (((char *)ret)<=chipmax && ret!=NULL && (rec<(size>500000?9:size/5000))){ - ret=GC_amiga_rec_alloc(size,AllocFunction,rec+1); -// GC_free(ret2); - } - - return ret; -} -#endif - - -/* The allocating-functions defined inside the amiga-blocks in gc.h is called - * via these functions. - */ - - -void *GC_amiga_allocwrapper_any(size_t size,void *(*AllocFunction)(size_t size2)){ - void *ret,*ret2; - - GC_amiga_dontalloc=TRUE; // Pretty tough thing to do, but its indeed necesarry. - latestsize=size; - - ret=(*AllocFunction)(size); - - if(((char *)ret) <= chipmax){ - if(ret==NULL){ - //Give GC access to allocate memory. -#ifdef GC_AMIGA_GC - if(!GC_dont_gc){ - GC_gcollect(); -#ifdef GC_AMIGA_PRINTSTATS - numcollects++; -#endif - ret=(*AllocFunction)(size); - } -#endif - if(ret==NULL){ - GC_amiga_dontalloc=FALSE; - ret=(*AllocFunction)(size); - if(ret==NULL){ - WARN("Out of Memory! Returning NIL!\n", 0); - } - } -#ifdef GC_AMIGA_PRINTSTATS - else{ - nullretries++; - } - if(ret!=NULL && (char *)ret<=chipmax) chipa+=size; -#endif - } -#ifdef GC_AMIGA_RETRY - else{ - /* We got chip-mem. Better try again and again and again etc., we might get fast-mem sooner or later... */ - /* Using gctest to check the effectiviness of doing this, does seldom give a very good result. */ - /* However, real programs doesn't normally rapidly allocate and deallocate. */ -// printf("trying to force... %d bytes... ",size); - if( - AllocFunction!=GC_malloc_uncollectable -#ifdef ATOMIC_UNCOLLECTABLE - && AllocFunction!=GC_malloc_atomic_uncollectable -#endif - ){ - ret2=GC_amiga_rec_alloc(size,AllocFunction,0); - }else{ - ret2=(*AllocFunction)(size); -#ifdef GC_AMIGA_PRINTSTATS - if((char *)ret2<chipmax || ret2==NULL){ - nsucc++; - nsucc2+=size; - ncur0++; - }else{ - succ++; - succ2+=size; - cur0++; - } -#endif - } - if(((char *)ret2)>chipmax){ -// printf("Succeeded.\n"); - GC_free(ret); - ret=ret2; - }else{ - GC_free(ret2); -// printf("But did not succeed.\n"); - } - } -#endif - } - - GC_amiga_dontalloc=FALSE; - - return ret; -} - - - -void (*GC_amiga_toany)(void)=NULL; - -void GC_amiga_set_toany(void (*func)(void)){ - GC_amiga_toany=func; -} - -#endif // !GC_AMIGA_ONLYFAST - - -void *GC_amiga_allocwrapper_fast(size_t size,void *(*AllocFunction)(size_t size2)){ - void *ret; - - ret=(*AllocFunction)(size); - - if(ret==NULL){ - // Enable chip-mem allocation. -// printf("ret==NULL\n"); -#ifdef GC_AMIGA_GC - if(!GC_dont_gc){ - GC_gcollect(); -#ifdef GC_AMIGA_PRINTSTATS - numcollects++; -#endif - ret=(*AllocFunction)(size); - } -#endif - if(ret==NULL){ -#ifndef GC_AMIGA_ONLYFAST - GC_AMIGA_MEMF=MEMF_ANY | MEMF_CLEAR; - if(GC_amiga_toany!=NULL) (*GC_amiga_toany)(); - GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_any; - return GC_amiga_allocwrapper_any(size,AllocFunction); -#endif - } -#ifdef GC_AMIGA_PRINTSTATS - else{ - nullretries++; - } -#endif - } - - return ret; -} - -void *GC_amiga_allocwrapper_firsttime(size_t size,void *(*AllocFunction)(size_t size2)){ - atexit(&GC_amiga_free_all_mem); - chipmax=(char *)SysBase->MaxLocMem; // For people still having SysBase in chip-mem, this might speed up a bit. - GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_fast; - return GC_amiga_allocwrapper_fast(size,AllocFunction); -} - - -#endif //GC_AMIGA_FASTALLOC - - - -/* - * The wrapped realloc function. - * - */ -void *GC_amiga_realloc(void *old_object,size_t new_size_in_bytes){ -#ifndef GC_AMIGA_FASTALLOC - return GC_realloc(old_object,new_size_in_bytes); -#else - void *ret; - latestsize=new_size_in_bytes; - ret=GC_realloc(old_object,new_size_in_bytes); - if(ret==NULL && GC_AMIGA_MEMF==(MEMF_FAST | MEMF_CLEAR)){ - /* Out of fast-mem. */ -#ifdef GC_AMIGA_GC - if(!GC_dont_gc){ - GC_gcollect(); -#ifdef GC_AMIGA_PRINTSTATS - numcollects++; -#endif - ret=GC_realloc(old_object,new_size_in_bytes); - } -#endif - if(ret==NULL){ -#ifndef GC_AMIGA_ONLYFAST - GC_AMIGA_MEMF=MEMF_ANY | MEMF_CLEAR; - if(GC_amiga_toany!=NULL) (*GC_amiga_toany)(); - GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_any; - ret=GC_realloc(old_object,new_size_in_bytes); -#endif - } -#ifdef GC_AMIGA_PRINTSTATS - else{ - nullretries++; - } -#endif - } - if(ret==NULL){ - WARN("Out of Memory! Returning NIL!\n", 0); - } -#ifdef GC_AMIGA_PRINTSTATS - if(((char *)ret)<chipmax && ret!=NULL){ - chipa+=new_size_in_bytes; - } -#endif - return ret; -#endif -} - -#endif //GC_AMIGA_AM - - diff --git a/gc/BCC_MAKEFILE b/gc/BCC_MAKEFILE @@ -1,87 +0,0 @@ -# Makefile for Borland C++ 5.5 on NT -# If you have the Borland assembler, remove "-DUSE_GENERIC" -# -bc= c:\Borland\BCC55 -bcbin= $(bc)\bin -bclib= $(bc)\lib -bcinclude= $(bc)\include - -gcinclude= $(bc)\gc6.0\include - -cc= $(bcbin)\bcc32 -rc= $(bcbin)\brc32 -lib= $(bcbin)\tlib -link= $(bcbin)\tlink32 -cflags= -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude);cord -L$(bclib) \ - -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0 -#defines= -DSILENT -defines= -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_DEBUGGING -DNO_GETENV -DJAVA_FINALIZATION - -.c.obj: - $(cc) @&&| - $(cdebug) $(cflags) $(cvars) $(defines) -o$* -c $*.c -| - -.cpp.obj: - $(cc) @&&| - $(cdebug) $(cflags) $(cvars) $(defines) -o$* -c $*.cpp -| - -.rc.res: - $(rc) -i$(bcinclude) -r -fo$* $*.rc - -XXXOBJS= XXXalloc.obj XXXreclaim.obj XXXallchblk.obj XXXmisc.obj \ - XXXmach_dep.obj XXXos_dep.obj XXXmark_rts.obj XXXheaders.obj XXXmark.obj \ - XXXobj_map.obj XXXblacklst.obj XXXfinalize.obj XXXnew_hblk.obj \ - XXXdbg_mlc.obj XXXmalloc.obj XXXstubborn.obj XXXdyn_load.obj \ - XXXtypd_mlc.obj XXXptr_chck.obj XXXgc_cpp.obj XXXmallocx.obj - -OBJS= $(XXXOBJS:XXX=) - -all: gctest.exe cord\de.exe test_cpp.exe - -$(OBJS) test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h MAKEFILE - -gc.lib: $(OBJS) - del gc.lib - $(lib) $* @&&| - $(XXXOBJS:XXX=+) -| - -gctest.exe: tests\test.obj gc.lib - $(cc) @&&| - $(cflags) -W -e$* tests\test.obj gc.lib -| - -cord\de.obj cord\de_win.obj: cord\cord.h cord\private\cord_pos.h cord\de_win.h \ - cord\de_cmds.h - -cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj \ - cord\de_win.res gc.lib - $(cc) @&&| - $(cflags) -W -e$* cord\cordbscs.obj cord\cordxtra.obj \ - cord\de.obj cord\de_win.obj gc.lib -| - $(rc) cord\de_win.res cord\de.exe - -gc_cpp.obj: include\gc_cpp.h include\gc.h - -gc_cpp.cpp: gc_cpp.cc - copy gc_cpp.cc gc_cpp.cpp - -test_cpp.cpp: tests\test_cpp.cc - copy tests\test_cpp.cc test_cpp.cpp - -test_cpp.exe: test_cpp.obj gc_cpp.h gc.h gc.lib - $(cc) @&&| - $(cflags) -W -e$* test_cpp.obj gc.lib -| - -scratch: - -del *.obj *.res *.exe *.csm cord\*.obj cord\*.res cord\*.exe cord\*.csm - -clean: - del gc.lib - del *.obj - del tests\test.obj - diff --git a/gc/EMX_MAKEFILE b/gc/EMX_MAKEFILE @@ -1,141 +0,0 @@ -# -# OS/2 specific Makefile for the EMX environment -# -# You need GNU Make 3.71, gcc 2.5.7, emx 0.8h and GNU fileutils 3.9 -# or similar tools. C++ interface and de.exe weren't tested. -# -# Rename this file "Makefile". -# - -# Primary targets: -# gc.a - builds basic library -# c++ - adds C++ interface to library and include directory -# cords - adds cords (heavyweight strings) to library and include directory -# test - prints porting information, then builds basic version of gc.a, and runs -# some tests of collector and cords. Does not add cords or c++ interface to gc.a -# cord/de.exe - builds dumb editor based on cords. -CC= gcc -CXX=g++ -# Needed only for "make c++", which adds the c++ interface - -CFLAGS= -O -DALL_INTERIOR_POINTERS -DSILENT -# Setjmp_test may yield overly optimistic results when compiled -# without optimization. -# -DSILENT disables statistics printing, and improves performance. -# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -# altered stubborn objects, at substantial performance cost. -# -DFIND_LEAK causes the collector to assume that all inaccessible -# objects should have been explicitly deallocated, and reports exceptions -# -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define SOLARIS_THREADS and then include -# gc.h before performing thr_ or GC_ operations.) -# -DALL_INTERIOR_POINTERS allows all pointers to the interior -# of objects to be recognized. (See gc_private.h for consequences.) -# -DSMALL_CONFIG tries to tune the collector for small heap sizes, -# usually causing it to use less space in such situations. -# Incremental collection no longer works in this case. -# -DDONT_ADD_BYTE_AT_END is meaningful only with -# -DALL_INTERIOR_POINTERS. Normally -DALL_INTERIOR_POINTERS -# causes all objects to be padded so that pointers just past the end of -# an object can be recognized. This can be expensive. (The padding -# is normally more than one byte due to alignment constraints.) -# -DDONT_ADD_BYTE_AT_END disables the padding. - -AR= ar -RANLIB= ar s - -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories -srcdir = . -VPATH = $(srcdir) - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dyn_load.o dbg_mlc.o malloc.o stubborn.o checksums.o typd_mlc.o ptr_chck.o mallocx.o - -CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o - -CORD_INCLUDE_FILES= $(srcdir)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \ - $(srcdir)/cord/cord_pos.h - -# Libraries needed for curses applications. Only needed for de. -CURSES= -lcurses -ltermlib - -# The following is irrelevant on most systems. But a few -# versions of make otherwise fork the shell specified in -# the SHELL environment variable. -SHELL= bash - -SPECIALCFLAGS = -# Alternative flags to the C compiler for mach_dep.c. -# Mach_dep.c often doesn't like optimization, and it's -# not time-critical anyway. - -all: gc.a gctest.exe - -$(OBJS) test.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ - $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h -# The dependency on Makefile is needed. Changing -# options such as -DSILENT affects the size of GC_arrays, -# invalidating all .o files that rely on gc_priv.h - -mark.o typd_mlc.o finalize.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h - -gc.a: $(OBJS) - $(AR) ru gc.a $(OBJS) - $(RANLIB) gc.a - -cords: $(CORD_OBJS) cord/cordtest.exe - $(AR) ru gc.a $(CORD_OBJS) - $(RANLIB) gc.a - cp $(srcdir)/cord/cord.h include/cord.h - cp $(srcdir)/cord/ec.h include/ec.h - cp $(srcdir)/cord/cord_pos.h include/cord_pos.h - -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/gc_cpp.h - $(CXX) -c -O $(srcdir)/gc_cpp.cc - -c++: gc_cpp.o $(srcdir)/gc_cpp.h - $(AR) ru gc.a gc_cpp.o - $(RANLIB) gc.a - cp $(srcdir)/gc_cpp.h include/gc_cpp.h - -mach_dep.o: $(srcdir)/mach_dep.c - $(CC) -o mach_dep.o -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - -mark_rts.o: $(srcdir)/mark_rts.c - $(CC) -o mark_rts.o -c $(CFLAGS) $(srcdir)/mark_rts.c - -cord/cordbscs.o: $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c $(srcdir)/cord/cordbscs.c -o cord/cordbscs.o - -cord/cordxtra.o: $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c $(srcdir)/cord/cordxtra.c -o cord/cordxtra.o - -cord/cordprnt.o: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c $(srcdir)/cord/cordprnt.c -o cord/cordprnt.o - -cord/cordtest.exe: $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a - $(CC) $(CFLAGS) -o cord/cordtest.exe $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a - -cord/de.exe: $(srcdir)/cord/de.c $(srcdir)/cord/cordbscs.o $(srcdir)/cord/cordxtra.o gc.a - $(CC) $(CFLAGS) -o cord/de.exe $(srcdir)/cord/de.c $(srcdir)/cord/cordbscs.o $(srcdir)/cord/cordxtra.o gc.a $(CURSES) - -clean: - rm -f gc.a tests/test.o gctest.exe output-local output-diff $(OBJS) \ - setjmp_test mon.out gmon.out a.out core \ - $(CORD_OBJS) cord/cordtest.exe cord/de.exe - -rm -f *~ - -gctest.exe: tests/test.o gc.a - $(CC) $(CFLAGS) -o gctest.exe tests/test.o gc.a - -# If an optimized setjmp_test generates a segmentation fault, -# odds are your compiler is broken. Gctest may still work. -# Try compiling setjmp_t.c unoptimized. -setjmp_test.exe: $(srcdir)/setjmp_t.c $(srcdir)/gc.h - $(CC) $(CFLAGS) -o setjmp_test.exe $(srcdir)/setjmp_t.c - -test: setjmp_test.exe gctest.exe - ./setjmp_test - ./gctest - make cord/cordtest.exe - cord/cordtest diff --git a/gc/MacOS.c b/gc/MacOS.c @@ -1,154 +0,0 @@ -/* - MacOS.c - - Some routines for the Macintosh OS port of the Hans-J. Boehm, Alan J. Demers - garbage collector. - - <Revision History> - - 11/22/94 pcb StripAddress the temporary memory handle for 24-bit mode. - 11/30/94 pcb Tracking all memory usage so we can deallocate it all at once. - 02/10/96 pcb Added routine to perform a final collection when -unloading shared library. - - by Patrick C. Beard. - */ -/* Boehm, February 15, 1996 2:55 pm PST */ - -#include <Resources.h> -#include <Memory.h> -#include <LowMem.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "gc.h" -#include "gc_priv.h" - -// use 'CODE' resource 0 to get exact location of the beginning of global space. - -typedef struct { - unsigned long aboveA5; - unsigned long belowA5; - unsigned long JTSize; - unsigned long JTOffset; -} *CodeZeroPtr, **CodeZeroHandle; - -void* GC_MacGetDataStart() -{ - CodeZeroHandle code0 = (CodeZeroHandle)GetResource('CODE', 0); - if (code0) { - long belowA5Size = (**code0).belowA5; - ReleaseResource((Handle)code0); - return (LMGetCurrentA5() - belowA5Size); - } - fprintf(stderr, "Couldn't load the jump table."); - exit(-1); - return 0; -} - -/* track the use of temporary memory so it can be freed all at once. */ - -typedef struct TemporaryMemoryBlock TemporaryMemoryBlock, **TemporaryMemoryHandle; - -struct TemporaryMemoryBlock { - TemporaryMemoryHandle nextBlock; - char data[]; -}; - -static TemporaryMemoryHandle theTemporaryMemory = NULL; -static Boolean firstTime = true; - -void GC_MacFreeTemporaryMemory(void); - -Ptr GC_MacTemporaryNewPtr(size_t size, Boolean clearMemory) -{ - static Boolean firstTime = true; - OSErr result; - TemporaryMemoryHandle tempMemBlock; - Ptr tempPtr = nil; - - tempMemBlock = (TemporaryMemoryHandle)TempNewHandle(size + sizeof(TemporaryMemoryBlock), &result); - if (tempMemBlock && result == noErr) { - HLockHi((Handle)tempMemBlock); - tempPtr = (**tempMemBlock).data; - if (clearMemory) memset(tempPtr, 0, size); - tempPtr = StripAddress(tempPtr); - - // keep track of the allocated blocks. - (**tempMemBlock).nextBlock = theTemporaryMemory; - theTemporaryMemory = tempMemBlock; - } - -# if !defined(SHARED_LIBRARY_BUILD) - // install an exit routine to clean up the memory used at the end. - if (firstTime) { - atexit(&GC_MacFreeTemporaryMemory); - firstTime = false; - } -# endif - - return tempPtr; -} - -extern word GC_fo_entries; - -static void perform_final_collection() -{ - unsigned i; - word last_fo_entries = 0; - - /* adjust the stack bottom, because CFM calls us from another stack - location. */ - GC_stackbottom = (ptr_t)&i; - - /* try to collect and finalize everything in sight */ - for (i = 0; i < 2 || GC_fo_entries < last_fo_entries; i++) { - last_fo_entries = GC_fo_entries; - GC_gcollect(); - } -} - - -void GC_MacFreeTemporaryMemory() -{ -# if defined(SHARED_LIBRARY_BUILD) - /* if possible, collect all memory, and invoke all finalizers. */ - perform_final_collection(); -# endif - - if (theTemporaryMemory != NULL) { - long totalMemoryUsed = 0; - TemporaryMemoryHandle tempMemBlock = theTemporaryMemory; - while (tempMemBlock != NULL) { - TemporaryMemoryHandle nextBlock = (**tempMemBlock).nextBlock; - totalMemoryUsed += GetHandleSize((Handle)tempMemBlock); - DisposeHandle((Handle)tempMemBlock); - tempMemBlock = nextBlock; - } - theTemporaryMemory = NULL; - -# if !defined(SILENT) && !defined(SHARED_LIBRARY_BUILD) - fprintf(stdout, "[total memory used: %ld bytes.]\n", - totalMemoryUsed); - fprintf(stdout, "[total collections: %ld.]\n", GC_gc_no); -# endif - } -} - -#if __option(far_data) - - void* GC_MacGetDataEnd() - { - CodeZeroHandle code0 = (CodeZeroHandle)GetResource('CODE', 0); - if (code0) { - long aboveA5Size = (**code0).aboveA5; - ReleaseResource((Handle)code0); - return (LMGetCurrentA5() + aboveA5Size); - } - fprintf(stderr, "Couldn't load the jump table."); - exit(-1); - return 0; - } - -#endif /* __option(far_data) */ diff --git a/gc/MacProjects.sit.hqx b/gc/MacProjects.sit.hqx @@ -1,886 +0,0 @@ -(This file must be converted with BinHex 4.0) - -:$deKBe"bEfTPBh4c,R0TG!"6594%8dP8)3#3"&)e!!!"4UiT8dP8)3!(!!"50A* - --BA8#ZJ#3!aB"#3d0#'GM,MBi5bkjBf038%-ZZ3#3%)Zi!*!8"@`!N!6rN!4069" - -568e$3`%!UbqAD+X`19S!!!Ba!!!,*J!!!F%!!!-PfTmj1`#3"PET)d31)LTH6H4 - -#*AqG5b5HI*)QjY$IIb00%ReTJSi6rG$jG(bZ,"Rc,9Umf[IRj)6FZ-j`GfGR)#! - -m-#qLqB#cj'G%46qffB3q8AppLXKc+P&*il4FMJMq3N32r[U,(PlSNdrQm-J(4!p - -jK)NHmKJSHY!,&chS$4)pk%8mL3I)B0'$AU6S3'q)k%%[5[5J&ffa#68)0ZM&#T! - -!*fHC-2dFZ3i83[Vr[4Xh'+DNQrm'J)rrpqe%ST`,FeVi6b,*qHH")4eQc28NFMN - -ZT*m,L"Y%-`pdAk6RLHDaeVV0a,,@P(4UUK66rUM'8bf91llS("lTh81)MBQ+4*q - -rfHENEhD)Ke#3!09'M%bL[P1+G88fa$3e)5Gpf0kARpBf*6eIH*0`ZBHR%ii"PbN - -+D&*)688M)Sm$Bm[cCdDjh2YIjmAc`(TVpi*Vka((A*&Yl@'LTSH1M*AMP#,2[A$ - -(FHA@S"dL4dER#3b!EfBYem(C9P5iGH"a-bb-AL(F"bb-AL,F6)%a9pJUL,(hf%B - -TeQb["X5ib4DQXV!-fa6&mZf&3,(C&UDd-((SpeMBEIB`8Zc,BcZR3A5'X+jYj$' - -6)6HVV+R[!`#3!`X!(E@*MFQ%R4d"))`m[3JM[c)bBS54Tj'M(AP+MK&f%VD5SdG - -SANFB@3Rqc$Am83(+)`"G(D%A'9!bBQ6!b)b4Sq3SH8D1NDGNX$)bBi54!51--$* - -Kj0L!M"KKK"dC--,)-h+-6#KKC-$)-F)NamL!!Z06#X!!b&%bBUHp8RcN'%%6!b, - -i!!kV"`"DLHFaK*!!"Ym4K,,2i2X4c[,`c5!GIPf!ZcNi'8'VfJFpSfdpq+CY$8j - --V'f-DZr2[36#1(ael5hmfT@1cSU66D5pqDSA89pdTP-`Z[jj6T&!PmZBFZjal"& - -5iG6#blE$+&kLh#QZ118&(0T1J(hZ,9)5MJ9ic*qPI!ac'RJ96QMZjSbkMq()Ui6 - -B+f,,#'N1icbM4N"aaBr1`3Z9U'8RY'XAiVXFKp#&k2D5Be%VCdh4%,+2QS'b"Q2 - -%0PNT4rE#%kTUFqYDM56bVjfe!p8MqmL)1VmjVkJY`U[*$&*L3AMSpB@LCQ*U&l% - -T+3890rL,V9klFN*4@f0UTf8Z&&afN!"4GC6G8p3fN9$4+4[-@DAeK%lej"@eAAL - -eU@&4[Tm28%mqqUkS(F+VDa#lB&'rlRAllRP&l460Qc,)MHR$jMh@$8Y4Xc'e`cd - -ZE2AUUiH+fK96feb$epq&'RAQeLG&lCDjmP+"Kr8k9#qp'eI8RPf[6R$dS+$UcqI - -ELYSV[*ETFL&j[@lr803qd9I2A#bi4Vei3*d[+@Urk*!!&abe0HTVm%44"i4A6JN - -c(2I!kjRl6a9e813DK"A6p(LjRZZGaGH+1L5SiBT[(6ekd2*ILMSXU(l)#m3QMDB - -V+QTG!r*NG#RQai#DNh4,l0&!Ie`dYi98Y1%1A$5hKP4,`d9cHdKP'LkD@q4hYC* - -%dfdLeCCNN@i9UIBNLh5l5(8N68qhM&4R`d9cfdKP'bkD@dHU+qe&XRfNZSqc10j - -#8Me*&ZNfNZT0hSYd+dP&ri-FGM6G6P,p5D,rPNT0`dQLk5+6'NLb5"HDe'$L)Pe - -X8N2bj-Z'$r$6-$NZjLGC)1lB-"jQSff@[ak%LJ[rI#%p2ddAGREN(@"V+,S6CI! - -I!!!0$3KRBbj38%-ZZ@0M8&"$,VN!N"#$BJ#3%4B!!!d'!*!%rj!%68e38Ne33d- - -"!+X[PfqV-$P*!!!'-3!!&UB!!!(&!!!&C80(jji!N!BMM#0%$L)UANhN3L9rV@9 - -B`f#c2p$XpAVVCc-[`k20Y5bJ+CTHPScj`Z'!lmr*#EPaRH(ZcR!J!!rqMKG"q)# - -cj'G%46qffB3q8Aqp4R6FA83PM6`KUjaYD&IlZ@jDrY"pk[b&AZrdH*kFbb9PM*S - -`4Kh$c8Lf0bVe+Y`Q$amM6mc%*C1(jF&1bFSdGIlLpc*04b#X&D8[&6R%+-#6HhJ - -kX"#A+Bp6%6RGkB&kM%'jh$ZLmam[1Irq,r82rGM"5H4bh1ZB+b"Z%&-pD)5CL9( - -AP(4UUK6$!(lkH+UPFXFARF-MIHHMXf!5Nd%SZYRQj'pfL)G3N!$94X#(q25G8U` - -VXL'QU3Njk8[phV2@0Q92J#d6rA2N1["[!%c(M4X-8p,0IcYJf2lRBmD2c)*RQEF - -68m'9jqq*MjHTji&GqDp$kh501r9fqVPJe4iQDRS)L!)ELqiX08i#@40jpP1+F@p - -iC&))L)Qq4Bk-cK-i*h`cDlN1cMBUbZA3+beKhX*-&UD`X%ME%F91fHB3BaCC''Y - -KNba-C@(,"-40Yl"l,#c8`YCDf%#"XGD%F4m3'*i'k"iah[Ddam+k"Xd3eV@02'B - -bj'D90I9p!!!-q)[jAU2HhQ[NiCQC&f(Ne`JR!hlN1''4Sjc`)hcL5IK+f(@8(q& - -(1&Nj2XreTBI[M!0dGB4'MK01#CFF2c,JK"*1MNZ1(q&(11@5ii5EKimF*ja``Np - -#bA(#bBL6BpQ6jq5imT-m2mQ!dq2N'H&2RT2M%Nii'6$J,PF!#N#jGS3IS9Uba%G - -'A-)*8[#%!j-9'#r3@EpUPQ9+NL6$ldj*kVS6INIK@`*q'q$hGRJCPb,`pUJm(fQ - -3!#mGrdQqe$Nm22hkJ2cerNp"i3$m4Z62S5YA40V([V`MbHF@)QPT2IN@3@$ceHm - -I&dT3GqF9K,'&&8[6LKMTbQ6@-*%bJE#4RM,b'FA*'VC5`0BBdTa"@aNXM#)mU'" - -N@d@XSIKMMiMh#RbbLSjLT49GG9"F84)Q8QfN&![N1hK"A'V5F,,dJIF@+`iNJEb - -H-(5Nar84j!"*Q54MH+j&08dYQc,(ipT9I+aFqIQc-XP313&803UUPPD4*+UAIlj - -$U+jMAP1QUSfEYV2Qp4HKfZ#TYQTCT)hEaCbp+ZXH0"m5USfHDV1HbL4cCT@41rr - -5+d+eL4&+'hR90)iLRp$LYcm)e5McQN@UMR#&$kKqr%eHU-DBejbUCC-k+P4N5r% - -Iha+Uc5aj)kVfm*'ej*8Dali5ULfHDLah-l$Zfer1#G9@6l8TTf*r,RKTZ2#Q8'h - -MA2&i%MYq(0aCicHKfPlfDYLeJ3*FFEG3l@"HmfJbqFrdHU&IU+jRHE95BmQFkJF - -29)qp)93hX!aCGLfYP0!jSEU4HF9)-e8M9rADGfC4U(BbVVC66+8XR2Hj2RAmGk' - -kLDNk8`@p0[6F"hrG,e3h`kmm(BhDMQjBm@`ejDH1pG)YbUXYM'Y'5aD`-H(VPZ) - -,*i6A,Nqe)D1Y'5@UV@HM3VAE)a3$3MT+9jAGa)HI#%*E@9ie+jmf-PA9dY#66`Z - -[fkMA!l&$eZ3)bP996crcal6`ZRdT$9NG0S#+V([`rRZ&eae,A%dMGB2V4H%9YPL - -LfZ3B194,NC[ik!QKZSYlaE"deVc1$3[9(XVeFJIG0T,9**@'AVXJZ2Db$%'!,$a - -e+d2+8SES`Z&RD1(C`m,VlM*Aj)cP#M@ZlJI#Djp(U28`fl)VL9dKY+IXeFM!HRJ - -MVc0#YCpj6@!,M0VrHYh,CMQN!FBjl1ZVEPhjaCK)``"6,6JiU@@ekMjdmEEPI@M - -3DpXKj3pi+f`LFFpIUPrF058)N4X)f4ZQ*P5c1[&!pGhC4i@Ue2BCE"bRL&haLRk - -Thb#ZUK&ZK-Kc9k4Z-[QKhdaf&1KhN!#*#IdZ-XfJhdPQ)I6l#![SYjD'HXp$hdA - -f$1LhNlN-r4DbV8$I8iS[RSEqj#URqY@$9b3dJG1XG))%khUHJMX,Vh896Z%"I%B - -PFK1MejpP2[@,$LpbTe[Q%h#[hhai0BBHF+r-MrTeL9G6k!!IKHa1rmf2qMf,9c6 - -d)%I[5Hq$1hVVq60(`H@-9fb&cfkb$BBDc1-Ck@@#jrVH%0cXH$@cIK[C#F&2Q9X - -[qpl(HTpEQ9F`KqVA3&iYS3Pl6#ARpIXMVpCP6[+ma`PkbJPkbJPkbJPkbJPkbJP - -kbJPkbJPkbJPk1MHKTlbJTlbJpqGlF2RNe4CD`1XDTfUZEYjDHE@[F0T$,KbK"Vc - -mA!9AAPiGS3Qjm[HQi+l-LraVj'p1i3&mcNKce1@eZ4pFX(PY@1(66rD18)Im"eF - -YAJ1K#AYcK92peXpVBfM#AZAIKi*r&r$U$"h)dkhp2[JI!kp0S3GjhdZZV))A!43 - -jH4kk(TLQKF4pTXhHI!ITRb%hcX3KfeN#**1EI54a"'@Z8(9Dm%D@b"Y#qhm!N!- - -0!!PRBfaTBLda,VPM8&"$,VN!N"#ah3#3%!9X!!!I``#3"2q3"&"56dT,38K-!3# - -TY1))Uc!eD!!!@F-!N!B563#3"2$I!*!)22J1`2KbNQaPEr+hGEX``Jk!Vpa0&eT - -RDl*eSGZ&%EEAc@iGG+hAYBDRapHZd6ETQH'lV2AbpMVJ4lN,ck0G4lMb)fcKAQi - -*AeLhm1)VRfPGM,"Zi8pBG1%a3VYZi@m,@rM#2'iAfhjHacE,K"[bJGYB,ZcNP&# - -"$cqJ[fRG`SmXR'aMC-H6r-)AXTaNHE+Fj"HkN!"0"R[G!H4jITB&`!(!dKX"PZ# - -Z+PX+S(dCS&YGZI3,cN3L+P4H)V5R@D3p,54$JD"3'!j')mhRcl%mUJ)9e2PVUaF - -j[6lNX)ll!4,jajb6UrZK!hSTX[caD`$ZIHl,pdeVm&EaLeKG-YjQB6AKT)84pF, - -kB$+55%ID`b-4QF0T19ckfSl,d['15$X-4cTr0"2!dIR5%1j[S4JQa0,J4lT!pkc - -"EjcQ2ZmmNDF36,1DH)X!8($N3ihbR+mcX1GC!E!0fi)+ra)rCUL`#HU&V9)ke`6 - -IhTB!b&RK%B!&4fA8Ecr8+8IBcr)4Z8L+$bmVaA0$-Lr)$3+SMf0Xkh!%1L(hiM$ - -H56i!P'Q(V3ZXrmCRE,f[6f'0N!"Z$E6%fl(AqCL20Ka-#kRdjh`qA&CRACe[!5i - -+PSiKjh)6PJM4H$#5%&U%HF#GqF0F$MM6fH)T68dFSQ!hQ*["e3hGME'TS#e`Fmq - -Sl`'0qRTZMfEcM@b8M`(hV,a,kqB4N8iZ[4Sh5b!9ddQpT9YP#5UK!NX`BDbr,"E - -!TME)X#08Bm,*$)fP2Ci@G1bTGUbETe@@q%4QL60h[2d5)BQGX-U5,*6)q)99'NX - -bP3a1pJZTH#BC&"!P%4'5XP`!Fm82LidDE@#h&eejC#m'cSQd"k1C&S(CD`*"Va" - -S%C+TmmkE6aJ*6S3kTd8)4GS&PNjQ"#DY1419T&!JQT+cV-0*5@'9$$5+K-58Y"% - -N8Ea'&)q3!*!!UeBZ'qd'!&14D",LQVJ'$qTI1DUU3$%0cAD!e9HMkl`KaGAASBj - -TJ#pMhSb5Rq0c+LJ3l3LJkD2dcrJM2Q%3Kh&mZL-JR(&m+L$L-)j29b,%B4br8)j - -X!Y$j4ZUh`)[eI!A!R(d!4AHG`LH[d[f@re6*b2mAI`)H5F0aI+2XYq2iC)+N`6M - -qC$b5"Z2ij,N%KHI*24K!$k@Plm*Hm'Rd8-bci0h@*rK6m%JDM[-[aZ1Nhq+IKNH - -UJA&mE-V&'KM(2a129!2Mq2,5(2qIrSHmNfTSR2rTH+3D'XHRfL81irM8FE,Ep4r - -eTUeM[5Ra8bilkJJ6f!)lF0e(0'p*Cke+2Nq9ccEjh#UIZq6c&[RmM(3ZV*!!cL0 - -k&5l"Jp4$Ilc)-m$9BDMqeV0m$l6LhM(EAX9A,10lG,aR)2GNb6Sm29&b0@CfmMd - -&Mr!pHLh'hX&p"qiPVV#h)jIcaN(YAHVY!-im,lH&lp&Fc$pX!KD$+,qKqbMQh", - -@BjDAX[M-KFF0&bH!le%r'GC@E`LVXP9mKXdeG)3QcED[U18Vq4jY2c-fD8XFl$a - -Jb0pEdXPRCYXVR!e1c(f%qF`GKAUQcPT3T6E-YjCF2GYHhq#[aqa0'*p@XJl4r*8 - -qM(Fa(e1(MAb2DUZDVTq-SD2mJ+kFAj*ldAQmX-KFQf"C5i,E1fA&P2jHj`!8*c4 - -Cbq,eU+LUqmriLrQ-H$8"RJ(GXC,YKXYCKk(M!EcN!3MV-HG3b@DB@MEAd"P5,9[ - -2CjDYplkH1ckr$1D5aNf'jH[,p0ehXaPCKe@(eI0#11SC',UQT)X9K3qD(G8hK#c - -C@GQUfADhU*AQPE#2X"A&i-9KaAUdDe$"bpQU)@mfJNfL,U61YQ4RBFiKFac+[hC - -Y@49Fi(Ye4UjKII9Fl[b`UM[(Ca+6ZhF[@mq`0Seer)R3*#Y$$IcK`pPc%EI6FKZ - -I`IV"'%bLZK'Mdl!5jqQ+3J!feU'k*f(FZf(EGY@@N!!CGAmMqd9@CrDD68d'jf( - -3TlQV6AYhAEJlGh4$epjV3bSqBiDXKA!BPjeTVUYp1pI,DPfESAK1"2eSD[B-elh - -H#"KCEIFl0K-Um0E-CFr[,$HC6Hhc`fDr-eb-HmN5*`iSE-8)!#TL+mfKpUV"jrc - -$X6fMXIlRYZ5'5$I94YXX-&C(`""L$Dkf)VmVe*%)GZr'mh(#3i3EqlYKNKblRf* - -'9fi`h"aV43`ejERI0DPfA"MDB``XX)HHa#bYS3h1c!hCcPlQ0+mDh0Yr`mEU8Hk - -YrAmUXCIMj8SFBkA%6iNVCjRI%C(IMj&E3@l3G[C&a#hGId-rBQbXrT)c0e6q'2p - -eC)89`[fJmPd62,qrh"5fBCA-$%rb1d1R5hbj`ddQ1G,60%Q1l'T#EqB1)110@)h - -%i!95M+ekEiM0HfqSHM1k9UQY&%V$jTQPB&VZFVm*4FmG"[Acbff$#qbZ,a3IKUr - -B"VZ2A1J-[B%elK$paa&k8Z63JaakNVNdL$c1fP%+A`QGIJ'bm6iH0ZklkX(0S"E - -8jP*3Mb,[3pbE@&fLD'2RS@ZY1`pG"kj1X1j#2R9*X*QX*TAMbYcVef*YX2)T6FA - -Q@D$Hf'AE5@VBGSP+2*elSqN#9T4Gc"`I)"SMr!P3K8hPL)Se--@E+!*#j8qBAdA - -F)f`H'*JMT!TSH@V*`'V2IZI1K@DpeEljYRXA2YJ9eU,IcfjLaVQJjXS%LTUELM' - -UNU1Q*M@HTVX(FV[-AA`QqadqFr3i9[JU81PlSB$r%d$A3iqhZfXV+KG!GjBeeU( - -[-cfI+9deX0(XqqDqeeCrEqGcqm6iUPf$i$#AQd`B@p0rSjJ6NR2d'hX'fX5-"MQ - -MU,pRS%(-F-NCDZeUk[$*BA*h$2XG9RaZHj-D6bq3!1YJC6AD61@QEFZ@lXi09,[ - -#3r`40LMRE"V0'C!!FecYKJh1Q(D[`hN%90BLbX@@Y!c8C8j3QmY!ApD)[GhVGTJ - -**CcApF6MTA!ZjkemqUrh9AKG,PI[cVeVI+q#h6`$QIm$kKcXmZ"@c&ph+[pbaRf - -+-2[6I1-)JqV1YQR9UpZ-&Cd9Uc'6i5P6JCdV6"8c-TKV%$1eQ*@af2(L22GJCe" - -VaTDFcfaEffcXh1Pef-$Pm$Vic)0VQmqbL$(+mRVQJpGcr8kVcZZakIJ-9F5"VJ2 - -A)XVacTfpDfd&ZhSY"9l2XleH6rpD3Epa6E1D10FlQJjH!G34SPGS&qM3*fC3Pe2 - -L`2L%lVY,CV!*T39qcpXH[fHHVQRU'%UAhk2&Qk`VKaD[,i2ZHk`cX2[6K&iQRrQ - -lbPXmS@QX)1Y!&RH`da"Y"8BfPYDc4GPC#3lV4AhlG+E(2&HTGaMM!VD)&65CaPL - -Dr4lQB&J09`k9kE(,mhf[0f[T[[2#[mfpH2-6*6k4bk,U5Z`kcd%Ia$UcfEZ2Z!G - -1&'%PEF2B1aKl$'0hBH`R',X1BjX`pP1-h6AD-aHa8TJD0Z"T@[KdIJ$5L*0!R+1 - -)NmCi#mDEj(J5i`fS4KaV[49[Y[ASjjGJCfSIkdaR)f+)e-#cLpMMH4iTJQFE+B$ - -RFiN4RXfXNFpBZGXAc[3QM,G2Yh*CMh@3!(q8lFE6#ID-P'YZ"AefKT9M99N2Re% - -Z5UJ[cKd0UjR$Y@%N5eQr[bVdDANH1X3[2[#XjcJ0%Se1!jKa'U#f[M%BE`p&`TC - -@-mfEF*1J""c`J'Sc4b0!`0Q1cH9X!e(3aCl!)H`k4qIhpfYS1)*',+EMMLJR'JM - -*XAVRp4,L3*6EFHJLENI+bThcfZ@BBX$BV8U1Sr-@+@iljX&F'M+D6*J-'5#(%1k - -[1&EhlT'("@L3!%(&RA-a6V0,2#9X9%3D8*&8fT'k`V(k5V),NCZX$kh*MY@GDYV - -4Y-8%c[bAlh!l-U6&69c*e@N4Mj-C)C2d+XbiMLZjUSJ3--Aq8HQ-$[R0RcMaPa8 - -e&lLqlpUj[TGS[iMVqri'VZr9AUl[KhZi[J-YA0r"GUl[d&eFhq'YA0rr0h*pEml - -RqYlHa2Ap"212)[Ba!pGh2-6e$Gc+p3dqbr80[FMe`hbZAjA&I4IA2aN0'##DQ-I - -F0B%8$M1bX*!!6V&dUi!$KD&N2-DNDAZFBic&F2BrKF2r6-!j%"D+4)8c'q,aD,f - -3!-3j51B9SJP@RdlLA(j+(8X++A@L25E3BD9ki@,HV9l@i1F0$6KDbP$RC(bL'2* - -%ikP8)(QCZL15MXe30%"dDAVbI)DMURqBCV&i5b4dfDrbrk!LN!!@@#SGL#9B+*j - -N3JH#Y3HLV#@5r"fhhq@IS5Jp9LM&BLQF6+PSMTk2cbS%9c)KQ@5a90K#Sf4N5PN - -S5M[3da4hiQK)k+XiA(ND$YpSYSe-m)LIZ,6N5rL%!p$M"e)Z2G@JJJ8FXU,((EM - -pQ)@$C4*&(*ZN6`SqKSGP)q02Q+F@[iqA@RaFJFBHbCM4qfMF%h!%89`D('LN6e` - -k'KDkIh4i5)XM8r4*4)JcM9hKZ+)%Kcj2Rl4%aj+pAcSALTmN,qQmF&6[3Z`$k*0 - -%H%M18RJEF-b22R&0qM&+6,@P[&-a!BIik*1U!BGKe64B611lY)`iBNHI9"S+Ab9 - -l)JjKd5HT3V25,H+!P%`9Z`rkT%9kNCS1THY!pHQ6Q&%@$8)T99L%Sfhd5H*hI$J - -64C28Y,C`Djl#m$6b!XGfTmrR*X8$d@L`Y6QkdK+%4i(E8[b59GP&,"cqQPC3ih4 - -MlA''N6k&X1iVfl4IfC%6%hNG3kaD8[4Nmd+LGcpXR+[Xb-XNFZZYEkLS`Q4G+Yd - -5L413!'S-T`$1NR'U9P55`+R)+U%aM8!K9-"b-+[Xk$GR5FTkh)hN*rJB5@-L'EP - -%j(6IK+GdbSlH-e9"XT!!TkM$335*3-%BFqd`miD+#P4)M`VKJ,5STAS-5DFJ,A9 - -lRF6mdQ"V)#Q+K-c,[YUNl&M9XNEZ@PkXmY(k8'eCj+P3G[5T%69*)e+cY5@CqV" - -#$%SP0969B)9`fR3N*L#-jAfF#50kqURL8%pU-)M3+FmipZBILqkTH!E9YJip)aj - -%`mKhi"GMeDhkeqSZq1IU*VIi[,SeRcM3"dM$M['C$j!!BhcZ!m11mCN2&2k,$aK - -qi32[Hr5%Rh[d,hX-I&T(k6&F2UIBBc4(!m'9d93k(d+2NBr*-djj`D*SpBJAZ,f - -9j!86F'3iZ$+9LDAqShqJf[jh,cLPbr2V[SPKZ8BUA*j'UT'@jR"M,2UIAFerUC* - -hbU&Hqqk24KaUB492qKV`$C4!&+Z"V#$rQ"GJ24rmKPrCa6X4KAZ0c$d@5+lmTal - -hVejS(qNI[*91V#iSP&p#b,2@2paR1A6E52mJe6FBBMJ1dGJL*2+9p3qIhj!![Bp - -M('C8fB"h)XK)5,I&%TpfThIZ`BHa&(9Vm2+9kL#QA,kQIZdYiIaLYrARRVV2f2q - -YNG[k'UGr%8DeBN-EK0EmEAlarTd(p5,rIHIa&j&hIpETLXk#R@jbC@-b,9jkj$[ - -SG20dc3jaep#MG,*Rm*9,kClGd#jFfLM2Qq@TmibVrRcNcU2@95h1CX5Efl"&%5r - -8mURGV@U5ZdHGS,k4EYRemG4[EPCrFjZ4PqYQYFV$Li`LB4cI%5Ak4CIabTc4cV5 - -Z`5pfTSPdXM(B'Xb,d*RQlCVl-6rbfNK(iUpddhemB9))4J14@"k%hM42efh'efl - -%*i192U1qBE',qSa81Y2F(%qfjbIV-mbRlM2Dk!QiiGN-X@CeBXhQjHJG2R%#l)P - -%*m$r!"'46R)DGS+2k[XNTp(qiGGq@r81$FI)IYZ`[)lZM!cTba)YbQKh2VHq(T' - -iYATPahXMf583L9i#-b!5'SA3JP$LMk5FV"eL5P&e,)!2AM(fqq[&rAqqJEX3ZJ0 - -4GUAcq1#I[$MlrpXrj3jb$ZiY+2BkkdRM@qKR3r"mcb,mia%m2lM89dZ[Vqh!-,f - -QqNbpVjjZ29qJCq04M`2d!b+N'UT5MqGLqX832%q[Aej$mA2Gr%)2D,J,T!VQVUK - -`%6jhAB9V+HAI4,rjJHFl+Pb,m4eQEZZ5@KrPp5aF@N9GqC2+ql1S&YkPdTmG6Gr - -!qEV`09U+&4c&223NLQNk-DpALZNdR1mDqVXNM'QAB`crlBKL%mp(M*G"*FCZ`&J - -DZ&cZG*Ki-f,J@mmLMhX`*R29E-FB[Qe,XDNr4DlPFZc[1GrDKlkqQYkKeBBaYUl - -YEqK(@E3aM+N[HKM14ThU%2X*Hb(-`McNHXhpB"3j2BDaPJB6I!Ne%&qEaD`r`V` - -YU-G"k"3ar)MaKKaEKl'$NQC6hd1-Lq4B$Q0G-XB+e-BRajCJ,+'*V3bd4NrqAp, - -B[bJT[kddmXG*R(e#AIa5)9RRT[cr!`!!$3!*Cf0XD@)Y-LkjBe"33bkj!*!3qL) - -!N"!0"J!!,h3!N!6rN!438Np+5d&)6!%!UE6L#+X`0A!!!#*k!*!'$d%!N!43[J# - -3#1j"$F$iCXbcEQ9ffFS2dS@*jbZl63NYVcACZY$0##1XPDZ$V[@ke[$dmVQ6K5h - -FYGEmE+(Rmc@246PGf0D9hF)@VNAi`VhS`KGM(GQA+lmmdfiI)f`c`Tq`63P23V[ - -Y`VEH`KHqX)9f(@(E*!Zrf-)@IZi)AhKXi3[E,M3j*432"&!HrHaD@&$M#f(,qq3 - -@XL1hN!$"3Rk6AcKCb%+1%di@J&@""TeG+a&(42abSQ*m9@@VL(4[%29TUPEGj%S - -NfN09'd1a&"q0T8,*F(-`0#85E)pZZ-eZrEB+Z[80G6A,A6ir2'5jYd$i*mlPdrI - --@8-1XA6I6r6dUG[h&cAjUSAPI(dbhQEPDb0*+mqX6fN-*U1*9$3@'8GN$c0%(%0 - -GelfTH&Fd4Q0)jLrR%MNc2aM&pcf8d``Y,Ak!B(cHb*GQH1E2Phb'JLQq0Yi5)P* - -IZ&DMccNrDX`mDiN1BLbSE&MC!)B+3p!!(FM4Z3"pmf##5,64Fd39&fA9Eck6N4( - -q-Kr+TK`qGQ`-&dGPAb51%'Q'J"dB3bK$iZYMHPIm%$'QJ`j8f2l6cq5j@TmTYD& - -8Dh0,2)CCjkGqG*&J+Y5CqU@IDmIQUUrh9q!`X*4GG$59b(1#DBYLrXT3Hc`B6B4 - -D3NZ)Zr'(SNLFq4ETPX+0#01J@-c9Mci&E"ETe"lZK'B2D682F5pVpcl#6cM0`cF - -VIh2RdI%LA6N'$6l@jXi1I@kfp+LX3395@i-*Bq1p(FdBDS-m*N)0#&FB@QXXRJV - -TqHr&d$F[UDca!YiDjchaf-C3%T1`bTUFNM26%1V@@T1GbH#dKP"R2*d-KU#5L)D - -5FVQ)&NXr0"XEY)Prh,6j`NN!Fk+aB(Zk*F3lDTZ$[P"c5bMC1Arq8UD4i#5T15f - -KF$3@iP2*G)M2RB8&#LRFh0iTXfaMT'5S@aDD8))aK6DZ*"9[2BV(P+51c4hG,L+ - -c53S*k44Xa8Acmd49U9R$Xk-p6,4P'e,Rh4bZH3"e6"(G$Pjab5Ikh&MNk*3JKBH - -am`[rd,p4KJ)IdrpGAkQ!SYrdArSB+K6p(4q-kaYR%DeiK@MHTTrT+airpFpf(!c - -C6D6hMrH[fSGq[SpSi@NLdj2ApC8!q05rrM0pH5A%p,FGr*AqP!RpYPrTjl,kIr) - -Mrc0p)kiXJcl9Cb(1%'6hP`BRQ0MP'EU4U`lF@CCrSLp0(%#3!"HAp98B52*lSGq - -&ZrfkrM3CD5@kEp'%2R+m!*ldPFM#f(9p0R-`C#rdT5&)cLr`#Kk#rMULrlIXZ[j - -d'6P$Y0N+!(Y!54rDdc&h'$"brDYqB3l4$[hhr$0$4PE$2eXNb2ieb2fErJLM)1T - -RZCa*(rQIH68r2Xk[*I+#iKreEj!!r52r-kc1XRmYjSpI3ai@B(RaKIqI,BSqG$# - -E'MkH69X[ckB'iJEe$Qi`RhhAFB-&cq&lKKZFKRc"-D9m50)#'Z6Fp%2+jFLffS0 - -N5Tj%4@C5"GI&cC(ZFcD,h$e838lFZmM*m-eX'F$dP%A,,mqff[SF8$&N-KPiM91 - -9NF2XSa0J@f1fH(J8"hGPCVYkTSRLJ,V55r6R486P'%J,"U5PdFrVi(p*UM20Z#1 - -AjGIGE[0r"EdLeqdcjp[mNSplX,Y)hCYJ5aj0I@@G*jb-Gm65lHf-'iiR1d+aG!I - -M4Q-YACfKpTEfZ,40CpQLY-XkZ5B+lNFp6BS(cVppFXHLm)JE3biI%jRZ4TD29iR - -SY!R1P$QEBbjeBD*lqi'1GccMbIje'bEC1H@a56dI1a@*I@9pEqBF-qYcdaaAM`b - -5FjP9B(QLVT*e4Aa$'kXN*T*FX[j[jrbLXcJ8Me@X&Eh%AL-JTT!!Gd4B3#S&rjI - -6(0UBDSje*M'BT4+G-9BhC9*@-5jcH$[1@!XpJKl'$ZGDCHXmRb03ICB4reapCC! - -!(Mqj("6&rGSNfp+B@FQGKfZV'cfXb6ZLR8&V%2h"l5[mJ8hjJPR%eT0&kPUA"r- - -MPcHq*D-)FI[,GTp4[[$$5jiqJ&BGP+G#UkjaI6!H#dFM9NbNa28pDebXI1(,,(N - -ED'bUV!CChjPULFDCN!"U8NG00mXke@ZV@1Ge4VY$ke-3#PpeT"PAmJT`"+9)V,N - -pTl6IHLkVI,'RZ6PAIkpR2HXM[+GCRdK'0dVZpqGr6kpmXC'CT5KCd3'NL33K%LA - -eT(2pQ21Q5[3dR+GDX116UUkC9$)S5UXm2KGcINq`Y6NTP421bhiMS(ba5j&Vj+N - -6f#aTQ1JNeElPhNVPLj`GVbDV%DYQDdZbmeS[j5Xpee4GLelLG+PS4`JbeUXka[& - -k0V$H4$f6H2FMHFHjNP0bI"Sd(Fh4'2DERk5`R-%10TmaEFjrI`$I68b$mrG)kq6 - -aHBBP*&LlQC0%8Xl9HQQfr9b!L@&XcMHPT*eJ*QI3,1Ibj`$iNqZ&q@YbPJ1Ha&! - -Tc3P+,rc(E-IjIaGE%9QEH@4l"'92bccba&FiN!#)&l6[jHikPAbI*GrYmVe9[[I - -)phhbr86Z2U8bGeIk!)'b%TGV)mAiNDCMGeGHc9GI%IUT&GqZ"BjUSA+ed+mA[-2 - -LXC)(FAZaC"ZB'D&IrCc3Ep!"HarI&r!YF8GmAD,SLj2'YmVA4CaPLEK2k0IH*6a - -V*Vk$fS9GI4I"H5aL!-[(@%*ka9$HA3N5qMA()VUDA4&9YPT)mi[cZX*6&cM@eJP - -93VpZN!!h"R3P6RiqmI$[+mN)k3@15PH6#pcRH,qPD`T@&9NVUY3'[UeNf`)(%Um - -4l0h!LdSHK&T$P4pi$qrR04'Md+mkS'(0E3aI&)EejF*+mAAAd"56T5l"Ckd*lZ6 - -dYG-("ec$9*M3CUehlN4&9Aer+0`PT+AR#H3GeRp3FMK[%pq9er8Y223JLKM!HEY - -N,mdU@jbA#DY@la65UhIkhK'(PTE4BPEM30kDR@@'[UIiiUc6TNIh["CTp`k2hPr - -5`jXLjbc1QSI$eZbmE28#KdHUPIB[)RkQV95-AKqV@,pZ+bUiLHmHp@@M''(eB8f - -f*6X2R,FYF5Vrc4ePeE6)rfDaf,5cCM&h@d69*`VTa,5qikYhmZK0Ble`+6c9aU- - -'$C(cf9ZKQl&q68LMIi$490Bh%PU%6PbL0f'aB1Hl9(X5aT1l$Kj@l3YE82GhXer - -JkbdqLcQ3!1Fk6iB8YmemmZL+iq,&A6dRGi493YT#@5[6iERXA%YphBr&!El1[CF - -+&dD44l1b0lLIpNA*b0Ie[@mhS`,[c9hpkT&bXm8F@aUa0,JLKIL@V(3KLJm!)8* - -&l+8LDUmD1G8`KVdmJ3fHfLH1XVUTHZhcb&J6TE``hq4Z-c@i`ef*B0pah)HB(K3 - -H'HbMU6,f$BBChH*)C%0(+c3dM1IjL9Re`SV`bmEQ#NIi'&Lk[$Dk84behl,DCHN - -H16RiF'r0K2I@`Gr,ZCIaFJ8(9XVm+EKbPreGN!$mr6@mUF84qbhVQ,I8i-1$d1L - -YqD*,(#erAVJEVY!Kh&Y92c(6UfI+c4%lZQ4ZC'U$+c`cjjFl(c$,5(pJUS`F$5# - -EZE0`h)YZC!jHBaAMZcmFjCGm1&U$M9+Ne&j+T4(,h&)bVh&lrSC-Tmk6jY8epT% - -+KrZQ`[0dKhfNlm)+9rKGp,K6bKpRq*MNS4mHqT0LLL3I0lp35RH%Cbk#'pph)mE - -6[h0S,fP#'NXTD5D86d2hbhap`Y5EHAZ(lFME$j!!1d1fSr"6Rb5lf@C@BB2jcJl - -d"Pmq29"SQ8HDhKll%9B0qe'T%Lq*l`B@mDEXREcc)d9M9,K%USLj(+VSJHQqK)Q - -BUR$*mLCd,r",+)phKPA01S'YCFRQb(lRkmXX"TYMlpHHARDS*k*$hLm)m'`$`C@ - -&''S*&!*9bDJjS-&YYQGB2'VT%G,Cl`MTLd2Sm'j5'3C),I`f)I@3!2%1,)HU+UJ - -[bkq[4qlc"L&GfMhFDr(rrZQrf[,p)kG15hMhd4&b@XV0CQ"E"aq41''CBqMY(fk - -6'%db`c6B2p`N-G`b3k2E`LC4PM$L%f0jKiiA$`FdZ,h'8JHGYGjZ,MFIA,hUZ$K - -Fiik-#KIi%CQcHi)c,(2FXEaGVJlG5DIV!UPX*XE&5&T'QM)AD5aPC#KEMpRZ(3F - -@d#@FcrhLGd[T9XjApG)IRkldZGhZJ5-RYrVI*)HP'-lr3A8KTMck#[J2AZG[`VV - -Jha3@r)a[((G3NfNVUYR5CUc-9'i"NmFYABR*P@C*M$5iH4*6"eEDLVfl+"l+"(8 - -@M14#qZ$f$FE-%Cr66QkRcbQN$fhIF,09`KM,jee+2Zp$4fakRpHZ&p+X)mlfR0d - -"PD(-NB(YG[A4!D[DjheP`1FGh"ibp'lGS''H'jf"FrF4Q`L4&ES+2A+LQ%dj*8l - -JqAe2P46cqDAU"Zq2[3hH*IV!V%Q9RJD[$Y[IcD0hlLbM[MffBNarf[!E,'IqV1S - -aElL)9fHGF2%%2`0UDi(dPMEbbl2c%Kck4I2iE0i!RV[80kDaL&r1U`2Q5CH@"Lr - -[j0%0QdI,$*Mbr0mIb&Vl[VlL6mAA(hfaa#pj@9j6KDPc$R)3I@Chp&h`$&mbSC- - -1!RXIf22!RJ6fYm!H!,BEf0m"Hh*LCMEaT63VNSGE8@5Q-%`Tk#5JFa%k+H!Y`!- - -bRJ6HK'V%dHZYf,SBN!$R'c'C1LBRd`93$,0Ui1jQlR&I`LU#Zje9!2GEQ52F,Ia - -k)@hM(PmfejF`2MlEaQ@pYK(Kfraah#la*h*F5bXCXX8fMUr1HS@dXLKKFl&i-D, - -KRHjGikbVar'Y9la$l2RB6pmR,LdS'+0CVLaC,H`"dT@r%Z!F2cScr3P3LVMhU0$ - -RDQ6lXmIBIJ6h2FZaT-(pd#Tr(GX$[`!BEfIS4+1rNEepHBe0*1LCXfaR!QFkYKh - -"[C!!E89`RpfiTTEKYhU%C9l5FSYb1eVZ[NShdqFHU(5[B[`[Xmd%lNp8ZZr%``V - -Z`-Sk2q2e,eY9c6DeamCH2MPq""hf),AJ0Z`'mAk4BHU,`2"fN@(D$$6B3eKJHLe - -ijh+BEJhfCmrNX"X@BR0iMP35pJI3b"!RLM2TKUm#`jj4mR%B@%X1Qrhh`&k8X3q - -"I82'4(M5h,f&[F[64H#l[1e2f"XKA3FdhPMh,0f#,XX(PR*-SARJ23cXC6*+rTj - -($GBeQHQ,U+Ad,JkXA`G[(hJpP*%d'S#PC1a"B'rNDPDX"RC'a[6!hT)eeX&I3XE - -f-%rDMYpUEQfrmLafmJQYmYTfr+%XjmL[Mpm65YCl'2rr!!d!#'GMG'9cG#kjZ@0 - -38%-ZZ3#3%%0D!*!3(m-!!%+&!*!%rj!%8&*25NY"5%`"!+QdiJLV-$9B!!"5l3# - -3"K+K!*!%$I3!N!Me"!i!pCQCc1abX2*Ef-,&mj8EA@KjV4fRQfkf--,fZP@[Eld - -Z$dq2VmN'A5Bp-hbAY9lHAJFXfQdl+AG,Z2)ME*&GEJRrA-libQIDl@-,fic`*fc - -6K5HKhAEKE`YIq-)mEQiRK(pXXmb@iapGq-+kKCfFELT3q1c,IZ&ZXPf1@pl#b%) - -ffjdZC,)F@FK#&m,)B+r,!D4[CPq-FBbaqZ@-eH&@A,@%-I9,M(@V+THFE3i'I@, - -PFV%p`R[E)f,)lA5*'SmV)SBMaKm`"H(DkkSAQQdeb1%*lP8%I"Kcj(3rX&H6m0M - -IZTkaqjrj`UCT$PZ9X*!!V`m&fSamV5GNj#ReR!CAb"Z-H0XpDBqF`ePa(%eGaiT - -)S-2EcP+HcTr1B+bXmm9Kh'q$6Mf`X[$"KF4R$RhYV2*CXk3m49H%V`fdL)`T"cl - -J+-2j13Fpcq@-E8&E8'&IE%H%!Ne3,pZF#1HDf2Hf""Q,&l1('*Yr8%EphJ1GXSF - -r%JrNr)3rGBV*(aq@mf,a)FC8Kq$ER2+`6KCr)B9h0"r'+0,%0Xm[rQdqSqFB2cQ - -eBU69f4*S4krcbhc8LClZG$iIR'*cIAh0I"abUXM3iXkAEq$(ilQ,49r!j3f+,H) - -maNhp56c112ejNK@"P6JkPXIB&fjK8aKcR!drZX6iG+jqq&li[TdQiqM4U(!CR@& - -rGU+(,&FBA8QAdZJ+kKT@q*eSAPdm1Mm9!Sj'C"RE!a%aQhqm(IAaK-)B'-FE!ha - -jS(fj'%,(Uc#'FK,*f-@9@FC3113DEaI$J@M)*3)Pk"9$i'!+Qm`pccf[0,(*#J2 - -h%ZcNS8*JE#k(6ij38,[0q$[cVaRB"FIjhRDA,pSLmUCDTmXQ1P[%8(M@V%X))mK - -*81HhL'j[ZmK(3P'46jb,ab@$h%jI@)iU6J@&a*8bd!J5%NZ'TC%NDKY",5%K9lA - -%%1kQ%f8Z9IE(4kQ5X*9Mq!UPK%dirih2+53-k[E(m!QELQ!-Rl#ccq$6B)6Z-I` - -FQ(52iC0Hd6f'2a&QlKPm`YDG`5GX%V)aI-*'%r+rq)3prJ`qB9260)C2f"21i"- - -feI!B2QRI@@I`#A[5'Ic*-1NH`dIV+GeMrFY8Q(52j8mG(mdXar#TGUKe(X1R`pq - -T1G'EYSlfTT4IFZ446jL-RfpLA2G!eYX*@kf3!1dTXPdLfkfbh5AE'fAlbB5G8j' - -`4rJkCZFXKT(SUhpj-0jKc0+KVIl1dd)2DmAG-GY8*93X&AUb"HYJr,'#0E!H,EJ - -1NCe#Mr)KS8HMKZmGh)rJ,V"iE"haZ#h!9,BPYJl''HE&0`Sp@9F+$qSClfFqB9h - -h3F6FlY%JbNC43[653pSVJdcS86hQ89H[mbKL98+8Rk[YF1I00PeH*e3+2HTqAYH - -N,LMMCc%HqGX+1SASE&1&f@&'l%0mMD%M4m1VBND`e)EiiS,VCTXD(2B'40m'rl5 - -#08#c9pE!hmAAm#U26ZK4E&E48%VR2LJ-CTF+Lq-[Q!rPj"[UJRc-'14f6EKm3Rq - -[HC!!63aQaBb,eS*44IHY`T9#9"TN-1YJpRX&fl4AmahDMZpMp-1B4i1Br38Ef*5 - -LZGT1Yf,T@L'kG+hYpILK5iVBA1+i5A[CfL*0plhmp&KCF6DUCir(CadF[VkJLmr - -hl$189GrN0XCQaUTQQmSPVV*HpY33GT)apN++X4le+M"i0Epbf"EcSZR0GUYL,E' - -CL0P[#,$5,pp39-AQe,`b2HjB@cfAZmLMk)i,dH$ilTe,er+S69fpF0LG9mb$!l[ - -R31a#i(BDla#LU"ri@"l9MH5GKNUFPjh[CUb%le$F&p6Y@VGPQf+Mf`$HhiaG`0F - -EE!CpNpCmJ'NLh(AkA6XZh4NrZ+jVe`eZK4!eX*L4F(JZ0X03ArHcH#pICpR!*Pl - -XK4j0L8ffh'rc-KeIere1L4i-[$eMkE2E5r8'IIXP(S2Gl*Q)Zf#a'@X,Qq&K$)b - -8&-E"[@,S'A[+pp5)VrqCMI&KiNfa[Q3Qde9lQGE01baYqAD,Zb2SkYi*qa$K!H( - -QrQk@*rZq5ckG*6lNDIDh!N0&FHA[kK@2A1Tq5ZHFEh)rKLLeYSe0M3qAR,I8E&J - -jY+[rT[A9)lQhp[p4)R[CAjVd`eG)q5Ap59[1Ed$+lfq3!*Xb2P4bhK@8@k6rTRj - -JV+rq[$NqA2U`m"9NK3VKAUem9mqHIDj8lbP"PFc`j0R0lNQ*I,N$6AVCdp18*hY - -f0%'EZEh)H$fUN6,B3ica+pmIjZHp2ebp!DT9@&,)#Mf''B9-IjQPr#f@rm`"TRV - -fXT+Kq5E,f4-2X#q@$(82A'Tf[iND,j2dTmcpQ*4$$h,S#F8M6-VMR%F+f4IGNqB - -J'pZ22,VGhpLkJDP%PD'3!+P'N!"h!rF@[MkB[ljcr`h&frIIb#bGV(J(mUN2X4* - -pX9j4GNhmp4Y3'hcTK+D*KTP-YEkVC$Za8E*$BZ+*q*Y0FrMmf#+ql$LLcLXFCJU - -2[K5SU)%*YQ!q)e6KX1%9i!l`mjL@,h-VR'U"@M4@E)Vpm1i&"NfaDF-GpbrBfZ9 - -43qpR0r'kZ8c&&BRN0640K&FKHr90+PMRPJr'GaLkK'MXKd,di#&8q%UQd23bTI" - -9"Y@$aT[+kbSUjl2Z'0pB$phR08+dF1AJHN20YhDrGZhcfjrC,IPAlKKLCBC5[4k - -q9Idh5c&Z18Dc[QH`6BT`b"(jr6f$$LR#)NHSe0H#a(a5Q2KG+Ee$aFHh0DPJl5( - -93@8ePZK,p9Z@,YNC(kbfH)D&!Aj)MVPY*'C3MV'dDpHCrHTGCHB"TLM1TeLdU%9 - --9@4Q+N-4da3eSVGlhF4QX!,1CRRd4iAX3Xj@qF4Il+k`@5b@hZfl9Y@m`Nb'kFM - -m(e%[4TI(rJ6aDdl'AmecRb,-rM4HPmkJZV0Y@[@eEEU+cSTV%FR$LPDJFf96T)J - -SBV95T"T4851Qcr(ieNkAfS!@ABKZ@GfXkpaZ+bYKPM*EQ4$GZVVj(+2NSbLEp4* - -QXhjcHh'fc9U5,85T)[CflEd"+)FkYrHZ,P(Zk$8UEGDRHfh@rY@LC[fUCKAPh&$ - -@Y1rVM$T#D)9kIMCdBMTe139Pm1GfheX`RFmY90UY2l2DVI1bQkD-SR6CVHVV',Y - -QH0(D)YCpAr&dG(pClTG)CrkkmRDVHaU[M*8KLl[iXi"f16cV#a[iKE'C33leSVV - -cA&k$1%ZK,B8aKer)+j[dSeNDl&DqM%FeA$0FT%'A9r0mEmcBIIHPIa9riGZ2&Y4 - -)Z5bXVN6AH6jd%(9@BZSH+"mmR)p+fJ,I1r!p$0mpm2dGI$I#GaYmI`rI25-pFcj - -Ib+CiY,#QH5B*Jb`#R#"`$J)R!Rm,r%fb2`5r!f`%81ZYQ*CVS1I,dCQD4M[6f8" - -d%aZ`,C3pl(R%#1`5BJ$fKC34E!2I+%5,Z6XAc,!&GAHH@mc&V-9$`JriRE!1mdm - -QBJfY6"1EAXca96'V%%d15UJ[MKrdU2JbblTde+I(r2fRV)GU*0F[GKFZ'6FZ&@C - -!@&e$S`1V*BfZ3,[Ekc'f'QM#1TGaI6mfFAd[dRd&lTYa2mhe[DcQqPkGarAYVFD - -pRq[EGj!!kh[Gb2@pdFVerHebVZqYjlLqJ6bZladIehI`(Ul[(a4Fhf(J[@rMqRk - -qJHZ,jh2ph!,FAqIkPGrNqY@YA,rQDG`$A2piD5R$)dE#I+49a0+%1a6`miQp3Qa - -bq2hBFJaMcC%A-H[Lh9kI1084#2JDa"!f3ALEk![b$C%30K$$+Rp)$+Z#lAk4M'@ - -U"BZ%FY95Keh3%Y-m5!m&aNNZUbm3$MY$+e3GhSKrHRQY-ib9%UaRb2XM&r&Bb[Q - -$#1m2Y(MG+riPr[FUR"'4$dHFrL$[$S4iX30Jl8iIhq)0r5khhm926M)p@LJ6T9) - -i'P,4l,[)jI1kP[&L+-6l`aiMMHaaP!k@(kR(!$5jIF64)2HV9c"fkm2Bb8M[NA, - -5*ahe$KKB9T9'TSPBKI4**`H4UR2Kk*+M&9J[`FHC*Q&NUD#pVUA83F[45Jadk'0 - -F3Yf1$dpTM65,Hfl&AGM3!#1U'a&eQabGKF82I&eA%c-D$%HjjT%"U4TMFAb*[&A - -h)@)HETXFRBf&$h`V0NVHj1U3!,`K#cY(qL511H*j`3MI14L%iN0H')LU%pY@kEb - -e@+I!ap@!&jDr$K6[395bNR+a,%&ISM6!LST@Uj*V5MUX3Y#A)"$4+kM@NKY`il$ - -S30pF$R`T#q@S*(BHeKMSieHp#Flf)`,0AQTaDcb@&2)PHQQ)5fb5Xdb1cXF+!Vj - -N8DB2,Ic5f4Kjid'T!M!XRlE0,$48%8&NcjVeLhiPLG[pfVbedR#BF'qX0CFl+(- - -SP#2N$)DCki1*FLTMEYAMF%qMfLlECUkT+5IZR$kIUlACYmcS)YhC12(&iZ3YB9' - -@5Q5*+ZHdkID)X$BCAmp+hXKTKT6AHm#U3r4C*hSQB(BrU*ZE[*&EJ[hH"NF&f1H - -b`j%@Ei"`&+-i5TRYhSDUbbZ*lE"hTGJB!9#%@0JA5pj3Yh-5l&V,'fQFRq0a03C - -$hZ956TYb(mp1hP#k+8NN)bQBbZ-#L*FT4c0ATc*h9&5!)3dB`XSCTF08SdMC5D3 - -Pj6BcCAk9Up8CNNK#jN9IDNVH8!QCSr)k39+0G(N`aFD&eSVN$99-XdNF%CZY,D( - -`"a@L69D5SkS@&F+T)ekr#"MM-CcF0*pfUMM`5Hd-*A450pjlk`mPT8VU"Y9h0R3 - -Mi#,4b)#J'D-9V[Mh#PIqZX**-8jAH0BrUp"aT*4UR0)#8Sh6@T!!8Se6@T!!maX - -Yd(kN"FGd1[HIG2TA[3DH,8Mf'TBDXp4V02ZFVQ8q2,U3!#'KemM%T"XRp@#KVcU - -Y"q@f5Y+$A#aMZCD&Srj`4S3qiL3hckljPY445pa8@+b09#FYcCj'[bpc@BGcr'Q - -!%69iq@)m[C*8URU(RG4!'ib%'PfYVS`*8j,-6"h[aReIXbG[D8k5c,e@cYh[$#h - -lT)pilFFr65[(JLU"+N',p`QF2Y40KM[Pq2-plHN1e&CT4R@a((P61@0C"rU4'Q` - -blVmMh8FNDTaTr9MRD@`4JjR-qSM6-pGM1,T84T8160L3!*%BDI-(2jh'hIh8YR5 - -r8BZ42Y@"2cR5GhfQ,m$+0,B(FZ(*qFCchdR[JG5Dl3[K98[0EFBhc6Jf!k'Hj$p - -R)(rUIIG)ebZT#lVHd,,'8%3DJQ5UfdlEP"@LKiU5A8P9!ff@U2hH-(@biF`FQ[( - -KV+6++NJeiI9JS(a#A@K@FPTGe,p@Pj4QR&)AdSc6kT,5M&2U3T15dqU5QT4mULl - -T5FPrl#eaeipXJ`L95k4YN!"fmDV'M(FlXp`hrMJpBDZc9%XlCB(Q0M6#dJJhdpT - -%2bZdFd30'KTT[d-6#2rA22prCQFCZHEjar[pNj2C69PYp)K@DM)V+8'fT!3C%RU - -0$!Sc%%F&0K8NII&jQb@NScQPp1@%DKc0DD4,rDbV-ccd@PV(lCAPY$H4%a*G2UI - -ARl'MdM)(c3+5MpDF8)f1Rr4*kNc)faB*9I4DMcVDlZfJPej1UXfAEck8RMde1"C - -Ci0@')p(QjN#S(A*Mr%a[J*8"E)T3G!%pL5YhHBl+"RVj4bhpa)5,Y@G#d)*M[FH - -rp@3IGap(N9*kF+TlbrUSQrlA5IIaD[aidXeYj&CVNMH83&CM+!&9RaC+%&Q"[`% - -!PM5C'9(,)ph(*fUTr9!YMqT9DV2iP&iGfErj4+r'r8D[mMkHFibb02iMPNjf1PA - -[d("$VLh(CI8d(p1LX&VN*cJbP(8k[pfF2kE#ZPqTX(51-%LC%ZXU[a22)[*i8[E - -rZJ[cIcUGL4G#pHMBk,e2kCF0VX,2PP#E5Iik[#T1$qmHrqXJc[6'Fa2`XLUETTM - -$*YV-$D3cYp12%m#qEb(qhJ$feL8eGE5PqJMF0!YqXU&'QZAY39+9b(8[r8`"-MX - -Ah$6![T!!ITF!pTb'bfV*EbNA&PMaKL[H#UA+i@kTX"!qGeH&C3R&EkCI&X"$k6d - -9PN9@f#m[VUY"R%+aB%N90%@4PhahPUZj([c3IkY-$A%eUr''+[Q8"m(LQS3[kcE - -1G+!PiF[1j8b6mBiYqG4I![EZK'rFji"Ab"55leDmdYV+9*,[$[MHa&2kj,XIH(K - -90KkIa-Ep'I$!Tj5(&h&2b4cN`,G2pSf$$kqZ5Vi*m(hh+pHLCV(B#pqMEAp*2`L - -K$S-ce482X[1!F4&mDd`jE#EL`-(e-DD6q,X(FCd12IXm1+#IdU#-2SFi1q)HB*d - -54KI`ANVie'C`8jVJFZTNa%85A%ip'ebqP1"bkZr$jj-acJ0'8-Di!,i@'@-Q-2E - -*q68KTiMXZ`ja[9RqCFj@hp%rG"RpQjINMlqNrpQ&-qA@"ki53rAP&2rr!!!0$3p - -YGbpRBh4PFh3Z0MK,,VN!N""453#3%#pd!!"+8`#3"2q3"%e08&*0680$!3#V,jH - -ZUc!jB!!!"M%!!"R%!!!"V3!!"E(*MaZS!*!'[VXM4!iL+Pj0j%)PIdhl9fbRBC! - -!DR1(JAFp3hUJ2KNcZ@(k&LeHlIYc*cMM1X2GRCf"!*`N(81C&iAQNTm4&Ifii1" - -EpGII4h6#PiP+'R-jb[e$&IeM12rA3hh-XBk+D2XK9#@U!P9e!@eRU22XRT!!%ar - -%6jaP3[FjFKhiIjQ@hidE$&25cAm$`-IrIXai*1U*jZd88q%pXX1%F$M`RNJbAQS - -ih%%N0J*@A""6p[pE#%1,cL9X%K8j[Z%i38$F)*'R%8!QpTQQT&06TCMf4amme9+ - -jii[1iC(HE43E%aa#QlrCjZ4[GSL(8*!!e8D-E"#r6LR@&GN3aF6F'028K*cdTGk - -aT$fkUhhK6F,P(Tj11!CFTLJ+QQSXDINp,M$RL-+Cm9q6j"VK+Hr'rhrjXB16b1@ - -iec&AC&Z,)bAP)A[QZNkT`brFF9bj0@L(b*(4H3)$i*YCbh9`YK90aj%$0a!Gm&! - -,de[B3!XlC'%$"-Eme,D0'(Z229-8DlB`9Q$FC!Y6@9L'KA%@PQm[")V0YM#PKBP - -$[mI#m!L#i#MfjAH50i4eE512Q3bj@@90I4m!N!--!'XcXfpJlh2Ij$4lRaZHF-P - -a`Tr-D)4&@%FjIAiV9hi5rZ3i@3NqRhV5`hI'm8m[3MNjENHi%AjN`!NMR"`rbB$ - -bTrc)FA,m$%r*F51Fm*03FTa`FTa`-Q#%%hlN'4R`Pa`RA(+FF+mMamRa)mq2m$2 - -#bB!#GjN8B'@Y6-+0iUpN*rl)-F)*2m)*8[#%!j-9H"9SN!!()1QkKK#+`Hm@K$S - -HJ&m,rN[#E`hmIJLEJ,q0bk)PQTCS@&q4J@q@4d"9U,FU)md-(0Yrf-'kLSC3Ech - -QTZ6PDfM!,6kXTJh48"8c3%-B$Af2ZR8CG9Ip2$-35k-p#&9[4Zd)$4`EE%%G46! - -,R0"9-23T99CN34j4,-#2%@HJ4P(6T'aDQa#N[iMDX5G2a3J5j8hqU`G8AI)J-HU - -[2pc+8DXTel3Q5K1DDDe`rC'MeMLS#5QV5"2QC-jFKV@(Y,XiDUf$'TI6Q941+fY - -NIrEXmabeMLSdTZC&6Ae8m48krm8h(,@HFXdUSU`BRMk!q[lRHBlD3,RQ4#QENT@ - -#"cXRI2X+4ie6jif)dMfM+mkEUadrc9%E(G5'h+TKlGFqRHHS#3He,LFDrPe`h($ - -QCBlDa(3e*P+'jG["RP9riDM0,PI9V"`8d09SikJYP'YH1C5kHVfHlZ'SDkKIpI4 - -i+LIkaJ28)bpbe,88e9!N694cCG6ZNqFjkMUUN!"T6DE6ZT(h&AViKGmikRVU"NX - -TAdR(H9q1FY4@bY@D,XL9SfF2rY6286HiPp,*+'9G,aJIFG50p#Uce14Gj3Y'd81 - -Ek"h5cFV&)blrQ+1f8B8b8UTJU&0#eN-9cVh+8GXGe*U-j!-kU)P6p4b9*UB'dj* - -PCDb-E#IIrF$K4qBkCkfIRK)eFi@ZrFEXr4ae-h@$T1I(e%`C&K,!AUi3T&L#1U` - -I'P&bCG3h(rRp#Fje+d8&50fBrKHeFp&j@4Q5M3GV$pea1eGSfk+(0$9pa80R1GF - -ZCkfce*a5FDbGI1mKMRSpifUSq482fFRj!BlD6Id+#UPkaDr(MfcMU0YGVSSeRLY - -8Z0V[F05H43q4)19lk0aM"lL(GMKViS"LkT1'T(MH+rPeTkZ3!*U"!([&H8FjkLl - -+0@RS306mKfX[64ZJ+`31D"5@fGUaCaUiVRd8Y@!C+5NVP42Ef6h&a0E[S,D5e*Z - -k$e*4k[,4R"1qUq@S0cKV-k$Hk86c@fiEqT2V*rYSlLHcfePEppip1YM9Hl2Del9 - -2!&`"@TQ,U#F1&[Z''jdelZ4b1(ZHmdimH"0(45eR)(&!*q9f)f6q6PCX0VTUBad - -IAd$pf!@`[ik1Br'KUlR)+fakrN"cHF(H36)2h%jb&H(+NrX0&jMF9VMIj$*$&L) - -T"p)0cLf`Yq1%"AXR6JQ`Yq'FKMf0GB,GdbRXPYLiZ+lq4#IBL8k`%jeJ*cV"6R5 - -#RHJ%1p%*GU)6l%3Rf)P1h%qc#+[@Y15RS-eL8qhT&"fJcd&k4dVkK,dC'pb'AVi - -MRZjKXmB'HccD3(IrcJ8G(KYmfk)&p1R"5Hkrqa'fKQc`$Bdfm0&Ek'dF5*Cm&25 - -6E"T+qQc(16M5i"iI4FpKHCCb3p#-XSR6I3[1YF$(e@dVrAm(hAhGA,f#1a4fVQ` - -D)a0bM1IcX19PNiJXd-QrQrjp$rTP0Nh4$ljDEE6C0*GdfSPEQNJ$[AaI"9dkQjE - -)"&rjZ5PSlpQXL6c)65I42'&jkHi((6HE659pGY(F%GhJrk#CBp-AQC!!QcfG`RF - -BE0C'2GbTm18(Qh@4"hI+cbI"'a-fkb-2I05,Qq*VI86`ZS90Dq6"IEUNPpZrZ6d - -IkmP@hp@`f9$5UmK,"LjZ2dGjKIdd'pTRSrf,Re6[[[HdcbYXX0R3aK[KcVI)#mr - -A-dm"R8jJFcLjAc2T0r!1Xr%Ph(NRKdhm"Y1PM9qd9#9(PFc#![X)[SNKr!e@jAm - -!N!-0$3pYGbpRBh4PFh3Z8&"$,VN!N"!4c!#3%%+&!*!)rj!%68e38Ne33d-"!+X - -[PkkV-$P&!!!'-3!!'Z!!!!'T!!!&bE5F%03!N!B"fL0%$L)UANhN3L9r6IYAE+G - -KN!"UFiH"Gce$HU!q'61jBIV#iB$[cjhJM1X-GhH'!`%ib6Q'-Lm+c58r)bVkFF( - -"YqU[[irS4$#9MENFjIkKL[iaR2rVS6lQ@%G&Y2d3UK*9JDUkJ,Bce(Pf6fJm&6R - -b2Z8HRJiXa'A+ir""h#2TreqK*11PKX-G4'@dI[MrP@fl(cXiL9b1Haec4BbeKmP - -aeJj"iNA$iL1d#Y1J+HR89#QQrG%86l98l[LLFhLNlhad)NaL2JK&0pZFr-d1m4! - -+XYS)fcSm[diTeKAC%-A8h"M6e)5Fp+AHXD3p1ZNm1FY%rabj$[`E!$0bi`E$P26 - -rG@!p"$aQr-JXH*CjLX,-Um9UPGj1-5VH)fY@`*(4VHaDSf,&r6CPrlq&--R1K6X - -*#r!9a`Q#"HZ@0$hdcLR&Z$Fm-LN%a%6I)NG'j`NF&EkCY9`(CaX9iFL4(fpK!IC - -B8#c-*P,XP1dG-@D4KE%@0XR#9"C'PcdhhF,ZXE"3#eYVB3-&a[CDHNU"FB-@YXI - -#PPJD!bcX5f0T(aH0)DaV'hR-C-M0+Q[Uq``!Da0l'f3fmMSr"jhCCQZ%N3NRNdf - -14LJRP"rPR[a@3Sqr%8D1NjAJmk5Hp2#G-Ic6Le"1MJm)Pachb(2###I(6c*J%8k - -j%8k1RiHRj,J46[K*+$P11$P11"P3`JNrmS`-q)!-Z'6!D6eKj2L4C`f-F$+J`(8 - -Q"D$m9QE4e,T1r"&qK,q%%k6J#3FQ+c!qS%%HJ+LU#N)S",rE%'S`i2Fjq"D$ha, - -iI4qf+2P[K53BJQi)Q['&0I#IjBQL)Y4CP"42pjcUHm,'ZSf'8'HBF--Ck@qdLS0 - -b3K-d'HXH'L*+S#ZS9C93Dp(hThY##E32SH*'Y!@KRP2p0@MV!TJ"6QM*DZUi,'% - -T+JeJ!r"$PM03TD!SBLUKM%E&Qd60d0-c)3Z*mVDqK3&9&I13!!6eTfr[iUM&P'Y - -#%F4446G@Z(l(88YXe)LB`Z+S2TE@Pf(0!mTp(,A84Uf3!",*H&STD'4qmZcc(,@ - --+M3XC`4&IJbl#Phql%Z1'UCF8eL3!,#@e`G3hrdd`e(,+GHd)+EL%XlQBDHLAlh - --85ZSm`B%mB'K&HG0PBjFj+L90QTjHXf`jUXI6h28L)eDPKBdpblBE[Mm*BjDaA6 - -94Z1DiGV"R*4rj+M9$PGCAcdSS+ZfQD2@8+iCI$4qqhSpdmj4DkPIeF4)2#fiaJ2 - -8Bbpbe(889F1L)XMT!QVVKFXFYBiUT"YMLB5UC9b&(RhKCikkRVV"`)8VDEQKZf- - -V4kfRA)f*V,4kp-cqUedFGB0c+Hf-8Y$eQ[B"4pe)Vc*,6IQVI%eEm0!QHSG8IIA - -L@5lrN!#MEUCQhhrr8(p,Ec3@kie#4,V"pIbK)a`9-T!!GBlk-`E@KJ84,f%LG'i - -f[T!!!'KLUKNie$XiPM(N0&lQH[KU'dGYS"j+L['X*Sp(8hPGSl0R1'UMM9U5&&e - -!'c8b%qDSN!"L,3rTKL6Ki3+b'A[l2CZI0G[Y06`a,LMk#PhcpFQ(1'S6pDZSCSE - -PC!&fUR[r&Uj3-eASS(Td!+F,U1H1r2)8jpT#83&5e5EZS1kBGej+JZb9Kc82h(- - -h9kKehN1+R,MPS8ZFDjZpPPPABF@aCZbG`abeRA(9j-b+KmcBG!p(lD"q"B9NGG@ - -[CimeFp5G$PGXM+5cUec0YcMUVRN2@9(2pG$Xii2F3jhf'KR%ZMUQL6M[[CaIGcX - -+b8Q)f,HFGj+MGP'Z-8d&S[SrA2I32!5k3L5#cQ1CV4NkAXjer4pehS"JT*BMJmh - -eq+jHMVUAFXdD@Pa-LB8NHQRI3K)PI3p-0D6jHqhb!-,0lkJIrAq#kpTYIkZh1S$ - -iJj!!%H0,"hSUqR8TjiTU6d$LH!3qd"l'QVp5(*Z0MQj%N5IR8$IK#2YVk#b4%AU - -KAhRjVG*[D*cA0T*HB1mJp`hf9R+*B@mR9a,f0R*MBGp1mJVX655"`0j)XK,X1mL - -pKlf"*+irG2*l,$B1E[#"6T2S$,#X@[56ejba+FlV&"bJcm2dMZ6dm6Xk0U4jAES - -MHGhp&Sp0DH#"lZkGmrT#0Q@"!rVX)TRXhr[K0j4X`S%(2RS$[3RXDKCpj(@KE-T - -cqZ`NL6E3i"kI4160319LE["D@$B9G'mQ#4Ai1,Ued1qGG(GeFr6blT!!hqqbU3a - --b$&jRrZ0-TY)B)&1lYedll[ACE1T#Rl`e9TlcUBkTp0ZdVF%-H4Z[lGR8a1Bi#X - -h0hN["GM8"KlNTJYSfQ*jrHjlI6UE66PpZQMZ#'l`[pH@XGNEQ*!!Qr-kq@mqf+` - -,HVK6rLX60R@""hI+c5IHHaBfk`-2I,5(G,jrpK(H5aSfpB%(pqQkANlrj[4mV#G - -EHm2$CN01V`9H%R"aqMR+bhpj`iDqe%&p8bAIR!qTj%[4$kpFY(MK'lcmYcPXk&Z - -H1lcmlTi0lIT[mPVbJIFUL!elGjRM4BM8c8"+#$@"@kr%qK5GrJGH8d5JeDSp%6Z - -S`aY94TZmpLQ+$H(Nh"cl%r`RK-KrL#Vr!3#3!aq$!!!"!*!$!43!N!-8!*!$-Tr - -lRLe!rr#`!,K[$#eZd!6rm2rdd"lm`FAKdkSV8FY+$deKBe"bEfTPBh4c,R0TG!) - -!N!06594%8dP8)3#3"P0*9%46593K!*!BUc!jI3!!8M8!!!&'"1"2l'mDG@6JrHc - -K@5U#NI*HN@GK!Z"2kQ`FG&2UN!"S!!,L@5[48(adA`CdC!EJ6qj[8hJS!!EJEHl - -LEe5!)D$!FJC1ANl!*IrX51FI-#D`jL63G!*&0K!+1Li!&Ri!)VX-S"lbUKQJ(Z` - -3!+SDI!$!#3ZT8,aIE!!!Q$!'8!6"aG!!N!-3!#X!"3%B!J#3"`-!N!-"!*!$!43 - -!N!-8!*!$-J$j(l!@#J#3!a`!-J!!8f9dC`#3!`S!!2rr!*!&q@G%'@B: - diff --git a/gc/Mac_files/MacOS_Test_config.h b/gc/Mac_files/MacOS_Test_config.h @@ -1,91 +0,0 @@ -/* - MacOS_Test_config.h - - Configuration flags for Macintosh development systems. - - Test version. - - <Revision History> - - 11/16/95 pcb Updated compilation flags to reflect latest 4.6 Makefile. - - by Patrick C. Beard. - */ -/* Boehm, November 17, 1995 12:05 pm PST */ - -#ifdef __MWERKS__ - -// for CodeWarrior Pro with Metrowerks Standard Library (MSL). -// #define MSL_USE_PRECOMPILED_HEADERS 0 -#include <ansi_prefix.mac.h> -#ifndef __STDC__ -#define __STDC__ 0 -#endif - -#endif - -// these are defined again in gc_priv.h. -#undef TRUE -#undef FALSE - -#define ALL_INTERIOR_POINTERS // follows interior pointers. -//#define SILENT // want collection messages. -//#define DONT_ADD_BYTE_AT_END // no padding. -//#define SMALL_CONFIG // whether to a smaller heap. -#define NO_SIGNALS // signals aren't real on the Macintosh. -#define USE_TEMPORARY_MEMORY // use Macintosh temporary memory. - -// CFLAGS= -O -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DSILENT -// -//LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \ -// -DREDIRECT_MALLOC=GC_malloc_uncollectable \ -// -DDONT_ADD_BYTE_AT_END -DALL_INTERIOR_POINTERS -// Flags for building libgc.a -- the last two are required. -// -// Setjmp_test may yield overly optimistic results when compiled -// without optimization. -// -DSILENT disables statistics printing, and improves performance. -// -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -// altered stubborn objects, at substantial performance cost. -// Use only for incremental collector debugging. -// -DFIND_LEAK causes the collector to assume that all inaccessible -// objects should have been explicitly deallocated, and reports exceptions. -// Finalization and the test program are not usable in this mode. -// -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -// (Clients should also define SOLARIS_THREADS and then include -// gc.h before performing thr_ or GC_ operations.) -// This is broken on nonSPARC machines. -// -DALL_INTERIOR_POINTERS allows all pointers to the interior -// of objects to be recognized. (See gc_priv.h for consequences.) -// -DSMALL_CONFIG tries to tune the collector for small heap sizes, -// usually causing it to use less space in such situations. -// Incremental collection no longer works in this case. -// -DLARGE_CONFIG tunes the collector for unusually large heaps. -// Necessary for heaps larger than about 500 MB on most machines. -// Recommended for heaps larger than about 64 MB. -// -DDONT_ADD_BYTE_AT_END is meaningful only with -// -DALL_INTERIOR_POINTERS. Normally -DALL_INTERIOR_POINTERS -// causes all objects to be padded so that pointers just past the end of -// an object can be recognized. This can be expensive. (The padding -// is normally more than one byte due to alignment constraints.) -// -DDONT_ADD_BYTE_AT_END disables the padding. -// -DNO_SIGNALS does not disable signals during critical parts of -// the GC process. This is no less correct than many malloc -// implementations, and it sometimes has a significant performance -// impact. However, it is dangerous for many not-quite-ANSI C -// programs that call things like printf in asynchronous signal handlers. -// -DGC_OPERATOR_NEW_ARRAY declares that the C++ compiler supports the -// new syntax "operator new[]" for allocating and deleting arrays. -// See gc_cpp.h for details. No effect on the C part of the collector. -// This is defined implicitly in a few environments. -// -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined -// as aliases for X, GC_realloc, and GC_free, respectively. -// Calloc is redefined in terms of the new malloc. X should -// be either GC_malloc or GC_malloc_uncollectable. -// The former is occasionally useful for working around leaks in code -// you don't want to (or can't) look at. It may not work for -// existing code, but it often does. Neither works on all platforms, -// since some ports use malloc or calloc to obtain system memory. -// (Probably works for UNIX, and win32.) -// -DNO_DEBUG removes GC_dump and the debugging routines it calls. -// Reduces code size slightly at the expense of debuggability. diff --git a/gc/Mac_files/MacOS_config.h b/gc/Mac_files/MacOS_config.h @@ -1,89 +0,0 @@ -/* - MacOS_config.h - - Configuration flags for Macintosh development systems. - - <Revision History> - - 11/16/95 pcb Updated compilation flags to reflect latest 4.6 Makefile. - - by Patrick C. Beard. - */ -/* Boehm, November 17, 1995 12:10 pm PST */ - -#ifdef __MWERKS__ - -// for CodeWarrior Pro with Metrowerks Standard Library (MSL). -// #define MSL_USE_PRECOMPILED_HEADERS 0 -#include <ansi_prefix.mac.h> -#ifndef __STDC__ -#define __STDC__ 0 -#endif - -#endif /* __MWERKS__ */ - -// these are defined again in gc_priv.h. -#undef TRUE -#undef FALSE - -#define ALL_INTERIOR_POINTERS // follows interior pointers. -#define SILENT // no collection messages. -//#define DONT_ADD_BYTE_AT_END // no padding. -//#define SMALL_CONFIG // whether to use a smaller heap. -#define NO_SIGNALS // signals aren't real on the Macintosh. -#define USE_TEMPORARY_MEMORY // use Macintosh temporary memory. - -// CFLAGS= -O -DNO_SIGNALS -DSILENT -DALL_INTERIOR_POINTERS -// -//LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \ -// -DREDIRECT_MALLOC=GC_malloc_uncollectable \ -// -DDONT_ADD_BYTE_AT_END -DALL_INTERIOR_POINTERS -// Flags for building libgc.a -- the last two are required. -// -// Setjmp_test may yield overly optimistic results when compiled -// without optimization. -// -DSILENT disables statistics printing, and improves performance. -// -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -// altered stubborn objects, at substantial performance cost. -// Use only for incremental collector debugging. -// -DFIND_LEAK causes the collector to assume that all inaccessible -// objects should have been explicitly deallocated, and reports exceptions. -// Finalization and the test program are not usable in this mode. -// -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -// (Clients should also define SOLARIS_THREADS and then include -// gc.h before performing thr_ or GC_ operations.) -// This is broken on nonSPARC machines. -// -DALL_INTERIOR_POINTERS allows all pointers to the interior -// of objects to be recognized. (See gc_priv.h for consequences.) -// -DSMALL_CONFIG tries to tune the collector for small heap sizes, -// usually causing it to use less space in such situations. -// Incremental collection no longer works in this case. -// -DLARGE_CONFIG tunes the collector for unusually large heaps. -// Necessary for heaps larger than about 500 MB on most machines. -// Recommended for heaps larger than about 64 MB. -// -DDONT_ADD_BYTE_AT_END is meaningful only with -// -DALL_INTERIOR_POINTERS. Normally -DALL_INTERIOR_POINTERS -// causes all objects to be padded so that pointers just past the end of -// an object can be recognized. This can be expensive. (The padding -// is normally more than one byte due to alignment constraints.) -// -DDONT_ADD_BYTE_AT_END disables the padding. -// -DNO_SIGNALS does not disable signals during critical parts of -// the GC process. This is no less correct than many malloc -// implementations, and it sometimes has a significant performance -// impact. However, it is dangerous for many not-quite-ANSI C -// programs that call things like printf in asynchronous signal handlers. -// -DGC_OPERATOR_NEW_ARRAY declares that the C++ compiler supports the -// new syntax "operator new[]" for allocating and deleting arrays. -// See gc_cpp.h for details. No effect on the C part of the collector. -// This is defined implicitly in a few environments. -// -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined -// as aliases for X, GC_realloc, and GC_free, respectively. -// Calloc is redefined in terms of the new malloc. X should -// be either GC_malloc or GC_malloc_uncollectable. -// The former is occasionally useful for working around leaks in code -// you don't want to (or can't) look at. It may not work for -// existing code, but it often does. Neither works on all platforms, -// since some ports use malloc or calloc to obtain system memory. -// (Probably works for UNIX, and win32.) -// -DNO_DEBUG removes GC_dump and the debugging routines it calls. -// Reduces code size slightly at the expense of debuggability. diff --git a/gc/Mac_files/dataend.c b/gc/Mac_files/dataend.c @@ -1,9 +0,0 @@ -/* - dataend.c - - A hack to get the extent of global data for the Macintosh. - - by Patrick C. Beard. - */ - -long __dataend; diff --git a/gc/Mac_files/datastart.c b/gc/Mac_files/datastart.c @@ -1,9 +0,0 @@ -/* - datastart.c - - A hack to get the extent of global data for the Macintosh. - - by Patrick C. Beard. - */ - -long __datastart; diff --git a/gc/Makefile b/gc/Makefile @@ -1,632 +0,0 @@ -# This is the original manually generated Makefile. It may still be used -# to build the collector. -# -# Primary targets: -# gc.a - builds basic library -# c++ - adds C++ interface to library -# cords - adds cords (heavyweight strings) to library -# test - prints porting information, then builds basic version of gc.a, -# and runs some tests of collector and cords. Does not add cords or -# c++ interface to gc.a -# cord/de - builds dumb editor based on cords. -ABI_FLAG= -# ABI_FLAG should be the cc flag that specifies the ABI. On most -# platforms this will be the empty string. Possible values: -# +DD64 for 64-bit executable on HP/UX. -# -n32, -n64, -o32 for SGI/MIPS ABIs. - -AS_ABI_FLAG=$(ABI_FLAG) -# ABI flag for assembler. On HP/UX this is +A64 for 64 bit -# executables. - -CC=cc $(ABI_FLAG) -CXX=g++ $(ABI_FLAG) -AS=as $(AS_ABI_FLAG) -# The above doesn't work with gas, which doesn't run cpp. -# Define AS as `gcc -c -x assembler-with-cpp' instead. - -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. -srcdir= . -VPATH= $(srcdir) - -CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS - -# To build the parallel collector on Linux, add to the above: -# -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -# To build the parallel collector n a static library on HP/UX, add to the above: -# -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L - -# HOSTCC and HOSTCFLAGS are used to build executables that will be run as -# part of the build process, i.e. on the build machine. These will usually -# be the same as CC and CFLAGS, except in a cross-compilation environment. -# Note that HOSTCFLAGS should include any -D flags that affect thread support. -HOSTCC=$(CC) -HOSTCFLAGS=$(CFLAGS) - -# For dynamic library builds, it may be necessary to add flags to generate -# PIC code, e.g. -fPIC on Linux. - -# Setjmp_test may yield overly optimistic results when compiled -# without optimization. - -# These define arguments influence the collector configuration: -# -DSILENT disables statistics printing, and improves performance. -# -DFIND_LEAK causes GC_find_leak to be initially set. -# This causes the collector to assume that all inaccessible -# objects should have been explicitly deallocated, and reports exceptions. -# Finalization and the test program are not usable in this mode. -# -DGC_SOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define GC_SOLARIS_THREADS and then include -# gc.h before performing thr_ or dl* or GC_ operations.) -# Must also define -D_REENTRANT. -# -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads. -# (Internally this define GC_SOLARIS_THREADS as well.) -# -DGC_IRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads. -# Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp. -# -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads. -# see README.linux. -D_REENTRANT may also be required. -# -DGC_OSF1_THREADS enables support for Tru64 pthreads. Untested. -# -DGC_FREEBSD_THREADS enables support for FreeBSD pthreads. Untested. -# Appeared to run into some underlying thread problems. -# -DGC_DGUX386_THREADS enables support for DB/UX on I386 threads. -# See README.DGUX386. -# -DALL_INTERIOR_POINTERS allows all pointers to the interior -# of objects to be recognized. (See gc_priv.h for consequences.) -# Alternatively, GC_all_interior_pointers can be set at process -# initialization time. -# -DSMALL_CONFIG tries to tune the collector for small heap sizes, -# usually causing it to use less space in such situations. -# Incremental collection no longer works in this case. -# -DLARGE_CONFIG tunes the collector for unusually large heaps. -# Necessary for heaps larger than about 500 MB on most machines. -# Recommended for heaps larger than about 64 MB. -# -DDONT_ADD_BYTE_AT_END is meaningful only with -DALL_INTERIOR_POINTERS or -# GC_all_interior_pointers = 1. Normally -DALL_INTERIOR_POINTERS -# causes all objects to be padded so that pointers just past the end of -# an object can be recognized. This can be expensive. (The padding -# is normally more than one byte due to alignment constraints.) -# -DDONT_ADD_BYTE_AT_END disables the padding. -# -DNO_SIGNALS does not disable signals during critical parts of -# the GC process. This is no less correct than many malloc -# implementations, and it sometimes has a significant performance -# impact. However, it is dangerous for many not-quite-ANSI C -# programs that call things like printf in asynchronous signal handlers. -# This is on by default. Turning it off has not been extensively tested with -# compilers that reorder stores. It should have been. -# -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not -# have execute permission, i.e. it may be impossible to execute -# code from the heap. Currently this only affects the incremental -# collector on UNIX machines. It may greatly improve its performance, -# since this may avoid some expensive cache synchronization. -# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support -# the new syntax "operator new[]" for allocating and deleting arrays. -# See gc_cpp.h for details. No effect on the C part of the collector. -# This is defined implicitly in a few environments. Must also be defined -# by clients that use gc_cpp.h. -# -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be -# defined as aliases for X, GC_realloc, and GC_free, respectively. -# Calloc and strdup are redefined in terms of the new malloc. X should -# be either GC_malloc or GC_malloc_uncollectable, or -# GC_debug_malloc_replacement. (The latter invokes GC_debug_malloc -# with dummy source location information, but still results in -# properly remembered call stacks on Linux/X86 and Solaris/SPARC.) -# The former is occasionally useful for working around leaks in code -# you don't want to (or can't) look at. It may not work for -# existing code, but it often does. Neither works on all platforms, -# since some ports use malloc or calloc to obtain system memory. -# (Probably works for UNIX, and win32.) If you build with DBG_HDRS_ALL, -# you should only use GC_debug_malloc_replacement as a malloc -# replacement. -# -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X. -# The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement, -# together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to -# generate leak reports with call stacks for both malloc and realloc. -# -DIGNORE_FREE turns calls to free into a noop. Only useful with -# -DREDIRECT_MALLOC. -# -DNO_DEBUGGING removes GC_dump and the debugging routines it calls. -# Reduces code size slightly at the expense of debuggability. -# -DJAVA_FINALIZATION makes it somewhat safer to finalize objects out of -# order by specifying a nonstandard finalization mark procedure (see -# finalize.c). Objects reachable from finalizable objects will be marked -# in a sepearte postpass, and hence their memory won't be reclaimed. -# Not recommended unless you are implementing a language that specifies -# these semantics. Since 5.0, determines only only the initial value -# of GC_java_finalization variable. -# -DFINALIZE_ON_DEMAND causes finalizers to be run only in response -# to explicit GC_invoke_finalizers() calls. -# In 5.0 this became runtime adjustable, and this only determines the -# initial value of GC_finalize_on_demand. -# -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable. -# This is useful if either the vendor malloc implementation is poor, -# or if REDIRECT_MALLOC is used. -# -DHBLKSIZE=ddd, where ddd is a power of 2 between 512 and 16384, explicitly -# sets the heap block size. Each heap block is devoted to a single size and -# kind of object. For the incremental collector it makes sense to match -# the most likely page size. Otherwise large values result in more -# fragmentation, but generally better performance for large heaps. -# -DUSE_MMAP use MMAP instead of sbrk to get new memory. -# Works for Solaris and Irix. -# -DUSE_MUNMAP causes memory to be returned to the OS under the right -# circumstances. This currently disables VM-based incremental collection. -# This is currently experimental, and works only under some Unix, -# Linux and Windows versions. -# -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than -# GC_scratch_alloc() to get stack memory. -# -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever -# the garbage collector detects a value that looks almost, but not quite, -# like a pointer, print both the address containing the value, and the -# value of the near-bogus-pointer. Can be used to identifiy regions of -# memory that are likely to contribute misidentified pointers. -# -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers -# for objects allocated with the debugging allocator. If all objects -# through GC_MALLOC with GC_DEBUG defined, this allows the client -# to determine how particular or randomly chosen objects are reachable -# for debugging/profiling purposes. The gc_backptr.h interface is -# implemented only if this is defined. -# -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently -# this facility is only used in a few places. It is intended primarily -# for debugging of the garbage collector itself, but could also -# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases -# the reliability (from 99.9999% to 100%) of some of the debugging -# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. -# Assumes that all client allocation is done through debugging -# allocators. -# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten -# the headers to minimize object size, at the expense of checking for -# writes past the end of an object. This is intended for environments -# in which most client code is written in a "safe" language, such as -# Scheme or Java. Assumes that all client allocation is done using -# the GC_debug_ functions, or through the macros that expand to these, -# or by redirecting malloc to GC_debug_malloc_replacement. -# (Also eliminates the field for the requested object size.) -# occasionally be useful for debugging of client code. Slows down the -# collector somewhat, but not drastically. -# -DSAVE_CALL_COUNT=<n> Set the number of call frames saved with objects -# allocated through the debugging interface. Affects the amount of -# information generated in leak reports. Only matters on platforms -# on which we can quickly generate call stacks, currently Linux/(X86 & SPARC) -# and Solaris/SPARC and platforms that provide execinfo.h. -# Default is zero. On X86, client -# code should NOT be compiled with -fomit-frame-pointer. -# -DSAVE_CALL_NARGS=<n> Set the number of functions arguments to be -# saved with each call frame. Default is zero. Ignored if we -# don't know how to retrieve arguments on the platform. -# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -# altered stubborn objects, at substantial performance cost. -# Use only for debugging of the incremental collector. -# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems -# that include a pointer to a type descriptor in each allocated object). -# Building this way requires an ANSI C compiler. -# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style -# prefetch instructions. No effect except on X86 Linux platforms. -# Assumes a very recent gcc-compatible compiler and assembler. -# (Gas prefetcht0 support was added around May 1999.) -# Empirically the code appears to still run correctly on Pentium II -# processors, though with no performance benefit. May not run on other -# X86 processors? In some cases this improves performance by -# 15% or so. -# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style -# prefetch instructions. Same restrictions as USE_I686_PREFETCH. -# Minimally tested. Didn't appear to be an obvious win on a K6-2/500. -# -DGC_USE_LD_WRAP in combination with the old flags listed in README.linux -# causes the collector some system and pthread calls in a more transparent -# fashion than the usual macro-based approach. Requires GNU ld, and -# currently probably works only with Linux. -# -DTHREAD_LOCAL_ALLOC defines GC_local_malloc(), GC_local_malloc_atomic() -# and GC_local_gcj_malloc(). Needed for gc_gcj.h interface. These allocate -# in a way that usually does not involve acquisition of a global lock. -# Currently requires -DGC_LINUX_THREADS, but should be easy to port to -# other pthreads environments. Recommended for multiprocessors. -# -DPARALLEL_MARK allows the marker to run in multiple threads. Recommended -# for multiprocessors. Currently requires Linux on X86 or IA64, though -# support for other Posix platforms should be fairly easy to add, -# if the thread implementation is otherwise supported. -# -DNO_GETENV prevents the collector from looking at environment variables. -# These may otherwise alter its configuration, or turn off GC altogether. -# I don't know of a reason to disable this, except possibly if the -# resulting process runs as a privileged user? -# -DUSE_GLOBAL_ALLOC. Win32 only. Use GlobalAlloc instead of -# VirtualAlloc to allocate the heap. May be needed to work around -# a Windows NT/2000 issue. Incompatible with USE_MUNMAP. -# See README.win32 for details. -# -DMAKE_BACK_GRAPH. Enable GC_PRINT_BACK_HEIGHT environment variable. -# See README.environment for details. Experimental. Limited platform -# support. Implies DBG_HDRS_ALL. All allocation should be done using -# the debug interface. -# -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus -# makes incremental collection easier. Was enabled by default until 6.0. -# Rarely used, to my knowledge. -# -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed -# from a multithreaded parent. Currently only supported by linux_threads.c. -# (Similar code should work on Solaris or Irix, but it hasn't been tried.) -# - -CXXFLAGS= $(CFLAGS) -AR= ar -RANLIB= ranlib - - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o backgraph.o - -CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c backgraph.c - -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC - -CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o - -SRCS= $(CSRCS) mips_sgi_mach_dep.S rs6000_mach_dep.s alpha_mach_dep.S \ - sparc_mach_dep.S include/gc.h include/gc_typed.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/private/gcconfig.h include/private/gc_pmark.h \ - include/gc_inl.h include/gc_inline.h include/gc_mark.h \ - threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ - gcname.c include/weakpointer.h include/private/gc_locks.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ - include/new_gc_alloc.h include/gc_allocator.h \ - include/javaxfc.h sparc_sunos4_mach_dep.s sparc_netbsd_mach_dep.s \ - include/private/solaris_threads.h include/gc_backptr.h \ - hpux_test_and_clear.s include/gc_gcj.h \ - include/gc_local_alloc.h include/private/dbg_mlc.h \ - include/private/specific.h powerpc_macosx_mach_dep.s \ - include/leak_detector.h include/gc_amiga_redirects.h \ - include/gc_pthread_redirects.h ia64_save_regs_in_stack.s \ - $(CORD_SRCS) - -DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \ - doc/README.amiga doc/README.cords doc/debugging.html \ - doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \ - doc/README.sgi doc/README.solaris2 doc/README.uts \ - doc/README.win32 doc/barrett_diagram doc/README \ - doc/README.contributors doc/README.changes doc/gc.man \ - doc/README.environment doc/tree.html doc/gcdescr.html \ - doc/README.autoconf doc/README.macros doc/README.ews4800 \ - doc/README.DGUX386 doc/README.arm.cross - -TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \ - tests/leak_test.c tests/thread_leak_test.c - -GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \ - libtool.m4 install-sh configure.host Makefile.in \ - ltconfig aclocal.m4 config.sub config.guess \ - ltmain.sh mkinstalldirs depcomp missing - -OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \ - BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \ - PCR-Makefile SMakefile.amiga Makefile.DLLs \ - digimars.mak Makefile.direct -# Makefile and Makefile.direct are copies of each other. - -OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \ - MacProjects.sit.hqx MacOS.c \ - Mac_files/datastart.c Mac_files/dataend.c \ - Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ - add_gc_prefix.c gc_cpp.cpp win32_threads.c \ - version.h AmigaOS.c \ - $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES) - -CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ - $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h - -UTILS= if_mach if_not_there threadlibs - -# Libraries needed for curses applications. Only needed for de. -CURSES= -lcurses -ltermlib - -# The following is irrelevant on most systems. But a few -# versions of make otherwise fork the shell specified in -# the SHELL environment variable. -SHELL= /bin/sh - -SPECIALCFLAGS = -I$(srcdir)/include -# Alternative flags to the C compiler for mach_dep.c. -# Mach_dep.c often doesn't like optimization, and it's -# not time-critical anyway. -# Set SPECIALCFLAGS to -q nodirect_code on Encore. - -all: gc.a gctest - -BSD-pkg-all: bsd-libgc.a - -bsd-libgc.a: - $(MAKE) CFLAGS="$(CFLAGS)" clean c++-t - mv gc.a bsd-libgc.a - -BSD-pkg-install: BSD-pkg-all - ${CP} bsd-libgc.a libgc.a - ${INSTALL_DATA} libgc.a ${PREFIX}/lib - ${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include - -pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \ -include/private/gc_locks.h include/gc.h include/private/gcconfig.h \ -mach_dep.o $(SRCS) - $(MAKE) -f PCR-Makefile depend - $(MAKE) -f PCR-Makefile - -$(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \ - $(srcdir)/include/private/gc_priv.h \ - $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ - $(srcdir)/include/gc.h \ - $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ - Makefile -# The dependency on Makefile is needed. Changing -# options such as -DSILENT affects the size of GC_arrays, -# invalidating all .o files that rely on gc_priv.h - -mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h - -specific.o linux_threads.o: $(srcdir)/include/private/specific.h - -solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h - -dbg_mlc.o gcj_mlc.o: $(srcdir)/include/private/dbg_mlc.h - -tests/test.o: tests $(srcdir)/tests/test.c - $(CC) $(CFLAGS) -c $(srcdir)/tests/test.c - mv test.o tests/test.o - -tests: - mkdir tests - -base_lib gc.a: $(OBJS) dyn_load.o $(UTILS) - echo > base_lib - rm -f dont_ar_1 - ./if_mach SPARC SUNOS5 touch dont_ar_1 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(OBJS) dyn_load.o - ./if_mach M68K AMIGA touch dont_ar_1 - ./if_mach M68K AMIGA $(AR) -vrus gc.a $(OBJS) dyn_load.o - ./if_not_there dont_ar_1 $(AR) ru gc.a $(OBJS) dyn_load.o - ./if_not_there dont_ar_1 $(RANLIB) gc.a || cat /dev/null -# ignore ranlib failure; that usually means it doesn't exist, and isn't needed - -cords: $(CORD_OBJS) cord/cordtest $(UTILS) - rm -f dont_ar_3 - ./if_mach SPARC SUNOS5 touch dont_ar_3 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(CORD_OBJS) - ./if_mach M68K AMIGA touch dont_ar_3 - ./if_mach M68K AMIGA $(AR) -vrus gc.a $(CORD_OBJS) - ./if_not_there dont_ar_3 $(AR) ru gc.a $(CORD_OBJS) - ./if_not_there dont_ar_3 $(RANLIB) gc.a || cat /dev/null - -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile - $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc - -test_cpp: $(srcdir)/tests/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ -base_lib $(UTILS) - rm -f test_cpp - ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a -ldld `./threadlibs` - ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a `./threadlibs` - -c++-t: c++ - ./test_cpp 1 - -c++-nt: c++ - @echo "Use ./test_cpp 1 to test the leak library" - -c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp - rm -f dont_ar_4 - ./if_mach SPARC SUNOS5 touch dont_ar_4 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o - ./if_mach M68K AMIGA touch dont_ar_4 - ./if_mach M68K AMIGA $(AR) -vrus gc.a gc_cpp.o - ./if_not_there dont_ar_4 $(AR) ru gc.a gc_cpp.o - ./if_not_there dont_ar_4 $(RANLIB) gc.a || cat /dev/null - ./test_cpp 1 - echo > c++ - -dyn_load_sunos53.o: dyn_load.c - $(CC) $(CFLAGS) -DSUNOS53_SHARED_LIB -c $(srcdir)/dyn_load.c -o $@ - -# SunOS5 shared library version of the collector -sunos5gc.so: $(OBJS) dyn_load_sunos53.o - $(CC) -G -o sunos5gc.so $(OBJS) dyn_load_sunos53.o -ldl - ln sunos5gc.so libgc.so - -# Alpha/OSF shared library version of the collector -libalphagc.so: $(OBJS) - ld -shared -o libalphagc.so $(OBJS) dyn_load.o -lc - ln libalphagc.so libgc.so - -# IRIX shared library version of the collector -libirixgc.so: $(OBJS) dyn_load.o - ld -shared $(ABI_FLAG) -o libirixgc.so $(OBJS) dyn_load.o -lc - ln libirixgc.so libgc.so - -# Linux shared library version of the collector -liblinuxgc.so: $(OBJS) dyn_load.o - gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o - ln liblinuxgc.so libgc.so - -# Alternative Linux rule. This is preferable, but is likely to break the -# Makefile for some non-linux platforms. -# LIBOBJS= $(patsubst %.o, %.lo, $(OBJS)) -# -#.SUFFIXES: .lo $(SUFFIXES) -# -#.c.lo: -# $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c $< -o $@ -# -# liblinuxgc.so: $(LIBOBJS) dyn_load.lo -# gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo -# touch liblinuxgc.so - -mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.S \ - $(srcdir)/mips_ultrix_mach_dep.s \ - $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s \ - $(srcdir)/sparc_mach_dep.S $(srcdir)/sparc_sunos4_mach_dep.s \ - $(srcdir)/ia64_save_regs_in_stack.s \ - $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS) - rm -f mach_dep.o - ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.S - ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s - ./if_mach ALPHA "" $(CC) -c -o mach_dep.o $(srcdir)/alpha_mach_dep.S - ./if_mach SPARC SUNOS5 $(CC) -c -o mach_dep.o $(srcdir)/sparc_mach_dep.S - ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s - ./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s - ./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s - ./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s - ./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - ./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o - ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - -mark_rts.o: $(srcdir)/mark_rts.c $(UTILS) - rm -f mark_rts.o - -./if_mach ALPHA OSF1 $(CC) -c $(CFLAGS) -Wo,-notail $(srcdir)/mark_rts.c - ./if_not_there mark_rts.o $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c -# Work-around for DEC optimizer tail recursion elimination bug. -# The ALPHA-specific line should be removed if gcc is used. - -alloc.o: version.h - -cord: - mkdir cord - -cord/cordbscs.o: cord $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordbscs.c - mv cordbscs.o cord/cordbscs.o -# not all compilers understand -o filename - -cord/cordxtra.o: cord $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordxtra.c - mv cordxtra.o cord/cordxtra.o - -cord/cordprnt.o: cord $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordprnt.c - mv cordprnt.o cord/cordprnt.o - -cord/cordtest: $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a $(UTILS) - rm -f cord/cordtest - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -lucb - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` - ./if_not_there cord/cordtest $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` - -cord/de: $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(UTILS) - rm -f cord/de - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs` - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs` - ./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a - ./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_not_there cord/de $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) `./threadlibs` - -if_mach: $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h - $(HOSTCC) $(HOSTCFLAGS) -o if_mach $(srcdir)/if_mach.c - -threadlibs: $(srcdir)/threadlibs.c $(srcdir)/include/private/gcconfig.h Makefile - $(HOSTCC) $(HOSTCFLAGS) -o threadlibs $(srcdir)/threadlibs.c - -if_not_there: $(srcdir)/if_not_there.c - $(HOSTCC) $(HOSTCFLAGS) -o if_not_there $(srcdir)/if_not_there.c - -clean: - rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ - setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ - threadlibs $(CORD_OBJS) cord/cordtest cord/de - -rm -f *~ - -gctest: tests/test.o gc.a $(UTILS) - rm -f gctest - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -lucb - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -ldld `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o gctest tests/test.o gc.a `./threadlibs` - ./if_not_there gctest $(CC) $(CFLAGS) -o gctest tests/test.o gc.a `./threadlibs` - -# If an optimized setjmp_test generates a segmentation fault, -# odds are your compiler is broken. Gctest may still work. -# Try compiling setjmp_t.c unoptimized. -setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h $(UTILS) - $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c - -test: KandRtest cord/cordtest - cord/cordtest - -# Those tests that work even with a K&R C compiler: -KandRtest: setjmp_test gctest - ./setjmp_test - ./gctest - -add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h - $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c - -gcname: $(srcdir)/gcname.c $(srcdir)/version.h - $(CC) -o gcname $(srcdir)/gcname.c - -gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname - cp Makefile Makefile.old - cp Makefile.direct Makefile - rm -f `./gcname` - ln -s . `./gcname` - ./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files - tar cvfh gc.tar `cat /tmp/gc.tar-files` - cp gc.tar `./gcname`.tar - gzip `./gcname`.tar - rm `./gcname` - -pc_gc.tar: $(SRCS) $(OTHER_FILES) - tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) - -floppy: pc_gc.tar - -mmd a:/cord - -mmd a:/cord/private - -mmd a:/include - -mmd a:/include/private - mkdir /tmp/pc_gc - cat pc_gc.tar | (cd /tmp/pc_gc; tar xvf -) - -mcopy -tmn /tmp/pc_gc/* a: - -mcopy -tmn /tmp/pc_gc/cord/* a:/cord - -mcopy -mn /tmp/pc_gc/cord/de_win.ICO a:/cord - -mcopy -tmn /tmp/pc_gc/cord/private/* a:/cord/private - -mcopy -tmn /tmp/pc_gc/include/* a:/include - -mcopy -tmn /tmp/pc_gc/include/private/* a:/include/private - rm -r /tmp/pc_gc - -gc.tar.Z: gc.tar - compress gc.tar - -gc.tar.gz: gc.tar - gzip gc.tar - -lint: $(CSRCS) tests/test.c - lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall|change in ANSI|improper alignment" - -# BTL: added to test shared library version of collector. -# Currently works only under SunOS5. Requires GC_INIT call from statically -# loaded client code. -ABSDIR = `pwd` -gctest_dyn_link: tests/test.o libgc.so - $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link tests/test.o -lgc -ldl -lthread - -gctest_irix_dyn_link: tests/test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link tests/test.o -lirixgc - -# The following appear to be dead, especially since libgc_globals.h -# is apparently lost. -test_dll.o: tests/test.c libgc_globals.h - $(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o - -test_dll: test_dll.o libgc_dll.a libgc.dll - $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll - -SYM_PREFIX-libgc=GC - -# Uncomment the following line to build a GNU win32 DLL -# include Makefile.DLLs - -reserved_namespace: $(SRCS) - for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ - sed s/GC_/_GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - -user_namespace: $(SRCS) - for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ - sed s/_GC_/GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done diff --git a/gc/Makefile.DLLs b/gc/Makefile.DLLs @@ -1,107 +0,0 @@ -#-----------------------------------------------------------------------------# - -# Makefile.DLLs, version 0.4. - -# Contributed by Fergus Henderson. - -# This Makefile contains rules for creating DLLs on Windows using gnu-win32. - -#-----------------------------------------------------------------------------# - -# This rule creates a `.def' file, which lists the symbols that are exported -# from the DLL. We use `nm' to get a list of all the exported text (`T') -# symbols and data symbols -- including uninitialized data (`B'), -# initialized data (`D'), read-only data (`R'), and common blocks (`C'). -%.def: %.a - echo EXPORTS > $@ - nm $< | grep '^........ [BCDRT] _' | sed 's/[^_]*_//' >> $@ - -# We need to use macros to access global data: -# the user of the DLL must refer to `foo' as `(*__imp_foo)'. -# This rule creates a `_globals.h' file, which contains macros -# for doing this. - -SYM_PREFIX = $(firstword $(SYM_PREFIX-$*) $*) -DLL_MACRO = $(SYM_PREFIX)_USE_DLL -IMP_MACRO = $(SYM_PREFIX)_IMP -GLOBAL_MACRO = $(SYM_PREFIX)_GLOBAL - -%_globals.h: %.a - echo "/* automatically generated by Makefile.DLLs */" > $@ - echo "#if defined(__GNUC__) && defined(_WIN32) \\" >> $@ - echo " && defined($(DLL_MACRO))" >> $@ - echo "# define $(IMP_MACRO)(name) __imp_##name" >> $@ - echo "# define $(GLOBAL_MACRO)(name) (*$(IMP_MACRO)(name))" >> $@ - echo "#else" >> $@ - echo "# define $(GLOBAL_MACRO)(name) name" >> $@ - echo "#endif" >> $@ - echo "" >> $@ - for sym in `nm $< | grep '^........ [BCDR] _' | sed 's/[^_]*_//'`; do \ - echo "#define $$sym $(GLOBAL_MACRO)($$sym)" >> $@; \ - done - -# This rule creates the export object file (`foo.exp') which contains the -# jump table array; this export object file becomes part of the DLL. -# This rule also creates the import library (`foo_dll.a') which contains small -# stubs for all the functions exported by the DLL which jump to them via the -# jump table. Executables that will use the DLL must be linked against this -# stub library. -%.exp %_dll.a : %.def - dlltool $(DLLTOOLFLAGS) $(DLLTOOLFLAGS-$*) \ - --def $< \ - --dllname $*.dll \ - --output-exp $*.exp \ - --output-lib $*_dll.a - -# The `sed' commands below are to convert DOS-style `C:\foo\bar' -# pathnames into Unix-style `//c/foo/bar' pathnames. -CYGWIN32_LIBS = $(shell echo \ - -L`dirname \`gcc -print-file-name=libgcc.a | \ - sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \ - -L`dirname \`gcc -print-file-name=libcygwin.a | \ - sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \ - -L`dirname \`gcc -print-file-name=libkernel32.a | \ - sed -e 's@^\\\\([A-Za-z]\\\\):@//\\\\1@g' -e 's@\\\\\\\\@/@g' \` ` \ - -lgcc -lcygwin -lkernel32 -lgcc) - -RELOCATABLE=yes - -ifeq "$(strip $(RELOCATABLE))" "yes" - -# to create relocatable DLLs, we need to do two passes -%.dll: %.exp %.a dll_fixup.o dll_init.o - $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll -o $*.base \ - -e _dll_entry@12 dll_init.o \ - dll_fixup.o $*.exp $*.a \ - $(LDLIBS) $(LDLIBS-$*) \ - $(CYGWIN32_LIBS) - $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll --base-file $*.base -o $@ \ - -e _dll_entry@12 dll_init.o \ - dll_fixup.o $*.exp $*.a \ - $(LDLIBS) $(LDLIBS-$*) \ - $(CYGWIN32_LIBS) - rm -f $*.base -else - -%.dll: %.exp %.a dll_fixup.o dll_init.o - $(LD) $(LDFLAGS) $(LDFLAGS-$*) --dll -o $@ \ - -e _dll_entry@12 dll_init.o \ - dll_fixup.o $*.exp $*.a \ - $(LDLIBS) $(LDLIBS-$*) \ - $(CYGWIN32_LIBS) - -endif - -# This black magic piece of assembler needs to be linked in in order to -# properly terminate the list of imported DLLs. -dll_fixup.s: - echo '.section .idata$$3' > dll_fixup.s - echo '.long 0,0,0,0, 0,0,0,0' >> dll_fixup.s - -# This bit is necessary to provide an initialization function for the DLL. -dll_init.c: - echo '__attribute__((stdcall))' > dll_init.c - echo 'int dll_entry(int handle, int reason, void *ptr)' >> dll_init.c - echo '{return 1; }' >> dll_init.c - -dont_throw_away: dll_fixup.o dll_init.o diff --git a/gc/Makefile.am b/gc/Makefile.am @@ -1,120 +0,0 @@ -# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. -# -# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED -# OR IMPLIED. ANY USE IS AT YOUR OWN RISK. -# -# Permission is hereby granted to use or copy this program -# for any purpose, provided the above notices are retained on all copies. -# Permission to modify the code and to distribute modified code is granted, -# provided the above notices are retained, and a notice that the code was -# modified is included with the above copyright notice. -# -# Original author: Tom Tromey -# Severely truncated by Hans-J. Boehm - -## Process this file with automake to produce Makefile.in. - -## FIXME: `make dist' in this directory will not currently work. Many -## files that should be in the distribution are not mentioned in this -## Makefile.am. - -AUTOMAKE_OPTIONS = foreign - -lib_LTLIBRARIES = libgc.la - -libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ -dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c \ -linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \ -obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \ -solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c \ -backgraph.c win32_threads.c - -# Include THREADLIBS here to ensure that the correct versions of -# linuxthread semaphore functions get linked: -libgc_la_LIBADD = @addobjs@ $(THREADLIBS) -libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = -version-info 1:1:0 - -EXTRA_libgc_la_SOURCES = alpha_mach_dep.s \ -mips_sgi_mach_dep.S mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s \ -rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ -sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s - -AM_CXXFLAGS = @GC_CFLAGS@ -AM_CFLAGS = @GC_CFLAGS@ - -check_PROGRAMS = gctest -# The following hack produces a warning from automake, but we need it in order -# to build a file from a subdirectory. FIXME. -test.o: $(srcdir)/tests/test.c - $(COMPILE) -c $(srcdir)/tests/test.c -# Using $< in the above seems to fail with the HP/UX on Itanium make. - -# gctest_OBJECTS = test.o -gctest_SOURCES = -gctest_LDADD = test.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) -TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc -TESTS = gctest - -## FIXME: relies on internal code generated by automake. -all_objs = @addobjs@ $(libgc_la_OBJECTS) -$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ -include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h - -## FIXME: we shouldn't have to do this, but automake forces us to. -.s.lo: -## We use -Wp,-P to strip #line directives. Irix `as' chokes on -## these. - $(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $< - -## We have our own definition of LTCOMPILE because we want to use our -## CFLAGS, not those passed in from the top level make. -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) -LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@ - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ - "CFLAGS=$(CFLAGS)" \ - "CXXFLAGS=$(CXXFLAGS)" \ - "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ - "LDFLAGS=$(LDFLAGS)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ - "MAKE=$(MAKE)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ - "PICFLAG=$(PICFLAG)" \ - "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ - "SHELL=$(SHELL)" \ - "EXPECT=$(EXPECT)" \ - "RUNTEST=$(RUNTEST)" \ - "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ - "exec_prefix=$(exec_prefix)" \ - "infodir=$(infodir)" \ - "libdir=$(libdir)" \ - "prefix=$(prefix)" \ - "tooldir=$(tooldir)" \ - "AR=$(AR)" \ - "AS=$(AS)" \ - "CC=$(CC)" \ - "CXX=$(CXX)" \ - "LD=$(LD)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "NM=$(NM)" \ - "PICFLAG=$(PICFLAG)" \ - "RANLIB=$(RANLIB)" \ - "DESTDIR=$(DESTDIR)" - -CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host - -MAKEOVERRIDES= diff --git a/gc/Makefile.direct b/gc/Makefile.direct @@ -1,632 +0,0 @@ -# This is the original manually generated Makefile. It may still be used -# to build the collector. -# -# Primary targets: -# gc.a - builds basic library -# c++ - adds C++ interface to library -# cords - adds cords (heavyweight strings) to library -# test - prints porting information, then builds basic version of gc.a, -# and runs some tests of collector and cords. Does not add cords or -# c++ interface to gc.a -# cord/de - builds dumb editor based on cords. -ABI_FLAG= -# ABI_FLAG should be the cc flag that specifies the ABI. On most -# platforms this will be the empty string. Possible values: -# +DD64 for 64-bit executable on HP/UX. -# -n32, -n64, -o32 for SGI/MIPS ABIs. - -AS_ABI_FLAG=$(ABI_FLAG) -# ABI flag for assembler. On HP/UX this is +A64 for 64 bit -# executables. - -CC=cc $(ABI_FLAG) -CXX=g++ $(ABI_FLAG) -AS=as $(AS_ABI_FLAG) -# The above doesn't work with gas, which doesn't run cpp. -# Define AS as `gcc -c -x assembler-with-cpp' instead. - -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. -srcdir= . -VPATH= $(srcdir) - -CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS - -# To build the parallel collector on Linux, add to the above: -# -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -# To build the parallel collector n a static library on HP/UX, add to the above: -# -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L - -# HOSTCC and HOSTCFLAGS are used to build executables that will be run as -# part of the build process, i.e. on the build machine. These will usually -# be the same as CC and CFLAGS, except in a cross-compilation environment. -# Note that HOSTCFLAGS should include any -D flags that affect thread support. -HOSTCC=$(CC) -HOSTCFLAGS=$(CFLAGS) - -# For dynamic library builds, it may be necessary to add flags to generate -# PIC code, e.g. -fPIC on Linux. - -# Setjmp_test may yield overly optimistic results when compiled -# without optimization. - -# These define arguments influence the collector configuration: -# -DSILENT disables statistics printing, and improves performance. -# -DFIND_LEAK causes GC_find_leak to be initially set. -# This causes the collector to assume that all inaccessible -# objects should have been explicitly deallocated, and reports exceptions. -# Finalization and the test program are not usable in this mode. -# -DGC_SOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define GC_SOLARIS_THREADS and then include -# gc.h before performing thr_ or dl* or GC_ operations.) -# Must also define -D_REENTRANT. -# -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads. -# (Internally this define GC_SOLARIS_THREADS as well.) -# -DGC_IRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads. -# Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp. -# -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads. -# see README.linux. -D_REENTRANT may also be required. -# -DGC_OSF1_THREADS enables support for Tru64 pthreads. Untested. -# -DGC_FREEBSD_THREADS enables support for FreeBSD pthreads. Untested. -# Appeared to run into some underlying thread problems. -# -DGC_DGUX386_THREADS enables support for DB/UX on I386 threads. -# See README.DGUX386. -# -DALL_INTERIOR_POINTERS allows all pointers to the interior -# of objects to be recognized. (See gc_priv.h for consequences.) -# Alternatively, GC_all_interior_pointers can be set at process -# initialization time. -# -DSMALL_CONFIG tries to tune the collector for small heap sizes, -# usually causing it to use less space in such situations. -# Incremental collection no longer works in this case. -# -DLARGE_CONFIG tunes the collector for unusually large heaps. -# Necessary for heaps larger than about 500 MB on most machines. -# Recommended for heaps larger than about 64 MB. -# -DDONT_ADD_BYTE_AT_END is meaningful only with -DALL_INTERIOR_POINTERS or -# GC_all_interior_pointers = 1. Normally -DALL_INTERIOR_POINTERS -# causes all objects to be padded so that pointers just past the end of -# an object can be recognized. This can be expensive. (The padding -# is normally more than one byte due to alignment constraints.) -# -DDONT_ADD_BYTE_AT_END disables the padding. -# -DNO_SIGNALS does not disable signals during critical parts of -# the GC process. This is no less correct than many malloc -# implementations, and it sometimes has a significant performance -# impact. However, it is dangerous for many not-quite-ANSI C -# programs that call things like printf in asynchronous signal handlers. -# This is on by default. Turning it off has not been extensively tested with -# compilers that reorder stores. It should have been. -# -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not -# have execute permission, i.e. it may be impossible to execute -# code from the heap. Currently this only affects the incremental -# collector on UNIX machines. It may greatly improve its performance, -# since this may avoid some expensive cache synchronization. -# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support -# the new syntax "operator new[]" for allocating and deleting arrays. -# See gc_cpp.h for details. No effect on the C part of the collector. -# This is defined implicitly in a few environments. Must also be defined -# by clients that use gc_cpp.h. -# -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be -# defined as aliases for X, GC_realloc, and GC_free, respectively. -# Calloc and strdup are redefined in terms of the new malloc. X should -# be either GC_malloc or GC_malloc_uncollectable, or -# GC_debug_malloc_replacement. (The latter invokes GC_debug_malloc -# with dummy source location information, but still results in -# properly remembered call stacks on Linux/X86 and Solaris/SPARC.) -# The former is occasionally useful for working around leaks in code -# you don't want to (or can't) look at. It may not work for -# existing code, but it often does. Neither works on all platforms, -# since some ports use malloc or calloc to obtain system memory. -# (Probably works for UNIX, and win32.) If you build with DBG_HDRS_ALL, -# you should only use GC_debug_malloc_replacement as a malloc -# replacement. -# -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X. -# The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement, -# together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to -# generate leak reports with call stacks for both malloc and realloc. -# -DIGNORE_FREE turns calls to free into a noop. Only useful with -# -DREDIRECT_MALLOC. -# -DNO_DEBUGGING removes GC_dump and the debugging routines it calls. -# Reduces code size slightly at the expense of debuggability. -# -DJAVA_FINALIZATION makes it somewhat safer to finalize objects out of -# order by specifying a nonstandard finalization mark procedure (see -# finalize.c). Objects reachable from finalizable objects will be marked -# in a sepearte postpass, and hence their memory won't be reclaimed. -# Not recommended unless you are implementing a language that specifies -# these semantics. Since 5.0, determines only only the initial value -# of GC_java_finalization variable. -# -DFINALIZE_ON_DEMAND causes finalizers to be run only in response -# to explicit GC_invoke_finalizers() calls. -# In 5.0 this became runtime adjustable, and this only determines the -# initial value of GC_finalize_on_demand. -# -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable. -# This is useful if either the vendor malloc implementation is poor, -# or if REDIRECT_MALLOC is used. -# -DHBLKSIZE=ddd, where ddd is a power of 2 between 512 and 16384, explicitly -# sets the heap block size. Each heap block is devoted to a single size and -# kind of object. For the incremental collector it makes sense to match -# the most likely page size. Otherwise large values result in more -# fragmentation, but generally better performance for large heaps. -# -DUSE_MMAP use MMAP instead of sbrk to get new memory. -# Works for Solaris and Irix. -# -DUSE_MUNMAP causes memory to be returned to the OS under the right -# circumstances. This currently disables VM-based incremental collection. -# This is currently experimental, and works only under some Unix, -# Linux and Windows versions. -# -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than -# GC_scratch_alloc() to get stack memory. -# -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever -# the garbage collector detects a value that looks almost, but not quite, -# like a pointer, print both the address containing the value, and the -# value of the near-bogus-pointer. Can be used to identifiy regions of -# memory that are likely to contribute misidentified pointers. -# -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers -# for objects allocated with the debugging allocator. If all objects -# through GC_MALLOC with GC_DEBUG defined, this allows the client -# to determine how particular or randomly chosen objects are reachable -# for debugging/profiling purposes. The gc_backptr.h interface is -# implemented only if this is defined. -# -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently -# this facility is only used in a few places. It is intended primarily -# for debugging of the garbage collector itself, but could also -# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases -# the reliability (from 99.9999% to 100%) of some of the debugging -# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. -# Assumes that all client allocation is done through debugging -# allocators. -# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten -# the headers to minimize object size, at the expense of checking for -# writes past the end of an object. This is intended for environments -# in which most client code is written in a "safe" language, such as -# Scheme or Java. Assumes that all client allocation is done using -# the GC_debug_ functions, or through the macros that expand to these, -# or by redirecting malloc to GC_debug_malloc_replacement. -# (Also eliminates the field for the requested object size.) -# occasionally be useful for debugging of client code. Slows down the -# collector somewhat, but not drastically. -# -DSAVE_CALL_COUNT=<n> Set the number of call frames saved with objects -# allocated through the debugging interface. Affects the amount of -# information generated in leak reports. Only matters on platforms -# on which we can quickly generate call stacks, currently Linux/(X86 & SPARC) -# and Solaris/SPARC and platforms that provide execinfo.h. -# Default is zero. On X86, client -# code should NOT be compiled with -fomit-frame-pointer. -# -DSAVE_CALL_NARGS=<n> Set the number of functions arguments to be -# saved with each call frame. Default is zero. Ignored if we -# don't know how to retrieve arguments on the platform. -# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -# altered stubborn objects, at substantial performance cost. -# Use only for debugging of the incremental collector. -# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems -# that include a pointer to a type descriptor in each allocated object). -# Building this way requires an ANSI C compiler. -# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style -# prefetch instructions. No effect except on X86 Linux platforms. -# Assumes a very recent gcc-compatible compiler and assembler. -# (Gas prefetcht0 support was added around May 1999.) -# Empirically the code appears to still run correctly on Pentium II -# processors, though with no performance benefit. May not run on other -# X86 processors? In some cases this improves performance by -# 15% or so. -# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style -# prefetch instructions. Same restrictions as USE_I686_PREFETCH. -# Minimally tested. Didn't appear to be an obvious win on a K6-2/500. -# -DGC_USE_LD_WRAP in combination with the old flags listed in README.linux -# causes the collector some system and pthread calls in a more transparent -# fashion than the usual macro-based approach. Requires GNU ld, and -# currently probably works only with Linux. -# -DTHREAD_LOCAL_ALLOC defines GC_local_malloc(), GC_local_malloc_atomic() -# and GC_local_gcj_malloc(). Needed for gc_gcj.h interface. These allocate -# in a way that usually does not involve acquisition of a global lock. -# Currently requires -DGC_LINUX_THREADS, but should be easy to port to -# other pthreads environments. Recommended for multiprocessors. -# -DPARALLEL_MARK allows the marker to run in multiple threads. Recommended -# for multiprocessors. Currently requires Linux on X86 or IA64, though -# support for other Posix platforms should be fairly easy to add, -# if the thread implementation is otherwise supported. -# -DNO_GETENV prevents the collector from looking at environment variables. -# These may otherwise alter its configuration, or turn off GC altogether. -# I don't know of a reason to disable this, except possibly if the -# resulting process runs as a privileged user? -# -DUSE_GLOBAL_ALLOC. Win32 only. Use GlobalAlloc instead of -# VirtualAlloc to allocate the heap. May be needed to work around -# a Windows NT/2000 issue. Incompatible with USE_MUNMAP. -# See README.win32 for details. -# -DMAKE_BACK_GRAPH. Enable GC_PRINT_BACK_HEIGHT environment variable. -# See README.environment for details. Experimental. Limited platform -# support. Implies DBG_HDRS_ALL. All allocation should be done using -# the debug interface. -# -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus -# makes incremental collection easier. Was enabled by default until 6.0. -# Rarely used, to my knowledge. -# -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed -# from a multithreaded parent. Currently only supported by linux_threads.c. -# (Similar code should work on Solaris or Irix, but it hasn't been tried.) -# - -CXXFLAGS= $(CFLAGS) -AR= ar -RANLIB= ranlib - - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o backgraph.o - -CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c backgraph.c - -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC - -CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o - -SRCS= $(CSRCS) mips_sgi_mach_dep.S rs6000_mach_dep.s alpha_mach_dep.S \ - sparc_mach_dep.S include/gc.h include/gc_typed.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/private/gcconfig.h include/private/gc_pmark.h \ - include/gc_inl.h include/gc_inline.h include/gc_mark.h \ - threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ - gcname.c include/weakpointer.h include/private/gc_locks.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ - include/new_gc_alloc.h include/gc_allocator.h \ - include/javaxfc.h sparc_sunos4_mach_dep.s sparc_netbsd_mach_dep.s \ - include/private/solaris_threads.h include/gc_backptr.h \ - hpux_test_and_clear.s include/gc_gcj.h \ - include/gc_local_alloc.h include/private/dbg_mlc.h \ - include/private/specific.h powerpc_macosx_mach_dep.s \ - include/leak_detector.h include/gc_amiga_redirects.h \ - include/gc_pthread_redirects.h ia64_save_regs_in_stack.s \ - $(CORD_SRCS) - -DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \ - doc/README.amiga doc/README.cords doc/debugging.html \ - doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \ - doc/README.sgi doc/README.solaris2 doc/README.uts \ - doc/README.win32 doc/barrett_diagram doc/README \ - doc/README.contributors doc/README.changes doc/gc.man \ - doc/README.environment doc/tree.html doc/gcdescr.html \ - doc/README.autoconf doc/README.macros doc/README.ews4800 \ - doc/README.DGUX386 doc/README.arm.cross - -TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \ - tests/leak_test.c tests/thread_leak_test.c - -GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \ - libtool.m4 install-sh configure.host Makefile.in \ - ltconfig aclocal.m4 config.sub config.guess \ - ltmain.sh mkinstalldirs depcomp missing - -OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \ - BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \ - PCR-Makefile SMakefile.amiga Makefile.DLLs \ - digimars.mak Makefile.direct -# Makefile and Makefile.direct are copies of each other. - -OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \ - MacProjects.sit.hqx MacOS.c \ - Mac_files/datastart.c Mac_files/dataend.c \ - Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ - add_gc_prefix.c gc_cpp.cpp win32_threads.c \ - version.h AmigaOS.c \ - $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES) - -CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ - $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h - -UTILS= if_mach if_not_there threadlibs - -# Libraries needed for curses applications. Only needed for de. -CURSES= -lcurses -ltermlib - -# The following is irrelevant on most systems. But a few -# versions of make otherwise fork the shell specified in -# the SHELL environment variable. -SHELL= /bin/sh - -SPECIALCFLAGS = -I$(srcdir)/include -# Alternative flags to the C compiler for mach_dep.c. -# Mach_dep.c often doesn't like optimization, and it's -# not time-critical anyway. -# Set SPECIALCFLAGS to -q nodirect_code on Encore. - -all: gc.a gctest - -BSD-pkg-all: bsd-libgc.a - -bsd-libgc.a: - $(MAKE) CFLAGS="$(CFLAGS)" clean c++-t - mv gc.a bsd-libgc.a - -BSD-pkg-install: BSD-pkg-all - ${CP} bsd-libgc.a libgc.a - ${INSTALL_DATA} libgc.a ${PREFIX}/lib - ${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include - -pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \ -include/private/gc_locks.h include/gc.h include/private/gcconfig.h \ -mach_dep.o $(SRCS) - $(MAKE) -f PCR-Makefile depend - $(MAKE) -f PCR-Makefile - -$(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \ - $(srcdir)/include/private/gc_priv.h \ - $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ - $(srcdir)/include/gc.h \ - $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ - Makefile -# The dependency on Makefile is needed. Changing -# options such as -DSILENT affects the size of GC_arrays, -# invalidating all .o files that rely on gc_priv.h - -mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h - -specific.o linux_threads.o: $(srcdir)/include/private/specific.h - -solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h - -dbg_mlc.o gcj_mlc.o: $(srcdir)/include/private/dbg_mlc.h - -tests/test.o: tests $(srcdir)/tests/test.c - $(CC) $(CFLAGS) -c $(srcdir)/tests/test.c - mv test.o tests/test.o - -tests: - mkdir tests - -base_lib gc.a: $(OBJS) dyn_load.o $(UTILS) - echo > base_lib - rm -f dont_ar_1 - ./if_mach SPARC SUNOS5 touch dont_ar_1 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(OBJS) dyn_load.o - ./if_mach M68K AMIGA touch dont_ar_1 - ./if_mach M68K AMIGA $(AR) -vrus gc.a $(OBJS) dyn_load.o - ./if_not_there dont_ar_1 $(AR) ru gc.a $(OBJS) dyn_load.o - ./if_not_there dont_ar_1 $(RANLIB) gc.a || cat /dev/null -# ignore ranlib failure; that usually means it doesn't exist, and isn't needed - -cords: $(CORD_OBJS) cord/cordtest $(UTILS) - rm -f dont_ar_3 - ./if_mach SPARC SUNOS5 touch dont_ar_3 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(CORD_OBJS) - ./if_mach M68K AMIGA touch dont_ar_3 - ./if_mach M68K AMIGA $(AR) -vrus gc.a $(CORD_OBJS) - ./if_not_there dont_ar_3 $(AR) ru gc.a $(CORD_OBJS) - ./if_not_there dont_ar_3 $(RANLIB) gc.a || cat /dev/null - -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile - $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc - -test_cpp: $(srcdir)/tests/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ -base_lib $(UTILS) - rm -f test_cpp - ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a -ldld `./threadlibs` - ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a `./threadlibs` - -c++-t: c++ - ./test_cpp 1 - -c++-nt: c++ - @echo "Use ./test_cpp 1 to test the leak library" - -c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp - rm -f dont_ar_4 - ./if_mach SPARC SUNOS5 touch dont_ar_4 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o - ./if_mach M68K AMIGA touch dont_ar_4 - ./if_mach M68K AMIGA $(AR) -vrus gc.a gc_cpp.o - ./if_not_there dont_ar_4 $(AR) ru gc.a gc_cpp.o - ./if_not_there dont_ar_4 $(RANLIB) gc.a || cat /dev/null - ./test_cpp 1 - echo > c++ - -dyn_load_sunos53.o: dyn_load.c - $(CC) $(CFLAGS) -DSUNOS53_SHARED_LIB -c $(srcdir)/dyn_load.c -o $@ - -# SunOS5 shared library version of the collector -sunos5gc.so: $(OBJS) dyn_load_sunos53.o - $(CC) -G -o sunos5gc.so $(OBJS) dyn_load_sunos53.o -ldl - ln sunos5gc.so libgc.so - -# Alpha/OSF shared library version of the collector -libalphagc.so: $(OBJS) - ld -shared -o libalphagc.so $(OBJS) dyn_load.o -lc - ln libalphagc.so libgc.so - -# IRIX shared library version of the collector -libirixgc.so: $(OBJS) dyn_load.o - ld -shared $(ABI_FLAG) -o libirixgc.so $(OBJS) dyn_load.o -lc - ln libirixgc.so libgc.so - -# Linux shared library version of the collector -liblinuxgc.so: $(OBJS) dyn_load.o - gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o - ln liblinuxgc.so libgc.so - -# Alternative Linux rule. This is preferable, but is likely to break the -# Makefile for some non-linux platforms. -# LIBOBJS= $(patsubst %.o, %.lo, $(OBJS)) -# -#.SUFFIXES: .lo $(SUFFIXES) -# -#.c.lo: -# $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c $< -o $@ -# -# liblinuxgc.so: $(LIBOBJS) dyn_load.lo -# gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo -# touch liblinuxgc.so - -mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.S \ - $(srcdir)/mips_ultrix_mach_dep.s \ - $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s \ - $(srcdir)/sparc_mach_dep.S $(srcdir)/sparc_sunos4_mach_dep.s \ - $(srcdir)/ia64_save_regs_in_stack.s \ - $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS) - rm -f mach_dep.o - ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.S - ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s - ./if_mach ALPHA "" $(CC) -c -o mach_dep.o $(srcdir)/alpha_mach_dep.S - ./if_mach SPARC SUNOS5 $(CC) -c -o mach_dep.o $(srcdir)/sparc_mach_dep.S - ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s - ./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s - ./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s - ./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s - ./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - ./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o - ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - -mark_rts.o: $(srcdir)/mark_rts.c $(UTILS) - rm -f mark_rts.o - -./if_mach ALPHA OSF1 $(CC) -c $(CFLAGS) -Wo,-notail $(srcdir)/mark_rts.c - ./if_not_there mark_rts.o $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c -# Work-around for DEC optimizer tail recursion elimination bug. -# The ALPHA-specific line should be removed if gcc is used. - -alloc.o: version.h - -cord: - mkdir cord - -cord/cordbscs.o: cord $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordbscs.c - mv cordbscs.o cord/cordbscs.o -# not all compilers understand -o filename - -cord/cordxtra.o: cord $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordxtra.c - mv cordxtra.o cord/cordxtra.o - -cord/cordprnt.o: cord $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordprnt.c - mv cordprnt.o cord/cordprnt.o - -cord/cordtest: $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a $(UTILS) - rm -f cord/cordtest - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -lucb - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` - ./if_not_there cord/cordtest $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` - -cord/de: $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(UTILS) - rm -f cord/de - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs` - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs` - ./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a - ./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_not_there cord/de $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) `./threadlibs` - -if_mach: $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h - $(HOSTCC) $(HOSTCFLAGS) -o if_mach $(srcdir)/if_mach.c - -threadlibs: $(srcdir)/threadlibs.c $(srcdir)/include/private/gcconfig.h Makefile - $(HOSTCC) $(HOSTCFLAGS) -o threadlibs $(srcdir)/threadlibs.c - -if_not_there: $(srcdir)/if_not_there.c - $(HOSTCC) $(HOSTCFLAGS) -o if_not_there $(srcdir)/if_not_there.c - -clean: - rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ - setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ - threadlibs $(CORD_OBJS) cord/cordtest cord/de - -rm -f *~ - -gctest: tests/test.o gc.a $(UTILS) - rm -f gctest - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -lucb - ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -ldld `./threadlibs` - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o gctest tests/test.o gc.a `./threadlibs` - ./if_not_there gctest $(CC) $(CFLAGS) -o gctest tests/test.o gc.a `./threadlibs` - -# If an optimized setjmp_test generates a segmentation fault, -# odds are your compiler is broken. Gctest may still work. -# Try compiling setjmp_t.c unoptimized. -setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h $(UTILS) - $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c - -test: KandRtest cord/cordtest - cord/cordtest - -# Those tests that work even with a K&R C compiler: -KandRtest: setjmp_test gctest - ./setjmp_test - ./gctest - -add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h - $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c - -gcname: $(srcdir)/gcname.c $(srcdir)/version.h - $(CC) -o gcname $(srcdir)/gcname.c - -gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname - cp Makefile Makefile.old - cp Makefile.direct Makefile - rm -f `./gcname` - ln -s . `./gcname` - ./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files - tar cvfh gc.tar `cat /tmp/gc.tar-files` - cp gc.tar `./gcname`.tar - gzip `./gcname`.tar - rm `./gcname` - -pc_gc.tar: $(SRCS) $(OTHER_FILES) - tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) - -floppy: pc_gc.tar - -mmd a:/cord - -mmd a:/cord/private - -mmd a:/include - -mmd a:/include/private - mkdir /tmp/pc_gc - cat pc_gc.tar | (cd /tmp/pc_gc; tar xvf -) - -mcopy -tmn /tmp/pc_gc/* a: - -mcopy -tmn /tmp/pc_gc/cord/* a:/cord - -mcopy -mn /tmp/pc_gc/cord/de_win.ICO a:/cord - -mcopy -tmn /tmp/pc_gc/cord/private/* a:/cord/private - -mcopy -tmn /tmp/pc_gc/include/* a:/include - -mcopy -tmn /tmp/pc_gc/include/private/* a:/include/private - rm -r /tmp/pc_gc - -gc.tar.Z: gc.tar - compress gc.tar - -gc.tar.gz: gc.tar - gzip gc.tar - -lint: $(CSRCS) tests/test.c - lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall|change in ANSI|improper alignment" - -# BTL: added to test shared library version of collector. -# Currently works only under SunOS5. Requires GC_INIT call from statically -# loaded client code. -ABSDIR = `pwd` -gctest_dyn_link: tests/test.o libgc.so - $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link tests/test.o -lgc -ldl -lthread - -gctest_irix_dyn_link: tests/test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link tests/test.o -lirixgc - -# The following appear to be dead, especially since libgc_globals.h -# is apparently lost. -test_dll.o: tests/test.c libgc_globals.h - $(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o - -test_dll: test_dll.o libgc_dll.a libgc.dll - $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll - -SYM_PREFIX-libgc=GC - -# Uncomment the following line to build a GNU win32 DLL -# include Makefile.DLLs - -reserved_namespace: $(SRCS) - for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ - sed s/GC_/_GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - -user_namespace: $(SRCS) - for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ - sed s/_GC_/GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done diff --git a/gc/Makefile.dj b/gc/Makefile.dj @@ -1,430 +0,0 @@ -# This Makefile is intended only for DJGPP use. -# It is mainly a copy of the main Makefile, but tends to get out of sync -# with it. A merge would probably be appropriate. - -# Primary targets: -# gc.a - builds basic library -# libgc.a - builds library for use with g++ "-fgc-keyword" extension -# -fgc-keyword was never really available. Historical -# interest only. -# c++ - adds C++ interface to library -# cords - adds cords (heavyweight strings) to library -# test - prints porting information, then builds basic version of gc.a, -# and runs some tests of collector and cords. Does not add cords or -# c++ interface to gc.a -# cord/de$(EXE_SUFFIX) - builds dumb editor based on cords. -ABI_FLAG= -CC=gcc $(ABI_FLAG) -CXX=gxx $(ABI_FLAG) -AS=gcc -c -x assembler-with-cpp $(ABI_FLAG) -# The above doesn't work with gas, which doesn't run cpp. -# Define AS as `gcc -c -x assembler-with-cpp' instead. -# Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64) -# if you use something other than the default ABI on your machine. - -# special defines for DJGPP -CXXLD=gxx $(ABI_FLAG) -EXE_SUFFIX=.exe - -srcdir= . -VPATH= $(srcdir) - -CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT - -# Setjmp_test may yield overly optimistic results when compiled -# without optimization. -# -DSILENT disables statistics printing, and improves performance. -# -DFIND_LEAK causes GC_find_leak to be initially set. -# This causes the collector to assume that all inaccessible -# objects should have been explicitly deallocated, and reports exceptions. -# Finalization and the test program are not usable in this mode. -# -DALL_INTERIOR_POINTERS allows all pointers to the interior -# of objects to be recognized. (See gc_priv.h for consequences.) -# -DSMALL_CONFIG tries to tune the collector for small heap sizes, -# usually causing it to use less space in such situations. -# Incremental collection no longer works in this case. -# -DLARGE_CONFIG tunes the collector for unusually large heaps. -# Necessary for heaps larger than about 500 MB on most machines. -# Recommended for heaps larger than about 64 MB. -# -DDONT_ADD_BYTE_AT_END is meaningful only with -# -DALL_INTERIOR_POINTERS. Normally -DALL_INTERIOR_POINTERS -# causes all objects to be padded so that pointers just past the end of -# an object can be recognized. This can be expensive. (The padding -# is normally more than one byte due to alignment constraints.) -# -DDONT_ADD_BYTE_AT_END disables the padding. -# -DNO_SIGNALS does not disable signals during critical parts of -# the GC process. This is no less correct than many malloc -# implementations, and it sometimes has a significant performance -# impact. However, it is dangerous for many not-quite-ANSI C -# programs that call things like printf in asynchronous signal handlers. -# This is on by default. Turning it off has not been extensively tested with -# compilers that reorder stores. It should have been. -# -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not -# have execute permission, i.e. it may be impossible to execute -# code from the heap. Currently this only affects the incremental -# collector on UNIX machines. It may greatly improve its performance, -# since this may avoid some expensive cache synchronization. -# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support -# the new syntax "operator new[]" for allocating and deleting arrays. -# See gc_cpp.h for details. No effect on the C part of the collector. -# This is defined implicitly in a few environments. Must also be defined -# by clients that use gc_cpp.h. -# -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined -# as aliases for X, GC_realloc, and GC_free, respectively. -# Calloc is redefined in terms of the new malloc. X should -# be either GC_malloc or GC_malloc_uncollectable. -# The former is occasionally useful for working around leaks in code -# you don't want to (or can't) look at. It may not work for -# existing code, but it often does. Neither works on all platforms, -# since some ports use malloc or calloc to obtain system memory. -# (Probably works for UNIX, and win32.) -# -DIGNORE_FREE turns calls to free into a noop. Only useful with -# -DREDIRECT_MALLOC. -# -DNO_DEBUGGING removes GC_dump and the debugging routines it calls. -# Reduces code size slightly at the expense of debuggability. -# -DJAVA_FINALIZATION makes it somewhat safer to finalize objects out of -# order by specifying a nonstandard finalization mark procedure (see -# finalize.c). Objects reachable from finalizable objects will be marked -# in a sepearte postpass, and hence their memory won't be reclaimed. -# Not recommended unless you are implementing a language that specifies -# these semantics. Since 5.0, determines only only the initial value -# of GC_java_finalization variable. -# -DFINALIZE_ON_DEMAND causes finalizers to be run only in response -# to explicit GC_invoke_finalizers() calls. -# In 5.0 this became runtime adjustable, and this only determines the -# initial value of GC_finalize_on_demand. -# -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable. -# This is useful if either the vendor malloc implementation is poor, -# or if REDIRECT_MALLOC is used. -# -DHBLKSIZE=ddd, where ddd is a power of 2 between 512 and 16384, explicitly -# sets the heap block size. Each heap block is devoted to a single size and -# kind of object. For the incremental collector it makes sense to match -# the most likely page size. Otherwise large values result in more -# fragmentation, but generally better performance for large heaps. -# -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever -# the garbage collector detects a value that looks almost, but not quite, -# like a pointer, print both the address containing the value, and the -# value of the near-bogus-pointer. Can be used to identifiy regions of -# memory that are likely to contribute misidentified pointers. -# -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers -# for objects allocated with the debugging allocator. If all objects -# through GC_MALLOC with GC_DEBUG defined, this allows the client -# to determine how particular or randomly chosen objects are reachable -# for debugging/profiling purposes. The gc_backptr.h interface is -# implemented only if this is defined. -# -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently -# this facility is only used in a few places. It is intended primarily -# for debugging of the garbage collector itself, but could also -# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases -# the reliability (from 99.9999% to 100%) of some of the debugging -# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. -# Assumes that all client allocation is done through debugging -# allocators. -# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten -# the headers to minimize object size, at the expense of checking for -# writes past the end of an object. This is intended for environments -# in which most client code is written in a "safe" language, such as -# Scheme or Java. Assumes that all client allocation is done using -# the GC_debug_ functions (or through the macros that expand to these. -# (Also eliminates the field for the requested object size.) -# occasionally be useful for debugging of client code. Slows down the -# collector somewhat, but not drastically. -# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -# altered stubborn objects, at substantial performance cost. -# Use only for debugging of the incremental collector. -# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems -# that include a pointer to a type descriptor in each allocated object). -# Building this way requires an ANSI C compiler. -# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style -# prefetch instructions. No effect except on X86 Linux platforms. -# Assumes a very recent gcc-compatible compiler and assembler. -# (Gas prefetcht0 support was added around May 1999.) -# Empirically the code appears to still run correctly on Pentium II -# processors, though with no performance benefit. May not run on other -# X86 processors? In some cases this improves performance by -# 15% or so. -# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style -# prefetch instructions. Same restrictions as USE_I686_PREFETCH. -# UNTESTED!! -# -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux -# causes the collector some system and pthread calls in a more transparent -# fashion than the usual macro-based approach. Requires GNU ld, and -# currently probably works only with Linux. - - -CXXFLAGS= $(CFLAGS) -DGC_OPERATOR_NEW_ARRAY -AR= ar -RANLIB= ranlib - - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o hpux_irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o - -CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c hpux_irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c - -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga - -CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o - -SRCS= $(CSRCS) mips_sgi_mach_dep.S rs6000_mach_dep.s alpha_mach_dep.S \ - sparc_mach_dep.S include/gc.h include/gc_typed.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/private/gcconfig.h include/private/gc_mark.h \ - include/gc_inl.h include/gc_inline.h gc.man \ - threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ - include/weakpointer.h include/private/gc_locks.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ - include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \ - include/private/solaris_threads.h include/gc_backptr.h \ - hpux_test_and_clear.s include/gc_gcj.h \ - include/gc_local_alloc.h include/private/dbg_mlc.h \ - include/private/specific.h powerpc_macosx_mach_dep.s \ - include/leak_detector.h $(CORD_SRCS) - -OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \ - README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \ - SCoptions.amiga README.amiga README.win32 cord/README \ - README.rs6000 README.QUICK callprocs pc_excludes \ - barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \ - MacOS.c EMX_MAKEFILE README.debugging \ - Mac_files/datastart.c Mac_files/dataend.c \ - Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ - add_gc_prefix.c README.solaris2 README.sgi README.hp README.uts \ - win32_threads.c NT_THREADS_MAKEFILE gc.mak README.dj Makefile.dj \ - README.alpha README.linux README.MacOSX version.h Makefile.DLLs \ - WCC_MAKEFILE nursery.c include/gc_nursery.h include/gc_copy_descr.h - -CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ - $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h - -UTILS= if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) - -# Libraries needed for curses applications. Only needed for de. -CURSES= -lcurses -ltermlib - -# The following is irrelevant on most systems. But a few -# versions of make otherwise fork the shell specified in -# the SHELL environment variable. -SHELL= /bin/sh - -SPECIALCFLAGS = -# Alternative flags to the C compiler for mach_dep.c. -# Mach_dep.c often doesn't like optimization, and it's -# not time-critical anyway. -# Set SPECIALCFLAGS to -q nodirect_code on Encore. - -all: gc.a gctest$(EXE_SUFFIX) - -$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: \ - $(srcdir)/include/private/gc_priv.h \ - $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ - $(srcdir)/include/gc.h \ - $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ - Makefile -# The dependency on Makefile is needed. Changing -# options such as -DSILENT affects the size of GC_arrays, -# invalidating all .o files that rely on gc_priv.h - -mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h - -base_lib gc.a: $(OBJS) dyn_load.o $(UTILS) - echo > base_lib - rm -f on_sparc_sunos5_1 - ./if_mach SPARC SUNOS5 touch on_sparc_sunos5_1 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(OBJS) dyn_load.o - ./if_not_there on_sparc_sunos5_1 $(AR) ru gc.a $(OBJS) dyn_load.o - -./if_not_there on_sparc_sunos5_1 $(RANLIB) gc.a -# ignore ranlib failure; that usually means it doesn't exist, and isn't needed - -cords: $(CORD_OBJS) cord/cordtest$(EXE_SUFFIX) $(UTILS) - rm -f on_sparc_sunos5_3 - ./if_mach SPARC SUNOS5 touch on_sparc_sunos5_3 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(CORD_OBJS) - ./if_not_there on_sparc_sunos5_3 $(AR) ru gc.a $(CORD_OBJS) - -./if_not_there on_sparc_sunos5_3 $(RANLIB) gc.a - -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile - $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc - -test_cpp$(EXE_SUFFIX): $(srcdir)/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ -base_lib $(UTILS) - rm -f test_cpp test_cpp$(EXE_SUFFIX) - ./if_mach HP_PA "" $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a -ldld - ./if_not_there test_cpp$(EXE_SUFFIX) $(CXXLD) $(CXXFLAGS) -o test_cpp$(EXE_SUFFIX) $(srcdir)/test_cpp.cc gc_cpp.o gc.a - rm -f test_cpp - -c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp$(EXE_SUFFIX) - rm -f on_sparc_sunos5_4 - ./if_mach SPARC SUNOS5 touch on_sparc_sunos5_4 - ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o - ./if_not_there on_sparc_sunos5_4 $(AR) ru gc.a gc_cpp.o - -./if_not_there on_sparc_sunos5_4 $(RANLIB) gc.a - ./test_cpp$(EXE_SUFFIX) 1 - echo > c++ - -dyn_load_sunos53.o: dyn_load.c - $(CC) $(CFLAGS) -DSUNOS53_SHARED_LIB -c $(srcdir)/dyn_load.c -o $@ - -# SunOS5 shared library version of the collector -sunos5gc.so: $(OBJS) dyn_load_sunos53.o - $(CC) -G -o sunos5gc.so $(OBJS) dyn_load_sunos53.o -ldl - ln sunos5gc.so libgc.so - -# Alpha/OSF shared library version of the collector -libalphagc.so: $(OBJS) - ld -shared -o libalphagc.so $(OBJS) dyn_load.o -lc - ln libalphagc.so libgc.so - -# IRIX shared library version of the collector -libirixgc.so: $(OBJS) dyn_load.o - ld -shared $(ABI_FLAG) -o libirixgc.so $(OBJS) dyn_load.o -lc - ln libirixgc.so libgc.so - -# Linux shared library version of the collector -liblinuxgc.so: $(OBJS) dyn_load.o - gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o -lo - ln liblinuxgc.so libgc.so - -mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.S $(srcdir)/mips_ultrix_mach_dep.s \ - $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS) - rm -f mach_dep.o - ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.S - ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s - ./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s - ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s - ./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.S - ./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.S - ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s - ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c - -mark_rts.o: $(srcdir)/mark_rts.c if_mach if_not_there $(UTILS) - rm -f mark_rts.o - -./if_mach ALPHA OSF1 $(CC) -c $(CFLAGS) -Wo,-notail $(srcdir)/mark_rts.c - ./if_not_there mark_rts.o $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c -# Work-around for DEC optimizer tail recursion elimination bug. -# The ALPHA-specific line should be removed if gcc is used. - -alloc.o: version.h - -cord/cordbscs.o: $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordbscs.c - mv cordbscs.o cord/cordbscs.o -# not all compilers understand -o filename - -cord/cordxtra.o: $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordxtra.c - mv cordxtra.o cord/cordxtra.o - -cord/cordprnt.o: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) - $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordprnt.c - mv cordprnt.o cord/cordprnt.o - -cord/cordtest$(EXE_SUFFIX): $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a $(UTILS) /tmp - rm -f cord/cordtest$(EXE_SUFFIX) - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/cordtest$(EXE_SUFFIX) $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -lucb - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o cord/cordtest$(EXE_SUFFIX) $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld - ./if_not_there cord/cordtest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a - rm -f cord/cordtest cordtest - -mv cordtest$(EXE_SUFFIX) cord/ - -/tmp: $(UTILS) - ./if_not_there /tmp mkdir /tmp - -cord/de$(EXE_SUFFIX): $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(UTILS) - rm -f cord/de cord/de$(EXE_SUFFIX) - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs` - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld - ./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_not_there cord/de$(EXE_SUFFIX) $(CC) $(CFLAGS) -o cord/de$(EXE_SUFFIX) $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) - -if_mach$(EXE_SUFFIX): $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h - rm -f if_mach if_mach$(EXE_SUFFIX) - $(CC) $(CFLAGS) -o if_mach $(srcdir)/if_mach.c - -threadlibs$(EXE_SUFFIX): $(srcdir)/threadlibs.c $(srcdir)include/private/gcconfig.h Makefile - rm -f threadlibs threadlibs$(EXE_SUFFIX) - $(CC) $(CFLAGS) -o threadlibs $(srcdir)/threadlibs.c - -if_not_there$(EXE_SUFFIX): $(srcdir)/if_not_there.c - rm -f if_not_there if_not_there$(EXE_SUFFIX) - $(CC) $(CFLAGS) -o if_not_there $(srcdir)/if_not_there.c - -# Clean removes *.o several times, -# because as the first one doesn't seem to get them all! -clean: - rm -f gc.a *.o - rm -f *.o - rm -f *.o - rm -f cord/*.o - rm -f gctest gctest_dyn_link test_cpp - rm -f setjmp_test mon.out gmon.out a.out core if_not_there if_mach - rm -f threadlibs $(CORD_OBJS) cordtest cord/cordtest de cord/de - rm -f gctest$(EXE_SUFFIX) gctest_dyn_link$(EXE_SUFFIX) test_cpp$(EXE_SUFFIX) - rm -f setjmp_test$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) if_mach$(EXE_SUFFIX) - rm -f threadlibs$(EXE_SUFFIX) cord/cordtest$(EXE_SUFFIX) - -rm -f *~ - -gctest$(EXE_SUFFIX): test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) - rm -f gctest gctest$(EXE_SUFFIX) - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest test.o gc.a -lucb - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest test.o gc.a -ldld - ./if_not_there gctest$(EXE_SUFFIX) $(CC) $(CFLAGS) -o gctest$(EXE_SUFFIX) test.o gc.a - rm -f gctest - -# If an optimized setjmp_test generates a segmentation fault, -# odds are your compiler is broken. Gctest may still work. -# Try compiling setjmp_t.c unoptimized. -setjmp_test$(EXE_SUFFIX): $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h \ - if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) - rm -f setjmp_test$(EXE_SUFFIX) - $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c - rm -f setjmp_test - -test: KandRtest cord/cordtest$(EXE_SUFFIX) - ./cord/cordtest$(EXE_SUFFIX) - -# Those tests that work even with a K&R C compiler: -KandRtest: setjmp_test$(EXE_SUFFIX) gctest$(EXE_SUFFIX) - ./setjmp_test$(EXE_SUFFIX) - ./gctest$(EXE_SUFFIX) - -add_gc_prefix$(EXE_SUFFIX): add_gc_prefix.c - $(CC) -o add_gc_prefix$(EXE_SUFFIX) $(srcdir)/add_gc_prefix.c - rm -f add_gc_prefix - -gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix - ./add_gc_prefix$(EXE_SUFFIX) $(SRCS) $(OTHER_FILES) > /tmp/gc.tar-files - (cd $(srcdir)/.. ; tar cvfh - `cat /tmp/gc.tar-files`) > gc.tar - -pc_gc.tar: $(SRCS) $(OTHER_FILES) - tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) - -gc.tar.Z: gc.tar - compress gc.tar - -gc.tar.gz: gc.tar - gzip gc.tar - -lint: $(CSRCS) test.c - lint -DLINT $(CSRCS) test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall" - -# BTL: added to test shared library version of collector. -# Currently works only under SunOS5. Requires GC_INIT call from statically -# loaded client code. -ABSDIR = `pwd` -gctest_dyn_link: test.o libgc.so - $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread - -test_dll.o: test.c libgc_globals.h - $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o - -test_dll: test_dll.o libgc_dll.a libgc.dll - $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll - -SYM_PREFIX-libgc=GC - -# Uncomment the following line to build a GNU win32 DLL -# include Makefile.DLLs - diff --git a/gc/Makefile.in b/gc/Makefile.in @@ -1,673 +0,0 @@ -# Makefile.in generated by automake 1.6.1 from Makefile.am. -# @configure_input@ - -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. -# -# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED -# OR IMPLIED. ANY USE IS AT YOUR OWN RISK. -# -# Permission is hereby granted to use or copy this program -# for any purpose, provided the above notices are retained on all copies. -# Permission to modify the code and to distribute modified code is granted, -# provided the above notices are retained, and a notice that the code was -# modified is included with the above copyright notice. -# -# Original author: Tom Tromey -# Severely truncated by Hans-J. Boehm -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_HEADER = $(INSTALL_DATA) -transform = @program_transform_name@ -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ - -EXEEXT = @EXEEXT@ -OBJEXT = @OBJEXT@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CFLAGS = @CFLAGS@ -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXXINCLUDES = @CXXINCLUDES@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -ECHO = @ECHO@ -EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@ -GC_CFLAGS = @GC_CFLAGS@ -INCLUDES = @INCLUDES@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAINT = @MAINT@ -MY_CFLAGS = @MY_CFLAGS@ -OBJDUMP = @OBJDUMP@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -STRIP = @STRIP@ -THREADLIBS = @THREADLIBS@ -VERSION = @VERSION@ -addobjs = @addobjs@ -am__include = @am__include@ -am__quote = @am__quote@ -gc_basedir = @gc_basedir@ -install_sh = @install_sh@ -target_all = @target_all@ - -AUTOMAKE_OPTIONS = foreign - -lib_LTLIBRARIES = libgc.la - -libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ -dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c \ -linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \ -obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \ -solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c \ -backgraph.c win32_threads.c - - -# Include THREADLIBS here to ensure that the correct versions of -# linuxthread semaphore functions get linked: -libgc_la_LIBADD = @addobjs@ $(THREADLIBS) -libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = -version-info 1:1:0 - -EXTRA_libgc_la_SOURCES = alpha_mach_dep.s \ -mips_sgi_mach_dep.S mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s \ -rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ -sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s - - -AM_CXXFLAGS = @GC_CFLAGS@ -AM_CFLAGS = @GC_CFLAGS@ - -check_PROGRAMS = gctest -# Using $< in the above seems to fail with the HP/UX on Itanium make. - -# gctest_OBJECTS = test.o -gctest_SOURCES = -gctest_LDADD = test.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) -TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc -TESTS = gctest - -all_objs = @addobjs@ $(libgc_la_OBJECTS) - -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) - -LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@ - -# Work around what appears to be a GNU make bug handling MAKEFLAGS -# values defined in terms of make variables, as is the case for CC and -# friends when we are called from the top level Makefile. -AM_MAKEFLAGS = \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ - "CFLAGS=$(CFLAGS)" \ - "CXXFLAGS=$(CXXFLAGS)" \ - "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ - "LDFLAGS=$(LDFLAGS)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ - "MAKE=$(MAKE)" \ - "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ - "PICFLAG=$(PICFLAG)" \ - "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ - "SHELL=$(SHELL)" \ - "EXPECT=$(EXPECT)" \ - "RUNTEST=$(RUNTEST)" \ - "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ - "exec_prefix=$(exec_prefix)" \ - "infodir=$(infodir)" \ - "libdir=$(libdir)" \ - "prefix=$(prefix)" \ - "tooldir=$(tooldir)" \ - "AR=$(AR)" \ - "AS=$(AS)" \ - "CC=$(CC)" \ - "CXX=$(CXX)" \ - "LD=$(LD)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "NM=$(NM)" \ - "PICFLAG=$(PICFLAG)" \ - "RANLIB=$(RANLIB)" \ - "DESTDIR=$(DESTDIR)" - - -CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host - -MAKEOVERRIDES = -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(lib_LTLIBRARIES) - -am_libgc_la_OBJECTS = allchblk.lo alloc.lo blacklst.lo checksums.lo \ - dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \ - headers.lo irix_threads.lo linux_threads.lo malloc.lo \ - mallocx.lo mark.lo mark_rts.lo misc.lo new_hblk.lo obj_map.lo \ - os_dep.lo pcr_interface.lo ptr_chck.lo real_malloc.lo \ - reclaim.lo solaris_pthreads.lo solaris_threads.lo specific.lo \ - stubborn.lo typd_mlc.lo backgraph.lo win32_threads.lo -libgc_la_OBJECTS = $(am_libgc_la_OBJECTS) -check_PROGRAMS = gctest$(EXEEXT) -am_gctest_OBJECTS = -gctest_OBJECTS = $(am_gctest_OBJECTS) -gctest_DEPENDENCIES = test.o ./libgc.la -gctest_LDFLAGS = - -DEFS = @DEFS@ -DEFAULT_INCLUDES = -I. -I$(srcdir) -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/allchblk.Plo ./$(DEPDIR)/alloc.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/backgraph.Plo ./$(DEPDIR)/blacklst.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/checksums.Plo ./$(DEPDIR)/dbg_mlc.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/dyn_load.Plo ./$(DEPDIR)/finalize.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/gc_dlopen.Plo ./$(DEPDIR)/gcj_mlc.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/headers.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/irix_threads.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/linux_threads.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/malloc.Plo ./$(DEPDIR)/mallocx.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/mark.Plo ./$(DEPDIR)/mark_rts.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/misc.Plo ./$(DEPDIR)/new_hblk.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/obj_map.Plo ./$(DEPDIR)/os_dep.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/pcr_interface.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/ptr_chck.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/real_malloc.Plo ./$(DEPDIR)/reclaim.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/solaris_pthreads.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/solaris_threads.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/specific.Plo ./$(DEPDIR)/stubborn.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/typd_mlc.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/win32_threads.Plo -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ - $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -DIST_SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) \ - $(gctest_SOURCES) -DIST_COMMON = Makefile.am Makefile.in acinclude.m4 aclocal.m4 \ - config.guess config.sub configure configure.in depcomp \ - install-sh ltconfig ltmain.sh missing mkinstalldirs -SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) $(gctest_SOURCES) - -all: all-am - -.SUFFIXES: -.SUFFIXES: .S .c .lo .o .obj .s -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) - -$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck -$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) - cd $(srcdir) && $(AUTOCONF) - -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -libLTLIBRARIES_INSTALL = $(INSTALL) -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(libdir) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) -libgc.la: $(libgc_la_OBJECTS) $(libgc_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS) - -clean-checkPROGRAMS: - -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) -gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) - @rm -f gctest$(EXEEXT) - $(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) core *.core - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allchblk.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backgraph.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blacklst.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checksums.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg_mlc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dyn_load.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/finalize.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_dlopen.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcj_mlc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irix_threads.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux_threads.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mallocx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mark.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mark_rts.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/new_hblk.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os_dep.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcr_interface.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptr_chck.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/real_malloc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reclaim.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solaris_pthreads.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solaris_threads.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/specific.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stubborn.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/typd_mlc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32_threads.Plo@am__quote@ - -distclean-depend: - -rm -rf ./$(DEPDIR) - -.S.o: - $(CCASCOMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< - -.S.obj: - $(CCASCOMPILE) -c `cygpath -w $<` - -.S.lo: - $(LTCCASCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< - -.c.o: -@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< - -.c.obj: -@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - $(COMPILE) -c `cygpath -w $<` - -.c.lo: -@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< -CCDEPMODE = @CCDEPMODE@ - -.s.o: - $(CCASCOMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< - -.s.obj: - $(CCASCOMPILE) -c `cygpath -w $<` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ETAGS = etags -ETAGSFLAGS = - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; \ - srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - echo "XPASS: $$tst"; \ - ;; \ - *) \ - echo "PASS: $$tst"; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xfail=`expr $$xfail + 1`; \ - echo "XFAIL: $$tst"; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - echo "FAIL: $$tst"; \ - ;; \ - esac; \ - fi; \ - done; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ - else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ - else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ - fi; \ - fi; \ - dashes=`echo "$$banner" | sed s/./=/g`; \ - echo "$$dashes"; \ - echo "$$banner"; \ - echo "$$dashes"; \ - test "$$failed" -eq 0; \ - else :; fi -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = . -distdir = $(PACKAGE)-$(VERSION) - -am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } - -GZIP_ENV = --best -distcleancheck_listfiles = find . -type f -print - -distdir: $(DISTFILES) - $(am__remove_distdir) - mkdir $(distdir) - @for file in $(DISTFILES); do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) -dist-gzip: distdir - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist dist-all: distdir - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - $(am__remove_distdir) - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/=build - mkdir $(distdir)/=inst - chmod a-w $(distdir) - dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ - && cd $(distdir)/=build \ - && ../configure --srcdir=.. --prefix=$$dc_install_base \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - find $$dc_install_base -type f -print ; \ - exit 1; } >&2 ) \ - && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ - && rm -f $(distdir).tar.gz \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck - $(am__remove_distdir) - @echo "$(distdir).tar.gz is ready for distribution" | \ - sed 'h;s/./=/g;p;x;p;x' -distcleancheck: distclean - if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile $(LTLIBRARIES) - -installdirs: - $(mkinstalldirs) $(DESTDIR)$(libdir) - -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f config.status config.cache config.log -distclean-am: clean-am distclean-compile distclean-depend \ - distclean-generic distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-libLTLIBRARIES - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES - -.PHONY: GTAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool dist dist-all dist-gzip distcheck distclean \ - distclean-compile distclean-depend distclean-generic \ - distclean-libtool distclean-tags distcleancheck distdir dvi \ - dvi-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - tags uninstall uninstall-am uninstall-info-am \ - uninstall-libLTLIBRARIES - -# The following hack produces a warning from automake, but we need it in order -# to build a file from a subdirectory. FIXME. -test.o: $(srcdir)/tests/test.c - $(COMPILE) -c $(srcdir)/tests/test.c -$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ -include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h - -.s.lo: - $(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $< -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gc/NT_MAKEFILE b/gc/NT_MAKEFILE @@ -1,59 +0,0 @@ -# Makefile for Windows NT. Assumes Microsoft compiler, and a single thread. -# DLLs are included in the root set under NT, but not under win32S. -# Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor. - -CPU= i386 -!include <ntwin32.mak> - -OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj - -all: gctest.exe cord\de.exe test_cpp.exe - -.c.obj: - $(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $*.c /Fo$*.obj - -.cpp.obj: - $(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP /Fo$*.obj - -$(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h - -gc.lib: $(OBJS) - lib /MACHINE:i386 /out:gc.lib $(OBJS) -# The original NT SDK used lib32 instead of lib - -gctest.exe: tests\test.obj gc.lib -# The following works for win32 debugging. For win32s debugging use debugtype:coff -# and add mapsympe line. -# This produces a "GUI" applications that opens no windows and writes to the log file -# "gc.log". This is done to make the result runnable under win32s. - $(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib -# mapsympe -n -o gctest.sym gctest.exe - -cord\de_win.rbj: cord\de_win.res - cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj - -cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h - -cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h - $(rc) $(rcvars) -r -fo cord\de_win.res $(cvars) cord\de_win.rc - -# Cord/de is a real win32 gui application. -cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib - $(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs) - -gc_cpp.obj: include\gc_cpp.h include\gc.h - -gc_cpp.cpp: gc_cpp.cc - copy gc_cpp.cc gc_cpp.cpp - -test_cpp.cpp: tests\test_cpp.cc - copy tests\test_cpp.cc test_cpp.cpp - -# This generates the C++ test executable. The executable expects -# a single numeric argument, which is the number of iterations. -# The output appears in the file "gc.log". -test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib - $(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs) - - - diff --git a/gc/NT_THREADS_MAKEFILE b/gc/NT_THREADS_MAKEFILE @@ -1,2158 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Format Version 4.10 -# This has been hand-edited way too many times. -# A clean, manually generated makefile would be an improvement. - -# TARGTYPE "Win32 (x86) Application" 0x0101 -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -!IF "$(CFG)" == "" -CFG=gctest - Win32 Release -!MESSAGE No configuration specified. Defaulting to cord - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "gc - Win32 Release" && "$(CFG)" != "gc - Win32 Debug" &&\ - "$(CFG)" != "gctest - Win32 Release" && "$(CFG)" != "gctest - Win32 Debug" &&\ - "$(CFG)" != "cord - Win32 Release" && "$(CFG)" != "cord - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE on this makefile -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gc.mak" CFG="cord - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "gc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "gctest - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "gctest - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE "cord - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "cord - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF -################################################################################ -# Begin Project -# PROP Target_Last_Scanned "gctest - Win32 Debug" - -!IF "$(CFG)" == "gc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -OUTDIR=.\Release -INTDIR=.\Release - -ALL : ".\Release\gc.dll" ".\Release\gc.bsc" - -CLEAN : - -@erase ".\Release\allchblk.obj" - -@erase ".\Release\allchblk.sbr" - -@erase ".\Release\alloc.obj" - -@erase ".\Release\alloc.sbr" - -@erase ".\Release\blacklst.obj" - -@erase ".\Release\blacklst.sbr" - -@erase ".\Release\checksums.obj" - -@erase ".\Release\checksums.sbr" - -@erase ".\Release\dbg_mlc.obj" - -@erase ".\Release\dbg_mlc.sbr" - -@erase ".\Release\dyn_load.obj" - -@erase ".\Release\dyn_load.sbr" - -@erase ".\Release\finalize.obj" - -@erase ".\Release\finalize.sbr" - -@erase ".\Release\gc.bsc" - -@erase ".\Release\gc_cpp.obj" - -@erase ".\Release\gc_cpp.sbr" - -@erase ".\Release\gc.dll" - -@erase ".\Release\gc.exp" - -@erase ".\Release\gc.lib" - -@erase ".\Release\headers.obj" - -@erase ".\Release\headers.sbr" - -@erase ".\Release\mach_dep.obj" - -@erase ".\Release\mach_dep.sbr" - -@erase ".\Release\malloc.obj" - -@erase ".\Release\malloc.sbr" - -@erase ".\Release\mallocx.obj" - -@erase ".\Release\mallocx.sbr" - -@erase ".\Release\mark.obj" - -@erase ".\Release\mark.sbr" - -@erase ".\Release\mark_rts.obj" - -@erase ".\Release\mark_rts.sbr" - -@erase ".\Release\misc.obj" - -@erase ".\Release\misc.sbr" - -@erase ".\Release\new_hblk.obj" - -@erase ".\Release\new_hblk.sbr" - -@erase ".\Release\obj_map.obj" - -@erase ".\Release\obj_map.sbr" - -@erase ".\Release\os_dep.obj" - -@erase ".\Release\os_dep.sbr" - -@erase ".\Release\ptr_chck.obj" - -@erase ".\Release\ptr_chck.sbr" - -@erase ".\Release\reclaim.obj" - -@erase ".\Release\reclaim.sbr" - -@erase ".\Release\stubborn.obj" - -@erase ".\Release\stubborn.sbr" - -@erase ".\Release\typd_mlc.obj" - -@erase ".\Release\typd_mlc.sbr" - -@erase ".\Release\win32_threads.obj" - -@erase ".\Release\win32_threads.sbr" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "SILENT" /D "GC_BUILD" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS" /FR /YX /c -CPP_PROJ=/nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "SILENT" /D "GC_BUILD" /D\ - "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D\ - "GC_WIN32_THREADS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/gc.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\Release/ -CPP_SBRS=.\Release/ - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "NDEBUG" /win32 -# ADD MTL /nologo /D "NDEBUG" /win32 -MTL_PROJ=/nologo /D "NDEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/gc.bsc" -BSC32_SBRS= \ - ".\Release\allchblk.sbr" \ - ".\Release\alloc.sbr" \ - ".\Release\blacklst.sbr" \ - ".\Release\checksums.sbr" \ - ".\Release\dbg_mlc.sbr" \ - ".\Release\dyn_load.sbr" \ - ".\Release\finalize.sbr" \ - ".\Release\gc_cpp.sbr" \ - ".\Release\headers.sbr" \ - ".\Release\mach_dep.sbr" \ - ".\Release\malloc.sbr" \ - ".\Release\mallocx.sbr" \ - ".\Release\mark.sbr" \ - ".\Release\mark_rts.sbr" \ - ".\Release\misc.sbr" \ - ".\Release\new_hblk.sbr" \ - ".\Release\obj_map.sbr" \ - ".\Release\os_dep.sbr" \ - ".\Release\ptr_chck.sbr" \ - ".\Release\reclaim.sbr" \ - ".\Release\stubborn.sbr" \ - ".\Release\typd_mlc.sbr" \ - ".\Release\win32_threads.sbr" - -".\Release\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ - /pdb:"$(OUTDIR)/gc.pdb" /machine:I386 /out:"$(OUTDIR)/gc.dll"\ - /implib:"$(OUTDIR)/gc.lib" -LINK32_OBJS= \ - ".\Release\allchblk.obj" \ - ".\Release\alloc.obj" \ - ".\Release\blacklst.obj" \ - ".\Release\checksums.obj" \ - ".\Release\dbg_mlc.obj" \ - ".\Release\dyn_load.obj" \ - ".\Release\finalize.obj" \ - ".\Release\gc_cpp.obj" \ - ".\Release\headers.obj" \ - ".\Release\mach_dep.obj" \ - ".\Release\malloc.obj" \ - ".\Release\mallocx.obj" \ - ".\Release\mark.obj" \ - ".\Release\mark_rts.obj" \ - ".\Release\misc.obj" \ - ".\Release\new_hblk.obj" \ - ".\Release\obj_map.obj" \ - ".\Release\os_dep.obj" \ - ".\Release\ptr_chck.obj" \ - ".\Release\reclaim.obj" \ - ".\Release\stubborn.obj" \ - ".\Release\typd_mlc.obj" \ - ".\Release\win32_threads.obj" - -".\Release\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -OUTDIR=.\Debug -INTDIR=.\Debug - -ALL : ".\Debug\gc.dll" ".\Debug\gc.bsc" - -CLEAN : - -@erase ".\Debug\allchblk.obj" - -@erase ".\Debug\allchblk.sbr" - -@erase ".\Debug\alloc.obj" - -@erase ".\Debug\alloc.sbr" - -@erase ".\Debug\blacklst.obj" - -@erase ".\Debug\blacklst.sbr" - -@erase ".\Debug\checksums.obj" - -@erase ".\Debug\checksums.sbr" - -@erase ".\Debug\dbg_mlc.obj" - -@erase ".\Debug\dbg_mlc.sbr" - -@erase ".\Debug\dyn_load.obj" - -@erase ".\Debug\dyn_load.sbr" - -@erase ".\Debug\finalize.obj" - -@erase ".\Debug\finalize.sbr" - -@erase ".\Debug\gc_cpp.obj" - -@erase ".\Debug\gc_cpp.sbr" - -@erase ".\Debug\gc.bsc" - -@erase ".\Debug\gc.dll" - -@erase ".\Debug\gc.exp" - -@erase ".\Debug\gc.lib" - -@erase ".\Debug\gc.map" - -@erase ".\Debug\gc.pdb" - -@erase ".\Debug\headers.obj" - -@erase ".\Debug\headers.sbr" - -@erase ".\Debug\mach_dep.obj" - -@erase ".\Debug\mach_dep.sbr" - -@erase ".\Debug\malloc.obj" - -@erase ".\Debug\malloc.sbr" - -@erase ".\Debug\mallocx.obj" - -@erase ".\Debug\mallocx.sbr" - -@erase ".\Debug\mark.obj" - -@erase ".\Debug\mark.sbr" - -@erase ".\Debug\mark_rts.obj" - -@erase ".\Debug\mark_rts.sbr" - -@erase ".\Debug\misc.obj" - -@erase ".\Debug\misc.sbr" - -@erase ".\Debug\new_hblk.obj" - -@erase ".\Debug\new_hblk.sbr" - -@erase ".\Debug\obj_map.obj" - -@erase ".\Debug\obj_map.sbr" - -@erase ".\Debug\os_dep.obj" - -@erase ".\Debug\os_dep.sbr" - -@erase ".\Debug\ptr_chck.obj" - -@erase ".\Debug\ptr_chck.sbr" - -@erase ".\Debug\reclaim.obj" - -@erase ".\Debug\reclaim.sbr" - -@erase ".\Debug\stubborn.obj" - -@erase ".\Debug\stubborn.sbr" - -@erase ".\Debug\typd_mlc.obj" - -@erase ".\Debug\typd_mlc.sbr" - -@erase ".\Debug\vc40.idb" - -@erase ".\Debug\vc40.pdb" - -@erase ".\Debug\win32_threads.obj" - -@erase ".\Debug\win32_threads.sbr" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "SILENT" /D "GC_BUILD" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS" /FR /YX /c -CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "SILENT" /D "GC_BUILD"\ - /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D\ - "GC_WIN32_THREADS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/gc.pch" /YX /Fo"$(INTDIR)/"\ - /Fd"$(INTDIR)/" /c -CPP_OBJS=.\Debug/ -CPP_SBRS=.\Debug/ - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "_DEBUG" /win32 -# ADD MTL /nologo /D "_DEBUG" /win32 -MTL_PROJ=/nologo /D "_DEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/gc.bsc" -BSC32_SBRS= \ - ".\Debug\allchblk.sbr" \ - ".\Debug\alloc.sbr" \ - ".\Debug\blacklst.sbr" \ - ".\Debug\checksums.sbr" \ - ".\Debug\dbg_mlc.sbr" \ - ".\Debug\dyn_load.sbr" \ - ".\Debug\finalize.sbr" \ - ".\Debug\gc_cpp.sbr" \ - ".\Debug\headers.sbr" \ - ".\Debug\mach_dep.sbr" \ - ".\Debug\malloc.sbr" \ - ".\Debug\mallocx.sbr" \ - ".\Debug\mark.sbr" \ - ".\Debug\mark_rts.sbr" \ - ".\Debug\misc.sbr" \ - ".\Debug\new_hblk.sbr" \ - ".\Debug\obj_map.sbr" \ - ".\Debug\os_dep.sbr" \ - ".\Debug\ptr_chck.sbr" \ - ".\Debug\reclaim.sbr" \ - ".\Debug\stubborn.sbr" \ - ".\Debug\typd_mlc.sbr" \ - ".\Debug\win32_threads.sbr" - -".\Debug\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ - /pdb:"$(OUTDIR)/gc.pdb" /map:"$(INTDIR)/gc.map" /debug /machine:I386\ - /out:"$(OUTDIR)/gc.dll" /implib:"$(OUTDIR)/gc.lib" -LINK32_OBJS= \ - ".\Debug\allchblk.obj" \ - ".\Debug\alloc.obj" \ - ".\Debug\blacklst.obj" \ - ".\Debug\checksums.obj" \ - ".\Debug\dbg_mlc.obj" \ - ".\Debug\dyn_load.obj" \ - ".\Debug\finalize.obj" \ - ".\Debug\gc_cpp.obj" \ - ".\Debug\headers.obj" \ - ".\Debug\mach_dep.obj" \ - ".\Debug\malloc.obj" \ - ".\Debug\mallocx.obj" \ - ".\Debug\mark.obj" \ - ".\Debug\mark_rts.obj" \ - ".\Debug\misc.obj" \ - ".\Debug\new_hblk.obj" \ - ".\Debug\obj_map.obj" \ - ".\Debug\os_dep.obj" \ - ".\Debug\ptr_chck.obj" \ - ".\Debug\reclaim.obj" \ - ".\Debug\stubborn.obj" \ - ".\Debug\typd_mlc.obj" \ - ".\Debug\win32_threads.obj" - -".\Debug\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "gctest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "gctest\Release" -# PROP BASE Intermediate_Dir "gctest\Release" -# PROP BASE Target_Dir "gctest" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "gctest\Release" -# PROP Intermediate_Dir "gctest\Release" -# PROP Target_Dir "gctest" -OUTDIR=.\gctest\Release -INTDIR=.\gctest\Release - -ALL : "gc - Win32 Release" ".\Release\gctest.exe" - -CLEAN : - -@erase ".\gctest\Release\test.obj" - -@erase ".\Release\gctest.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -test.c : tests\test.c - copy tests\test.c test.c - -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS" /YX /c -CPP_PROJ=/nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ - "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS"\ - /Fp"$(INTDIR)/gctest.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\gctest\Release/ -CPP_SBRS=.\. - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "NDEBUG" /win32 -# ADD MTL /nologo /D "NDEBUG" /win32 -MTL_PROJ=/nologo /D "NDEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/gctest.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/gctest.exe" -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /incremental:no\ - /pdb:"$(OUTDIR)/gctest.pdb" /machine:I386 /out:"Release/gctest.exe" -LINK32_OBJS= \ - ".\gctest\Release\test.obj" \ - ".\Release\gc.lib" - -".\Release\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "gctest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "gctest\Debug" -# PROP BASE Intermediate_Dir "gctest\Debug" -# PROP BASE Target_Dir "gctest" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "gctest\Debug" -# PROP Intermediate_Dir "gctest\Debug" -# PROP Target_Dir "gctest" -OUTDIR=.\gctest\Debug -INTDIR=.\gctest\Debug - -ALL : "gc - Win32 Debug" ".\Debug\gctest.exe" ".\gctest\Debug\gctest.bsc" - -CLEAN : - -@erase ".\Debug\gctest.exe" - -@erase ".\gctest\Debug\gctest.bsc" - -@erase ".\gctest\Debug\gctest.map" - -@erase ".\gctest\Debug\gctest.pdb" - -@erase ".\gctest\Debug\test.obj" - -@erase ".\gctest\Debug\test.sbr" - -@erase ".\gctest\Debug\vc40.idb" - -@erase ".\gctest\Debug\vc40.pdb" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS" /FR /YX /c -CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\ - /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "GC_WIN32_THREADS" /FR"$(INTDIR)/"\ - /Fp"$(INTDIR)/gctest.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c -CPP_OBJS=.\gctest\Debug/ -CPP_SBRS=.\gctest\Debug/ - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "_DEBUG" /win32 -# ADD MTL /nologo /D "_DEBUG" /win32 -MTL_PROJ=/nologo /D "_DEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/gctest.bsc" -BSC32_SBRS= \ - ".\gctest\Debug\test.sbr" - -".\gctest\Debug\gctest.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /map /debug /machine:I386 /out:"Debug/gctest.exe" -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /incremental:no\ - /pdb:"$(OUTDIR)/gctest.pdb" /map:"$(INTDIR)/gctest.map" /debug /machine:I386\ - /out:"Debug/gctest.exe" -LINK32_OBJS= \ - ".\Debug\gc.lib" \ - ".\gctest\Debug\test.obj" - -".\Debug\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "cord - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "cord\Release" -# PROP BASE Intermediate_Dir "cord\Release" -# PROP BASE Target_Dir "cord" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "cord\Release" -# PROP Intermediate_Dir "cord\Release" -# PROP Target_Dir "cord" -OUTDIR=.\cord\Release -INTDIR=.\cord\Release - -ALL : "gc - Win32 Release" ".\Release\de.exe" - -CLEAN : - -@erase ".\cord\Release\cordbscs.obj" - -@erase ".\cord\Release\cordxtra.obj" - -@erase ".\cord\Release\de.obj" - -@erase ".\cord\Release\de_win.obj" - -@erase ".\cord\Release\de_win.res" - -@erase ".\Release\de.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /YX /c -CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ - "ALL_INTERIOR_POINTERS" /Fp"$(INTDIR)/cord.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\cord\Release/ -CPP_SBRS=.\. - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "NDEBUG" /win32 -# ADD MTL /nologo /D "NDEBUG" /win32 -MTL_PROJ=/nologo /D "NDEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -RSC_PROJ=/l 0x809 /fo"$(INTDIR)/de_win.res" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/cord.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/de.exe" -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)/de.pdb"\ - /machine:I386 /out:"Release/de.exe" -LINK32_OBJS= \ - ".\cord\Release\cordbscs.obj" \ - ".\cord\Release\cordxtra.obj" \ - ".\cord\Release\de.obj" \ - ".\cord\Release\de_win.obj" \ - ".\cord\Release\de_win.res" \ - ".\Release\gc.lib" - -".\Release\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "cord\Debug" -# PROP BASE Intermediate_Dir "cord\Debug" -# PROP BASE Target_Dir "cord" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "cord\Debug" -# PROP Intermediate_Dir "cord\Debug" -# PROP Target_Dir "cord" -OUTDIR=.\cord\Debug -INTDIR=.\cord\Debug - -ALL : "gc - Win32 Debug" ".\Debug\de.exe" - -CLEAN : - -@erase ".\cord\Debug\cordbscs.obj" - -@erase ".\cord\Debug\cordxtra.obj" - -@erase ".\cord\Debug\de.obj" - -@erase ".\cord\Debug\de.pdb" - -@erase ".\cord\Debug\de_win.obj" - -@erase ".\cord\Debug\de_win.res" - -@erase ".\cord\Debug\vc40.idb" - -@erase ".\cord\Debug\vc40.pdb" - -@erase ".\Debug\de.exe" - -@erase ".\Debug\de.ilk" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /YX /c -CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I include /D "_DEBUG" /D "WIN32" /D\ - "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /Fp"$(INTDIR)/cord.pch" /YX\ - /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c -CPP_OBJS=.\cord\Debug/ -CPP_SBRS=.\. - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -MTL=mktyplib.exe -# ADD BASE MTL /nologo /D "_DEBUG" /win32 -# ADD MTL /nologo /D "_DEBUG" /win32 -MTL_PROJ=/nologo /D "_DEBUG" /win32 -RSC=rc.exe -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -RSC_PROJ=/l 0x809 /fo"$(INTDIR)/de_win.res" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/cord.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Debug/de.exe" -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /incremental:yes\ - /pdb:"$(OUTDIR)/de.pdb" /debug /machine:I386 /out:"Debug/de.exe" -LINK32_OBJS= \ - ".\cord\Debug\cordbscs.obj" \ - ".\cord\Debug\cordxtra.obj" \ - ".\cord\Debug\de.obj" \ - ".\cord\Debug\de_win.obj" \ - ".\cord\Debug\de_win.res" \ - ".\Debug\gc.lib" - -".\Debug\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ENDIF - -################################################################################ -# Begin Target - -# Name "gc - Win32 Release" -# Name "gc - Win32 Debug" - -!IF "$(CFG)" == "gc - Win32 Release" - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE=.\gc_cpp.cpp - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_RECLA=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - ".\include\gc_cpp.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_RECLA=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\gc_cpp.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - -".\Release\gc_cpp.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_RECLA=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - ".\include\gc_cpp.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_RECLA=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\gc_cpp.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - -".\Debug\gc_cpp.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\reclaim.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_RECLA=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_RECLA=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\reclaim.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - -".\Release\reclaim.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_RECLA=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_RECLA=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\reclaim.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - -".\Debug\reclaim.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" - - -!ENDIF - -# End Source File - -################################################################################ -# Begin Source File - -SOURCE=.\os_dep.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_OS_DE=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\STAT.H"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_OS_DE=\ - ".\il\PCR_IL.h"\ - ".\mm\PCR_MM.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - ".\vd\PCR_VD.h"\ - - -".\Release\os_dep.obj" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" - -".\Release\os_dep.sbr" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_OS_DE=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\STAT.H"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_OS_DE=\ - ".\il\PCR_IL.h"\ - ".\mm\PCR_MM.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - ".\vd\PCR_VD.h"\ - - -".\Debug\os_dep.obj" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" - -".\Debug\os_dep.sbr" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\misc.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MISC_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MISC_=\ - ".\il\PCR_IL.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\misc.obj" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" - -".\Release\misc.sbr" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MISC_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MISC_=\ - ".\il\PCR_IL.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\misc.obj" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" - -".\Debug\misc.sbr" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\mark_rts.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MARK_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MARK_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\mark_rts.obj" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" - -".\Release\mark_rts.sbr" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MARK_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MARK_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\mark_rts.obj" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" - -".\Debug\mark_rts.sbr" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\mach_dep.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MACH_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MACH_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\mach_dep.obj" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" - -".\Release\mach_dep.sbr" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MACH_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MACH_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\mach_dep.obj" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" - -".\Debug\mach_dep.sbr" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\headers.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_HEADE=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_HEADE=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\headers.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" - -".\Release\headers.sbr" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_HEADE=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_HEADE=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\headers.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" - -".\Debug\headers.sbr" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\alloc.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_ALLOC=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_ALLOC=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\alloc.obj" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" - -".\Release\alloc.sbr" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_ALLOC=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_ALLOC=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\alloc.obj" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" - -".\Debug\alloc.sbr" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\allchblk.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_ALLCH=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_ALLCH=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\allchblk.obj" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" - -".\Release\allchblk.sbr" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_ALLCH=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_ALLCH=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\allchblk.obj" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" - -".\Debug\allchblk.sbr" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\stubborn.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_STUBB=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_STUBB=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\stubborn.obj" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" - -".\Release\stubborn.sbr" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_STUBB=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_STUBB=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\stubborn.obj" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" - -".\Debug\stubborn.sbr" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\obj_map.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_OBJ_M=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_OBJ_M=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\obj_map.obj" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" - -".\Release\obj_map.sbr" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_OBJ_M=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_OBJ_M=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\obj_map.obj" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" - -".\Debug\obj_map.sbr" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\new_hblk.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_NEW_H=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_NEW_H=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\new_hblk.obj" : $(SOURCE) $(DEP_CPP_NEW_H) "$(INTDIR)" - -".\Release\new_hblk.sbr" : $(SOURCE) $(DEP_CPP_NEW_H) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_NEW_H=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_NEW_H=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\new_hblk.obj" : $(SOURCE) $(DEP_CPP_NEW_H) "$(INTDIR)" - -".\Debug\new_hblk.sbr" : $(SOURCE) $(DEP_CPP_NEW_H) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\mark.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MARK_C=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MARK_C=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\mark.obj" : $(SOURCE) $(DEP_CPP_MARK_C) "$(INTDIR)" - -".\Release\mark.sbr" : $(SOURCE) $(DEP_CPP_MARK_C) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MARK_C=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MARK_C=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\mark.obj" : $(SOURCE) $(DEP_CPP_MARK_C) "$(INTDIR)" - -".\Debug\mark.sbr" : $(SOURCE) $(DEP_CPP_MARK_C) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\malloc.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MALLO=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MALLO=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\malloc.obj" : $(SOURCE) $(DEP_CPP_MALLO) "$(INTDIR)" - -".\Release\malloc.sbr" : $(SOURCE) $(DEP_CPP_MALLO) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MALLO=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MALLO=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\malloc.obj" : $(SOURCE) $(DEP_CPP_MALLO) "$(INTDIR)" - -".\Debug\malloc.sbr" : $(SOURCE) $(DEP_CPP_MALLO) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\mallocx.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_MALLX=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MALLX=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\mallocx.obj" : $(SOURCE) $(DEP_CPP_MALLX) "$(INTDIR)" - -".\Release\mallocx.sbr" : $(SOURCE) $(DEP_CPP_MALLX) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_MALLX=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_MALLX=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\mallocx.obj" : $(SOURCE) $(DEP_CPP_MALLX) "$(INTDIR)" - -".\Debug\mallocx.sbr" : $(SOURCE) $(DEP_CPP_MALLX) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\finalize.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_FINAL=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_FINAL=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\finalize.obj" : $(SOURCE) $(DEP_CPP_FINAL) "$(INTDIR)" - -".\Release\finalize.sbr" : $(SOURCE) $(DEP_CPP_FINAL) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_FINAL=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_FINAL=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\finalize.obj" : $(SOURCE) $(DEP_CPP_FINAL) "$(INTDIR)" - -".\Debug\finalize.sbr" : $(SOURCE) $(DEP_CPP_FINAL) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\dbg_mlc.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_DBG_M=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_DBG_M=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\dbg_mlc.obj" : $(SOURCE) $(DEP_CPP_DBG_M) "$(INTDIR)" - -".\Release\dbg_mlc.sbr" : $(SOURCE) $(DEP_CPP_DBG_M) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_DBG_M=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_DBG_M=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\dbg_mlc.obj" : $(SOURCE) $(DEP_CPP_DBG_M) "$(INTDIR)" - -".\Debug\dbg_mlc.sbr" : $(SOURCE) $(DEP_CPP_DBG_M) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\blacklst.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_BLACK=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_BLACK=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\blacklst.obj" : $(SOURCE) $(DEP_CPP_BLACK) "$(INTDIR)" - -".\Release\blacklst.sbr" : $(SOURCE) $(DEP_CPP_BLACK) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_BLACK=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_BLACK=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\blacklst.obj" : $(SOURCE) $(DEP_CPP_BLACK) "$(INTDIR)" - -".\Debug\blacklst.sbr" : $(SOURCE) $(DEP_CPP_BLACK) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\typd_mlc.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_TYPD_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - ".\include\gc_typed.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_TYPD_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\typd_mlc.obj" : $(SOURCE) $(DEP_CPP_TYPD_) "$(INTDIR)" - -".\Release\typd_mlc.sbr" : $(SOURCE) $(DEP_CPP_TYPD_) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_TYPD_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - ".\include\gc_typed.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_TYPD_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\typd_mlc.obj" : $(SOURCE) $(DEP_CPP_TYPD_) "$(INTDIR)" - -".\Debug\typd_mlc.sbr" : $(SOURCE) $(DEP_CPP_TYPD_) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\ptr_chck.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_PTR_C=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_PTR_C=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\ptr_chck.obj" : $(SOURCE) $(DEP_CPP_PTR_C) "$(INTDIR)" - -".\Release\ptr_chck.sbr" : $(SOURCE) $(DEP_CPP_PTR_C) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_PTR_C=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_pmark.h"\ - ".\include\gc_mark.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_PTR_C=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\ptr_chck.obj" : $(SOURCE) $(DEP_CPP_PTR_C) "$(INTDIR)" - -".\Debug\ptr_chck.sbr" : $(SOURCE) $(DEP_CPP_PTR_C) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\dyn_load.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_DYN_L=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\STAT.H"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_DYN_L=\ - ".\il\PCR_IL.h"\ - ".\mm\PCR_MM.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\dyn_load.obj" : $(SOURCE) $(DEP_CPP_DYN_L) "$(INTDIR)" - -".\Release\dyn_load.sbr" : $(SOURCE) $(DEP_CPP_DYN_L) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_DYN_L=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\STAT.H"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_DYN_L=\ - ".\il\PCR_IL.h"\ - ".\mm\PCR_MM.h"\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\dyn_load.obj" : $(SOURCE) $(DEP_CPP_DYN_L) "$(INTDIR)" - -".\Debug\dyn_load.sbr" : $(SOURCE) $(DEP_CPP_DYN_L) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\win32_threads.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_WIN32=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_WIN32=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\win32_threads.obj" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)" - -".\Release\win32_threads.sbr" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_WIN32=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_WIN32=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\win32_threads.obj" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)" - -".\Debug\win32_threads.sbr" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)" - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\checksums.c - -!IF "$(CFG)" == "gc - Win32 Release" - -DEP_CPP_CHECK=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_CHECK=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Release\checksums.obj" : $(SOURCE) $(DEP_CPP_CHECK) "$(INTDIR)" - -".\Release\checksums.sbr" : $(SOURCE) $(DEP_CPP_CHECK) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -DEP_CPP_CHECK=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_CHECK=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -".\Debug\checksums.obj" : $(SOURCE) $(DEP_CPP_CHECK) "$(INTDIR)" - -".\Debug\checksums.sbr" : $(SOURCE) $(DEP_CPP_CHECK) "$(INTDIR)" - - -!ENDIF - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "gctest - Win32 Release" -# Name "gctest - Win32 Debug" - -!IF "$(CFG)" == "gctest - Win32 Release" - -!ELSEIF "$(CFG)" == "gctest - Win32 Debug" - -!ENDIF - -################################################################################ -# Begin Project Dependency - -# Project_Dep_Name "gc" - -!IF "$(CFG)" == "gctest - Win32 Release" - -"gc - Win32 Release" : - $(MAKE) /$(MAKEFLAGS) /F ".\gc.mak" CFG="gc - Win32 Release" - -!ELSEIF "$(CFG)" == "gctest - Win32 Debug" - -"gc - Win32 Debug" : - $(MAKE) /$(MAKEFLAGS) /F ".\gc.mak" CFG="gc - Win32 Debug" - -!ENDIF - -# End Project Dependency -################################################################################ -# Begin Source File - -SOURCE=.\tests\test.c -DEP_CPP_TEST_=\ - ".\include\private\gcconfig.h"\ - ".\include\gc.h"\ - ".\include\private\gc_hdrs.h"\ - ".\include\private\gc_priv.h"\ - ".\include\gc_typed.h"\ - {$(INCLUDE)}"\sys\TYPES.H"\ - -NODEP_CPP_TEST_=\ - ".\th\PCR_Th.h"\ - ".\th\PCR_ThCrSec.h"\ - ".\th\PCR_ThCtl.h"\ - - -!IF "$(CFG)" == "gctest - Win32 Release" - - -".\gctest\Release\test.obj" : $(SOURCE) $(DEP_CPP_TEST_) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "gctest - Win32 Debug" - - -".\gctest\Debug\test.obj" : $(SOURCE) $(DEP_CPP_TEST_) "$(INTDIR)" - -".\gctest\Debug\test.sbr" : $(SOURCE) $(DEP_CPP_TEST_) "$(INTDIR)" - - -!ENDIF - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "cord - Win32 Release" -# Name "cord - Win32 Debug" - -!IF "$(CFG)" == "cord - Win32 Release" - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - -!ENDIF - -################################################################################ -# Begin Project Dependency - -# Project_Dep_Name "gc" - -!IF "$(CFG)" == "cord - Win32 Release" - -"gc - Win32 Release" : - $(MAKE) /$(MAKEFLAGS) /F ".\gc.mak" CFG="gc - Win32 Release" - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - -"gc - Win32 Debug" : - $(MAKE) /$(MAKEFLAGS) /F ".\gc.mak" CFG="gc - Win32 Debug" - -!ENDIF - -# End Project Dependency -################################################################################ -# Begin Source File - -SOURCE=.\cord\de_win.c -DEP_CPP_DE_WI=\ - ".\include\cord.h"\ - ".\cord\de_cmds.h"\ - ".\cord\de_win.h"\ - ".\include\private\cord_pos.h"\ - -NODEP_CPP_DE_WI=\ - ".\include\gc.h"\ - - -!IF "$(CFG)" == "cord - Win32 Release" - - -".\cord\Release\de_win.obj" : $(SOURCE) $(DEP_CPP_DE_WI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - - -".\cord\Debug\de_win.obj" : $(SOURCE) $(DEP_CPP_DE_WI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\cord\de.c -DEP_CPP_DE_C2e=\ - ".\include\cord.h"\ - ".\cord\de_cmds.h"\ - ".\cord\de_win.h"\ - ".\include\private\cord_pos.h"\ - -NODEP_CPP_DE_C2e=\ - ".\include\gc.h"\ - - -!IF "$(CFG)" == "cord - Win32 Release" - - -".\cord\Release\de.obj" : $(SOURCE) $(DEP_CPP_DE_C2e) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - - -".\cord\Debug\de.obj" : $(SOURCE) $(DEP_CPP_DE_C2e) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\cord\cordxtra.c -DEP_CPP_CORDX=\ - ".\include\cord.h"\ - ".\include\ec.h"\ - ".\include\private\cord_pos.h"\ - -NODEP_CPP_CORDX=\ - ".\include\gc.h"\ - - -!IF "$(CFG)" == "cord - Win32 Release" - - -".\cord\Release\cordxtra.obj" : $(SOURCE) $(DEP_CPP_CORDX) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - - -".\cord\Debug\cordxtra.obj" : $(SOURCE) $(DEP_CPP_CORDX) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\cord\cordbscs.c -DEP_CPP_CORDB=\ - ".\include\cord.h"\ - ".\include\private\cord_pos.h"\ - -NODEP_CPP_CORDB=\ - ".\include\gc.h"\ - - -!IF "$(CFG)" == "cord - Win32 Release" - - -".\cord\Release\cordbscs.obj" : $(SOURCE) $(DEP_CPP_CORDB) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - - -".\cord\Debug\cordbscs.obj" : $(SOURCE) $(DEP_CPP_CORDB) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ENDIF - -# End Source File -################################################################################ -# Begin Source File - -SOURCE=.\cord\de_win.RC - -!IF "$(CFG)" == "cord - Win32 Release" - - -".\cord\Release\de_win.res" : $(SOURCE) "$(INTDIR)" - $(RSC) /l 0x809 /fo"$(INTDIR)/de_win.res" /i "cord" /d "NDEBUG" $(SOURCE) - - -!ELSEIF "$(CFG)" == "cord - Win32 Debug" - - -".\cord\Debug\de_win.res" : $(SOURCE) "$(INTDIR)" - $(RSC) /l 0x809 /fo"$(INTDIR)/de_win.res" /i "cord" /d "_DEBUG" $(SOURCE) - - -!ENDIF - -# End Source File -# End Target -# End Project -################################################################################ diff --git a/gc/OS2_MAKEFILE b/gc/OS2_MAKEFILE @@ -1,45 +0,0 @@ -# Makefile for OS/2. Assumes IBM's compiler, static linking, and a single thread. -# Adding dynamic linking support seems easy, but takes a little bit of work. -# Adding thread support may be nontrivial, since we haven't yet figured out how to -# look at another thread's registers. - -# Significantly revised for GC version 4.4 by Mark Boulter (Jan 1994). - -OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj typd_mlc.obj ptr_chck.obj mallocx.obj - -CORDOBJS= cord\cordbscs.obj cord\cordxtra.obj cord\cordprnt.obj - -CC= icc -CFLAGS= /O /Q /DSILENT /DSMALL_CONFIG /DALL_INTERIOR_POINTERS -# Use /Ti instead of /O for debugging -# Setjmp_test may yield overly optimistic results when compiled -# without optimization. - -all: $(OBJS) gctest.exe cord\cordtest.exe - -$(OBJS) test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h - -## ERASE THE LIB FIRST - if it is already there then this command will fail -## (make sure its there or erase will fail!) -gc.lib: $(OBJS) - echo . > gc.lib - erase gc.lib - LIB gc.lib $(OBJS), gc.lst - -mach_dep.obj: mach_dep.c - $(CC) $(CFLAGS) /C mach_dep.c - -gctest.exe: test.obj gc.lib - $(CC) $(CFLAGS) /B"/STACK:524288" /Fegctest test.obj gc.lib - -cord\cordbscs.obj: cord\cordbscs.c include\cord.h include\private\cord_pos.h - $(CC) $(CFLAGS) /C /Focord\cordbscs cord\cordbscs.c - -cord\cordxtra.obj: cord\cordxtra.c include\cord.h include\private\cord_pos.h include\ec.h - $(CC) $(CFLAGS) /C /Focord\cordxtra cord\cordxtra.c - -cord\cordprnt.obj: cord\cordprnt.c include\cord.h include\private\cord_pos.h include\ec.h - $(CC) $(CFLAGS) /C /Focord\cordprnt cord\cordprnt.c - -cord\cordtest.exe: cord\cordtest.c include\cord.h include\private\cord_pos.h include\ec.h $(CORDOBJS) gc.lib - $(CC) $(CFLAGS) /B"/STACK:65536" /Fecord\cordtest cord\cordtest.c gc.lib $(CORDOBJS) diff --git a/gc/PCR-Makefile b/gc/PCR-Makefile @@ -1,68 +0,0 @@ -# -# Default target -# - -default: gc.o - -include ../config/common.mk - -# -# compilation flags, etc. -# - - -CPPFLAGS = $(INCLUDE) $(CONFIG_CPPFLAGS) \ - -DPCR_NO_RENAME -DPCR_NO_HOSTDEP_ERR -#CFLAGS = -DPCR -DSILENT $(CONFIG_CFLAGS) -CFLAGS = -DPCR $(CONFIG_CFLAGS) -SPECIALCFLAGS = # For code involving asm's - -ASPPFLAGS = $(INCLUDE) $(CONFIG_ASPPFLAGS) \ - -DPCR_NO_RENAME -DPCR_NO_HOSTDEP_ERR -DASM - -ASFLAGS = $(CONFIG_ASFLAGS) - -LDRFLAGS = $(CONFIG_LDRFLAGS) - -LDFLAGS = $(CONFIG_LDFLAGS) - -# -# -# -# -# BEGIN PACKAGE-SPECIFIC PART -# -# -# -# - -# Fix to point to local pcr installation directory. -PCRDIR= .. - -COBJ= alloc.o reclaim.o allchblk.o misc.o os_dep.o mark_rts.o headers.o mark.o obj_map.o pcr_interface.o blacklst.o finalize.o new_hblk.o real_malloc.o dyn_load.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o typd_mlc.o ptr_chck.o mallocx.o - -CSRC= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c typd_mlc.c ptr_chck.c mallocx.c - -SHELL= /bin/sh - -default: gc.o - -gc.o: $(COBJ) mach_dep.o - $(LDR) $(CONFIG_LDRFLAGS) -o gc.o $(COBJ) mach_dep.o - - -mach_dep.o: mach_dep.c mips_mach_dep.s rs6000_mach_dep.s if_mach if_not_there - rm -f mach_dep.o - ./if_mach MIPS "" as -o mach_dep.o mips_mach_dep.s - ./if_mach RS6000 "" as -o mach_dep.o rs6000_mach_dep.s - ./if_mach ALPHA "" as -o mach_dep.o alpha_mach_dep.s - ./if_mach SPARC SUNOS5 as -o mach_dep.o sparc_mach_dep.s - ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) mach_dep.c - -if_mach: if_mach.c gcconfig.h - $(CC) $(CFLAGS) -o if_mach if_mach.c - -if_not_there: if_not_there.c - $(CC) $(CFLAGS) -o if_not_there if_not_there.c - - diff --git a/gc/README.QUICK b/gc/README.QUICK @@ -1,85 +0,0 @@ -Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers -Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. -Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. -Copyright (c) 1999-2001 by Hewlett-Packard. All rights reserved. - -THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED -OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - -Permission is hereby granted to use or copy this program -for any purpose, provided the above notices are retained on all copies. -Permission to modify the code and to distribute modified code is granted, -provided the above notices are retained, and a notice that the code was -modified is included with the above copyright notice. - -A few files have other copyright holders. A few of the files needed -to use the GNU-style build procedure come with a modified GPL license -that appears not to significantly restrict use of the collector, though -use of those files for a purpose other than building the collector may -require the resulting code to be covered by the GPL. - -For more details and the names of other contributors, see the -doc/README* files and include/gc.h. This file describes typical use of -the collector on a machine that is already supported. - -For the version number, see doc/README or version.h. - -INSTALLATION: -Under UN*X, Linux: -Alternative 1 (the old way): type "make test" in this directory. - Link against gc.a. - -Alternative 2 (the new way): type - "./configure --prefix=<dir>; make; make check; make install". - Link against <dir>/lib/libgc.a or <dir>/lib/libgc.so. - See README.autoconf for details - -Under OS/2 or Windows 95, 98, Me, NT, or 2000: -copy the appropriate makefile to MAKEFILE, read it, and type "nmake test". -(Under Windows, this assumes you have Microsoft command-line tools -installed, and have DOS configured with enough environment space to run them.) -Read the machine specific README in the doc directory if one exists. -The only way to develop code with the collector for Windows 3.1 is -to develop under Windows NT or 95+, and then to use win32S. - -If you need thread support, you will need to either follow the special -platform-dependent instructions (win32), or add a suitable define -option as described in Makefile. - -If you wish to use the cord (structured string) library, type -"make cords". (This requires an ANSI C compiler. You may need -to redefine CC in the Makefile. The CORD_printf implementation in -cordprnt.c is known to be less than perfectly portable. The rest -of the package should still work.) - -If you wish to use the collector from C++, type -"make c++". These add further files to gc.a and to the include -subdirectory. See cord/cord.h and include/gc_cpp.h. - -TYPICAL USE: -Include "gc.h" from the include subdirectory. Link against the -appropriate library ("gc.a" under UN*X). Replace calls to malloc -by calls to GC_MALLOC, and calls to realloc by calls to GC_REALLOC. -If the object is known to never contain pointers, use GC_MALLOC_ATOMIC -instead of GC_MALLOC. - -Define GC_DEBUG before including gc.h for additional checking. - -More documentation on the collector interface can be found at -http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html, -in doc/README, and in include/gc.h . - -WARNINGS: - -Do not store the only pointer to an object in memory allocated -with system malloc, since the collector usually does not scan -memory allocated in this way. - -Use with threads may be supported on your system, but requires the -collector to be built with thread support. See Makefile. The collector -does not guarantee to scan thread-local storage (e.g. of the kind -accessed with pthread_getspecific()). The collector does scan -thread stacks though, so generally the best solution is to ensure that -any pointers stored in thread-local storage are also stored on the -thread's stack for the duration of their lifetime. - diff --git a/gc/SMakefile.amiga b/gc/SMakefile.amiga @@ -1,178 +0,0 @@ - -# Rewritten smakefile for amiga / sas/c. -Kjetil M. -# Dont use the cord-package if you define parm=both or parm=reg. - - -#----------------TOOLS-------------------------------- -CC=sc -LINKER=slink -LIBER=oml - -#----------------CPU OPTIONS-------------------------- - -CPU=68060 - -#----------------FPU OPTIONS-------------------------- - -MATH=8 -MATHLIB=LIB:scm881.lib - -#----------------COMPILER OPTIONS--------------------- - -IGNORE= IGNORE=85 IGNORE=154 IGNORE=161 IGNORE=100 - -OPTIMIZE=optimize optimizetime optglobal optimizerdepth=100 optimizerpeephole optloop OPTSCHED optimizerinlocal optimizerrecurdepth=100 -# optimizerinline optimizercomplexity=100 - -OPT= $(OPTIMIZE) CPU=$(CPU) math=$(MATH) NOSTACKCHECK VERBOSE \ -MAPHUNK NOVERSION NOICONS nodebug \ -DEFINE SILENT \ -parm=reg \ -DEFINE __USE_SYSBASE - - -SOPT= $(OPT) $(IGNORE) \ -DEFINE AMIGA_SKIP_SEG \ -DEFINE ATOMIC_UNCOLLECTABLE \ -DEFINE GC_AMIGA_FASTALLOC \ -DEFINE GC_AMIGA_RETRY \ -DEFINE GC_AMIGA_PRINTSTATS \ -DEFINE GC_AMIGA_GC - - -#DEFINE ALL_INTERIOR_POINTERS \ - - -SCOPT= $(SOPT) define GC_AMIGA_MAKINGLIB - -CSCOPT= $(OPT) DEFINE AMIGA IGNORE=100 IGNORE=161 - -#------------------LINKING---------------------------- - - -all: gctest setjmp_t cord/cordtest - -clean: - delete *.lib gctest setjmp_t *.o *.lnk cord/*.o cord/*.lib cord/*.lnk cord/cordtest - smake - -test: setjmp_t gctest cord/cordtest - setjmp_t - gctest - cord/cordtest - -gctest: gc$(CPU).lib GCAmigaOS$(CPU).lib test.o - $(LINKER) LIB:c.o test.o TO gctest LIB gc$(CPU).lib LIB:sc.lib $(MATHLIB) - -setjmp_t: setjmp_t.o gc.h - $(LINKER) LIB:c.o setjmp_t.o to setjmp_t lib LIB:sc.lib - -cord/cordtest: cord/cordtest.o cord/cord$(CPU).lib gc$(CPU).lib - slink LIB:c.o cord/cordtest.o LIB $(MATHLIB) gc$(CPU).lib cord/cord$(CPU).lib LIB:sc.lib TO cord/cordtest - - -#------------------LIBBING---------------------------- - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o real_malloc.o dyn_load.o dbg_mlc.o malloc.o stubborn.o checksums.o typd_mlc.o ptr_chck.o mallocx.o - -gc$(CPU).lib: $(OBJS) - $(LIBER) gc$(CPU).lib r $(OBJS) - - -COBJS = cord/cordbscs.o cord/cordprnt.o cord/cordxtra.o - -cord/cord$(CPU).lib: $(COBJS) - oml cord/cord$(CPU).lib r $(COBJS) - -#------------------COMPILING-------------------------- - -INC= gc_private.h gc_hdrs.h gc.h gcconfig.h - -alloc.o : alloc.c $(INC) - $(CC) alloc.c $(SCOPT) ignore=7 - -reclaim.o : reclaim.c $(INC) - $(CC) reclaim.c $(SCOPT) - -allchblk.o : allchblk.c $(INC) - $(CC) allchblk.c $(SCOPT) - -misc.o : misc.c $(INC) - $(CC) misc.c $(SCOPT) - -os_dep.o : os_dep.c $(INC) AmigaOS.c - $(CC) os_dep.c $(SCOPT) - -mark_rts.o : mark_rts.c $(INC) - $(CC) mark_rts.c $(SCOPT) - -headers.o : headers.c $(INC) - $(CC) headers.c $(SCOPT) - -mark.o : mark.c $(INC) - $(CC) mark.c $(SCOPT) - -obj_map.o : obj_map.c $(INC) - $(CC) obj_map.c $(SCOPT) - -blacklst.o : blacklst.c $(INC) - $(CC) blacklst.c $(SCOPT) - -finalize.o : finalize.c $(INC) - $(CC) finalize.c $(SCOPT) noopt #Could sas/c still have problems with this one? Gctest sometimes fails to finalize all. - -new_hblk.o : new_hblk.c $(INC) - $(CC) new_hblk.c $(SCOPT) - -real_malloc.o : real_malloc.c $(INC) - $(CC) real_malloc.c $(SCOPT) - -dyn_load.o : dyn_load.c $(INC) - $(CC) dyn_load.c $(SCOPT) - -dbg_mlc.o : dbg_mlc.c $(INC) - $(CC) dbg_mlc.c $(SCOPT) - -malloc.o : malloc.c $(INC) - $(CC) malloc.c $(SCOPT) - -mallocx.o : mallocx.c $(INC) - $(CC) mallocx.c $(SCOPT) - -stubborn.o : stubborn.c $(INC) - $(CC) stubborn.c $(SCOPT) - -checksums.o : checksums.c $(INC) - $(CC) checksums.c $(SCOPT) - -typd_mlc.o: typd_mlc.c $(INC) - $(CC) typd_mlc.c $(SCOPT) - -mach_dep.o : mach_dep.c $(INC) - $(CC) mach_dep.c $(SCOPT) - -ptr_chck.o: ptr_chck.c $(INC) - $(CC) ptr_chck.c $(SCOPT) - -test.o : test.c $(INC) - $(CC) test.c $(SOPT) - -setjmp_t: setjmp_t.c gc.h - $(CC) setjmp_t.c $(SOPT) - - -# cords: - -cord/cordbscs.o: cord/cordbscs.c - sc cord/cordbscs.c $(CSCOPT) - -cord/cordprnt.o: cord/cordprnt.c - sc cord/cordprnt.c $(CSCOPT) - -cord/cordxtra.o: cord/cordxtra.c - sc cord/cordxtra.c $(CSCOPT) - -cord/cordtest.o: cord/cordtest.c - sc cord/cordtest.c $(CSCOPT) - - diff --git a/gc/WCC_MAKEFILE b/gc/WCC_MAKEFILE @@ -1,196 +0,0 @@ -# Makefile for Watcom C/C++ 10.5, 10.6, 11.0 on NT, OS2 and DOS4GW. -# May work with Watcom 10.0. - -# Uncoment one of the lines below for cross compilation. -SYSTEM=MSWIN32 -#SYSTEM=DOS4GW -#SYSTEM=OS2 - -# The collector can be built either as dynamic or as static library. -# Select the library type you need. -#MAKE_AS_DLL=1 -MAKE_AS_LIB=1 - -# Select calling conventions. -# Possible choices are r and s. -CALLING=s - -# Select target CPU. -# Possible choices are 3, 4, 5, and 6. -# The last choice available only since version 11.0. -CPU=5 - -# Set optimization options. -# Watcom before 11.0 does not support option "-oh". -OPTIM=-oneatx -s -#OPTIM=-ohneatx -s - -DEFS=-DALL_INTERIOR_POINTERS -DSILENT -DNO_SIGNALS #-DSMALL_CONFIG #-DGC_DEBUG - - -##### - -!ifndef SYSTEM -!ifdef __MSDOS__ -SYSTEM=DOS4GW -!else ifdef __NT__ -SYSTEM=MSWIN32 -!else ifdef __OS2__ -SYSTEM=OS2 -!else -SYSTEM=Unknown -!endif -!endif - -!define $(SYSTEM) - -!ifdef DOS4GW -SYSFLAG=-DDOS4GW -bt=dos -!else ifdef MSWIN32 -SYSFLAG=-DMSWIN32 -bt=nt -!else ifdef OS2 -SYSFLAG=-DOS2 -bt=os2 -!else -!error undefined or unsupported target platform: $(SYSTEM) -!endif -!ifdef MAKE_AS_DLL -DLLFLAG=-bd -DGC_DLL -TEST_DLLFLAG=-DGC_DLL -!else ifdef MAKE_AS_LIB -DLLFLAG= -TEST_DLLFLAG= -!else -!error Either MAKE_AS_LIB or MAKE_AS_DLL should be defined -!endif - -CC=wcc386 -CXX=wpp386 - -# -DUSE_GENERIC is required ! -CFLAGS=-$(CPU)$(CALLING) $(OPTIM) -zp4 -zc $(SYSFLAG) $(DLLFLAG) -DGC_BUILD -DUSE_GENERIC $(DEFS) -CXXFLAGS= $(CFLAGS) -TEST_CFLAGS=-$(CPU)$(CALLING) $(OPTIM) -zp4 -zc $(SYSFLAG) $(TEST_DLLFLAG) $(DEFS) -TEST_CXXFLAGS= $(TEST_CFLAGS) - -OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj & - mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj & - obj_map.obj blacklst.obj finalize.obj new_hblk.obj & - dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj & - typd_mlc.obj ptr_chck.obj mallocx.obj - -all: gc.lib gctest.exe test_cpp.exe - -!ifdef MAKE_AS_DLL - -gc.lib: gc.dll gc_cpp.obj - *wlib -b -c -n -p=512 $@ +gc.dll +gc_cpp.obj - -gc.dll: $(OBJS) .AUTODEPEND - @%create $*.lnk -!ifdef DOS4GW - @%append $*.lnk sys os2v2_dll -!else ifdef MSWIN32 - @%append $*.lnk sys nt_dll -!else ifdef OS2 - @%append $*.lnk sys os2v2_dll -!endif - @%append $*.lnk name $* - @for %i in ($(OBJS)) do @%append $*.lnk file '%i' -!ifeq CALLING s - @%append $*.lnk export GC_is_marked - @%append $*.lnk export GC_incr_words_allocd - @%append $*.lnk export GC_incr_mem_freed - @%append $*.lnk export GC_generic_malloc_words_small -!else - @%append $*.lnk export GC_is_marked_ - @%append $*.lnk export GC_incr_words_allocd_ - @%append $*.lnk export GC_incr_mem_freed_ - @%append $*.lnk export GC_generic_malloc_words_small_ -!endif - *wlink @$*.lnk -!else -gc.lib: $(OBJS) gc_cpp.obj - @%create $*.lb1 - @for %i in ($(OBJS)) do @%append $*.lb1 +'%i' - @%append $*.lb1 +'gc_cpp.obj' - *wlib -b -c -n -p=512 $@ @$*.lb1 - -!endif - - -gctest.exe: test.obj gc.lib - %create $*.lnk -!ifdef DOS4GW - @%append $*.lnk sys dos4g -!else ifdef MSWIN32 - @%append $*.lnk sys nt -!else ifdef OS2 - @%append $*.lnk sys os2v2 -!endif - @%append $*.lnk op case - @%append $*.lnk op stack=256K - @%append $*.lnk name $* - @%append $*.lnk file test.obj - @%append $*.lnk library gc.lib -!ifdef MAKE_AS_DLL -!ifeq CALLING s - @%append $*.lnk import GC_is_marked gc -!else - @%append $*.lnk import GC_is_marked_ gc -!endif -!endif - *wlink @$*.lnk -test_cpp.exe: test_cpp.obj gc.lib - %create $*.lnk -!ifdef DOS4GW - @%append $*.lnk sys dos4g -!else ifdef MSWIN32 - @%append $*.lnk sys nt -!else ifdef OS2 - @%append $*.lnk sys os2v2 -!endif - @%append $*.lnk op case - @%append $*.lnk op stack=256K - @%append $*.lnk name $* - @%append $*.lnk file test_cpp.obj - @%append $*.lnk library gc.lib -!ifdef MAKE_AS_DLL -!ifeq CALLING s - @%append $*.lnk import GC_incr_words_allocd gc - @%append $*.lnk import GC_incr_mem_freed gc - @%append $*.lnk import GC_generic_malloc_words_small gc -!else - @%append $*.lnk import GC_incr_words_allocd_ gc - @%append $*.lnk import GC_incr_mem_freed_ gc - @%append $*.lnk import GC_generic_malloc_words_small_ gc -!endif -!endif - *wlink @$*.lnk - -gc_cpp.obj: gc_cpp.cc .AUTODEPEND - $(CXX) $(TEST_CXXFLAGS) -iinclude $*.cc -test.obj: tests\test.c .AUTODEPEND - $(CC) $(TEST_CFLAGS) $*.c -test_cpp.obj: tests\test_cpp.cc .AUTODEPEND - $(CXX) $(TEST_CXXFLAGS) -iinclude $*.cc - - -.c.obj: .AUTODEPEND - $(CC) $(CFLAGS) $*.c - -.cc.obj: .AUTODEPEND - $(CXX) $(CXXFLAGS) $*.cc - -clean : .SYMBOLIC - @if exist *.obj del *.obj - @if exist *.map del *.map - @if exist *.lnk del *.lnk - @if exist *.lb1 del *.lb1 - @if exist *.sym del *.sym - @if exist *.err del *.err - @if exist *.tmp del *.tmp - @if exist *.lst del *.lst - @if exist *.exe del *.exe - @if exist *.log del *.log - @if exist *.lib del *.lib - @if exist *.dll del *.dll diff --git a/gc/acinclude.m4 b/gc/acinclude.m4 @@ -1 +0,0 @@ -sinclude(libtool.m4) diff --git a/gc/aclocal.m4 b/gc/aclocal.m4 @@ -1,823 +0,0 @@ -# aclocal.m4 generated automatically by aclocal 1.6.1 -*- Autoconf -*- - -# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -sinclude(libtool.m4) - -# Do all the work for Automake. -*- Autoconf -*- - -# This macro actually does too much some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 8 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -AC_PREREQ([2.52]) - -# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow -# the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl - AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl - AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_MISSING_PROG(AMTAR, tar) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl - -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_][CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_][CC], - defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_][CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_][CXX], - defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl -]) -]) - -# Copyright 2002 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"]) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.6.1])]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright 2001, 2002 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 2 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# -# Check to make sure that the build environment is sane. -# - -# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 3 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# -*- Autoconf -*- - - -# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 3 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# AM_AUX_DIR_EXPAND - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -# Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50]) - -AC_DEFUN([AM_AUX_DIR_EXPAND], [ -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} -AC_SUBST(install_sh)]) - -# AM_PROG_INSTALL_STRIP - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# serial 4 -*- Autoconf -*- - -# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'] - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - for depmode in $am_compiler_list; do - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - echo '#include "conftest.h"' > conftest.c - echo 'int i;' > conftest.h - echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=conftest.c object=conftest.o \ - depfile=conftest.Po tmpdepfile=conftest.TPo \ - $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && - grep conftest.h conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[rm -f .deps 2>/dev/null -mkdir .deps 2>/dev/null -if test -d .deps; then - DEPDIR=.deps -else - # MS-DOS does not allow filenames that begin with a dot. - DEPDIR=_deps -fi -rmdir .deps 2>/dev/null -AC_SUBST([DEPDIR]) -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking Speeds up one-time builds - --enable-dependency-tracking Do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -#serial 2 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - if (sed 1q $mf | fgrep 'generated by automake') > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue - # Extract the definition of DEP_FILES from the Makefile without - # running `make'. - DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` - test -z "$DEPDIR" && continue - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n -e '/^U = / s///p' < "$mf"` - test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" - # We invoke sed twice because it is the simplest approach to - # changing $(DEPDIR) to its actual value in the expansion. - for file in `sed -n -e ' - /^DEP_FILES = .*\\\\$/ { - s/^DEP_FILES = // - :loop - s/\\\\$// - p - n - /\\\\$/ b loop - p - } - /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*- - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 2 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -doit: - @echo done -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi -AC_SUBST(am__include) -AC_SUBST(am__quote) -AC_MSG_RESULT($_am_result) -rm -f confinc confmf -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 5 - -AC_PREREQ(2.52) - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([conditional \"$1\" was never defined. -Usually this means the macro was only invoked conditionally.]) -fi])]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# serial 2 - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -: ${CCAS='$(CC)'} -# Set ASFLAGS if not already set. -: ${CCASFLAGS='$(CFLAGS)'} -AC_SUBST(CCAS) -AC_SUBST(CCASFLAGS)]) - -# Add --enable-maintainer-mode option to configure. -# From Jim Meyering - -# Copyright 1996, 1998, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 1 - -AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl -] -) - diff --git a/gc/add_gc_prefix.c b/gc/add_gc_prefix.c @@ -1,20 +0,0 @@ -# include <stdio.h> -# include "version.h" - -int main(argc, argv, envp) -int argc; -char ** argv; -char ** envp; -{ - int i; - - for (i = 1; i < argc; i++) { - if (GC_ALPHA_VERSION == GC_NOT_ALPHA) { - printf("gc%d.%d/%s ", GC_VERSION_MAJOR, GC_VERSION_MINOR, argv[i]); - } else { - printf("gc%d.%dalpha%d/%s ", GC_VERSION_MAJOR, - GC_VERSION_MINOR, GC_ALPHA_VERSION, argv[i]); - } - } - return(0); -} diff --git a/gc/allchblk.c b/gc/allchblk.c @@ -1,821 +0,0 @@ -/* - * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers - * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. - * Copyright (c) 1998-1999 by Silicon Graphics. All rights reserved. - * Copyright (c) 1999 by Hewlett-Packard Company. All rights reserved. - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - */ - -/* #define DEBUG */ -#include <stdio.h> -#include "private/gc_priv.h" - -GC_bool GC_use_entire_heap = 0; - -/* - * Free heap blocks are kept on one of several free lists, - * depending on the size of the block. Each free list is doubly linked. - * Adjacent free blocks are coalesced. - */ - - -# define MAX_BLACK_LIST_ALLOC (2*HBLKSIZE) - /* largest block we will allocate starting on a black */ - /* listed block. Must be >= HBLKSIZE. */ - - -# define UNIQUE_THRESHOLD 32 - /* Sizes up to this many HBLKs each have their own free list */ -# define HUGE_THRESHOLD 256 - /* Sizes of at least this many heap blocks are mapped to a */ - /* single free list. */ -# define FL_COMPRESSION 8 - /* In between sizes map this many distinct sizes to a single */ - /* bin. */ - -# define N_HBLK_FLS (HUGE_THRESHOLD - UNIQUE_THRESHOLD)/FL_COMPRESSION \ - + UNIQUE_THRESHOLD - -struct hblk * GC_hblkfreelist[N_HBLK_FLS+1] = { 0 }; - -#ifndef USE_MUNMAP - - word GC_free_bytes[N_HBLK_FLS+1] = { 0 }; - /* Number of free bytes on each list. */ - - /* Is bytes + the number of free bytes on lists n .. N_HBLK_FLS */ - /* > GC_max_large_allocd_bytes? */ -# ifdef __GNUC__ - __inline__ -# endif - static GC_bool GC_enough_large_bytes_left(bytes,n) - word bytes; - int n; - { - int i; - for (i = N_HBLK_FLS; i >= n; --i) { - bytes += GC_free_bytes[i]; - if (bytes > GC_max_large_allocd_bytes) return TRUE; - } - return FALSE; - } - -# define INCR_FREE_BYTES(n, b) GC_free_bytes[n] += (b); - -# define FREE_ASSERT(e) GC_ASSERT(e) - -#else /* USE_MUNMAP */ - -# define INCR_FREE_BYTES(n, b) -# define FREE_ASSERT(e) - -#endif /* USE_MUNMAP */ - -/* Map a number of blocks to the appropriate large block free list index. */ -int GC_hblk_fl_from_blocks(blocks_needed) -word blocks_needed; -{ - if (blocks_needed <= UNIQUE_THRESHOLD) return blocks_needed; - if (blocks_needed >= HUGE_THRESHOLD) return N_HBLK_FLS; - return (blocks_needed - UNIQUE_THRESHOLD)/FL_COMPRESSION - + UNIQUE_THRESHOLD; - -} - -# define PHDR(hhdr) HDR(hhdr -> hb_prev) -# define NHDR(hhdr) HDR(hhdr -> hb_next) - -# ifdef USE_MUNMAP -# define IS_MAPPED(hhdr) (((hhdr) -> hb_flags & WAS_UNMAPPED) == 0) -# else /* !USE_MMAP */ -# define IS_MAPPED(hhdr) 1 -# endif /* USE_MUNMAP */ - -# if !defined(NO_DEBUGGING) -void GC_print_hblkfreelist() -{ - struct hblk * h; - word total_free = 0; - hdr * hhdr; - word sz; - int i; - - for (i = 0; i <= N_HBLK_FLS; ++i) { - h = GC_hblkfreelist[i]; -# ifdef USE_MUNMAP - if (0 != h) GC_printf1("Free list %ld (Total size %ld):\n", - (unsigned long)i); -# else - if (0 != h) GC_printf2("Free list %ld (Total size %ld):\n", - (unsigned long)i, - (unsigned long)GC_free_bytes[i]); -# endif - while (h != 0) { - hhdr = HDR(h); - sz = hhdr -> hb_sz; - GC_printf2("\t0x%lx size %lu ", (unsigned long)h, (unsigned long)sz); - total_free += sz; - if (GC_is_black_listed(h, HBLKSIZE) != 0) { - GC_printf0("start black listed\n"); - } else if (GC_is_black_listed(h, hhdr -> hb_sz) != 0) { - GC_printf0("partially black listed\n"); - } else { - GC_printf0("not black listed\n"); - } - h = hhdr -> hb_next; - } - } - if (total_free != GC_large_free_bytes) { - GC_printf1("GC_large_free_bytes = %lu (INCONSISTENT!!)\n", - (unsigned long) GC_large_free_bytes); - } - GC_printf1("Total of %lu bytes on free list\n", (unsigned long)total_free); -} - -/* Return the free list index on which the block described by the header */ -/* appears, or -1 if it appears nowhere. */ -int free_list_index_of(wanted) -hdr * wanted; -{ - struct hblk * h; - hdr * hhdr; - int i; - - for (i = 0; i <= N_HBLK_FLS; ++i) { - h = GC_hblkfreelist[i]; - while (h != 0) { - hhdr = HDR(h); - if (hhdr == wanted) return i; - h = hhdr -> hb_next; - } - } - return -1; -} - -void GC_dump_regions() -{ - unsigned i; - ptr_t start, end; - ptr_t p; - size_t bytes; - hdr *hhdr; - for (i = 0; i < GC_n_heap_sects; ++i) { - start = GC_heap_sects[i].hs_start; - bytes = GC_heap_sects[i].hs_bytes; - end = start + bytes; - /* Merge in contiguous sections. */ - while (i+1 < GC_n_heap_sects && GC_heap_sects[i+1].hs_start == end) { - ++i; - end = GC_heap_sects[i].hs_start + GC_heap_sects[i].hs_bytes; - } - GC_printf2("***Section from 0x%lx to 0x%lx\n", start, end); - for (p = start; p < end;) { - hhdr = HDR(p); - GC_printf1("\t0x%lx ", (unsigned long)p); - if (IS_FORWARDING_ADDR_OR_NIL(hhdr)) { - GC_printf1("Missing header!!\n", hhdr); - p += HBLKSIZE; - continue; - } - if (HBLK_IS_FREE(hhdr)) { - int correct_index = GC_hblk_fl_from_blocks( - divHBLKSZ(hhdr -> hb_sz)); - int actual_index; - - GC_printf1("\tfree block of size 0x%lx bytes", - (unsigned long)(hhdr -> hb_sz)); - if (IS_MAPPED(hhdr)) { - GC_printf0("\n"); - } else { - GC_printf0("(unmapped)\n"); - } - actual_index = free_list_index_of(hhdr); - if (-1 == actual_index) { - GC_printf1("\t\tBlock not on free list %ld!!\n", - correct_index); - } else if (correct_index != actual_index) { - GC_printf2("\t\tBlock on list %ld, should be on %ld!!\n", - actual_index, correct_index); - } - p += hhdr -> hb_sz; - } else { - GC_printf1("\tused for blocks of size 0x%lx bytes\n", - (unsigned long)WORDS_TO_BYTES(hhdr -> hb_sz)); - p += HBLKSIZE * OBJ_SZ_TO_BLOCKS(hhdr -> hb_sz); - } - } - } -} - -# endif /* NO_DEBUGGING */ - -/* Initialize hdr for a block containing the indicated size and */ -/* kind of objects. */ -/* Return FALSE on failure. */ -static GC_bool setup_header(hhdr, sz, kind, flags) -register hdr * hhdr; -word sz; /* object size in words */ -int kind; -unsigned char flags; -{ - register word descr; - - /* Add description of valid object pointers */ - if (!GC_add_map_entry(sz)) return(FALSE); - hhdr -> hb_map = GC_obj_map[sz > MAXOBJSZ? 0 : sz]; - - /* Set size, kind and mark proc fields */ - hhdr -> hb_sz = sz; - hhdr -> hb_obj_kind = kind; - hhdr -> hb_flags = flags; - descr = GC_obj_kinds[kind].ok_descriptor; - if (GC_obj_kinds[kind].ok_relocate_descr) descr += WORDS_TO_BYTES(sz); - hhdr -> hb_descr = descr; - - /* Clear mark bits */ - GC_clear_hdr_marks(hhdr); - - hhdr -> hb_last_reclaimed = (unsigned short)GC_gc_no; - return(TRUE); -} - -#define FL_UNKNOWN -1 -/* - * Remove hhdr from the appropriate free list. - * We assume it is on the nth free list, or on the size - * appropriate free list if n is FL_UNKNOWN. - */ -void GC_remove_from_fl(hhdr, n) -hdr * hhdr; -int n; -{ - int index; - - GC_ASSERT(((hhdr -> hb_sz) & (HBLKSIZE-1)) == 0); -# ifndef USE_MUNMAP - /* We always need index to mainatin free counts. */ - if (FL_UNKNOWN == n) { - index = GC_hblk_fl_from_blocks(divHBLKSZ(hhdr -> hb_sz)); - } else { - index = n; - } -# endif - if (hhdr -> hb_prev == 0) { -# ifdef USE_MUNMAP - if (FL_UNKNOWN == n) { - index = GC_hblk_fl_from_blocks(divHBLKSZ(hhdr -> hb_sz)); - } else { - index = n; - } -# endif - GC_ASSERT(HDR(GC_hblkfreelist[index]) == hhdr); - GC_hblkfreelist[index] = hhdr -> hb_next; - } else { - hdr *phdr; - GET_HDR(hhdr -> hb_prev, phdr); - phdr -> hb_next = hhdr -> hb_next; - } - INCR_FREE_BYTES(index, - (signed_word)(hhdr -> hb_sz)); - FREE_ASSERT(GC_free_bytes[index] >= 0); - if (0 != hhdr -> hb_next) { - hdr * nhdr; - GC_ASSERT(!IS_FORWARDING_ADDR_OR_NIL(NHDR(hhdr))); - GET_HDR(hhdr -> hb_next, nhdr); - nhdr -> hb_prev = hhdr -> hb_prev; - } -} - -/* - * Return a pointer to the free block ending just before h, if any. - */ -struct hblk * GC_free_block_ending_at(h) -struct hblk *h; -{ - struct hblk * p = h - 1; - hdr * phdr; - - GET_HDR(p, phdr); - while (0 != phdr && IS_FORWARDING_ADDR_OR_NIL(phdr)) { - p = FORWARDED_ADDR(p,phdr); - phdr = HDR(p); - } - if (0 != phdr) { - if(HBLK_IS_FREE(phdr)) { - return p; - } else { - return 0; - } - } - p = GC_prev_block(h - 1); - if (0 != p) { - phdr = HDR(p); - if (HBLK_IS_FREE(phdr) && (ptr_t)p + phdr -> hb_sz == (ptr_t)h) { - return p; - } - } - return 0; -} - -/* - * Add hhdr to the appropriate free list. - * We maintain individual free lists sorted by address. - */ -void GC_add_to_fl(h, hhdr) -struct hblk *h; -hdr * hhdr; -{ - int index = GC_hblk_fl_from_blocks(divHBLKSZ(hhdr -> hb_sz)); - struct hblk *second = GC_hblkfreelist[index]; - hdr * second_hdr; -# ifdef GC_ASSERTIONS - struct hblk *next = (struct hblk *)((word)h + hhdr -> hb_sz); - hdr * nexthdr = HDR(next); - struct hblk *prev = GC_free_block_ending_at(h); - hdr * prevhdr = HDR(prev); - GC_ASSERT(nexthdr == 0 || !HBLK_IS_FREE(nexthdr) || !IS_MAPPED(nexthdr)); - GC_ASSERT(prev == 0 || !HBLK_IS_FREE(prevhdr) || !IS_MAPPED(prevhdr)); -# endif - GC_ASSERT(((hhdr -> hb_sz) & (HBLKSIZE-1)) == 0); - GC_hblkfreelist[index] = h; - INCR_FREE_BYTES(index, hhdr -> hb_sz); - FREE_ASSERT(GC_free_bytes[index] <= GC_large_free_bytes) - hhdr -> hb_next = second; - hhdr -> hb_prev = 0; - if (0 != second) { - GET_HDR(second, second_hdr); - second_hdr -> hb_prev = h; - } - GC_invalidate_map(hhdr); -} - -#ifdef USE_MUNMAP - -/* Unmap blocks that haven't been recently touched. This is the only way */ -/* way blocks are ever unmapped. */ -void GC_unmap_old(void) -{ - struct hblk * h; - hdr * hhdr; - word sz; - unsigned short last_rec, threshold; - int i; -# define UNMAP_THRESHOLD 6 - - for (i = 0; i <= N_HBLK_FLS; ++i) { - for (h = GC_hblkfreelist[i]; 0 != h; h = hhdr -> hb_next) { - hhdr = HDR(h); - if (!IS_MAPPED(hhdr)) continue; - threshold = (unsigned short)(GC_gc_no - UNMAP_THRESHOLD); - last_rec = hhdr -> hb_last_reclaimed; - if (last_rec > GC_gc_no - || last_rec < threshold && threshold < GC_gc_no - /* not recently wrapped */) { - sz = hhdr -> hb_sz; - GC_unmap((ptr_t)h, sz); - hhdr -> hb_flags |= WAS_UNMAPPED; - } - } - } -} - -/* Merge all unmapped blocks that are adjacent to other free */ -/* blocks. This may involve remapping, since all blocks are either */ -/* fully mapped or fully unmapped. */ -void GC_merge_unmapped(void) -{ - struct hblk * h, *next; - hdr * hhdr, *nexthdr; - word size, nextsize; - int i; - - for (i = 0; i <= N_HBLK_FLS; ++i) { - h = GC_hblkfreelist[i]; - while (h != 0) { - GET_HDR(h, hhdr); - size = hhdr->hb_sz; - next = (struct hblk *)((word)h + size); - GET_HDR(next, nexthdr); - /* Coalesce with successor, if possible */ - if (0 != nexthdr && HBLK_IS_FREE(nexthdr)) { - nextsize = nexthdr -> hb_sz; - if (IS_MAPPED(hhdr)) { - GC_ASSERT(!IS_MAPPED(nexthdr)); - /* make both consistent, so that we can merge */ - if (size > nextsize) { - GC_remap((ptr_t)next, nextsize); - } else { - GC_unmap((ptr_t)h, size); - hhdr -> hb_flags |= WAS_UNMAPPED; - } - } else if (IS_MAPPED(nexthdr)) { - GC_ASSERT(!IS_MAPPED(hhdr)); - if (size > nextsize) { - GC_unmap((ptr_t)next, nextsize); - } else { - GC_remap((ptr_t)h, size); - hhdr -> hb_flags &= ~WAS_UNMAPPED; - } - } else { - /* Unmap any gap in the middle */ - GC_unmap_gap((ptr_t)h, size, (ptr_t)next, nexthdr -> hb_sz); - } - /* If they are both unmapped, we merge, but leave unmapped. */ - GC_remove_from_fl(hhdr, i); - GC_remove_from_fl(nexthdr, FL_UNKNOWN); - hhdr -> hb_sz += nexthdr -> hb_sz; - GC_remove_header(next); - GC_add_to_fl(h, hhdr); - /* Start over at beginning of list */ - h = GC_hblkfreelist[i]; - } else /* not mergable with successor */ { - h = hhdr -> hb_next; - } - } /* while (h != 0) ... */ - } /* for ... */ -} - -#endif /* USE_MUNMAP */ - -/* - * Return a pointer to a block starting at h of length bytes. - * Memory for the block is mapped. - * Remove the block from its free list, and return the remainder (if any) - * to its appropriate free list. - * May fail by returning 0. - * The header for the returned block must be set up by the caller. - * If the return value is not 0, then hhdr is the header for it. - */ -struct hblk * GC_get_first_part(h, hhdr, bytes, index) -struct hblk *h; -hdr * hhdr; -word bytes; -int index; -{ - word total_size = hhdr -> hb_sz; - struct hblk * rest; - hdr * rest_hdr; - - GC_ASSERT((total_size & (HBLKSIZE-1)) == 0); - GC_remove_from_fl(hhdr, index); - if (total_size == bytes) return h; - rest = (struct hblk *)((word)h + bytes); - rest_hdr = GC_install_header(rest); - if (0 == rest_hdr) return(0); - rest_hdr -> hb_sz = total_size - bytes; - rest_hdr -> hb_flags = 0; -# ifdef GC_ASSERTIONS - /* Mark h not free, to avoid assertion about adjacent free blocks. */ - hhdr -> hb_map = 0; -# endif - GC_add_to_fl(rest, rest_hdr); - return h; -} - -/* - * H is a free block. N points at an address inside it. - * A new header for n has already been set up. Fix up h's header - * to reflect the fact that it is being split, move it to the - * appropriate free list. - * N replaces h in the original free list. - * - * Nhdr is not completely filled in, since it is about to allocated. - * It may in fact end up on the wrong free list for its size. - * (Hence adding it to a free list is silly. But this path is hopefully - * rare enough that it doesn't matter. The code is cleaner this way.) - */ -void GC_split_block(h, hhdr, n, nhdr, index) -struct hblk *h; -hdr * hhdr; -struct hblk *n; -hdr * nhdr; -int index; /* Index of free list */ -{ - word total_size = hhdr -> hb_sz; - word h_size = (word)n - (word)h; - struct hblk *prev = hhdr -> hb_prev; - struct hblk *next = hhdr -> hb_next; - - /* Replace h with n on its freelist */ - nhdr -> hb_prev = prev; - nhdr -> hb_next = next; - nhdr -> hb_sz = total_size - h_size; - nhdr -> hb_flags = 0; - if (0 != prev) { - HDR(prev) -> hb_next = n; - } else { - GC_hblkfreelist[index] = n; - } - if (0 != next) { - HDR(next) -> hb_prev = n; - } - INCR_FREE_BYTES(index, -(signed_word)h_size); - FREE_ASSERT(GC_free_bytes[index] > 0); -# ifdef GC_ASSERTIONS - nhdr -> hb_map = 0; /* Don't fail test for consecutive */ - /* free blocks in GC_add_to_fl. */ -# endif -# ifdef USE_MUNMAP - hhdr -> hb_last_reclaimed = GC_gc_no; -# endif - hhdr -> hb_sz = h_size; - GC_add_to_fl(h, hhdr); - GC_invalidate_map(nhdr); -} - -struct hblk * GC_allochblk_nth(); - -/* - * Allocate (and return pointer to) a heap block - * for objects of size sz words, searching the nth free list. - * - * NOTE: We set obj_map field in header correctly. - * Caller is responsible for building an object freelist in block. - * - * Unlike older versions of the collectors, the client is responsible - * for clearing the block, if necessary. - */ -struct hblk * -GC_allochblk(sz, kind, flags) -word sz; -int kind; -unsigned flags; /* IGNORE_OFF_PAGE or 0 */ -{ - word blocks = OBJ_SZ_TO_BLOCKS(sz); - int start_list = GC_hblk_fl_from_blocks(blocks); - int i; - for (i = start_list; i <= N_HBLK_FLS; ++i) { - struct hblk * result = GC_allochblk_nth(sz, kind, flags, i); - if (0 != result) { - return result; - } - } - return 0; -} -/* - * The same, but with search restricted to nth free list. - */ -struct hblk * -GC_allochblk_nth(sz, kind, flags, n) -word sz; -int kind; -unsigned char flags; /* IGNORE_OFF_PAGE or 0 */ -int n; -{ - register struct hblk *hbp; - register hdr * hhdr; /* Header corr. to hbp */ - register struct hblk *thishbp; - register hdr * thishdr; /* Header corr. to hbp */ - signed_word size_needed; /* number of bytes in requested objects */ - signed_word size_avail; /* bytes available in this block */ - - size_needed = HBLKSIZE * OBJ_SZ_TO_BLOCKS(sz); - - /* search for a big enough block in free list */ - hbp = GC_hblkfreelist[n]; - for(; 0 != hbp; hbp = hhdr -> hb_next) { - GET_HDR(hbp, hhdr); - size_avail = hhdr->hb_sz; - if (size_avail < size_needed) continue; - if (!GC_use_entire_heap - && size_avail != size_needed - && USED_HEAP_SIZE >= GC_requested_heapsize - && !TRUE_INCREMENTAL && GC_should_collect()) { -# ifdef USE_MUNMAP - continue; -# else - /* If we have enough large blocks left to cover any */ - /* previous request for large blocks, we go ahead */ - /* and split. Assuming a steady state, that should */ - /* be safe. It means that we can use the full */ - /* heap if we allocate only small objects. */ - if (!GC_enough_large_bytes_left(GC_large_allocd_bytes, n)) { - continue; - } - /* If we are deallocating lots of memory from */ - /* finalizers, fail and collect sooner rather */ - /* than later. */ - if (GC_finalizer_mem_freed > (GC_heapsize >> 4)) { - continue; - } -# endif /* !USE_MUNMAP */ - } - /* If the next heap block is obviously better, go on. */ - /* This prevents us from disassembling a single large block */ - /* to get tiny blocks. */ - { - signed_word next_size; - - thishbp = hhdr -> hb_next; - if (thishbp != 0) { - GET_HDR(thishbp, thishdr); - next_size = (signed_word)(thishdr -> hb_sz); - if (next_size < size_avail - && next_size >= size_needed - && !GC_is_black_listed(thishbp, (word)size_needed)) { - continue; - } - } - } - if ( !IS_UNCOLLECTABLE(kind) && - (kind != PTRFREE || size_needed > MAX_BLACK_LIST_ALLOC)) { - struct hblk * lasthbp = hbp; - ptr_t search_end = (ptr_t)hbp + size_avail - size_needed; - signed_word orig_avail = size_avail; - signed_word eff_size_needed = ((flags & IGNORE_OFF_PAGE)? - HBLKSIZE - : size_needed); - - - while ((ptr_t)lasthbp <= search_end - && (thishbp = GC_is_black_listed(lasthbp, - (word)eff_size_needed)) - != 0) { - lasthbp = thishbp; - } - size_avail -= (ptr_t)lasthbp - (ptr_t)hbp; - thishbp = lasthbp; - if (size_avail >= size_needed) { - if (thishbp != hbp && - 0 != (thishdr = GC_install_header(thishbp))) { - /* Make sure it's mapped before we mangle it. */ -# ifdef USE_MUNMAP - if (!IS_MAPPED(hhdr)) { - GC_remap((ptr_t)hbp, hhdr -> hb_sz); - hhdr -> hb_flags &= ~WAS_UNMAPPED; - } -# endif - /* Split the block at thishbp */ - GC_split_block(hbp, hhdr, thishbp, thishdr, n); - /* Advance to thishbp */ - hbp = thishbp; - hhdr = thishdr; - /* We must now allocate thishbp, since it may */ - /* be on the wrong free list. */ - } - } else if (size_needed > (signed_word)BL_LIMIT - && orig_avail - size_needed - > (signed_word)BL_LIMIT) { - /* Punt, since anything else risks unreasonable heap growth. */ - if (++GC_large_alloc_warn_suppressed - >= GC_large_alloc_warn_interval) { - WARN("Repeated allocation of very large block " - "(appr. size %ld):\n" - "\tMay lead to memory leak and poor performance.\n", - size_needed); - GC_large_alloc_warn_suppressed = 0; - } - size_avail = orig_avail; - } else if (size_avail == 0 && size_needed == HBLKSIZE - && IS_MAPPED(hhdr)) { - if (!GC_find_leak) { - static unsigned count = 0; - - /* The block is completely blacklisted. We need */ - /* to drop some such blocks, since otherwise we spend */ - /* all our time traversing them if pointerfree */ - /* blocks are unpopular. */ - /* A dropped block will be reconsidered at next GC. */ - if ((++count & 3) == 0) { - /* Allocate and drop the block in small chunks, to */ - /* maximize the chance that we will recover some */ - /* later. */ - word total_size = hhdr -> hb_sz; - struct hblk * limit = hbp + divHBLKSZ(total_size); - struct hblk * h; - struct hblk * prev = hhdr -> hb_prev; - - GC_words_wasted += total_size; - GC_large_free_bytes -= total_size; - GC_remove_from_fl(hhdr, n); - for (h = hbp; h < limit; h++) { - if (h == hbp || 0 != (hhdr = GC_install_header(h))) { - (void) setup_header( - hhdr, - BYTES_TO_WORDS(HBLKSIZE), - PTRFREE, 0); /* Cant fail */ - if (GC_debugging_started) { - BZERO(h, HBLKSIZE); - } - } - } - /* Restore hbp to point at free block */ - hbp = prev; - if (0 == hbp) { - return GC_allochblk_nth(sz, kind, flags, n); - } - hhdr = HDR(hbp); - } - } - } - } - if( size_avail >= size_needed ) { -# ifdef USE_MUNMAP - if (!IS_MAPPED(hhdr)) { - GC_remap((ptr_t)hbp, hhdr -> hb_sz); - hhdr -> hb_flags &= ~WAS_UNMAPPED; - } -# endif - /* hbp may be on the wrong freelist; the parameter n */ - /* is important. */ - hbp = GC_get_first_part(hbp, hhdr, size_needed, n); - break; - } - } - - if (0 == hbp) return 0; - - /* Add it to map of valid blocks */ - if (!GC_install_counts(hbp, (word)size_needed)) return(0); - /* This leaks memory under very rare conditions. */ - - /* Set up header */ - if (!setup_header(hhdr, sz, kind, flags)) { - GC_remove_counts(hbp, (word)size_needed); - return(0); /* ditto */ - } - - /* Notify virtual dirty bit implementation that we are about to write. */ - /* Ensure that pointerfree objects are not protected if it's avoidable. */ - GC_remove_protection(hbp, divHBLKSZ(size_needed), - (hhdr -> hb_descr == 0) /* pointer-free */); - - /* We just successfully allocated a block. Restart count of */ - /* consecutive failures. */ - { - extern unsigned GC_fail_count; - - GC_fail_count = 0; - } - - GC_large_free_bytes -= size_needed; - - GC_ASSERT(IS_MAPPED(hhdr)); - return( hbp ); -} - -struct hblk * GC_freehblk_ptr = 0; /* Search position hint for GC_freehblk */ - -/* - * Free a heap block. - * - * Coalesce the block with its neighbors if possible. - * - * All mark words are assumed to be cleared. - */ -void -GC_freehblk(hbp) -struct hblk *hbp; -{ -struct hblk *next, *prev; -hdr *hhdr, *prevhdr, *nexthdr; -signed_word size; - - - GET_HDR(hbp, hhdr); - size = hhdr->hb_sz; - size = HBLKSIZE * OBJ_SZ_TO_BLOCKS(size); - GC_remove_counts(hbp, (word)size); - hhdr->hb_sz = size; - - /* Check for duplicate deallocation in the easy case */ - if (HBLK_IS_FREE(hhdr)) { - GC_printf1("Duplicate large block deallocation of 0x%lx\n", - (unsigned long) hbp); - ABORT("Duplicate large block deallocation"); - } - - GC_ASSERT(IS_MAPPED(hhdr)); - GC_invalidate_map(hhdr); - next = (struct hblk *)((word)hbp + size); - GET_HDR(next, nexthdr); - prev = GC_free_block_ending_at(hbp); - /* Coalesce with successor, if possible */ - if(0 != nexthdr && HBLK_IS_FREE(nexthdr) && IS_MAPPED(nexthdr)) { - GC_remove_from_fl(nexthdr, FL_UNKNOWN); - hhdr -> hb_sz += nexthdr -> hb_sz; - GC_remove_header(next); - } - /* Coalesce with predecessor, if possible. */ - if (0 != prev) { - prevhdr = HDR(prev); - if (IS_MAPPED(prevhdr)) { - GC_remove_from_fl(prevhdr, FL_UNKNOWN); - prevhdr -> hb_sz += hhdr -> hb_sz; - GC_remove_header(hbp); - hbp = prev; - hhdr = prevhdr; - } - } - - GC_large_free_bytes += size; - GC_add_to_fl(hbp, hhdr); -} - diff --git a/gc/alloc.c b/gc/alloc.c @@ -1,1051 +0,0 @@ -/* - * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers - * Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. - * Copyright (c) 1998 by Silicon Graphics. All rights reserved. - * Copyright (c) 1999 by Hewlett-Packard Company. All rights reserved. - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - * - */ - - -# include "private/gc_priv.h" - -# include <stdio.h> -# if !defined(MACOS) && !defined(MSWINCE) -# include <signal.h> -# include <sys/types.h> -# endif - -/* - * Separate free lists are maintained for different sized objects - * up to MAXOBJSZ. - * The call GC_allocobj(i,k) ensures that the freelist for - * kind k objects of size i points to a non-empty - * free list. It returns a pointer to the first entry on the free list. - * In a single-threaded world, GC_allocobj may be called to allocate - * an object of (small) size i as follows: - * - * opp = &(GC_objfreelist[i]); - * if (*opp == 0) GC_allocobj(i, NORMAL); - * ptr = *opp; - * *opp = obj_link(ptr); - * - * Note that this is very fast if the free list is non-empty; it should - * only involve the execution of 4 or 5 simple instructions. - * All composite objects on freelists are cleared, except for - * their first word. - */ - -/* - * The allocator uses GC_allochblk to allocate large chunks of objects. - * These chunks all start on addresses which are multiples of - * HBLKSZ. Each allocated chunk has an associated header, - * which can be located quickly based on the address of the chunk. - * (See headers.c for details.) - * This makes it possible to check quickly whether an - * arbitrary address corresponds to an object administered by the - * allocator. - */ - -word GC_non_gc_bytes = 0; /* Number of bytes not intended to be collected */ - -word GC_gc_no = 0; - -#ifndef SMALL_CONFIG - int GC_incremental = 0; /* By default, stop the world. */ -#endif - -int GC_parallel = FALSE; /* By default, parallel GC is off. */ - -int GC_full_freq = 19; /* Every 20th collection is a full */ - /* collection, whether we need it */ - /* or not. */ - -GC_bool GC_need_full_gc = FALSE; - /* Need full GC do to heap growth. */ - -word GC_used_heap_size_after_full = 0; - -char * GC_copyright[] = -{"Copyright 1988,1989 Hans-J. Boehm and Alan J. Demers ", -"Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. ", -"Copyright (c) 1996-1998 by Silicon Graphics. All rights reserved. ", -"Copyright (c) 1999-2001 by Hewlett-Packard Company. All rights reserved. ", -"THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY", -" EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.", -"See source code for details." }; - -# include "version.h" - -/* some more variables */ - -extern signed_word GC_mem_found; /* Number of reclaimed longwords */ - /* after garbage collection */ - -GC_bool GC_dont_expand = 0; - -word GC_free_space_divisor = 3; - -extern GC_bool GC_collection_in_progress(); - /* Collection is in progress, or was abandoned. */ - -extern GC_bool GC_print_back_height; - -int GC_never_stop_func GC_PROTO((void)) { return(0); } - -unsigned long GC_time_limit = TIME_LIMIT; - -CLOCK_TYPE GC_start_time; /* Time at which we stopped world. */ - /* used only in GC_timeout_stop_func. */ - -int GC_n_attempts = 0; /* Number of attempts at finishing */ - /* collection within GC_time_limit. */ - -#if defined(SMALL_CONFIG) || defined(NO_CLOCK) -# define GC_timeout_stop_func GC_never_stop_func -#else - int GC_timeout_stop_func GC_PROTO((void)) - { - CLOCK_TYPE current_time; - static unsigned count = 0; - unsigned long time_diff; - - if ((count++ & 3) != 0) return(0); - GET_TIME(current_time); - time_diff = MS_TIME_DIFF(current_time,GC_start_time); - if (time_diff >= GC_time_limit) { -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf0("Abandoning stopped marking after "); - GC_printf1("%lu msecs", (unsigned long)time_diff); - GC_printf1("(attempt %d)\n", (unsigned long) GC_n_attempts); - } -# endif - return(1); - } - return(0); - } -#endif /* !SMALL_CONFIG */ - -/* Return the minimum number of words that must be allocated between */ -/* collections to amortize the collection cost. */ -static word min_words_allocd() -{ -# ifdef THREADS - /* We punt, for now. */ - register signed_word stack_size = 10000; -# else - int dummy; - register signed_word stack_size = (ptr_t)(&dummy) - GC_stackbottom; -# endif - word total_root_size; /* includes double stack size, */ - /* since the stack is expensive */ - /* to scan. */ - word scan_size; /* Estimate of memory to be scanned */ - /* during normal GC. */ - - if (stack_size < 0) stack_size = -stack_size; - total_root_size = 2 * stack_size + GC_root_size; - scan_size = BYTES_TO_WORDS(GC_heapsize - GC_large_free_bytes - + (GC_large_free_bytes >> 2) - /* use a bit more of large empty heap */ - + total_root_size); - if (TRUE_INCREMENTAL) { - return scan_size / (2 * GC_free_space_divisor); - } else { - return scan_size / GC_free_space_divisor; - } -} - -/* Return the number of words allocated, adjusted for explicit storage */ -/* management, etc.. This number is used in deciding when to trigger */ -/* collections. */ -word GC_adj_words_allocd() -{ - register signed_word result; - register signed_word expl_managed = - BYTES_TO_WORDS((long)GC_non_gc_bytes - - (long)GC_non_gc_bytes_at_gc); - - /* Don't count what was explicitly freed, or newly allocated for */ - /* explicit management. Note that deallocating an explicitly */ - /* managed object should not alter result, assuming the client */ - /* is playing by the rules. */ - result = (signed_word)GC_words_allocd - - (signed_word)GC_mem_freed - + (signed_word)GC_finalizer_mem_freed - expl_managed; - if (result > (signed_word)GC_words_allocd) { - result = GC_words_allocd; - /* probably client bug or unfortunate scheduling */ - } - result += GC_words_finalized; - /* We count objects enqueued for finalization as though they */ - /* had been reallocated this round. Finalization is user */ - /* visible progress. And if we don't count this, we have */ - /* stability problems for programs that finalize all objects. */ - result += GC_words_wasted; - /* This doesn't reflect useful work. But if there is lots of */ - /* new fragmentation, the same is probably true of the heap, */ - /* and the collection will be correspondingly cheaper. */ - if (result < (signed_word)(GC_words_allocd >> 3)) { - /* Always count at least 1/8 of the allocations. We don't want */ - /* to collect too infrequently, since that would inhibit */ - /* coalescing of free storage blocks. */ - /* This also makes us partially robust against client bugs. */ - return(GC_words_allocd >> 3); - } else { - return(result); - } -} - - -/* Clear up a few frames worth of garbage left at the top of the stack. */ -/* This is used to prevent us from accidentally treating garbade left */ -/* on the stack by other parts of the collector as roots. This */ -/* differs from the code in misc.c, which actually tries to keep the */ -/* stack clear of long-lived, client-generated garbage. */ -void GC_clear_a_few_frames() -{ -# define NWORDS 64 - word frames[NWORDS]; - register int i; - - for (i = 0; i < NWORDS; i++) frames[i] = 0; -} - -/* Have we allocated enough to amortize a collection? */ -GC_bool GC_should_collect() -{ - return(GC_adj_words_allocd() >= min_words_allocd()); -} - - -void GC_notify_full_gc() -{ - if (GC_start_call_back != (void (*) GC_PROTO((void)))0) { - (*GC_start_call_back)(); - } -} - -GC_bool GC_is_full_gc = FALSE; - -/* - * Initiate a garbage collection if appropriate. - * Choose judiciously - * between partial, full, and stop-world collections. - * Assumes lock held, signals disabled. - */ -void GC_maybe_gc() -{ - static int n_partial_gcs = 0; - - if (GC_should_collect()) { - if (!GC_incremental) { - GC_notify_full_gc(); - GC_gcollect_inner(); - n_partial_gcs = 0; - return; - } else { -# ifdef PARALLEL_MARK - GC_wait_for_reclaim(); -# endif - if (GC_need_full_gc || n_partial_gcs >= GC_full_freq) { -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf2( - "***>Full mark for collection %lu after %ld allocd bytes\n", - (unsigned long) GC_gc_no+1, - (long)WORDS_TO_BYTES(GC_words_allocd)); - } -# endif - GC_promote_black_lists(); - (void)GC_reclaim_all((GC_stop_func)0, TRUE); - GC_clear_marks(); - n_partial_gcs = 0; - GC_notify_full_gc(); - GC_is_full_gc = TRUE; - } else { - n_partial_gcs++; - } - } - /* We try to mark with the world stopped. */ - /* If we run out of time, this turns into */ - /* incremental marking. */ -# ifndef NO_CLOCK - if (GC_time_limit != GC_TIME_UNLIMITED) { GET_TIME(GC_start_time); } -# endif - if (GC_stopped_mark(GC_time_limit == GC_TIME_UNLIMITED? - GC_never_stop_func : GC_timeout_stop_func)) { -# ifdef SAVE_CALL_CHAIN - GC_save_callers(GC_last_stack); -# endif - GC_finish_collection(); - } else { - if (!GC_is_full_gc) { - /* Count this as the first attempt */ - GC_n_attempts++; - } - } - } -} - - -/* - * Stop the world garbage collection. Assumes lock held, signals disabled. - * If stop_func is not GC_never_stop_func, then abort if stop_func returns TRUE. - */ -GC_bool GC_try_to_collect_inner(stop_func) -GC_stop_func stop_func; -{ -# ifdef CONDPRINT - CLOCK_TYPE start_time, current_time; -# endif - if (GC_incremental && GC_collection_in_progress()) { -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf0( - "GC_try_to_collect_inner: finishing collection in progress\n"); - } -# endif /* CONDPRINT */ - /* Just finish collection already in progress. */ - while(GC_collection_in_progress()) { - if (stop_func()) return(FALSE); - GC_collect_a_little_inner(1); - } - } -# ifdef CONDPRINT - if (GC_print_stats) { - if (GC_print_stats) GET_TIME(start_time); - GC_printf2( - "Initiating full world-stop collection %lu after %ld allocd bytes\n", - (unsigned long) GC_gc_no+1, - (long)WORDS_TO_BYTES(GC_words_allocd)); - } -# endif - GC_promote_black_lists(); - /* Make sure all blocks have been reclaimed, so sweep routines */ - /* don't see cleared mark bits. */ - /* If we're guaranteed to finish, then this is unnecessary. */ - /* In the find_leak case, we have to finish to guarantee that */ - /* previously unmarked objects are not reported as leaks. */ -# ifdef PARALLEL_MARK - GC_wait_for_reclaim(); -# endif - if ((GC_find_leak || stop_func != GC_never_stop_func) - && !GC_reclaim_all(stop_func, FALSE)) { - /* Aborted. So far everything is still consistent. */ - return(FALSE); - } - GC_invalidate_mark_state(); /* Flush mark stack. */ - GC_clear_marks(); -# ifdef SAVE_CALL_CHAIN - GC_save_callers(GC_last_stack); -# endif - GC_is_full_gc = TRUE; - if (!GC_stopped_mark(stop_func)) { - if (!GC_incremental) { - /* We're partially done and have no way to complete or use */ - /* current work. Reestablish invariants as cheaply as */ - /* possible. */ - GC_invalidate_mark_state(); - GC_unpromote_black_lists(); - } /* else we claim the world is already still consistent. We'll */ - /* finish incrementally. */ - return(FALSE); - } - GC_finish_collection(); -# if defined(CONDPRINT) - if (GC_print_stats) { - GET_TIME(current_time); - GC_printf1("Complete collection took %lu msecs\n", - MS_TIME_DIFF(current_time,start_time)); - } -# endif - return(TRUE); -} - - - -/* - * Perform n units of garbage collection work. A unit is intended to touch - * roughly GC_RATE pages. Every once in a while, we do more than that. - * This needa to be a fairly large number with our current incremental - * GC strategy, since otherwise we allocate too much during GC, and the - * cleanup gets expensive. - */ -# define GC_RATE 10 -# define MAX_PRIOR_ATTEMPTS 1 - /* Maximum number of prior attempts at world stop marking */ - /* A value of 1 means that we finish the second time, no matter */ - /* how long it takes. Doesn't count the initial root scan */ - /* for a full GC. */ - -int GC_deficit = 0; /* The number of extra calls to GC_mark_some */ - /* that we have made. */ - -void GC_collect_a_little_inner(n) -int n; -{ - register int i; - - if (GC_incremental && GC_collection_in_progress()) { - for (i = GC_deficit; i < GC_RATE*n; i++) { - if (GC_mark_some((ptr_t)0)) { - /* Need to finish a collection */ -# ifdef SAVE_CALL_CHAIN - GC_save_callers(GC_last_stack); -# endif -# ifdef PARALLEL_MARK - GC_wait_for_reclaim(); -# endif - if (GC_n_attempts < MAX_PRIOR_ATTEMPTS - && GC_time_limit != GC_TIME_UNLIMITED) { - GET_TIME(GC_start_time); - if (!GC_stopped_mark(GC_timeout_stop_func)) { - GC_n_attempts++; - break; - } - } else { - (void)GC_stopped_mark(GC_never_stop_func); - } - GC_finish_collection(); - break; - } - } - if (GC_deficit > 0) GC_deficit -= GC_RATE*n; - if (GC_deficit < 0) GC_deficit = 0; - } else { - GC_maybe_gc(); - } -} - -int GC_collect_a_little GC_PROTO(()) -{ - int result; - DCL_LOCK_STATE; - - DISABLE_SIGNALS(); - LOCK(); - GC_collect_a_little_inner(1); - result = (int)GC_collection_in_progress(); - UNLOCK(); - ENABLE_SIGNALS(); - if (!result && GC_debugging_started) GC_print_all_smashed(); - return(result); -} - -/* - * Assumes lock is held, signals are disabled. - * We stop the world. - * If stop_func() ever returns TRUE, we may fail and return FALSE. - * Increment GC_gc_no if we succeed. - */ -GC_bool GC_stopped_mark(stop_func) -GC_stop_func stop_func; -{ - register int i; - int dummy; -# if defined(PRINTTIMES) || defined(CONDPRINT) - CLOCK_TYPE start_time, current_time; -# endif - -# ifdef PRINTTIMES - GET_TIME(start_time); -# endif -# if defined(CONDPRINT) && !defined(PRINTTIMES) - if (GC_print_stats) GET_TIME(start_time); -# endif - STOP_WORLD(); -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf1("--> Marking for collection %lu ", - (unsigned long) GC_gc_no + 1); - GC_printf2("after %lu allocd bytes + %lu wasted bytes\n", - (unsigned long) WORDS_TO_BYTES(GC_words_allocd), - (unsigned long) WORDS_TO_BYTES(GC_words_wasted)); - } -# endif -# ifdef MAKE_BACK_GRAPH - if (GC_print_back_height) { - GC_build_back_graph(); - } -# endif - - /* Mark from all roots. */ - /* Minimize junk left in my registers and on the stack */ - GC_clear_a_few_frames(); - GC_noop(0,0,0,0,0,0); - GC_initiate_gc(); - for(i = 0;;i++) { - if ((*stop_func)()) { -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf0("Abandoned stopped marking after "); - GC_printf1("%lu iterations\n", - (unsigned long)i); - } -# endif - GC_deficit = i; /* Give the mutator a chance. */ - START_WORLD(); - return(FALSE); - } - if (GC_mark_some((ptr_t)(&dummy))) break; - } - - GC_gc_no++; -# ifdef PRINTSTATS - GC_printf2("Collection %lu reclaimed %ld bytes", - (unsigned long) GC_gc_no - 1, - (long)WORDS_TO_BYTES(GC_mem_found)); -# else -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf1("Collection %lu finished", (unsigned long) GC_gc_no - 1); - } -# endif -# endif /* !PRINTSTATS */ -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf1(" ---> heapsize = %lu bytes\n", - (unsigned long) GC_heapsize); - /* Printf arguments may be pushed in funny places. Clear the */ - /* space. */ - GC_printf0(""); - } -# endif /* CONDPRINT */ - - /* Check all debugged objects for consistency */ - if (GC_debugging_started) { - (*GC_check_heap)(); - } - - START_WORLD(); -# ifdef PRINTTIMES - GET_TIME(current_time); - GC_printf1("World-stopped marking took %lu msecs\n", - MS_TIME_DIFF(current_time,start_time)); -# else -# ifdef CONDPRINT - if (GC_print_stats) { - GET_TIME(current_time); - GC_printf1("World-stopped marking took %lu msecs\n", - MS_TIME_DIFF(current_time,start_time)); - } -# endif -# endif - return(TRUE); -} - -/* Set all mark bits for the free list whose first entry is q */ -#ifdef __STDC__ - void GC_set_fl_marks(ptr_t q) -#else - void GC_set_fl_marks(q) - ptr_t q; -#endif -{ - ptr_t p; - struct hblk * h, * last_h = 0; - hdr *hhdr; - int word_no; - - for (p = q; p != 0; p = obj_link(p)){ - h = HBLKPTR(p); - if (h != last_h) { - last_h = h; - hhdr = HDR(h); - } - word_no = (((word *)p) - ((word *)h)); - set_mark_bit_from_hdr(hhdr, word_no); - } -} - -/* Clear all mark bits for the free list whose first entry is q */ -/* Decrement GC_mem_found by number of words on free list. */ -#ifdef __STDC__ - void GC_clear_fl_marks(ptr_t q) -#else - void GC_clear_fl_marks(q) - ptr_t q; -#endif -{ - ptr_t p; - struct hblk * h, * last_h = 0; - hdr *hhdr; - int word_no; - - for (p = q; p != 0; p = obj_link(p)){ - h = HBLKPTR(p); - if (h != last_h) { - last_h = h; - hhdr = HDR(h); - } - word_no = (((word *)p) - ((word *)h)); - clear_mark_bit_from_hdr(hhdr, word_no); -# ifdef GATHERSTATS - GC_mem_found -= hhdr -> hb_sz; -# endif - } -} - -/* Finish up a collection. Assumes lock is held, signals are disabled, */ -/* but the world is otherwise running. */ -void GC_finish_collection() -{ -# ifdef PRINTTIMES - CLOCK_TYPE start_time; - CLOCK_TYPE finalize_time; - CLOCK_TYPE done_time; - - GET_TIME(start_time); - finalize_time = start_time; -# endif - -# ifdef GATHERSTATS - GC_mem_found = 0; -# endif -# if defined(LINUX) && defined(__ELF__) && !defined(SMALL_CONFIG) - if (getenv("GC_PRINT_ADDRESS_MAP") != 0) { - GC_print_address_map(); - } -# endif - if (GC_find_leak) { - /* Mark all objects on the free list. All objects should be */ - /* marked when we're done. */ - { - register word size; /* current object size */ - int kind; - ptr_t q; - - for (kind = 0; kind < GC_n_kinds; kind++) { - for (size = 1; size <= MAXOBJSZ; size++) { - q = GC_obj_kinds[kind].ok_freelist[size]; - if (q != 0) GC_set_fl_marks(q); - } - } - } - GC_start_reclaim(TRUE); - /* The above just checks; it doesn't really reclaim anything. */ - } - - GC_finalize(); -# ifdef STUBBORN_ALLOC - GC_clean_changing_list(); -# endif - -# ifdef PRINTTIMES - GET_TIME(finalize_time); -# endif - - if (GC_print_back_height) { -# ifdef MAKE_BACK_GRAPH - GC_traverse_back_graph(); -# else -# ifndef SMALL_CONFIG - GC_err_printf0("Back height not available: " - "Rebuild collector with -DMAKE_BACK_GRAPH\n"); -# endif -# endif - } - - /* Clear free list mark bits, in case they got accidentally marked */ - /* (or GC_find_leak is set and they were intentionally marked). */ - /* Also subtract memory remaining from GC_mem_found count. */ - /* Note that composite objects on free list are cleared. */ - /* Thus accidentally marking a free list is not a problem; only */ - /* objects on the list itself will be marked, and that's fixed here. */ - { - register word size; /* current object size */ - register ptr_t q; /* pointer to current object */ - int kind; - - for (kind = 0; kind < GC_n_kinds; kind++) { - for (size = 1; size <= MAXOBJSZ; size++) { - q = GC_obj_kinds[kind].ok_freelist[size]; - if (q != 0) GC_clear_fl_marks(q); - } - } - } - - -# ifdef PRINTSTATS - GC_printf1("Bytes recovered before sweep - f.l. count = %ld\n", - (long)WORDS_TO_BYTES(GC_mem_found)); -# endif - /* Reconstruct free lists to contain everything not marked */ - GC_start_reclaim(FALSE); - if (GC_is_full_gc) { - GC_used_heap_size_after_full = USED_HEAP_SIZE; - GC_need_full_gc = FALSE; - } else { - GC_need_full_gc = - BYTES_TO_WORDS(USED_HEAP_SIZE - GC_used_heap_size_after_full) - > min_words_allocd(); - } - -# ifdef PRINTSTATS - GC_printf2( - "Immediately reclaimed %ld bytes in heap of size %lu bytes", - (long)WORDS_TO_BYTES(GC_mem_found), - (unsigned long)GC_heapsize); -# ifdef USE_MUNMAP - GC_printf1("(%lu unmapped)", GC_unmapped_bytes); -# endif - GC_printf2( - "\n%lu (atomic) + %lu (composite) collectable bytes in use\n", - (unsigned long)WORDS_TO_BYTES(GC_atomic_in_use), - (unsigned long)WORDS_TO_BYTES(GC_composite_in_use)); -# endif - - GC_n_attempts = 0; - GC_is_full_gc = FALSE; - /* Reset or increment counters for next cycle */ - GC_words_allocd_before_gc += GC_words_allocd; - GC_non_gc_bytes_at_gc = GC_non_gc_bytes; - GC_words_allocd = 0; - GC_words_wasted = 0; - GC_mem_freed = 0; - GC_finalizer_mem_freed = 0; - -# ifdef USE_MUNMAP - GC_unmap_old(); -# endif -# ifdef PRINTTIMES - GET_TIME(done_time); - GC_printf2("Finalize + initiate sweep took %lu + %lu msecs\n", - MS_TIME_DIFF(finalize_time,start_time), - MS_TIME_DIFF(done_time,finalize_time)); -# endif -} - -/* Externally callable routine to invoke full, stop-world collection */ -# if defined(__STDC__) || defined(__cplusplus) - int GC_try_to_collect(GC_stop_func stop_func) -# else - int GC_try_to_collect(stop_func) - GC_stop_func stop_func; -# endif -{ - int result; - DCL_LOCK_STATE; - - if (GC_debugging_started) GC_print_all_smashed(); - GC_INVOKE_FINALIZERS(); - DISABLE_SIGNALS(); - LOCK(); - ENTER_GC(); - if (!GC_is_initialized) GC_init_inner(); - /* Minimize junk left in my registers */ - GC_noop(0,0,0,0,0,0); - result = (int)GC_try_to_collect_inner(stop_func); - EXIT_GC(); - UNLOCK(); - ENABLE_SIGNALS(); - if(result) { - if (GC_debugging_started) GC_print_all_smashed(); - GC_INVOKE_FINALIZERS(); - } - return(result); -} - -void GC_gcollect GC_PROTO(()) -{ - GC_notify_full_gc(); - (void)GC_try_to_collect(GC_never_stop_func); -} - -word GC_n_heap_sects = 0; /* Number of sections currently in heap. */ - -/* - * Use the chunk of memory starting at p of size bytes as part of the heap. - * Assumes p is HBLKSIZE aligned, and bytes is a multiple of HBLKSIZE. - */ -void GC_add_to_heap(p, bytes) -struct hblk *p; -word bytes; -{ - word words; - hdr * phdr; - - if (GC_n_heap_sects >= MAX_HEAP_SECTS) { - ABORT("Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS"); - } - phdr = GC_install_header(p); - if (0 == phdr) { - /* This is extremely unlikely. Can't add it. This will */ - /* almost certainly result in a 0 return from the allocator, */ - /* which is entirely appropriate. */ - return; - } - GC_heap_sects[GC_n_heap_sects].hs_start = (ptr_t)p; - GC_heap_sects[GC_n_heap_sects].hs_bytes = bytes; - GC_n_heap_sects++; - words = BYTES_TO_WORDS(bytes); - phdr -> hb_sz = words; - phdr -> hb_map = (unsigned char *)1; /* A value != GC_invalid_map */ - phdr -> hb_flags = 0; - GC_freehblk(p); - GC_heapsize += bytes; - if ((ptr_t)p <= (ptr_t)GC_least_plausible_heap_addr - || GC_least_plausible_heap_addr == 0) { - GC_least_plausible_heap_addr = (GC_PTR)((ptr_t)p - sizeof(word)); - /* Making it a little smaller than necessary prevents */ - /* us from getting a false hit from the variable */ - /* itself. There's some unintentional reflection */ - /* here. */ - } - if ((ptr_t)p + bytes >= (ptr_t)GC_greatest_plausible_heap_addr) { - GC_greatest_plausible_heap_addr = (GC_PTR)((ptr_t)p + bytes); - } -} - -# if !defined(NO_DEBUGGING) -void GC_print_heap_sects() -{ - register unsigned i; - - GC_printf1("Total heap size: %lu\n", (unsigned long) GC_heapsize); - for (i = 0; i < GC_n_heap_sects; i++) { - unsigned long start = (unsigned long) GC_heap_sects[i].hs_start; - unsigned long len = (unsigned long) GC_heap_sects[i].hs_bytes; - struct hblk *h; - unsigned nbl = 0; - - GC_printf3("Section %ld from 0x%lx to 0x%lx ", (unsigned long)i, - start, (unsigned long)(start + len)); - for (h = (struct hblk *)start; h < (struct hblk *)(start + len); h++) { - if (GC_is_black_listed(h, HBLKSIZE)) nbl++; - } - GC_printf2("%lu/%lu blacklisted\n", (unsigned long)nbl, - (unsigned long)(len/HBLKSIZE)); - } -} -# endif - -GC_PTR GC_least_plausible_heap_addr = (GC_PTR)ONES; -GC_PTR GC_greatest_plausible_heap_addr = 0; - -ptr_t GC_max(x,y) -ptr_t x, y; -{ - return(x > y? x : y); -} - -ptr_t GC_min(x,y) -ptr_t x, y; -{ - return(x < y? x : y); -} - -# if defined(__STDC__) || defined(__cplusplus) - void GC_set_max_heap_size(GC_word n) -# else - void GC_set_max_heap_size(n) - GC_word n; -# endif -{ - GC_max_heapsize = n; -} - -GC_word GC_max_retries = 0; - -/* - * this explicitly increases the size of the heap. It is used - * internally, but may also be invoked from GC_expand_hp by the user. - * The argument is in units of HBLKSIZE. - * Tiny values of n are rounded up. - * Returns FALSE on failure. - */ -GC_bool GC_expand_hp_inner(n) -word n; -{ - word bytes; - struct hblk * space; - word expansion_slop; /* Number of bytes by which we expect the */ - /* heap to expand soon. */ - - if (n < MINHINCR) n = MINHINCR; - bytes = n * HBLKSIZE; - /* Make sure bytes is a multiple of GC_page_size */ - { - word mask = GC_page_size - 1; - bytes += mask; - bytes &= ~mask; - } - - if (GC_max_heapsize != 0 && GC_heapsize + bytes > GC_max_heapsize) { - /* Exceeded self-imposed limit */ - return(FALSE); - } - space = GET_MEM(bytes); - if( space == 0 ) { -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf1("Failed to expand heap by %ld bytes\n", - (unsigned long)bytes); - } -# endif - return(FALSE); - } -# ifdef CONDPRINT - if (GC_print_stats) { - GC_printf2("Increasing heap size by %lu after %lu allocated bytes\n", - (unsigned long)bytes, - (unsigned long)WORDS_TO_BYTES(GC_words_allocd)); -# ifdef UNDEFINED - GC_printf1("Root size = %lu\n", GC_root_size); - GC_print_block_list(); GC_print_hblkfreelist(); - GC_printf0("\n"); -# endif - } -# endif - expansion_slop = 8 * WORDS_TO_BYTES(min_words_allocd()); - if (5 * HBLKSIZE * MAXHINCR > expansion_slop) { - expansion_slop = 5 * HBLKSIZE * MAXHINCR; - } - if (GC_last_heap_addr == 0 && !((word)space & SIGNB) - || GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) { - /* Assume the heap is growing up */ - GC_greatest_plausible_heap_addr = - GC_max(GC_greatest_plausible_heap_addr, - (ptr_t)space + bytes + expansion_slop); - } else { - /* Heap is growing down */ - GC_least_plausible_heap_addr = - GC_min(GC_least_plausible_heap_addr, - (ptr_t)space - expansion_slop); - } - GC_prev_heap_addr = GC_last_heap_addr; - GC_last_heap_addr = (ptr_t)space; - GC_add_to_heap(space, bytes); - return(TRUE); -} - -/* Really returns a bool, but it's externally visible, so that's clumsy. */ -/* Arguments is in bytes. */ -# if defined(__STDC__) || defined(__cplusplus) - int GC_expand_hp(size_t bytes) -# else - int GC_expand_hp(bytes) - size_t bytes; -# endif -{ - int result; - DCL_LOCK_STATE; - - DISABLE_SIGNALS(); - LOCK(); - if (!GC_is_initialized) GC_init_inner(); - result = (int)GC_expand_hp_inner(divHBLKSZ((word)bytes)); - if (result) GC_requested_heapsize += bytes; - UNLOCK(); - ENABLE_SIGNALS(); - return(result); -} - -unsigned GC_fail_count = 0; - /* How many consecutive GC/expansion failures? */ - /* Reset by GC_allochblk. */ - -GC_bool GC_collect_or_expand(needed_blocks, ignore_off_page) -word needed_blocks; -GC_bool ignore_off_page; -{ - if (!GC_incremental && !GC_dont_gc && - (GC_dont_expand && GC_words_allocd > 0 || GC_should_collect())) { - GC_notify_full_gc(); - GC_gcollect_inner(); - } else { - word blocks_to_get = GC_heapsize/(HBLKSIZE*GC_free_space_divisor) - + needed_blocks; - - if (blocks_to_get > MAXHINCR) { - word slop; - - if (ignore_off_page) { - slop = 4; - } else { - slop = 2*divHBLKSZ(BL_LIMIT); - if (slop > needed_blocks) slop = needed_blocks; - } - if (needed_blocks + slop > MAXHINCR) { - blocks_to_get = needed_blocks + slop; - } else { - blocks_to_get = MAXHINCR; - } - } - if (!GC_expand_hp_inner(blocks_to_get) - && !GC_expand_hp_inner(needed_blocks)) { - if (GC_fail_count++ < GC_max_retries) { - WARN("Out of Memory! Trying to continue ...\n", 0); - GC_notify_full_gc(); - GC_gcollect_inner(); - } else { -# if !defined(AMIGA) || !defined(GC_AMIGA_FASTALLOC) - WARN("Out of Memory! Returning NIL!\n", 0); -# endif - return(FALSE); - } - } else { -# ifdef CONDPRINT - if (GC_fail_count && GC_print_stats) { - GC_printf0("Memory available again ...\n"); - } -# endif - } - } - return(TRUE); -} - -/* - * Make sure the object free list for sz is not empty. - * Return a pointer to the first object on the free list. - * The object MUST BE REMOVED FROM THE FREE LIST BY THE CALLER. - * Assumes we hold the allocator lock and signals are disabled. - * - */ -ptr_t GC_allocobj(sz, kind) -word sz; -int kind; -{ - ptr_t * flh = &(GC_obj_kinds[kind].ok_freelist[sz]); - GC_bool tried_minor = FALSE; - - if (sz == 0) return(0); - - while (*flh == 0) { - ENTER_GC(); - /* Do our share of marking work */ - if(TRUE_INCREMENTAL && !GC_dont_gc) GC_collect_a_little_inner(1); - /* Sweep blocks for objects of this size */ - GC_continue_reclaim(sz, kind); - EXIT_GC(); - if (*flh == 0) { - GC_new_hblk(sz, kind); - } - if (*flh == 0) { - ENTER_GC(); - if (GC_incremental && GC_time_limit == GC_TIME_UNLIMITED - && ! tried_minor ) { - GC_collect_a_little_inner(1); - tried_minor = TRUE; - } else { - if (!GC_collect_or_expand((word)1,FALSE)) { - EXIT_GC(); - return(0); - } - } - EXIT_GC(); - } - } - - return(*flh); -} diff --git a/gc/alpha_mach_dep.S b/gc/alpha_mach_dep.S @@ -1,87 +0,0 @@ - # $Id$ - .arch ev6 - - .text - .align 4 - .globl GC_push_regs - .ent GC_push_regs 2 -GC_push_regs: - ldgp $gp, 0($27) - lda $sp, -16($sp) - stq $26, 0($sp) - .mask 0x04000000, 0 - .frame $sp, 16, $26, 0 - - # $0 integer result - # $1-$8 temp regs - not preserved cross calls - # $9-$15 call saved regs - # $16-$21 argument regs - not preserved cross calls - # $22-$28 temp regs - not preserved cross calls - # $29 global pointer - not preserved cross calls - # $30 stack pointer - -# define call_push(x) \ - mov x, $16; \ - jsr $26, GC_push_one; \ - ldgp $gp, 0($26) - - call_push($9) - call_push($10) - call_push($11) - call_push($12) - call_push($13) - call_push($14) - call_push($15) - - # $f0-$f1 floating point results - # $f2-$f9 call saved regs - # $f10-$f30 temp regs - not preserved cross calls - - # Use the most efficient transfer method for this hardware. - # Bit 1 detects the FIX extension, which includes ftoit. - amask 2, $0 - bne $0, $use_stack - -#undef call_push -#define call_push(x) \ - ftoit x, $16; \ - jsr $26, GC_push_one; \ - ldgp $gp, 0($26) - - call_push($f2) - call_push($f3) - call_push($f4) - call_push($f5) - call_push($f6) - call_push($f7) - call_push($f8) - call_push($f9) - - ldq $26, 0($sp) - lda $sp, 16($sp) - ret $31, ($26), 1 - - .align 4 -$use_stack: - -#undef call_push -#define call_push(x) \ - stt x, 8($sp); \ - ldq $16, 8($sp); \ - jsr $26, GC_push_one; \ - ldgp $gp, 0($26) - - call_push($f2) - call_push($f3) - call_push($f4) - call_push($f5) - call_push($f6) - call_push($f7) - call_push($f8) - call_push($f9) - - ldq $26, 0($sp) - lda $sp, 16($sp) - ret $31, ($26), 1 - - .end GC_push_regs diff --git a/gc/backgraph.c b/gc/backgraph.c @@ -1,447 +0,0 @@ -/* - * Copyright (c) 2001 by Hewlett-Packard Company. All rights reserved. - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - * - */ - -/* - * This implements a full, though not well-tuned, representation of the - * backwards points-to graph. This is used to test for non-GC-robust - * data structures; the code is not used during normal garbage collection. - * - * One restriction is that we drop all back-edges from nodes with very - * high in-degree, and simply add them add them to a list of such - * nodes. They are then treated as permanent roots. Id this by itself - * doesn't introduce a space leak, then such nodes can't contribute to - * a growing space leak. - */ - -#ifdef MAKE_BACK_GRAPH - -#define MAX_IN 10 /* Maximum in-degree we handle directly */ - -#include "private/dbg_mlc.h" -#include <unistd.h> - -#if !defined(DBG_HDRS_ALL) || (ALIGNMENT != CPP_WORDSZ/8) || !defined(UNIX_LIKE) -# error Configuration doesnt support MAKE_BACK_GRAPH -#endif - -/* We store single back pointers directly in the object's oh_bg_ptr field. */ -/* If there is more than one ptr to an object, we store q | FLAG_MANY, */ -/* where q is a pointer to a back_edges object. */ -/* Every once in a while we use a back_edges object even for a single */ -/* pointer, since we need the other fields in the back_edges structure to */ -/* be present in some fraction of the objects. Otherwise we get serious */ -/* performance issues. */ -#define FLAG_MANY 2 - -typedef struct back_edges_struct { - word n_edges; /* Number of edges, including those in continuation */ - /* structures. */ - unsigned short flags; -# define RETAIN 1 /* Directly points to a reachable object; */ - /* retain for next GC. */ - unsigned short height_gc_no; - /* If height > 0, then the GC_gc_no value when it */ - /* was computed. If it was computed this cycle, then */ - /* it is current. If it was computed during the */ - /* last cycle, then it represents the old height, */ - /* which is only saved for live objects referenced by */ - /* dead ones. This may grow due to refs from newly */ - /* dead objects. */ - signed_word height; - /* Longest path through unreachable nodes to this node */ - /* that we found using depth first search. */ - -# define HEIGHT_UNKNOWN ((signed_word)(-2)) -# define HEIGHT_IN_PROGRESS ((signed_word)(-1)) - ptr_t edges[MAX_IN]; - struct back_edges_struct *cont; - /* Pointer to continuation structure; we use only the */ - /* edges field in the continuation. */ - /* also used as free list link. */ -} back_edges; - -/* Allocate a new back edge structure. Should be more sophisticated */ -/* if this were production code. */ -#define MAX_BACK_EDGE_STRUCTS 100000 -static back_edges *back_edge_space = 0; -int GC_n_back_edge_structs = 0; /* Serves as pointer to never used */ - /* back_edges space. */ -static back_edges *avail_back_edges = 0; - /* Pointer to free list of deallocated */ - /* back_edges structures. */ - -static back_edges * new_back_edges(void) -{ - if (0 == back_edge_space) { - back_edge_space = (back_edges *) - sbrk(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges)); - } - if (0 != avail_back_edges) { - back_edges * result = avail_back_edges; - avail_back_edges = result -> cont; - result -> cont = 0; - return result; - } - if (GC_n_back_edge_structs >= MAX_BACK_EDGE_STRUCTS - 1) { - ABORT("needed too much space for back edges: adjust " - "MAX_BACK_EDGE_STRUCTS"); - } - return back_edge_space + (GC_n_back_edge_structs++); -} - -/* Deallocate p and its associated continuation structures. */ -static void deallocate_back_edges(back_edges *p) -{ - back_edges *last = p; - - while (0 != last -> cont) last = last -> cont; - last -> cont = avail_back_edges; - avail_back_edges = p; -} - -/* Table of objects that are currently on the depth-first search */ -/* stack. Only objects with in-degree one are in this table. */ -/* Other objects are identified using HEIGHT_IN_PROGRESS. */ -/* This data structure NEEDS IMPROVEMENT. */ -#define MAX_IN_PROGRESS 10000 -static ptr_t * in_progress_space = 0; -static int n_in_progress = 0; - -static void push_in_progress(ptr_t p) -{ - if (in_progress_space == 0) - in_progress_space = sbrk(MAX_IN_PROGRESS * sizeof(ptr_t)); - if (n_in_progress == MAX_IN_PROGRESS) - ABORT("Exceeded MAX_IN_PROGRESS"); - in_progress_space[n_in_progress++] = p; -} - -static GC_bool is_in_progress(ptr_t p) -{ - int i; - for (i = 0; i < n_in_progress; ++i) { - if (in_progress_space[i] == p) return TRUE; - } - return FALSE; -} - -static void pop_in_progress(ptr_t p) -{ - --n_in_progress; - GC_ASSERT(in_progress_space[n_in_progress] == p); -} - -#define GET_OH_BG_PTR(p) \ - (ptr_t)REVEAL_POINTER(((oh *)(p)) -> oh_bg_ptr) -#define SET_OH_BG_PTR(p,q) (((oh *)(p)) -> oh_bg_ptr) = HIDE_POINTER(q) - -/* Execute s once for each predecessor q of p in the points-to graph. */ -/* s should be a bracketed statement. We declare q. */ -#define FOR_EACH_PRED(q, p, s) \ - { \ - ptr_t q = GET_OH_BG_PTR(p); \ - if (!((word)q & FLAG_MANY)) { \ - if (q && !((word)q & 1)) s \ - /* !((word)q & 1) checks for a misnterpreted freelist link */ \ - } else { \ - back_edges *orig_be_ = (back_edges *)((word)q & ~FLAG_MANY); \ - back_edges *be_ = orig_be_; \ - int total_, local_; \ - int n_edges_ = be_ -> n_edges; \ - for (total_ = 0, local_ = 0; total_ < n_edges_; ++local_, ++total_) { \ - if (local_ == MAX_IN) { \ - be_ = be_ -> cont; \ - local_ = 0; \ - } \ - q = be_ -> edges[local_]; s \ - } \ - } \ - } - -/* Ensure that p has a back_edges structure associated with it. */ -static void ensure_struct(ptr_t p) -{ - ptr_t old_back_ptr = GET_OH_BG_PTR(p); - - if (!((word)old_back_ptr & FLAG_MANY)) { - back_edges *be = new_back_edges(); - be -> flags = 0; - if (0 == old_back_ptr) { - be -> n_edges = 0; - } else { - be -> n_edges = 1; - be -> edges[0] = old_back_ptr; - } - be -> height = HEIGHT_UNKNOWN; - be -> height_gc_no = GC_gc_no - 1; - GC_ASSERT(be >= back_edge_space); - SET_OH_BG_PTR(p, (word)be | FLAG_MANY); - } -} - -/* Add the (forward) edge from p to q to the backward graph. Both p */ -/* q are pointers to the object base, i.e. pointers to an oh. */ -static void add_edge(ptr_t p, ptr_t q) -{ - ptr_t old_back_ptr = GET_OH_BG_PTR(q); - back_edges * be, *be_cont; - word i; - static unsigned random_number = 13; -# define GOT_LUCKY_NUMBER (((++random_number) & 0x7f) == 0) - /* A not very random number we use to occasionally allocate a */ - /* back_edges structure even for a single backward edge. This */ - /* prevents us from repeatedly tracing back through very long */ - /* chains, since we will have some place to store height and */ - /* in_progress flags along the way. */ - - GC_ASSERT(p == GC_base(p) && q == GC_base(q)); - if (!GC_HAS_DEBUG_INFO(q) || !GC_HAS_DEBUG_INFO(p)) { - /* This is really a misinterpreted free list link, since we saw */ - /* a pointer to a free list. Dont overwrite it! */ - return; - } - if (0 == old_back_ptr) { - SET_OH_BG_PTR(q, p); - if (GOT_LUCKY_NUMBER) ensure_struct(q); - return; - } - /* Check whether it was already in the list of predecessors. */ - FOR_EACH_PRED(pred, q, { if (p == pred) return; }); - ensure_struct(q); - old_back_ptr = GET_OH_BG_PTR(q); - be = (back_edges *)((word)old_back_ptr & ~FLAG_MANY); - for (i = be -> n_edges, be_cont = be; i > MAX_IN; - be_cont = be_cont -> cont, i -= MAX_IN) {} - if (i == MAX_IN) { - be_cont -> cont = new_back_edges(); - be_cont = be_cont -> cont; - i = 0; - } - be_cont -> edges[i] = p; - be -> n_edges++; - if (be -> n_edges == 100) { -# if 0 - if (GC_print_stats) { - GC_err_printf0("The following object has in-degree >= 100:\n"); - GC_print_heap_obj(q); - } -# endif - } -} - -typedef void (*per_object_func)(ptr_t p, word n_words, word gc_descr); - -static void per_object_helper(struct hblk *h, word fn) -{ - hdr * hhdr = HDR(h); - word sz = hhdr -> hb_sz; - word descr = hhdr -> hb_descr; - per_object_func f = (per_object_func)fn; - int i = 0; - - do { - f((ptr_t)(h -> hb_body + i), sz, descr); - i += sz; - } while (i + sz <= BYTES_TO_WORDS(HBLKSIZE)); -} - -void GC_apply_to_each_object(per_object_func f) -{ - GC_apply_to_all_blocks(per_object_helper, (word)f); -} - -static void reset_back_edge(ptr_t p, word n_words, word gc_descr) -{ - /* Skip any free list links, or dropped blocks */ - if (GC_HAS_DEBUG_INFO(p)) { - ptr_t old_back_ptr = GET_OH_BG_PTR(p); - if ((word)old_back_ptr & FLAG_MANY) { - back_edges *be = (back_edges *)((word)old_back_ptr & ~FLAG_MANY); - if (!(be -> flags & RETAIN)) { - deallocate_back_edges(be); - SET_OH_BG_PTR(p, 0); - } else { - word *currentp; - - GC_ASSERT(GC_is_marked(p)); - - /* Back edges may point to objects that will not be retained. */ - /* Delete them for now, but remember the height. */ - /* Some will be added back at next GC. */ - be -> n_edges = 0; - if (0 != be -> cont) { - deallocate_back_edges(be -> cont); - be -> cont = 0; - } - - GC_ASSERT(GC_is_marked(p)); - - /* We only retain things for one GC cycle at a time. */ - be -> flags &= ~RETAIN; - } - } else /* Simple back pointer */ { - /* Clear to avoid dangling pointer. */ - SET_OH_BG_PTR(p, 0); - } - } -} - -static void add_back_edges(ptr_t p, word n_words, word gc_descr) -{ - word *currentp = (word *)(p + sizeof(oh)); - - /* For now, fix up non-length descriptors conservatively. */ - if((gc_descr & GC_DS_TAGS) != GC_DS_LENGTH) { - gc_descr = WORDS_TO_BYTES(n_words); - } - while (currentp < (word *)(p + gc_descr)) { - word current = *currentp++; - if (current >= (word)GC_least_plausible_heap_addr && - current <= (word)GC_greatest_plausible_heap_addr) { - ptr_t target = GC_base((GC_PTR)current); - if (0 != target) { - add_edge(p, target); - } - } - } -} - -/* Rebuild the reprentation of the backward reachability graph. */ -/* Does not examine mark bits. Can be called before GC. */ -void GC_build_back_graph(void) -{ - GC_apply_to_each_object(add_back_edges); -} - -/* Return an approximation to the length of the longest simple path */ -/* through unreachable objects to p. We refer to this as the height */ -/* of p. */ -static word backwards_height(ptr_t p) -{ - word result; - ptr_t back_ptr = GET_OH_BG_PTR(p); - back_edges *be; - - if (0 == back_ptr) return 1; - if (!((word)back_ptr & FLAG_MANY)) { - if (is_in_progress(p)) return 0; /* DFS back edge, i.e. we followed */ - /* an edge to an object already */ - /* on our stack: ignore */ - push_in_progress(p); - result = backwards_height(back_ptr)+1; - pop_in_progress(p); - return result; - } - be = (back_edges *)((word)back_ptr & ~FLAG_MANY); - if (be -> height >= 0 && be -> height_gc_no == GC_gc_no) - return be -> height; - /* Ignore back edges in DFS */ - if (be -> height == HEIGHT_IN_PROGRESS) return 0; - result = (be -> height > 0? be -> height : 1); - be -> height = HEIGHT_IN_PROGRESS; - FOR_EACH_PRED(q, p, { - word this_height; - if (GC_is_marked(q) && !(FLAG_MANY & (word)GET_OH_BG_PTR(p))) { - if (GC_print_stats) - GC_printf2("Found bogus pointer from 0x%lx to 0x%lx\n", q, p); - /* Reachable object "points to" unreachable one. */ - /* Could be caused by our lax treatment of GC descriptors. */ - this_height = 1; - } else { - this_height = backwards_height(q); - } - if (this_height >= result) result = this_height + 1; - }); - be -> height = result; - be -> height_gc_no = GC_gc_no; - return result; -} - -word GC_max_height; -ptr_t GC_deepest_obj; - -/* Compute the maximum height of every unreachable predecessor p of a */ -/* reachable object. Arrange to save the heights of all such objects p */ -/* so that they can be used in calculating the height of objects in the */ -/* next GC. */ -/* Set GC_max_height to be the maximum height we encounter, and */ -/* GC_deepest_obj to be the corresponding object. */ -static void update_max_height(ptr_t p, word n_words, word gc_descr) -{ - if (GC_is_marked(p) && GC_HAS_DEBUG_INFO(p)) { - int i; - word p_height = 0; - ptr_t p_deepest_obj = 0; - ptr_t back_ptr; - back_edges *be = 0; - - /* If we remembered a height last time, use it as a minimum. */ - /* It may have increased due to newly unreachable chains pointing */ - /* to p, but it can't have decreased. */ - back_ptr = GET_OH_BG_PTR(p); - if (0 != back_ptr && ((word)back_ptr & FLAG_MANY)) { - be = (back_edges *)((word)back_ptr & ~FLAG_MANY); - if (be -> height != HEIGHT_UNKNOWN) p_height = be -> height; - } - FOR_EACH_PRED(q, p, { - if (!GC_is_marked(q) && GC_HAS_DEBUG_INFO(q)) { - word q_height; - - q_height = backwards_height(q); - if (q_height > p_height) { - p_height = q_height; - p_deepest_obj = q; - } - } - }); - if (p_height > 0) { - /* Remember the height for next time. */ - if (be == 0) { - ensure_struct(p); - back_ptr = GET_OH_BG_PTR(p); - be = (back_edges *)((word)back_ptr & ~FLAG_MANY); - } - be -> flags |= RETAIN; - be -> height = p_height; - be -> height_gc_no = GC_gc_no; - } - if (p_height > GC_max_height) { - GC_max_height = p_height; - GC_deepest_obj = p_deepest_obj; - } - } -} - -void GC_traverse_back_graph(void) -{ - static word max_max_height = 0; - GC_max_height = 0; - GC_apply_to_each_object(update_max_height); - GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n", - (unsigned long) GC_gc_no, GC_max_height); - if (GC_max_height > max_max_height) { - max_max_height = GC_max_height; - GC_printf0("The following unreachable object is last in a longest chain " - "of unreachable objects:\n"); - GC_print_heap_obj(GC_deepest_obj); - } - if (GC_print_stats) { - GC_printf1("Needed max total of %ld back-edge structs\n", - GC_n_back_edge_structs); - } - GC_apply_to_each_object(reset_back_edge); - GC_deepest_obj = 0; -} - -#endif /* MAKE_BACK_GRAPH */ diff --git a/gc/blacklst.c b/gc/blacklst.c @@ -1,300 +0,0 @@ -/* - * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers - * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - */ -/* Boehm, August 9, 1995 6:09 pm PDT */ -# include "private/gc_priv.h" - -/* - * We maintain several hash tables of hblks that have had false hits. - * Each contains one bit per hash bucket; If any page in the bucket - * has had a false hit, we assume that all of them have. - * See the definition of page_hash_table in gc_private.h. - * False hits from the stack(s) are much more dangerous than false hits - * from elsewhere, since the former can pin a large object that spans the - * block, eventhough it does not start on the dangerous block. - */ - -/* - * Externally callable routines are: - - * GC_add_to_black_list_normal - * GC_add_to_black_list_stack - * GC_promote_black_lists - * GC_is_black_listed - * - * All require that the allocator lock is held. - */ - -/* Pointers to individual tables. We replace one table by another by */ -/* switching these pointers. */ -word * GC_old_normal_bl; - /* Nonstack false references seen at last full */ - /* collection. */ -word * GC_incomplete_normal_bl; - /* Nonstack false references seen since last */ - /* full collection. */ -word * GC_old_stack_bl; -word * GC_incomplete_stack_bl; - -word GC_total_stack_black_listed; - -word GC_black_list_spacing = MINHINCR*HBLKSIZE; /* Initial rough guess */ - -void GC_clear_bl(); - -# if defined(__STDC__) || defined(__cplusplus) - void GC_default_print_heap_obj_proc(ptr_t p) -# else - void GC_default_print_heap_obj_proc(p) - ptr_t p; -# endif -{ - ptr_t base = GC_base(p); - - GC_err_printf2("start: 0x%lx, appr. length: %ld", base, GC_size(base)); -} - -void (*GC_print_heap_obj) GC_PROTO((ptr_t p)) = - GC_default_print_heap_obj_proc; - -void GC_print_source_ptr(p) -ptr_t p; -{ - ptr_t base = GC_base(p); - if (0 == base) { - if (0 == p) { - GC_err_printf0("in register"); - } else { - GC_err_printf0("in root set"); - } - } else { - GC_err_printf0("in object at "); - (*GC_print_heap_obj)(base); - } -} - -void GC_bl_init() -{ - if (!GC_all_interior_pointers) { - GC_old_normal_bl = (word *) - GC_scratch_alloc((word)(sizeof (page_hash_table))); - GC_incomplete_normal_bl = (word *)GC_scratch_alloc - ((word)(sizeof(page_hash_table))); - if (GC_old_normal_bl == 0 || GC_incomplete_normal_bl == 0) { - GC_err_printf0("Insufficient memory for black list\n"); - EXIT(); - } - GC_clear_bl(GC_old_normal_bl); - GC_clear_bl(GC_incomplete_normal_bl); - } - GC_old_stack_bl = (word *)GC_scratch_alloc((word)(sizeof(page_hash_table))); - GC_incomplete_stack_bl = (word *)GC_scratch_alloc - ((word)(sizeof(page_hash_table))); - if (GC_old_stack_bl == 0 || GC_incomplete_stack_bl == 0) { - GC_err_printf0("Insufficient memory for black list\n"); - EXIT(); - } - GC_clear_bl(GC_old_stack_bl); - GC_clear_bl(GC_incomplete_stack_bl); -} - -void GC_clear_bl(doomed) -word *doomed; -{ - BZERO(doomed, sizeof(page_hash_table)); -} - -void GC_copy_bl(old, new) -word *new, *old; -{ - BCOPY(old, new, sizeof(page_hash_table)); -} - -static word total_stack_black_listed(); - -/* Signal the completion of a collection. Turn the incomplete black */ -/* lists into new black lists, etc. */ -void GC_promote_black_lists() -{ - word * very_old_normal_bl = GC_old_normal_bl; - word * very_old_stack_bl = GC_old_stack_bl; - - GC_old_normal_bl = GC_incomplete_normal_bl; - GC_old_stack_bl = GC_incomplete_stack_bl; - if (!GC_all_interior_pointers) { - GC_clear_bl(very_old_normal_bl); - } - GC_clear_bl(very_old_stack_bl); - GC_incomplete_normal_bl = very_old_normal_bl; - GC_incomplete_stack_bl = very_old_stack_bl; - GC_total_stack_black_listed = total_stack_black_listed(); -# ifdef PRINTSTATS - GC_printf1("%ld bytes in heap blacklisted for interior pointers\n", - (unsigned long)GC_total_stack_black_listed); -# endif - if (GC_total_stack_black_listed != 0) { - GC_black_list_spacing = - HBLKSIZE*(GC_heapsize/GC_total_stack_black_listed); - } - if (GC_black_list_spacing < 3 * HBLKSIZE) { - GC_black_list_spacing = 3 * HBLKSIZE; - } - if (GC_black_list_spacing > MAXHINCR * HBLKSIZE) { - GC_black_list_spacing = MAXHINCR * HBLKSIZE; - /* Makes it easier to allocate really huge blocks, which otherwise */ - /* may have problems with nonuniform blacklist distributions. */ - /* This way we should always succeed immediately after growing the */ - /* heap. */ - } -} - -void GC_unpromote_black_lists() -{ - if (!GC_all_interior_pointers) { - GC_copy_bl(GC_old_normal_bl, GC_incomplete_normal_bl); - } - GC_copy_bl(GC_old_stack_bl, GC_incomplete_stack_bl); -} - -/* P is not a valid pointer reference, but it falls inside */ -/* the plausible heap bounds. */ -/* Add it to the normal incomplete black list if appropriate. */ -#ifdef PRINT_BLACK_LIST - void GC_add_to_black_list_normal(p, source) - ptr_t source; -#else - void GC_add_to_black_list_normal(p) -#endif -word p; -{ - if (!(GC_modws_valid_offsets[p & (sizeof(word)-1)])) return; - { - register int index = PHT_HASH(p); - - if (HDR(p) == 0 || get_pht_entry_from_index(GC_old_normal_bl, index)) { -# ifdef PRINT_BLACK_LIST - if (!get_pht_entry_from_index(GC_incomplete_normal_bl, index)) { - GC_err_printf2( - "Black listing (normal) 0x%lx referenced from 0x%lx ", - (unsigned long) p, (unsigned long) source); - GC_print_source_ptr(source); - GC_err_puts("\n"); - } -# endif - set_pht_entry_from_index(GC_incomplete_normal_bl, index); - } /* else this is probably just an interior pointer to an allocated */ - /* object, and isn't worth black listing. */ - } -} - -/* And the same for false pointers from the stack. */ -#ifdef PRINT_BLACK_LIST - void GC_add_to_black_list_stack(p, source) - ptr_t source; -#else - void GC_add_to_black_list_stack(p) -#endif -word p; -{ - register int index = PHT_HASH(p); - - if (HDR(p) == 0 || get_pht_entry_from_index(GC_old_stack_bl, index)) { -# ifdef PRINT_BLACK_LIST - if (!get_pht_entry_from_index(GC_incomplete_stack_bl, index)) { - GC_err_printf2( - "Black listing (stack) 0x%lx referenced from 0x%lx ", - (unsigned long)p, (unsigned long)source); - GC_print_source_ptr(source); - GC_err_puts("\n"); - } -# endif - set_pht_entry_from_index(GC_incomplete_stack_bl, index); - } -} - -/* - * Is the block starting at h of size len bytes black listed? If so, - * return the address of the next plausible r such that (r, len) might not - * be black listed. (R may not actually be in the heap. We guarantee only - * that every smaller value of r after h is also black listed.) - * If (h,len) is not black listed, return 0. - * Knows about the structure of the black list hash tables. - */ -struct hblk * GC_is_black_listed(h, len) -struct hblk * h; -word len; -{ - register int index = PHT_HASH((word)h); - register word i; - word nblocks = divHBLKSZ(len); - - if (!GC_all_interior_pointers) { - if (get_pht_entry_from_index(GC_old_normal_bl, index) - || get_pht_entry_from_index(GC_incomplete_normal_bl, index)) { - return(h+1); - } - } - - for (i = 0; ; ) { - if (GC_old_stack_bl[divWORDSZ(index)] == 0 - && GC_incomplete_stack_bl[divWORDSZ(index)] == 0) { - /* An easy case */ - i += WORDSZ - modWORDSZ(index); - } else { - if (get_pht_entry_from_index(GC_old_stack_bl, index) - || get_pht_entry_from_index(GC_incomplete_stack_bl, index)) { - return(h+i+1); - } - i++; - } - if (i >= nblocks) break; - index = PHT_HASH((word)(h+i)); - } - return(0); -} - - -/* Return the number of blacklisted blocks in a given range. */ -/* Used only for statistical purposes. */ -/* Looks only at the GC_incomplete_stack_bl. */ -word GC_number_stack_black_listed(start, endp1) -struct hblk *start, *endp1; -{ - register struct hblk * h; - word result = 0; - - for (h = start; h < endp1; h++) { - register int index = PHT_HASH((word)h); - - if (get_pht_entry_from_index(GC_old_stack_bl, index)) result++; - } - return(result); -} - - -/* Return the total number of (stack) black-listed bytes. */ -static word total_stack_black_listed() -{ - register unsigned i; - word total = 0; - - for (i = 0; i < GC_n_heap_sects; i++) { - struct hblk * start = (struct hblk *) GC_heap_sects[i].hs_start; - word len = (word) GC_heap_sects[i].hs_bytes; - struct hblk * endp1 = start + len/HBLKSIZE; - - total += GC_number_stack_black_listed(start, endp1); - } - return(total * HBLKSIZE); -} - diff --git a/gc/callprocs b/gc/callprocs @@ -1,4 +0,0 @@ -#!/bin/sh -GC_DEBUG=1 -export GC_DEBUG -$* 2>&1 | awk '{print "0x3e=c\""$0"\""};/^\t##PC##=/ {if ($2 != 0) {print $2"?i"}}' | adb $1 | sed "s/^ >/>/" diff --git a/gc/checksums.c b/gc/checksums.c @@ -1,201 +0,0 @@ -/* - * Copyright (c) 1992-1994 by Xerox Corporation. All rights reserved. - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - */ -/* Boehm, March 29, 1995 12:51 pm PST */ -# ifdef CHECKSUMS - -# include "gc_priv.h" - -/* This is debugging code intended to verify the results of dirty bit */ -/* computations. Works only in a single threaded environment. */ -/* We assume that stubborn objects are changed only when they are */ -/* enabled for writing. (Certain kinds of writing are actually */ -/* safe under other conditions.) */ -# define NSUMS 2000 - -# define OFFSET 0x10000 - -typedef struct { - GC_bool new_valid; - word old_sum; - word new_sum; - struct hblk * block; /* Block to which this refers + OFFSET */ - /* to hide it from colector. */ -} page_entry; - -page_entry GC_sums [NSUMS]; - -word GC_checksum(h) -struct hblk *h; -{ - register word *p = (word *)h; - register word *lim = (word *)(h+1); - register word result = 0; - - while (p < lim) { - result += *p++; - } - return(result | 0x80000000 /* doesn't look like pointer */); -} - -# ifdef STUBBORN_ALLOC -/* Check whether a stubborn object from the given block appears on */ -/* the appropriate free list. */ -GC_bool GC_on_free_list(h) -struct hblk *h; -{ - register hdr * hhdr = HDR(h); - register int sz = hhdr -> hb_sz; - ptr_t p; - - if (sz > MAXOBJSZ) return(FALSE); - for (p = GC_sobjfreelist[sz]; p != 0; p = obj_link(p)) { - if (HBLKPTR(p) == h) return(TRUE); - } - return(FALSE); -} -# endif - -int GC_n_dirty_errors; -int GC_n_changed_errors; -int GC_n_clean; -int GC_n_dirty; - -void GC_update_check_page(h, index) -struct hblk *h; -int index; -{ - page_entry *pe = GC_sums + index; - register hdr * hhdr = HDR(h); - - if (pe -> block != 0 && pe -> block != h + OFFSET) ABORT("goofed"); - pe -> old_sum = pe -> new_sum; - pe -> new_sum = GC_checksum(h); -# if !defined(MSWIN32) && !defined(MSWINCE) - if (pe -> new_sum != 0 && !GC_page_was_ever_dirty(h)) { - GC_printf1("GC_page_was_ever_dirty(0x%lx) is wrong\n", - (unsigned long)h); - } -# endif - if (GC_page_was_dirty(h)) { - GC_n_dirty++; - } else { - GC_n_clean++; - } - if (pe -> new_valid && pe -> old_sum != pe -> new_sum) { - if (!GC_page_was_dirty(h) || !GC_page_was_ever_dirty(h)) { - /* Set breakpoint here */GC_n_dirty_errors++; - } -# ifdef STUBBORN_ALLOC - if (!IS_FORWARDING_ADDR_OR_NIL(hhdr) - && hhdr -> hb_map != GC_invalid_map - && hhdr -> hb_obj_kind == STUBBORN - && !GC_page_was_changed(h) - && !GC_on_free_list(h)) { - /* if GC_on_free_list(h) then reclaim may have touched it */ - /* without any allocations taking place. */ - /* Set breakpoint here */GC_n_changed_errors++; - } -# endif - } - pe -> new_valid = TRUE; - pe -> block = h + OFFSET; -} - -word GC_bytes_in_used_blocks; - -void GC_add_block(h, dummy) -struct hblk *h; -word dummy; -{ - register hdr * hhdr = HDR(h); - register bytes = WORDS_TO_BYTES(hhdr -> hb_sz); - - bytes += HDR_BYTES + HBLKSIZE-1; - bytes &= ~(HBLKSIZE-1); - GC_bytes_in_used_blocks += bytes; -} - -void GC_check_blocks() -{ - word bytes_in_free_blocks = 0; - struct hblk * h = GC_hblkfreelist; - hdr * hhdr = HDR(h); - word sz; - - GC_bytes_in_used_blocks = 0; - GC_apply_to_all_blocks(GC_add_block, (word)0); - while (h != 0) { - sz = hhdr -> hb_sz; - bytes_in_free_blocks += sz; - h = hhdr -> hb_next; - hhdr = HDR(h); - } - GC_printf2("GC_bytes_in_used_blocks = %ld, bytes_in_free_blocks = %ld ", - GC_bytes_in_used_blocks, bytes_in_free_blocks); - GC_printf1("GC_heapsize = %ld\n", GC_heapsize); - if (GC_bytes_in_used_blocks + bytes_in_free_blocks != GC_heapsize) { - GC_printf0("LOST SOME BLOCKS!!\n"); - } -} - -/* Should be called immediately after GC_read_dirty and GC_read_changed. */ -void GC_check_dirty() -{ - register int index; - register unsigned i; - register struct hblk *h; - register ptr_t start; - - GC_check_blocks(); - - GC_n_dirty_errors = 0; - GC_n_changed_errors = 0; - GC_n_clean = 0; - GC_n_dirty = 0; - - index = 0; - for (i = 0; i < GC_n_heap_sects; i++) { - start = GC_heap_sects[i].hs_start; - for (h = (struct hblk *)start; - h < (struct hblk *)(start + GC_heap_sects[i].hs_bytes); - h++) { - GC_update_check_page(h, index); - index++; - if (index >= NSUMS) goto out; - } - } -out: - GC_printf2("Checked %lu clean and %lu dirty pages\n", - (unsigned long) GC_n_clean, (unsigned long) GC_n_dirty); - if (GC_n_dirty_errors > 0) { - GC_printf1("Found %lu dirty bit errors\n", - (unsigned long)GC_n_dirty_errors); - } - if (GC_n_changed_errors > 0) { - GC_printf1("Found %lu changed bit errors\n", - (unsigned long)GC_n_changed_errors); - GC_printf0("These may be benign (provoked by nonpointer changes)\n"); -# ifdef THREADS - GC_printf0( - "Also expect 1 per thread currently allocating a stubborn obj.\n"); -# endif - } -} - -# else - -extern int GC_quiet; - /* ANSI C doesn't allow translation units to be empty. */ - /* So we guarantee this one is nonempty. */ - -# endif /* CHECKSUMS */ diff --git a/gc/config.guess b/gc/config.guess @@ -1,1321 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002 Free Software Foundation, Inc. - -timestamp='2002-03-20' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Per Bothner <per@bothner.com>. -# Please send patches to <config-patches@gnu.org>. Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to <config-patches@gnu.org>." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c ; - for c in cc gcc c89 c99 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; - if test $? = 0 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - rm -f $dummy.c $dummy.o $dummy.rel ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mipseb-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - cat <<EOF >$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - eval $set_cc_for_build - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 2-1307) - UNAME_MACHINE="alphaev68" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include <stdio.h> /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <sys/systemcfg.h> - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2