diff options
Diffstat (limited to '')
-rw-r--r-- | gc/Makefile | 372 | ||||
-rw-r--r-- | gc/Makefile.am | 158 | ||||
-rw-r--r-- | gc/Makefile.direct | 597 | ||||
-rw-r--r-- | gc/Makefile.dj | 208 | ||||
-rw-r--r-- | gc/Makefile.in | 518 |
5 files changed, 1635 insertions, 218 deletions
diff --git a/gc/Makefile b/gc/Makefile index cfbfc45..a5d24c6 100644 --- a/gc/Makefile +++ b/gc/Makefile @@ -1,52 +1,77 @@ +# This is the original manually generated Makefile. It may still be used +# to build the collector. +# # Primary targets: # gc.a - builds basic library -# libgc.a - builds library for use with g++ "-fgc-keyword" extension # 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= CC=cc $(ABI_FLAG) -CXX=CC $(ABI_FLAG) +CXX=g++ $(ABI_FLAG) 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. # 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. -CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DSILENT +# 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. -# -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define SOLARIS_THREADS and then include +# -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. -# -D_SOLARIS_PTHREADS enables support for Solaris pthreads. +# -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads. # Define SOLARIS_THREADS as well. -# -DIRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DLINUX_THREADS enables support for Xavier Leroy's Linux threads. +# -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. # -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. Normally -DALL_INTERIOR_POINTERS +# -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.) @@ -56,24 +81,34 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INT # 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. -# -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the -# new syntax "operator new[]" for allocating and deleting arrays. +# -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. +# 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. +# 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.) +# -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. @@ -110,81 +145,138 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INT # 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. -# -DOLD_BLOCK_ALLOC Use the old, possibly faster, large block -# allocation strategy. The new strategy tries harder to minimize -# fragmentation, sometimes at the expense of spending more time in the -# large block allocator and/or collecting more frequently. -# If you expect the allocator to promptly use an explicitly expanded -# heap, this is highly recommended. # -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 backptr.h interface is +# 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. Turns on call chain saving on X86. On X86, client +# code should NOT be compiled with -fomit-frame-pointer. # -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. +# -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? +# -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. # - -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. - CXXFLAGS= $(CFLAGS) AR= ar RANLIB= ranlib -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. In this case, the destination directory -# should contain a copy of the original include directory. -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 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 -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 +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 -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 - -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c cord/cord.h cord/ec.h cord/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_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 gc.h gc_typed.h gc_hdrs.h gc_priv.h gc_private.h \ - gcconfig.h 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 gc_cpp.h weakpointer.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h gc_alloc.h \ + 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/javaxfc.h sparc_sunos4_mach_dep.s \ - solaris_threads.h backptr.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 \ - cord/gc.h include/gc.h include/gc_typed.h include/cord.h \ - include/ec.h include/private/cord_pos.h include/private/gcconfig.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/gc_cpp.h README.rs6000 include/backptr.h \ - include/weakpointer.h README.QUICK callprocs pc_excludes \ - barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \ - MacOS.c EMX_MAKEFILE makefile.depend README.debugging \ - include/gc_cpp.h Mac_files/datastart.c Mac_files/dataend.c \ + 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 $(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 + +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 \ + aclocal.m4 config.sub config.guess ltconfig \ + ltmain.sh mkinstalldirs + +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 README.solaris2 README.sgi README.hp README.uts \ - win32_threads.c NT_THREADS_MAKEFILE gc.mak README.dj Makefile.dj \ - README.alpha README.linux version.h Makefile.DLLs \ - WCC_MAKEFILE nursery.c nursery.h gc_copy_descr.h \ - include/leak_detector.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)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \ - $(srcdir)/cord/private/cord_pos.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 if_not_there threadlibs @@ -196,7 +288,7 @@ CURSES= -lcurses -ltermlib # the SHELL environment variable. SHELL= /bin/sh -SPECIALCFLAGS = +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. @@ -204,17 +296,47 @@ SPECIALCFLAGS = all: gc.a gctest -pcr: PCR-Makefile gc_private.h gc_hdrs.h gc.h gcconfig.h mach_dep.o $(SRCS) - make -f PCR-Makefile depend - make -f PCR-Makefile - -$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ - $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h Makefile +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: $(srcdir)/gc_mark.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 @@ -236,16 +358,22 @@ cords: $(CORD_OBJS) cord/cordtest $(UTILS) ./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)/gc_cpp.h $(srcdir)/gc.h Makefile +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)/test_cpp.cc $(srcdir)/gc_cpp.h gc_cpp.o $(srcdir)/gc.h \ +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 "" $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a -ldld - ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a `./threadlibs` + ./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++: gc_cpp.o $(srcdir)/gc_cpp.h test_cpp +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 @@ -276,7 +404,7 @@ libirixgc.so: $(OBJS) dyn_load.o # Linux shared library version of the collector liblinuxgc.so: $(OBJS) dyn_load.o - gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o -lo + 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 @@ -292,19 +420,24 @@ liblinuxgc.so: $(OBJS) dyn_load.o # 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 $(UTILS) +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 ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_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 +# alpha_mach_dep.s assumes that pointers are not saved in fp registers. +# Gcc on a 21264 can spill pointers to fp registers. Oops. ./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_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_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) +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 @@ -313,60 +446,67 @@ mark_rts.o: $(srcdir)/mark_rts.c if_mach if_not_there $(UTILS) alloc.o: version.h -cord/cordbscs.o: $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) +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: $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) +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: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) +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 "" $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld + ./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 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld + ./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 - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses + ./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)/gcconfig.h - $(CC) $(CFLAGS) -o if_mach $(srcdir)/if_mach.c +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)/gcconfig.h Makefile - $(CC) $(CFLAGS) -o threadlibs $(srcdir)/threadlibs.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 - $(CC) $(CFLAGS) -o 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 gctest gctest_dyn_link test_cpp \ + 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: test.o gc.a if_mach if_not_there +gctest: tests/test.o gc.a $(UTILS) rm -f gctest - ./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 $(CC) $(CFLAGS) -o gctest test.o gc.a `./threadlibs` + ./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)/gc.h if_mach if_not_there +setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h $(UTILS) $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c test: KandRtest cord/cordtest @@ -377,12 +517,22 @@ KandRtest: setjmp_test gctest ./setjmp_test ./gctest -add_gc_prefix: add_gc_prefix.c +add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c -gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix - ./add_gc_prefix $(SRCS) $(OTHER_FILES) > /tmp/gc.tar-files - (cd $(srcdir)/.. ; tar cvfh - `cat /tmp/gc.tar-files`) > gc.tar +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) @@ -408,21 +558,23 @@ gc.tar.Z: 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|change in ANSI|improper alignment" +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: test.o libgc.so - $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread +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: test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link test.o -lirixgc +gctest_irix_dyn_link: tests/test.o libirixgc.so + $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link tests/test.o -lirixgc -test_dll.o: test.c libgc_globals.h - $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o +# 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 @@ -433,13 +585,13 @@ SYM_PREFIX-libgc=GC # include Makefile.DLLs reserved_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ + 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) test.c test_cpp.cc; do \ + 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.am b/gc/Makefile.am new file mode 100644 index 0000000..4fdf31b --- /dev/null +++ b/gc/Makefile.am @@ -0,0 +1,158 @@ +# 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 + +## 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 = cygnus + +# Multilib support variables. +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true + +## Install a library built with a cross compiler in tooldir, not +## libdir. +if USE_LIBDIR +toolexeclibdir = $(libdir)$(MULTISUBDIR) +else +toolexecdir = $(exec_prefix)/$(target_alias) +toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) +endif + +toolexeclib_LTLIBRARIES = $(target_all) +EXTRA_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 + +# 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 -rpath $(toolexeclibdir) + +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 + +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: tests/test.c + $(COMPILE) -c $< +gctest_OBJECTS = test.o +gctest_LDADD = ./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 $@ + +AM_CFLAGS = @GC_CFLAGS@ + +# 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 + +# Multilib support. +.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ + maintainer-clean-multi + +all-am: all-multi +install-am: install-multi +mostlyclean-am: mostlyclean-multi +clean-am: clean-multi +distclean-am: distclean-multi +maintainer-clean-am: maintainer-clean-multi + +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean + +MAKEOVERRIDES= diff --git a/gc/Makefile.direct b/gc/Makefile.direct new file mode 100644 index 0000000..a5d24c6 --- /dev/null +++ b/gc/Makefile.direct @@ -0,0 +1,597 @@ +# 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= +CC=cc $(ABI_FLAG) +CXX=g++ $(ABI_FLAG) +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. +# 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. + +# 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. +# Define 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. +# -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 is 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.) +# -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 and +# Linux 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. Turns on call chain saving on X86. On X86, client +# code should NOT be compiled with -fomit-frame-pointer. +# -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. +# -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? +# -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. +# + +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 + +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 + +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/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 $(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 + +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 \ + aclocal.m4 config.sub config.guess ltconfig \ + ltmain.sh mkinstalldirs + +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 $(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 +# alpha_mach_dep.s assumes that pointers are not saved in fp registers. +# Gcc on a 21264 can spill pointers to fp registers. Oops. + ./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_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_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 index 54f77db..09fae4e 100644 --- a/gc/Makefile.dj +++ b/gc/Makefile.dj @@ -1,3 +1,7 @@ +# 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 @@ -20,29 +24,18 @@ AS=gcc -c -x assembler-with-cpp $(ABI_FLAG) CXXLD=gxx $(ABI_FLAG) EXE_SUFFIX=.exe -CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT +srcdir= . +VPATH= $(srcdir) -# For dynamic library builds, it may be necessary to add flags to generate -# PIC code, e.g. -fPIC on Linux. +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. -# -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 +# -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. -# -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define SOLARIS_THREADS and then include -# gc.h before performing thr_ or dl* or GC_ operations.) -# Must also define -D_REENTRANT. -# -D_SOLARIS_PTHREADS enables support for Solaris pthreads. -# Define SOLARIS_THREADS as well. -# -DIRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DLINUX_THREADS enables support for Xavier Leroy's Linux threads. -# see README.linux. -D_REENTRANT may also be required. # -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, @@ -62,15 +55,18 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # 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. -# -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the -# new syntax "operator new[]" for allocating and deleting arrays. +# -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. +# 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 @@ -89,9 +85,12 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # 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. +# 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. @@ -100,76 +99,100 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # 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. -# -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. -# -DOLD_BLOCK_ALLOC Use the old, possibly faster, large block -# allocation strategy. The new strategy tries harder to minimize -# fragmentation, sometimes at the expense of spending more time in the -# large block allocator and/or collecting more frequently. -# If you expect the allocator to promtly use an explicitly expanded -# heap, this is highly recommended. -# - - +# -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. -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. CXXFLAGS= $(CFLAGS) -DOPERATOR_NEW_ARRAY AR= ar RANLIB= ranlib -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. In this case, the destination directory -# should contain a copy of the original include directory. -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 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 +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 irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c +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 cord/cord.h cord/ec.h cord/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_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 gc.h gc_typed.h gc_hdrs.h gc_priv.h gc_private.h \ - gcconfig.h 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 gc_cpp.h weakpointer.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h gc_alloc.h \ + 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 \ - solaris_threads.h $(CORD_SRCS) + 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 \ - cord/gc.h include/gc.h include/gc_typed.h include/cord.h \ - include/ec.h include/private/cord_pos.h include/private/gcconfig.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/gc_cpp.h README.rs6000 \ - include/weakpointer.h README.QUICK callprocs pc_excludes \ + README.rs6000 README.QUICK callprocs pc_excludes \ barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \ - MacOS.c EMX_MAKEFILE makefile.depend README.debugging \ - include/gc_cpp.h Mac_files/datastart.c Mac_files/dataend.c \ + 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 version.h Makefile.DLLs \ - WCC_MAKEFILE + 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)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \ - $(srcdir)/cord/private/cord_pos.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) @@ -189,12 +212,12 @@ SPECIALCFLAGS = all: gc.a gctest$(EXE_SUFFIX) -pcr: PCR-Makefile gc_private.h gc_hdrs.h gc.h gcconfig.h mach_dep.o $(SRCS) - make -f PCR-Makefile depend - make -f PCR-Makefile - -$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ - $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h Makefile +$(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 @@ -217,17 +240,17 @@ cords: $(CORD_OBJS) cord/cordtest$(EXE_SUFFIX) $(UTILS) ./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)/gc_cpp.h $(srcdir)/gc.h Makefile +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)/gc_cpp.h gc_cpp.o $(srcdir)/gc.h \ +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)/gc_cpp.h test_cpp$(EXE_SUFFIX) +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 @@ -259,12 +282,14 @@ 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 $(UTILS) +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 @@ -312,20 +337,17 @@ cord/de$(EXE_SUFFIX): $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $ ./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)/gcconfig.h +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 - rm -f if_mach -threadlibs$(EXE_SUFFIX): $(srcdir)/threadlibs.c $(srcdir)/gcconfig.h Makefile +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 - rm -f threadlibs 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 - rm -f if_not_there # Clean removes *.o several times, # because as the first one doesn't seem to get them all! @@ -352,7 +374,7 @@ gctest$(EXE_SUFFIX): test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) # 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)/gc.h \ +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 @@ -377,21 +399,6 @@ gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix 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 @@ -408,9 +415,6 @@ ABSDIR = `pwd` gctest_dyn_link: test.o libgc.so $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread -gctest_irix_dyn_link: test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link test.o -lirixgc - test_dll.o: test.c libgc_globals.h $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o @@ -422,15 +426,3 @@ SYM_PREFIX-libgc=GC # Uncomment the following line to build a GNU win32 DLL # include Makefile.DLLs -reserved_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ - sed s/GC_/_GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - -user_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ - sed s/_GC_/GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - diff --git a/gc/Makefile.in b/gc/Makefile.in new file mode 100644 index 0000000..b9d776e --- /dev/null +++ b/gc/Makefile.in @@ -0,0 +1,518 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + +# 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 + + +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 + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +AS = @AS@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXINCLUDES = @CXXINCLUDES@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@ +GCJ = @GCJ@ +GCJFLAGS = @GCJFLAGS@ +GC_CFLAGS = @GC_CFLAGS@ +INCLUDES = @INCLUDES@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MY_CFLAGS = @MY_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +STRIP = @STRIP@ +THREADLIBS = @THREADLIBS@ +VERSION = @VERSION@ +addobjs = @addobjs@ +gc_basedir = @gc_basedir@ +target_all = @target_all@ + +AUTOMAKE_OPTIONS = cygnus + +# Multilib support variables. +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true +@USE_LIBDIR_TRUE@toolexeclibdir = $(libdir)$(MULTISUBDIR) +@USE_LIBDIR_FALSE@toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) +@USE_LIBDIR_FALSE@toolexecdir = $(exec_prefix)/$(target_alias) + +toolexeclib_LTLIBRARIES = $(target_all) +EXTRA_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 + + +# 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 -rpath $(toolexeclibdir) + +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 + + +AM_CXXFLAGS = @GC_CFLAGS@ + +AM_CFLAGS = @GC_CFLAGS@ + +check_PROGRAMS = gctest +gctest_OBJECTS = test.o +gctest_LDADD = ./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 = +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(toolexeclib_LTLIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +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 +check_PROGRAMS = gctest$(EXEEXT) +gctest_DEPENDENCIES = ./libgc.la +gctest_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +DIST_COMMON = Makefile.am Makefile.in acinclude.m4 aclocal.m4 \ +config.guess config.sub configure configure.in install-sh ltconfig \ +ltmain.sh + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) +OBJECTS = $(libgc_la_OBJECTS) + +all: all-redirect +.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) --cygnus Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +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) + +mostlyclean-toolexeclibLTLIBRARIES: + +clean-toolexeclibLTLIBRARIES: + -test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES) + +distclean-toolexeclibLTLIBRARIES: + +maintainer-clean-toolexeclibLTLIBRARIES: + +install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) + @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \ + $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \ + else :; fi; \ + done + +uninstall-toolexeclibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \ + done + +.c.o: + $(COMPILE) -c $< + +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + -rm -f *.$(OBJEXT) + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libgc.la: $(libgc_la_OBJECTS) $(libgc_la_DEPENDENCIES) + $(LINK) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS) + +mostlyclean-checkPROGRAMS: + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +distclean-checkPROGRAMS: + +maintainer-clean-checkPROGRAMS: + +gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) + @rm -f gctest$(EXEEXT) + $(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(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 + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +check-TESTS: $(TESTS) + @failed=0; all=0; \ + srcdir=$(srcdir); export srcdir; \ + for tst in $(TESTS); do \ + if test -f $$tst; then dir=.; \ + else dir="$(srcdir)"; fi; \ + if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \ + all=`expr $$all + 1`; \ + echo "PASS: $$tst"; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="$$failed of $$all tests failed"; \ + fi; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0 +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +installcheck-am: +installcheck: installcheck-am +install-info-am: +install-info: install-info-am +install-exec-am: install-toolexeclibLTLIBRARIES +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-toolexeclibLTLIBRARIES +uninstall: uninstall-am +all-am: Makefile $(LTLIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-toolexeclibLTLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-checkPROGRAMS \ + mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-toolexeclibLTLIBRARIES clean-compile clean-libtool \ + clean-checkPROGRAMS clean-tags clean-generic \ + mostlyclean-am + +clean: clean-am + +distclean-am: distclean-toolexeclibLTLIBRARIES distclean-compile \ + distclean-libtool distclean-checkPROGRAMS \ + distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + -rm -f config.status + +maintainer-clean-am: maintainer-clean-toolexeclibLTLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-checkPROGRAMS maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + -rm -f config.status + +.PHONY: mostlyclean-toolexeclibLTLIBRARIES \ +distclean-toolexeclibLTLIBRARIES clean-toolexeclibLTLIBRARIES \ +maintainer-clean-toolexeclibLTLIBRARIES \ +uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool mostlyclean-checkPROGRAMS \ +distclean-checkPROGRAMS clean-checkPROGRAMS \ +maintainer-clean-checkPROGRAMS tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir check-TESTS info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-info-am \ +install-info install-exec-am install-exec install-data-am install-data \ +install-am install uninstall-am uninstall all-redirect all-am all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + +# The following hack produces a warning from automake, but we need it in order +# to build a file from a subdirectory. FIXME. +test.o: tests/test.c + $(COMPILE) -c 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 $< + +# Multilib support. +.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ + maintainer-clean-multi + +all-am: all-multi +install-am: install-multi +mostlyclean-am: mostlyclean-multi +clean-am: clean-multi +distclean-am: distclean-multi +maintainer-clean-am: maintainer-clean-multi + +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean + +# 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: |