mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-02 23:50:56 -08:00
Upgraded to Boehm-Weiser 6.4
This commit is contained in:
parent
e2ccbb7cdb
commit
0d86a78d74
41 changed files with 2244 additions and 1330 deletions
|
|
@ -53,9 +53,9 @@ backgraph.c win32_threads.c \
|
|||
pthread_support.c pthread_stop_world.c darwin_stop_world.c \
|
||||
$(asm_libgc_sources)
|
||||
|
||||
# Include THREADLIBS here to ensure that the correct versions of
|
||||
# Include THREADDLLIBS here to ensure that the correct versions of
|
||||
# linuxthread semaphore functions get linked:
|
||||
libgc_la_LIBADD = @addobjs@ $(THREADLIBS) $(UNWINDLIBS)
|
||||
libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS)
|
||||
libgc_la_DEPENDENCIES = @addobjs@
|
||||
libgc_la_LDFLAGS = -version-info 1:2:0
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \
|
|||
sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s
|
||||
|
||||
libgccpp_la_SOURCES = gc_cpp.cc
|
||||
libgccpp_la_LIBADD = $(THREADLIBS) $(UNWINDLIBS)
|
||||
libgccpp_la_LIBADD = $(THREADDLLIBS) $(UNWINDLIBS)
|
||||
libgccpp_la_LDFLAGS = -version-info 1:2:0
|
||||
|
||||
EXTRA_DIST += alpha_mach_dep.S mips_sgi_mach_dep.s sparc_mach_dep.S
|
||||
|
|
@ -91,9 +91,9 @@ test_cpp.o: $(srcdir)/tests/test_cpp.cc
|
|||
## are included in the distribution
|
||||
# gctest_OBJECTS = test.o
|
||||
gctest_SOURCES = tests/test.c
|
||||
gctest_LDADD = ./libgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
gctest_LDADD = ./libgc.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
test_cpp_SOURCES = tests/test_cpp.cc
|
||||
test_cpp_LDADD = ./libgc.la ./libgccpp.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
test_cpp_LDADD = ./libgc.la ./libgccpp.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
|
||||
TESTS = gctest $(extra_checks)
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ OBJDUMP = @OBJDUMP@
|
|||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
STRIP = @STRIP@
|
||||
THREADLIBS = @THREADLIBS@
|
||||
THREADDLLIBS = @THREADDLLIBS@
|
||||
UNWINDLIBS = @UNWINDLIBS@
|
||||
VERSION = @VERSION@
|
||||
addincludes = @addincludes@
|
||||
|
|
@ -186,9 +186,9 @@ pthread_support.c pthread_stop_world.c darwin_stop_world.c \
|
|||
$(asm_libgc_sources)
|
||||
|
||||
|
||||
# Include THREADLIBS here to ensure that the correct versions of
|
||||
# Include THREADDLLIBS here to ensure that the correct versions of
|
||||
# linuxthread semaphore functions get linked:
|
||||
libgc_la_LIBADD = @addobjs@ $(THREADLIBS) $(UNWINDLIBS)
|
||||
libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS)
|
||||
libgc_la_DEPENDENCIES = @addobjs@
|
||||
libgc_la_LDFLAGS = -version-info 1:2:0
|
||||
|
||||
|
|
@ -199,7 +199,7 @@ EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \
|
|||
|
||||
|
||||
libgccpp_la_SOURCES = gc_cpp.cc
|
||||
libgccpp_la_LIBADD = $(THREADLIBS) $(UNWINDLIBS)
|
||||
libgccpp_la_LIBADD = $(THREADDLLIBS) $(UNWINDLIBS)
|
||||
libgccpp_la_LDFLAGS = -version-info 1:2:0
|
||||
|
||||
AM_CXXFLAGS = @GC_CFLAGS@
|
||||
|
|
@ -212,9 +212,9 @@ check_PROGRAMS = gctest $(extra_checks)
|
|||
|
||||
# gctest_OBJECTS = test.o
|
||||
gctest_SOURCES = tests/test.c
|
||||
gctest_LDADD = ./libgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
gctest_LDADD = ./libgc.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
test_cpp_SOURCES = tests/test_cpp.cc
|
||||
test_cpp_LDADD = ./libgc.la ./libgccpp.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
test_cpp_LDADD = ./libgc.la ./libgccpp.la $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
|
||||
|
||||
TESTS = gctest $(extra_checks)
|
||||
|
||||
|
|
|
|||
|
|
@ -26,9 +26,10 @@
|
|||
* as a base instead.
|
||||
*/
|
||||
|
||||
# include "private/gc_priv.h"
|
||||
|
||||
# if defined(GC_IRIX_THREADS) || defined(GC_AIX_THREADS)
|
||||
|
||||
# include "private/gc_priv.h"
|
||||
# include <pthread.h>
|
||||
# include <assert.h>
|
||||
# include <semaphore.h>
|
||||
|
|
|
|||
|
|
@ -590,8 +590,9 @@ int n;
|
|||
GET_HDR(hbp, hhdr);
|
||||
size_avail = hhdr->hb_sz;
|
||||
if (size_avail < size_needed) continue;
|
||||
if (!GC_use_entire_heap
|
||||
&& size_avail != size_needed
|
||||
if (size_avail != size_needed
|
||||
&& !GC_use_entire_heap
|
||||
&& !GC_dont_gc
|
||||
&& USED_HEAP_SIZE >= GC_requested_heapsize
|
||||
&& !TRUE_INCREMENTAL && GC_should_collect()) {
|
||||
# ifdef USE_MUNMAP
|
||||
|
|
@ -608,7 +609,8 @@ int n;
|
|||
/* If we are deallocating lots of memory from */
|
||||
/* finalizers, fail and collect sooner rather */
|
||||
/* than later. */
|
||||
if (GC_finalizer_mem_freed > (GC_heapsize >> 4)) {
|
||||
if (WORDS_TO_BYTES(GC_finalizer_mem_freed)
|
||||
> (GC_heapsize >> 4)) {
|
||||
continue;
|
||||
}
|
||||
# endif /* !USE_MUNMAP */
|
||||
|
|
@ -698,7 +700,7 @@ int n;
|
|||
struct hblk * h;
|
||||
struct hblk * prev = hhdr -> hb_prev;
|
||||
|
||||
GC_words_wasted += total_size;
|
||||
GC_words_wasted += BYTES_TO_WORDS(total_size);
|
||||
GC_large_free_bytes -= total_size;
|
||||
GC_remove_from_fl(hhdr, n);
|
||||
for (h = hbp; h < limit; h++) {
|
||||
|
|
|
|||
|
|
@ -104,8 +104,6 @@ word GC_free_space_divisor = 3;
|
|||
extern GC_bool GC_collection_in_progress();
|
||||
/* Collection is in progress, or was abandoned. */
|
||||
|
||||
extern GC_bool GC_print_back_height;
|
||||
|
||||
int GC_never_stop_func GC_PROTO((void)) { return(0); }
|
||||
|
||||
unsigned long GC_time_limit = TIME_LIMIT;
|
||||
|
|
@ -198,7 +196,8 @@ word GC_adj_words_allocd()
|
|||
/* had been reallocated this round. Finalization is user */
|
||||
/* visible progress. And if we don't count this, we have */
|
||||
/* stability problems for programs that finalize all objects. */
|
||||
result += GC_words_wasted;
|
||||
if ((GC_words_wasted >> 3) < result)
|
||||
result += GC_words_wasted;
|
||||
/* This doesn't reflect useful work. But if there is lots of */
|
||||
/* new fragmentation, the same is probably true of the heap, */
|
||||
/* and the collection will be correspondingly cheaper. */
|
||||
|
|
@ -931,7 +930,7 @@ word n;
|
|||
# endif
|
||||
expansion_slop = WORDS_TO_BYTES(min_words_allocd()) + 4*MAXHINCR*HBLKSIZE;
|
||||
if (GC_last_heap_addr == 0 && !((word)space & SIGNB)
|
||||
|| GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space) {
|
||||
|| (GC_last_heap_addr != 0 && GC_last_heap_addr < (ptr_t)space)) {
|
||||
/* Assume the heap is growing up */
|
||||
GC_greatest_plausible_heap_addr =
|
||||
(GC_PTR)GC_max((ptr_t)GC_greatest_plausible_heap_addr,
|
||||
|
|
@ -994,7 +993,7 @@ word needed_blocks;
|
|||
GC_bool ignore_off_page;
|
||||
{
|
||||
if (!GC_incremental && !GC_dont_gc &&
|
||||
(GC_dont_expand && GC_words_allocd > 0 || GC_should_collect())) {
|
||||
((GC_dont_expand && GC_words_allocd > 0) || GC_should_collect())) {
|
||||
GC_gcollect_inner();
|
||||
} else {
|
||||
word blocks_to_get = GC_heapsize/(HBLKSIZE*GC_free_space_divisor)
|
||||
|
|
@ -1003,6 +1002,9 @@ GC_bool ignore_off_page;
|
|||
if (blocks_to_get > MAXHINCR) {
|
||||
word slop;
|
||||
|
||||
/* Get the minimum required to make it likely that we */
|
||||
/* can satisfy the current request in the presence of black- */
|
||||
/* listing. This will probably be more than MAXHINCR. */
|
||||
if (ignore_off_page) {
|
||||
slop = 4;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ static back_edges * new_back_edges(void)
|
|||
{
|
||||
if (0 == back_edge_space) {
|
||||
back_edge_space = (back_edges *)
|
||||
sbrk(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
|
||||
GET_MEM(MAX_BACK_EDGE_STRUCTS*sizeof(back_edges));
|
||||
}
|
||||
if (0 != avail_back_edges) {
|
||||
back_edges * result = avail_back_edges;
|
||||
|
|
@ -113,17 +113,31 @@ static void deallocate_back_edges(back_edges *p)
|
|||
/* Table of objects that are currently on the depth-first search */
|
||||
/* stack. Only objects with in-degree one are in this table. */
|
||||
/* Other objects are identified using HEIGHT_IN_PROGRESS. */
|
||||
/* This data structure NEEDS IMPROVEMENT. */
|
||||
#define MAX_IN_PROGRESS 10000
|
||||
/* FIXME: This data structure NEEDS IMPROVEMENT. */
|
||||
#define INITIAL_IN_PROGRESS 10000
|
||||
static ptr_t * in_progress_space = 0;
|
||||
static int n_in_progress = 0;
|
||||
static size_t in_progress_size = 0;
|
||||
static size_t n_in_progress = 0;
|
||||
|
||||
static void push_in_progress(ptr_t p)
|
||||
{
|
||||
if (n_in_progress >= in_progress_size)
|
||||
if (in_progress_size == 0) {
|
||||
in_progress_size = INITIAL_IN_PROGRESS;
|
||||
in_progress_space = (ptr_t *)GET_MEM(in_progress_size * sizeof(ptr_t));
|
||||
} else {
|
||||
ptr_t * new_in_progress_space;
|
||||
in_progress_size *= 2;
|
||||
new_in_progress_space = (ptr_t *)
|
||||
GET_MEM(in_progress_size * sizeof(ptr_t));
|
||||
BCOPY(in_progress_space, new_in_progress_space,
|
||||
n_in_progress * sizeof(ptr_t));
|
||||
in_progress_space = new_in_progress_space;
|
||||
/* FIXME: This just drops the old space. */
|
||||
}
|
||||
if (in_progress_space == 0)
|
||||
in_progress_space = sbrk(MAX_IN_PROGRESS * sizeof(ptr_t));
|
||||
if (n_in_progress == MAX_IN_PROGRESS)
|
||||
ABORT("Exceeded MAX_IN_PROGRESS");
|
||||
ABORT("MAKE_BACK_GRAPH: Out of in-progress space: "
|
||||
"Huge linear data structure?");
|
||||
in_progress_space[n_in_progress++] = p;
|
||||
}
|
||||
|
||||
|
|
@ -318,8 +332,8 @@ static void add_back_edges(ptr_t p, word n_words, word gc_descr)
|
|||
}
|
||||
}
|
||||
|
||||
/* Rebuild the reprentation of the backward reachability graph. */
|
||||
/* Does not examine mark bits. Can be called before GC. */
|
||||
/* Rebuild the representation of the backward reachability graph. */
|
||||
/* Does not examine mark bits. Can be called before GC. */
|
||||
void GC_build_back_graph(void)
|
||||
{
|
||||
GC_apply_to_each_object(add_back_edges);
|
||||
|
|
@ -424,15 +438,20 @@ static void update_max_height(ptr_t p, word n_words, word gc_descr)
|
|||
}
|
||||
}
|
||||
|
||||
word GC_max_max_height = 0;
|
||||
|
||||
void GC_traverse_back_graph(void)
|
||||
{
|
||||
static word max_max_height = 0;
|
||||
GC_max_height = 0;
|
||||
GC_apply_to_each_object(update_max_height);
|
||||
}
|
||||
|
||||
void GC_print_back_graph_stats(void)
|
||||
{
|
||||
GC_printf2("Maximum backwards height of reachable objects at GC %lu is %ld\n",
|
||||
(unsigned long) GC_gc_no, GC_max_height);
|
||||
if (GC_max_height > max_max_height) {
|
||||
max_max_height = GC_max_height;
|
||||
if (GC_max_height > GC_max_max_height) {
|
||||
GC_max_max_height = GC_max_height;
|
||||
GC_printf0("The following unreachable object is last in a longest chain "
|
||||
"of unreachable objects:\n");
|
||||
GC_print_heap_obj(GC_deepest_obj);
|
||||
|
|
|
|||
243
src/gc/config.guess
vendored
243
src/gc/config.guess
vendored
|
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2002-11-30'
|
||||
timestamp='2002-03-20'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
|
|
@ -88,40 +88,30 @@ if test $# != 0; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
trap 'exit 1' 1 2 15
|
||||
|
||||
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||
# compiler to aid in system detection is discouraged as it requires
|
||||
# temporary files to be created and, as you can see below, it is a
|
||||
# headache to deal with in a portable fashion.
|
||||
dummy=dummy-$$
|
||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
||||
|
||||
# CC_FOR_BUILD -- compiler used by this script.
|
||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||
# use `HOST_CC' if defined, but it is deprecated.
|
||||
|
||||
# This shell variable is my proudest work .. or something. --bje
|
||||
|
||||
set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
|
||||
(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
|
||||
|| (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
|
||||
dummy=$tmpdir/dummy ;
|
||||
files="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||
trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
|
||||
case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||
,,) echo "int x;" > $dummy.c ;
|
||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||
,,) echo "int dummy(){}" > $dummy.c ;
|
||||
for c in cc gcc c89 c99 ; do
|
||||
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
||||
if test $? = 0 ; then
|
||||
CC_FOR_BUILD="$c"; break ;
|
||||
fi ;
|
||||
done ;
|
||||
rm -f $files ;
|
||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
||||
if test x"$CC_FOR_BUILD" = x ; then
|
||||
CC_FOR_BUILD=no_compiler_found ;
|
||||
fi
|
||||
;;
|
||||
,,*) CC_FOR_BUILD=$CC ;;
|
||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||
esac ;
|
||||
unset files'
|
||||
esac'
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||
|
|
@ -134,16 +124,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
|||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||
|
||||
case "${UNAME_MACHINE}" in
|
||||
i?86)
|
||||
test -z "$VENDOR" && VENDOR=pc
|
||||
;;
|
||||
*)
|
||||
test -z "$VENDOR" && VENDOR=unknown
|
||||
;;
|
||||
esac
|
||||
test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
|
|
@ -162,7 +142,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
||||
/usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
||||
case "${UNAME_MACHINE_ARCH}" in
|
||||
armeb) machine=armeb-unknown ;;
|
||||
arm*) machine=arm-unknown ;;
|
||||
sh3el) machine=shl-unknown ;;
|
||||
sh3eb) machine=sh-unknown ;;
|
||||
|
|
@ -188,18 +167,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
;;
|
||||
esac
|
||||
# The OS release
|
||||
# Debian GNU/NetBSD machines have a different userland, and
|
||||
# thus, need a distinct triplet. However, they do not need
|
||||
# kernel version information, so it can be replaced with a
|
||||
# suitable tag, in the style of linux-gnu.
|
||||
case "${UNAME_VERSION}" in
|
||||
Debian*)
|
||||
release='-gnu'
|
||||
;;
|
||||
*)
|
||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
;;
|
||||
esac
|
||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||
# contains redundant information, the shorter form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||
|
|
@ -252,7 +220,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
# A Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
eval $set_cc_for_build
|
||||
cat <<EOF >$dummy.s
|
||||
.data
|
||||
\$Lformat:
|
||||
|
|
@ -278,9 +245,10 @@ main:
|
|||
jsr \$26,exit
|
||||
.end main
|
||||
EOF
|
||||
$CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
|
||||
eval $set_cc_for_build
|
||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
case `$dummy` in
|
||||
case `./$dummy` in
|
||||
0-0)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
|
|
@ -302,12 +270,9 @@ EOF
|
|||
2-1307)
|
||||
UNAME_MACHINE="alphaev68"
|
||||
;;
|
||||
3-1307)
|
||||
UNAME_MACHINE="alphaev7"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -f $dummy.s $dummy && rmdir $tmpdir
|
||||
rm -f $dummy.s $dummy
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
exit 0 ;;
|
||||
Alpha\ *:Windows_NT*:*)
|
||||
|
|
@ -348,10 +313,6 @@ EOF
|
|||
NILE*:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
DRS?6000:UNIX_SV:4.2*:7*)
|
||||
case `/usr/bin/uname -p` in
|
||||
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||
esac ;;
|
||||
sun4H:SunOS:5.*:*)
|
||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
|
|
@ -458,21 +419,15 @@ EOF
|
|||
exit (-1);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Motorola:PowerMAX_OS:*:*)
|
||||
echo powerpc-motorola-powermax
|
||||
exit 0 ;;
|
||||
Motorola:*:4.3:PL8-*)
|
||||
echo powerpc-harris-powermax
|
||||
exit 0 ;;
|
||||
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
|
||||
echo powerpc-harris-powermax
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
echo powerpc-harris-powerunix
|
||||
exit 0 ;;
|
||||
|
|
@ -545,8 +500,8 @@ EOF
|
|||
exit(0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
|
|
@ -644,9 +599,9 @@ EOF
|
|||
exit (0);
|
||||
}
|
||||
EOF
|
||||
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
|
||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
rm -f $dummy.c $dummy
|
||||
fi ;;
|
||||
esac
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
|
|
@ -682,8 +637,8 @@ EOF
|
|||
exit (0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
|
|
@ -766,19 +721,7 @@ EOF
|
|||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
# Determine whether the default compiler uses glibc.
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <features.h>
|
||||
#if __GLIBC__ >= 2
|
||||
LIBC=gnu
|
||||
#else
|
||||
LIBC=
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-cygwin
|
||||
|
|
@ -790,16 +733,13 @@ EOF
|
|||
echo ${UNAME_MACHINE}-pc-pw32
|
||||
exit 0 ;;
|
||||
x86:Interix*:3*)
|
||||
echo i586-pc-interix3
|
||||
exit 0 ;;
|
||||
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||
echo i${UNAME_MACHINE}-pc-mks
|
||||
echo i386-pc-interix3
|
||||
exit 0 ;;
|
||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||
echo i586-pc-interix
|
||||
echo i386-pc-interix
|
||||
exit 0 ;;
|
||||
i*:UWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-uwin
|
||||
|
|
@ -817,13 +757,13 @@ EOF
|
|||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit 0 ;;
|
||||
arm*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
ia64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
m68*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
mips:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
|
|
@ -842,34 +782,14 @@ EOF
|
|||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
test x"${CPU}" != x && echo "${CPU}-${VENDOR}-linux" && exit 0
|
||||
;;
|
||||
mips64:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#undef CPU
|
||||
#undef mips64
|
||||
#undef mips64el
|
||||
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||
CPU=mips64el
|
||||
#else
|
||||
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||
CPU=mips64
|
||||
#else
|
||||
CPU=
|
||||
#endif
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
test x"${CPU}" != x && echo "${CPU}-${VENDOR}-linux" && exit 0
|
||||
rm -f $dummy.c
|
||||
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
|
||||
;;
|
||||
ppc:Linux:*:*)
|
||||
echo powerpc-${VENDOR}-linux
|
||||
echo powerpc-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
ppc64:Linux:*:*)
|
||||
echo powerpc64-${VENDOR}-linux
|
||||
echo powerpc64-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
alpha:Linux:*:*)
|
||||
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
||||
|
|
@ -883,30 +803,30 @@ EOF
|
|||
esac
|
||||
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
|
||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux${LIBC}
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||
exit 0 ;;
|
||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||
# Look for CPU level
|
||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||
PA7*) echo hppa1.1-${VENDOR}-linux ;;
|
||||
PA8*) echo hppa2.0-${VENDOR}-linux ;;
|
||||
*) echo hppa-${VENDOR}-linux ;;
|
||||
PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
||||
PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
||||
*) echo hppa-unknown-linux-gnu ;;
|
||||
esac
|
||||
exit 0 ;;
|
||||
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
||||
echo hppa64-${VENDOR}-linux
|
||||
echo hppa64-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
s390:Linux:*:* | s390x:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-linux
|
||||
exit 0 ;;
|
||||
sh*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
sparc:Linux:*:* | sparc64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-${VENDOR}-linux
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
x86_64:Linux:*:*)
|
||||
echo x86_64-${VENDOR}-linux
|
||||
echo x86_64-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
i*86:Linux:*:*)
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
|
|
@ -921,18 +841,18 @@ EOF
|
|||
p'`
|
||||
case "$ld_supported_targets" in
|
||||
elf32-i386)
|
||||
TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux"
|
||||
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
||||
;;
|
||||
a.out-i386-linux)
|
||||
echo "${UNAME_MACHINE}-${VENDOR}-linuxaout"
|
||||
exit 0 ;;
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||
exit 0 ;;
|
||||
coff-i386)
|
||||
echo "${UNAME_MACHINE}-${VENDOR}-linuxcoff"
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||
exit 0 ;;
|
||||
"")
|
||||
# Either a pre-BFD a.out linker (linuxoldld) or
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld) or
|
||||
# one that does not give us useful --help.
|
||||
echo "${UNAME_MACHINE}-${VENDOR}-linuxoldld"
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
|
||||
exit 0 ;;
|
||||
esac
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
|
|
@ -958,8 +878,8 @@ EOF
|
|||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" | sed 's/linux-gnu/linux/' && exit 0
|
||||
rm -f $dummy.c
|
||||
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||
;;
|
||||
i*86:DYNIX/ptx:4*:*)
|
||||
|
|
@ -976,23 +896,6 @@ EOF
|
|||
# Use sysv4.2uw... so that sysv4* matches it.
|
||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
i*86:OS/2:*:*)
|
||||
# If we were able to find `uname', then EMX Unix compatibility
|
||||
# is probably installed.
|
||||
echo ${UNAME_MACHINE}-pc-os2-emx
|
||||
exit 0 ;;
|
||||
i*86:XTS-300:*:STOP)
|
||||
echo ${UNAME_MACHINE}-unknown-stop
|
||||
exit 0 ;;
|
||||
i*86:atheos:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-atheos
|
||||
exit 0 ;;
|
||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i*86:*DOS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
|
|
@ -1014,19 +917,22 @@ EOF
|
|||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||
&& UNAME_MACHINE=i586
|
||||
(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
|
||||
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
|
||||
&& UNAME_MACHINE=i686
|
||||
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
|
||||
&& UNAME_MACHINE=i686
|
||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
i*86:*DOS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
# Left here for compatibility:
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
|
|
@ -1050,15 +956,9 @@ EOF
|
|||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
mc68k:UNIX:SYSTEM5:3.51m)
|
||||
echo m68k-convergent-sysv
|
||||
exit 0 ;;
|
||||
M680?0:D-NIX:5.3:*)
|
||||
echo m68k-diab-dnix
|
||||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0)
|
||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
|
||||
OS_REL=''
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
|
|
@ -1075,6 +975,9 @@ EOF
|
|||
mc68030:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
|
|
@ -1146,9 +1049,6 @@ EOF
|
|||
SX-5:SUPER-UX:*:*)
|
||||
echo sx5-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SX-6:SUPER-UX:*:*)
|
||||
echo sx6-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Power*:Rhapsody:*:*)
|
||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
|
|
@ -1169,7 +1069,7 @@ EOF
|
|||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit 0 ;;
|
||||
NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:NonStop-UX:*:*)
|
||||
|
|
@ -1192,6 +1092,11 @@ EOF
|
|||
fi
|
||||
echo ${UNAME_MACHINE}-unknown-plan9
|
||||
exit 0 ;;
|
||||
i*86:OS/2:*:*)
|
||||
# If we were able to find `uname', then EMX Unix compatibility
|
||||
# is probably installed.
|
||||
echo ${UNAME_MACHINE}-pc-os2-emx
|
||||
exit 0 ;;
|
||||
*:TOPS-10:*:*)
|
||||
echo pdp10-unknown-tops10
|
||||
exit 0 ;;
|
||||
|
|
@ -1210,6 +1115,12 @@ EOF
|
|||
*:ITS:*:*)
|
||||
echo pdp10-unknown-its
|
||||
exit 0 ;;
|
||||
i*86:XTS-300:*:STOP)
|
||||
echo ${UNAME_MACHINE}-unknown-stop
|
||||
exit 0 ;;
|
||||
i*86:atheos:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-atheos
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
|
|
@ -1330,8 +1241,8 @@ main ()
|
|||
}
|
||||
EOF
|
||||
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
|
|
|
|||
137
src/gc/config.sub
vendored
137
src/gc/config.sub
vendored
|
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2002-11-30'
|
||||
timestamp='2002-03-07'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
|
|
@ -118,7 +118,7 @@ esac
|
|||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
|
|
@ -229,34 +229,24 @@ case $basic_machine in
|
|||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||
| clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 | frv \
|
||||
| c4x | clipper \
|
||||
| d10v | d30v | dsp16xx \
|
||||
| fr30 \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
||||
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
||||
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
||||
| mipsisa32 | mipsisa64 \
|
||||
| mn10200 | mn10300 \
|
||||
| ns16k | ns32k \
|
||||
| openrisc | or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| tahoe | thumb | tic80 | tron \
|
||||
|
|
@ -291,45 +281,34 @@ case $basic_machine in
|
|||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| arm-* | armbe-* | armle-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
||||
| clipper-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| d10v-* | d30v-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* \
|
||||
| m32r-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
||||
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
||||
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
|
||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
|
|
@ -749,13 +728,13 @@ case $basic_machine in
|
|||
pbb)
|
||||
basic_machine=m68k-tti
|
||||
;;
|
||||
pc532 | pc532-*)
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||
pentiumpro | p6 | 6x86 | athlon)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentiumii | pentium2)
|
||||
|
|
@ -776,22 +755,22 @@ case $basic_machine in
|
|||
power) basic_machine=power-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
;;
|
||||
;;
|
||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||
basic_machine=powerpcle-unknown
|
||||
;;
|
||||
;;
|
||||
ppcle-* | powerpclittle-*)
|
||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppc64) basic_machine=powerpc64-unknown
|
||||
;;
|
||||
;;
|
||||
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
||||
basic_machine=powerpc64le-unknown
|
||||
;;
|
||||
;;
|
||||
ppc64le-* | powerpc64little-*)
|
||||
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
|
|
@ -822,12 +801,6 @@ case $basic_machine in
|
|||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
sb1)
|
||||
basic_machine=mipsisa64sb1-unknown
|
||||
;;
|
||||
sb1el)
|
||||
basic_machine=mipsisa64sb1el-unknown
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
|
|
@ -893,7 +866,7 @@ case $basic_machine in
|
|||
sun386 | sun386i | roadrunner)
|
||||
basic_machine=i386-sun
|
||||
;;
|
||||
sv1)
|
||||
sv1)
|
||||
basic_machine=sv1-cray
|
||||
os=-unicos
|
||||
;;
|
||||
|
|
@ -913,10 +886,6 @@ case $basic_machine in
|
|||
basic_machine=t90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
tic4x | c4x*)
|
||||
basic_machine=tic4x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic54x | c54x*)
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
|
|
@ -955,8 +924,8 @@ case $basic_machine in
|
|||
os=-vms
|
||||
;;
|
||||
vpp*|vx|vx-*)
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
vxworks960)
|
||||
basic_machine=i960-wrs
|
||||
os=-vxworks
|
||||
|
|
@ -977,7 +946,11 @@ case $basic_machine in
|
|||
basic_machine=hppa1.1-winbond
|
||||
os=-proelf
|
||||
;;
|
||||
xps | xps100)
|
||||
windows32)
|
||||
basic_machine=i386-pc
|
||||
os=-windows32-msvcrt
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
ymp)
|
||||
|
|
@ -1023,7 +996,7 @@ case $basic_machine in
|
|||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
|
||||
sh3 | sh4 | sh3eb | sh4eb)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sh64)
|
||||
|
|
@ -1032,7 +1005,7 @@ case $basic_machine in
|
|||
sparc | sparcv9 | sparcv9b)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
cydra)
|
||||
basic_machine=cydra-cydrome
|
||||
;;
|
||||
orion)
|
||||
|
|
@ -1047,6 +1020,10 @@ case $basic_machine in
|
|||
pmac | pmac-mpw)
|
||||
basic_machine=powerpc-apple
|
||||
;;
|
||||
c4x*)
|
||||
basic_machine=c4x-none
|
||||
os=-coff
|
||||
;;
|
||||
*-unknown)
|
||||
# Make sure to match an already-canonicalized machine name.
|
||||
;;
|
||||
|
|
@ -1108,13 +1085,12 @@ case $os in
|
|||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||
| -powermax* | -dnix*)
|
||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-qnx*)
|
||||
|
|
@ -1126,10 +1102,8 @@ case $os in
|
|||
;;
|
||||
esac
|
||||
;;
|
||||
-nto-qnx*)
|
||||
;;
|
||||
-nto*)
|
||||
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||
os=-nto-qnx
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||
|
|
@ -1138,6 +1112,9 @@ case $os in
|
|||
-mac*)
|
||||
os=`echo $os | sed -e 's|mac|macos|'`
|
||||
;;
|
||||
-linux*)
|
||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||
;;
|
||||
-sunos5*)
|
||||
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||
;;
|
||||
|
|
@ -1178,7 +1155,7 @@ case $os in
|
|||
os=-rtmk-nova
|
||||
;;
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
os=-nextstep2
|
||||
;;
|
||||
-nsk*)
|
||||
os=-nsk
|
||||
|
|
@ -1217,8 +1194,8 @@ case $os in
|
|||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
|
|
@ -1255,7 +1232,7 @@ case $basic_machine in
|
|||
pdp10-*)
|
||||
os=-tops20
|
||||
;;
|
||||
pdp11-*)
|
||||
pdp11-*)
|
||||
os=-none
|
||||
;;
|
||||
*-dec | vax-*)
|
||||
|
|
@ -1348,19 +1325,19 @@ case $basic_machine in
|
|||
*-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
*-gould)
|
||||
*-gould)
|
||||
os=-sysv
|
||||
;;
|
||||
*-highlevel)
|
||||
*-highlevel)
|
||||
os=-bsd
|
||||
;;
|
||||
*-encore)
|
||||
os=-bsd
|
||||
;;
|
||||
*-sgi)
|
||||
*-sgi)
|
||||
os=-irix
|
||||
;;
|
||||
*-siemens)
|
||||
*-siemens)
|
||||
os=-sysv4
|
||||
;;
|
||||
*-masscomp)
|
||||
|
|
@ -1432,7 +1409,7 @@ case $basic_machine in
|
|||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-vxsim* | -vxworks* | -windiss*)
|
||||
-vxsim* | -vxworks*)
|
||||
vendor=wrs
|
||||
;;
|
||||
-aux*)
|
||||
|
|
|
|||
2611
src/gc/configure
vendored
2611
src/gc/configure
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -17,7 +17,7 @@ dnl Process this file with autoconf to produce configure.
|
|||
# Initialization
|
||||
# ==============
|
||||
|
||||
AC_INIT(gc,6.3,Hans.Boehm@hp.com)
|
||||
AC_INIT(gc,6.4,Hans.Boehm@hp.com)
|
||||
## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)?
|
||||
AC_CONFIG_SRCDIR(gcj_mlc.c)
|
||||
AC_CANONICAL_TARGET
|
||||
|
|
@ -68,14 +68,15 @@ AC_ARG_ENABLE(cplusplus,
|
|||
)
|
||||
|
||||
INCLUDES=-I${srcdir}/include
|
||||
THREADLIBS=
|
||||
THREADDLLIBS=
|
||||
## Libraries needed to support dynamic loading and/or threads.
|
||||
case "$THREADS" in
|
||||
no | none | single)
|
||||
THREADS=none
|
||||
;;
|
||||
posix | pthreads)
|
||||
THREADS=posix
|
||||
THREADLIBS=-lpthread
|
||||
THREADDLLIBS=-lpthread
|
||||
case "$host" in
|
||||
x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
|
||||
AC_DEFINE(GC_LINUX_THREADS)
|
||||
|
|
@ -101,13 +102,13 @@ case "$THREADS" in
|
|||
AC_DEFINE(PARALLEL_MARK)
|
||||
fi
|
||||
AC_DEFINE(THREAD_LOCAL_ALLOC)
|
||||
THREADLIBS="-lpthread -lrt"
|
||||
THREADDLLIBS="-lpthread -lrt"
|
||||
;;
|
||||
*-*-freebsd*)
|
||||
AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
|
||||
AC_DEFINE(GC_FREEBSD_THREADS)
|
||||
INCLUDES="$INCLUDES -pthread"
|
||||
THREADLIBS=-pthread
|
||||
THREADDLLIBS=-pthread
|
||||
;;
|
||||
*-*-solaris*)
|
||||
AC_DEFINE(GC_SOLARIS_THREADS)
|
||||
|
|
@ -135,7 +136,10 @@ case "$THREADS" in
|
|||
# Measurements havent yet been done.
|
||||
fi
|
||||
INCLUDES="$INCLUDES -pthread"
|
||||
THREADLIBS="-lpthread -lrt"
|
||||
THREADDLLIBS="-lpthread -lrt"
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR("Pthreads not supported by the GC on this platform.")
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
|
@ -146,9 +150,9 @@ case "$THREADS" in
|
|||
;;
|
||||
dgux386)
|
||||
THREADS=dgux386
|
||||
AC_MSG_RESULT($THREADLIBS)
|
||||
AC_MSG_RESULT($THREADDLLIBS)
|
||||
# Use pthread GCC switch
|
||||
THREADLIBS=-pthread
|
||||
THREADDLLIBS=-pthread
|
||||
if test "${enable_parallel_mark}" = yes; then
|
||||
AC_DEFINE(PARALLEL_MARK)
|
||||
fi
|
||||
|
|
@ -160,7 +164,7 @@ case "$THREADS" in
|
|||
;;
|
||||
aix)
|
||||
THREADS=posix
|
||||
THREADLIBS=-lpthread
|
||||
THREADDLLIBS=-lpthread
|
||||
AC_DEFINE(GC_AIX_THREADS)
|
||||
AC_DEFINE(_REENTRANT)
|
||||
;;
|
||||
|
|
@ -171,7 +175,7 @@ case "$THREADS" in
|
|||
AC_MSG_ERROR($THREADS is an unknown thread package)
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(THREADLIBS)
|
||||
AC_SUBST(THREADDLLIBS)
|
||||
|
||||
case "$host" in
|
||||
powerpc-*-darwin*)
|
||||
|
|
@ -185,7 +189,7 @@ AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
|
|||
case "$host" in
|
||||
*-*-darwin*) ;;
|
||||
*)
|
||||
AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl")
|
||||
AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl")
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
@ -286,7 +290,7 @@ case "$host" in
|
|||
machdep="sparc_mach_dep.lo"
|
||||
AC_DEFINE(SUNOS53_SHARED_LIB)
|
||||
;;
|
||||
sparc-sun-solaris2.*)
|
||||
sparc*-sun-solaris2.*)
|
||||
machdep="sparc_mach_dep.lo"
|
||||
;;
|
||||
ia64-*-*)
|
||||
|
|
@ -345,10 +349,10 @@ fi
|
|||
|
||||
dnl As of 4.13a2, the collector will not properly work on Solaris when
|
||||
dnl built with gcc and -O. So we remove -O in the appropriate case.
|
||||
dnl
|
||||
dnl Not needed anymore on Solaris.
|
||||
AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
|
||||
case "$host" in
|
||||
sparc-sun-solaris2*|*aix*)
|
||||
*aix*)
|
||||
if test "$GCC" = yes; then
|
||||
AC_MSG_RESULT(yes)
|
||||
new_CFLAGS=
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ static int extract_conv_spec(CORD_pos source, char *buf,
|
|||
register int result = 0;
|
||||
register int current_number = 0;
|
||||
register int saw_period = 0;
|
||||
register int saw_number;
|
||||
register int saw_number = 0;
|
||||
register int chars_so_far = 0;
|
||||
register char current;
|
||||
|
||||
|
|
@ -243,7 +243,7 @@ int CORD_vsprintf(CORD * out, CORD format, va_list args)
|
|||
char * str = va_arg(args, char *);
|
||||
register char c;
|
||||
|
||||
while (c = *str++) {
|
||||
while ((c = *str++)) {
|
||||
CORD_ec_append(result, c);
|
||||
}
|
||||
goto done;
|
||||
|
|
@ -320,7 +320,7 @@ int CORD_vsprintf(CORD * out, CORD format, va_list args)
|
|||
if (buf != result[0].ec_bufptr) {
|
||||
register char c;
|
||||
|
||||
while (c = *buf++) {
|
||||
while ((c = *buf++)) {
|
||||
CORD_ec_append(result, c);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ void test_printf()
|
|||
if (CORD_cmp(result, result2) != 0)ABORT("CORD_sprintf goofed 5");
|
||||
}
|
||||
|
||||
main()
|
||||
int main()
|
||||
{
|
||||
# ifdef THINK_C
|
||||
printf("cordtest:\n");
|
||||
|
|
|
|||
|
|
@ -324,6 +324,8 @@ void GC_start_world()
|
|||
kern_return_t kern_result;
|
||||
thread_act_array_t act_list;
|
||||
mach_msg_type_number_t listcount;
|
||||
struct thread_basic_info info;
|
||||
mach_msg_type_number_t outCount = THREAD_INFO_MAX;
|
||||
|
||||
# if DEBUG_THREADS
|
||||
GC_printf0("World starting\n");
|
||||
|
|
@ -350,8 +352,6 @@ void GC_start_world()
|
|||
# endif
|
||||
continue;
|
||||
}
|
||||
struct thread_basic_info info;
|
||||
mach_msg_type_number_t outCount = THREAD_INFO_MAX;
|
||||
kern_result = thread_info(thread, THREAD_BASIC_INFO,
|
||||
(thread_info_t)&info, &outCount);
|
||||
if(kern_result != KERN_SUCCESS) ABORT("thread_info failed");
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ OBJDUMP = @OBJDUMP@
|
|||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
STRIP = @STRIP@
|
||||
THREADLIBS = @THREADLIBS@
|
||||
THREADDLLIBS = @THREADDLLIBS@
|
||||
UNWINDLIBS = @UNWINDLIBS@
|
||||
VERSION = @VERSION@
|
||||
addincludes = @addincludes@
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ are GPL'ed, but with an exception that should cover all uses in the
|
|||
collector. (If you are concerned about such things, I recommend you look
|
||||
at the notice in config.guess or ltmain.sh.)
|
||||
|
||||
This is version 6.3 of a conservative garbage collector for C and C++.
|
||||
This is version 6.4 of a conservative garbage collector for C and C++.
|
||||
|
||||
You might find a more recent version of this at
|
||||
|
||||
|
|
|
|||
|
|
@ -2100,6 +2100,75 @@ Since gc6.3alpha6:
|
|||
to Andrew Begel.)
|
||||
- Fix GC_task_self declaration in os_dep.c. (Thanks to Andrew Pinski.)
|
||||
- Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
|
||||
|
||||
Since 6.3:
|
||||
- Merge gcconfig.h changes from gcc tree.
|
||||
- Unconditionally include gc_priv.h in solaris_pthreads.c, win32_threads.h,
|
||||
aix_irix_threads.c, and solaris_threads.c to get thread definitions.
|
||||
- Start marker threads in GC_thr_init, so that they get started even
|
||||
if no other threads are ever started. (Oddly enough, the parallel
|
||||
collector worked correctly, though not well, with no helper threads.)
|
||||
- Go ahead and split large blocks in GC_allochblk_nth if GC_dont_gc
|
||||
is set. (Thanks to Alexander Petrossian.)
|
||||
- GC_PRINT_BACK_HEIGHT would deadlock with thread support.
|
||||
- Let in_progress_space in backgraph.s grow dynamically.
|
||||
- Fix README.solaris2. The GC_thr_init() hack doesn't work anymore.
|
||||
- Convert GC_finalizer_mem_freed to bytes in allchblk.c.
|
||||
- Add missing declaration for GC_generic_malloc_words_small_inner.
|
||||
Without it, s390x breaks. (Thanks to Ulrich Weigand.)
|
||||
- Applied several MacOSX patches to support older tool chains.
|
||||
(Thanks to Stefan Ring.)
|
||||
- Bug fix for NetBSD/amd64. (Thanks to Marc Recht.) Add NetBSD/sh3
|
||||
support. (Thanks to Uchiyama Yasushi.)
|
||||
- Fixed an uninitialized variable in cordprnt.c. (Thanks to gcc for
|
||||
providing the warning.)
|
||||
- Eliminated some, but not all, gcc -Wall warnings.
|
||||
- Changed some old style casts to reinterpret_cast in new_gc_alloc.h.
|
||||
(Thanks to Dan Grayson.)
|
||||
- GC_extend_size_map shouldn't adjust for GC_all_interior_pointers if
|
||||
GC_DONT_ADD_BYTE_AT_END is set.
|
||||
- Changed some (long) casts to (word) in preparation for win64.
|
||||
(Thanks to Peter Colson.)
|
||||
- Changed "int stack_size" declaration in pthread_support.c to use
|
||||
size_t. (Only mattered with GC_ASSERTIONS enabled.)
|
||||
- Added CRIS (etrax) support. (Thanks to Simon Posnjak and
|
||||
Hans-Peter Nilsson.)
|
||||
- Removed GC_IGNORE_FB frame buffer recognition, and replaced
|
||||
it with a check that the mapping type is MEM_IMAGE.
|
||||
In theory, this should work much better, but it is a high
|
||||
risk change for win32. (Thanks to Ashley Bone for the crucial
|
||||
experimental data behind this, and to Rutger Ovidus for
|
||||
some further experiments.)
|
||||
- Fixed print_block_list to print the correct kind number for
|
||||
STUBBORN. (Thanks to Rutger Ovidus.)
|
||||
- GC_allochblk_nth incremented GC_words_wasted by bytes rather than
|
||||
words.
|
||||
- Consider GC_words_wasted in GC_adj_words_allocd only if it is within
|
||||
reason. (A hack to avoid some extremely unlikely scenarios in which
|
||||
we manage to allocate only "wasted" space. 7.0 has a better fix.)
|
||||
- Changed PowerPC GC_clear implementation to use lwsync instead of
|
||||
eieio, since the documentation recommends against eieio, and
|
||||
it seems to be incorrect if the preceding memory op is a load.
|
||||
- Fixed print_block_list to print the correct kind number for
|
||||
STUBBORN. (Thanks to Rutger Ovidus.)
|
||||
- GC_allochblk_nth incremented GC_words_wasted by bytes rather than
|
||||
words.
|
||||
- Have configure.in generate an error if it is asked to support
|
||||
pthreads, but doesn't know how to.
|
||||
- Added Kazuhiro Inaoka's patch for Renesas M32R support.
|
||||
- Have the GNU build mechanism link with -ldl. Rename THREADLIBS
|
||||
to THREADDLLIBS to reflect this. (Thanks to Sven Verdoolaege.)
|
||||
- Added Hannes Mehnert's patch for FreeBSD/SPARC support.
|
||||
- Merged some FreeBSD specific patches to threadlibs.c and dyn_load.c.
|
||||
(Thanks tp John Merryweather Cooper.)
|
||||
- Define MPROTECT_VDB on MACOSX only if threads are being used, since the
|
||||
dirty page tracking mechanism uses threads. (This avoids an undefined
|
||||
reference to _GC_darwin_register_mach_handler_thread.)
|
||||
- By popular demand, use __libc symbols only if we are built with
|
||||
USE_LIBC_PRIVATES, which is off by default, and not otherwise documented.
|
||||
- Ignore GC_enable_incremental() requests when KEEP_BACK_PTRS is set.
|
||||
The GC itself will dirty lots of pages in this cases, probably making
|
||||
it counterproductive on all platforms. And the DARWIN port crashes.
|
||||
|
||||
To do:
|
||||
- The USE_MUNMAP code should really use a separate data structure
|
||||
|
|
|
|||
|
|
@ -115,6 +115,7 @@ GC_IGNORE_FB[=<n>] - (Win32 only.) Try to avoid treating a mapped
|
|||
are never honored, eliminating this risk for most,
|
||||
but not all, applications. This feature is likely to disappear
|
||||
if/when we find a less disgusting "solution".
|
||||
IN VERSION 6.4 AND LATER, THIS SHOULD BE UNNECESSARY.
|
||||
|
||||
The following turn on runtime flags that are also program settable. Checked
|
||||
only during initialization. We expect that they will usually be set through
|
||||
|
|
|
|||
|
|
@ -43,9 +43,7 @@ can result in unpleasant heap growth. But it seems better than the
|
|||
race/deadlock issues we had before.
|
||||
|
||||
If solaris_threads are used on an X86 processor with malloc redirected to
|
||||
GC_malloc, it is necessary to call GC_thr_init explicitly before forking the
|
||||
first thread. (This avoids a deadlock arising from calling GC_thr_init
|
||||
with the allocation lock held.)
|
||||
GC_malloc a deadlock is likely to result.
|
||||
|
||||
It appears that there is a problem in using gc_cpp.h in conjunction with
|
||||
Solaris threads and Sun's C++ runtime. Apparently the overloaded new operator
|
||||
|
|
|
|||
|
|
@ -80,6 +80,11 @@
|
|||
# define l_name lm_name
|
||||
#endif
|
||||
|
||||
#if defined(NETBSD)
|
||||
# include <machine/elf_machdep.h>
|
||||
# define ELFSIZE ARCH_ELFSIZE
|
||||
#endif
|
||||
|
||||
#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
|
||||
(defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
|
||||
(defined(NETBSD) && defined(__ELF__)) || defined(HURD)
|
||||
|
|
@ -91,17 +96,25 @@
|
|||
/* Newer versions of GNU/Linux define this macro. We
|
||||
* define it similarly for any ELF systems that don't. */
|
||||
# ifndef ElfW
|
||||
# ifdef __NetBSD__
|
||||
# if ELFSIZE == 32
|
||||
# if defined(FREEBSD)
|
||||
# if __ELF_WORD_SIZE == 32
|
||||
# define ElfW(type) Elf32_##type
|
||||
# else
|
||||
# define ElfW(type) Elf64_##type
|
||||
# endif
|
||||
# else
|
||||
# if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
|
||||
# define ElfW(type) Elf32_##type
|
||||
# ifdef NETBSD
|
||||
# if ELFSIZE == 32
|
||||
# define ElfW(type) Elf32_##type
|
||||
# else
|
||||
# define ElfW(type) Elf64_##type
|
||||
# endif
|
||||
# else
|
||||
# define ElfW(type) Elf64_##type
|
||||
# if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
|
||||
# define ElfW(type) Elf32_##type
|
||||
# else
|
||||
# define ElfW(type) Elf64_##type
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
|
@ -480,7 +493,6 @@ static struct link_map *
|
|||
GC_FirstDLOpenedLinkMap()
|
||||
{
|
||||
ElfW(Dyn) *dp;
|
||||
struct r_debug *r;
|
||||
static struct link_map *cachedResult = 0;
|
||||
|
||||
if( _DYNAMIC == 0) {
|
||||
|
|
@ -489,6 +501,12 @@ GC_FirstDLOpenedLinkMap()
|
|||
if( cachedResult == 0 ) {
|
||||
int tag;
|
||||
for( dp = _DYNAMIC; (tag = dp->d_tag) != 0; dp++ ) {
|
||||
/* FIXME: The DT_DEBUG header is not mandated by the */
|
||||
/* ELF spec. This code appears to be dependent on */
|
||||
/* idiosynchracies of older GNU tool chains. If this code */
|
||||
/* fails for you, the real problem is probably that it is */
|
||||
/* being used at all. You should be getting the */
|
||||
/* dl_iterate_phdr version. */
|
||||
if( tag == DT_DEBUG ) {
|
||||
struct link_map *lm
|
||||
= ((struct r_debug *)(dp->d_un.d_ptr))->r_map;
|
||||
|
|
@ -735,6 +753,10 @@ void GC_register_dynamic_libraries()
|
|||
|
||||
# define HAVE_REGISTER_MAIN_STATIC_DATA
|
||||
|
||||
/* The frame buffer testing code is dead in this version. */
|
||||
/* We leave it here temporarily in case the switch to just */
|
||||
/* testing for MEM_IMAGE sections causes un expected */
|
||||
/* problems. */
|
||||
GC_bool GC_warn_fb = TRUE; /* Warn about traced likely */
|
||||
/* graphics memory. */
|
||||
GC_bool GC_disallow_ignore_fb = FALSE;
|
||||
|
|
@ -749,25 +771,27 @@ void GC_register_dynamic_libraries()
|
|||
|
||||
/* Should [start, start+len) be treated as a frame buffer */
|
||||
/* and ignored? */
|
||||
/* Unfortunately, we currently have no real way to tell */
|
||||
/* automatically, and rely largely on user input. */
|
||||
/* FIXME: If we had more data on this phenomenon (e.g. */
|
||||
/* is start aligned to a MB multiple?) we should be able to */
|
||||
/* do better. */
|
||||
/* Unfortunately, we currently are not quite sure how to tell */
|
||||
/* this automatically, and rely largely on user input. */
|
||||
/* We expect that any mapping with type MEM_MAPPED (which */
|
||||
/* apparently excludes library data sections) can be safely */
|
||||
/* ignored. But we're too chicken to do that in this */
|
||||
/* version. */
|
||||
/* Based on a very limited sample, it appears that: */
|
||||
/* - Frame buffer mappings appear as mappings of length */
|
||||
/* 2**n MB - 192K. (We guess the 192K can vary a bit.) */
|
||||
/* - Have a stating address at best 64K aligned. */
|
||||
/* I'd love more information about the mapping, since I */
|
||||
/* can't reproduce the problem. */
|
||||
static GC_bool is_frame_buffer(ptr_t start, size_t len)
|
||||
/* - Frame buffer mappings appear as mappings of large */
|
||||
/* length, usually a bit less than a power of two. */
|
||||
/* - The definition of "a bit less" in the above cannot */
|
||||
/* be made more precise. */
|
||||
/* - Have a starting address at best 64K aligned. */
|
||||
/* - Have type == MEM_MAPPED. */
|
||||
static GC_bool is_frame_buffer(ptr_t start, size_t len, DWORD tp)
|
||||
{
|
||||
static GC_bool initialized = FALSE;
|
||||
# define MB (1024*1024)
|
||||
# define DEFAULT_FB_MB 15
|
||||
# define MIN_FB_MB 3
|
||||
|
||||
if (GC_disallow_ignore_fb) return FALSE;
|
||||
if (GC_disallow_ignore_fb || tp != MEM_MAPPED) return FALSE;
|
||||
if (!initialized) {
|
||||
char * ignore_fb_string = GETENV("GC_IGNORE_FB");
|
||||
|
||||
|
|
@ -856,7 +880,11 @@ void GC_register_dynamic_libraries()
|
|||
&& (protect == PAGE_EXECUTE_READWRITE
|
||||
|| protect == PAGE_READWRITE)
|
||||
&& !GC_is_heap_base(buf.AllocationBase)
|
||||
&& !is_frame_buffer(p, buf.RegionSize)) {
|
||||
/* This used to check for
|
||||
* !is_frame_buffer(p, buf.RegionSize, buf.Type)
|
||||
* instead of just checking for MEM_IMAGE.
|
||||
* If something breaks, change it back. */
|
||||
&& buf.Type == MEM_IMAGE) {
|
||||
# ifdef DEBUG_VIRTUALQUERY
|
||||
GC_dump_meminfo(&buf);
|
||||
# endif
|
||||
|
|
|
|||
|
|
@ -807,24 +807,21 @@ void (* GC_finalizer_notifier)() = (void (*) GC_PROTO((void)))0;
|
|||
|
||||
static GC_word last_finalizer_notification = 0;
|
||||
|
||||
#ifdef KEEP_BACK_PTRS
|
||||
void GC_generate_random_backtrace_no_gc(void);
|
||||
#endif
|
||||
|
||||
void GC_notify_or_invoke_finalizers GC_PROTO((void))
|
||||
{
|
||||
/* This is a convenient place to generate backtraces if appropriate, */
|
||||
/* since that code is not callable with the allocation lock. */
|
||||
# ifdef KEEP_BACK_PTRS
|
||||
if (GC_backtraces > 0) {
|
||||
static word last_back_trace_gc_no = 3; /* Skip early ones. */
|
||||
long i;
|
||||
# if defined(KEEP_BACK_PTRS) || defined(MAKE_BACK_GRAPH)
|
||||
static word last_back_trace_gc_no = 1; /* Skip first one. */
|
||||
|
||||
LOCK();
|
||||
if (GC_gc_no > last_back_trace_gc_no) {
|
||||
if (GC_gc_no > last_back_trace_gc_no) {
|
||||
word i;
|
||||
|
||||
# ifdef KEEP_BACK_PTRS
|
||||
LOCK();
|
||||
/* Stops when GC_gc_no wraps; that's OK. */
|
||||
last_back_trace_gc_no = (word)(-1); /* disable others. */
|
||||
for (i = 0; i < GC_backtraces; ++i) {
|
||||
last_back_trace_gc_no = (word)(-1); /* disable others. */
|
||||
for (i = 0; i < GC_backtraces; ++i) {
|
||||
/* FIXME: This tolerates concurrent heap mutation, */
|
||||
/* which may cause occasional mysterious results. */
|
||||
/* We need to release the GC lock, since GC_print_callers */
|
||||
|
|
@ -832,10 +829,14 @@ void GC_notify_or_invoke_finalizers GC_PROTO((void))
|
|||
UNLOCK();
|
||||
GC_generate_random_backtrace_no_gc();
|
||||
LOCK();
|
||||
}
|
||||
last_back_trace_gc_no = GC_gc_no;
|
||||
}
|
||||
UNLOCK();
|
||||
}
|
||||
last_back_trace_gc_no = GC_gc_no;
|
||||
UNLOCK();
|
||||
# endif
|
||||
# ifdef MAKE_BACK_GRAPH
|
||||
if (GC_print_back_height)
|
||||
GC_print_back_graph_stats();
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
if (GC_finalize_now == 0) return;
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ OBJDUMP = @OBJDUMP@
|
|||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
STRIP = @STRIP@
|
||||
THREADLIBS = @THREADLIBS@
|
||||
THREADDLLIBS = @THREADDLLIBS@
|
||||
UNWINDLIBS = @UNWINDLIBS@
|
||||
VERSION = @VERSION@
|
||||
addincludes = @addincludes@
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ GC_API GC_word GC_free_space_divisor;
|
|||
/* least N/GC_free_space_divisor bytes between */
|
||||
/* collections, where N is the heap size plus */
|
||||
/* a rough estimate of the root set size. */
|
||||
/* Initially, GC_free_space_divisor = 4. */
|
||||
/* Initially, GC_free_space_divisor = 3. */
|
||||
/* Increasing its value will use less space */
|
||||
/* but more collection time. Decreasing it */
|
||||
/* will appreciably decrease collection time */
|
||||
|
|
@ -308,6 +308,9 @@ GC_API void GC_end_stubborn_change GC_PROTO((GC_PTR));
|
|||
/* the base of the user object. */
|
||||
/* Return 0 if displaced_pointer doesn't point to within a valid */
|
||||
/* object. */
|
||||
/* Note that a deallocated object in the garbage collected heap */
|
||||
/* may be considered valid, even if it has been deallocated with */
|
||||
/* GC_free. */
|
||||
GC_API GC_PTR GC_base GC_PROTO((GC_PTR displaced_pointer));
|
||||
|
||||
/* Given a pointer to the base of an object, return its size in bytes. */
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ cycle, then that's considered a storage leak, and neither will be
|
|||
collectable. See the interface gc.h for low-level facilities for
|
||||
handling such cycles of objects with clean-up.
|
||||
|
||||
The collector cannot guarrantee that it will find all inaccessible
|
||||
The collector cannot guarantee that it will find all inaccessible
|
||||
objects. In practice, it finds almost all of them.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ enum { GC_byte_alignment = 8 };
|
|||
enum { GC_word_alignment = GC_byte_alignment/GC_bytes_per_word };
|
||||
|
||||
inline void * &GC_obj_link(void * p)
|
||||
{ return *(void **)p; }
|
||||
{ return *reinterpret_cast<void **>(p); }
|
||||
|
||||
// Compute a number of words >= n+1 bytes.
|
||||
// The +1 allows for pointers one past the end.
|
||||
|
|
@ -228,7 +228,7 @@ class single_client_gc_alloc_template {
|
|||
} else {
|
||||
flh = GC_objfreelist_ptr + nwords;
|
||||
GC_obj_link(p) = *flh;
|
||||
memset((char *)p + GC_bytes_per_word, 0,
|
||||
memset(reinterpret_cast<char *>(p) + GC_bytes_per_word, 0,
|
||||
GC_bytes_per_word * (nwords - 1));
|
||||
*flh = p;
|
||||
GC_aux::GC_mem_recently_freed += nwords;
|
||||
|
|
@ -352,9 +352,9 @@ class simple_alloc<T, alloc> { \
|
|||
public: \
|
||||
static T *allocate(size_t n) \
|
||||
{ return 0 == n? 0 : \
|
||||
(T*) alloc::ptr_free_allocate(n * sizeof (T)); } \
|
||||
reinterpret_cast<T*>(alloc::ptr_free_allocate(n * sizeof (T))); } \
|
||||
static T *allocate(void) \
|
||||
{ return (T*) alloc::ptr_free_allocate(sizeof (T)); } \
|
||||
{ return reinterpret_cast<T*>(alloc::ptr_free_allocate(sizeof (T))); } \
|
||||
static void deallocate(T *p, size_t n) \
|
||||
{ if (0 != n) alloc::ptr_free_deallocate(p, n * sizeof (T)); } \
|
||||
static void deallocate(T *p) \
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ extern hdr * GC_invalid_header; /* header for an imaginary block */
|
|||
|
||||
/* Analogous to GET_HDR, except that in the case of large objects, it */
|
||||
/* Returns the header for the object beginning, and updates p. */
|
||||
/* Returns &GC_bad_header instead of 0. All of this saves a branch */
|
||||
/* Returns GC_invalid_header instead of 0. All of this saves a branch */
|
||||
/* in the fast path. */
|
||||
# define HC_GET_HDR(p, hhdr, source) \
|
||||
{ \
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@
|
|||
}
|
||||
# define GC_TEST_AND_SET_DEFINED
|
||||
inline static void GC_clear(volatile unsigned int *addr) {
|
||||
__asm__ __volatile__("eieio" : : : "memory");
|
||||
__asm__ __volatile__("lwsync" : : : "memory");
|
||||
*(addr) = 0;
|
||||
}
|
||||
# define GC_CLEAR_DEFINED
|
||||
|
|
@ -231,6 +231,30 @@
|
|||
}
|
||||
# define GC_TEST_AND_SET_DEFINED
|
||||
# endif /* ARM32 */
|
||||
# ifdef CRIS
|
||||
inline static int GC_test_and_set(volatile unsigned int *addr) {
|
||||
/* Ripped from linuxthreads/sysdeps/cris/pt-machine.h. */
|
||||
/* Included with Hans-Peter Nilsson's permission. */
|
||||
register unsigned long int ret;
|
||||
|
||||
/* Note the use of a dummy output of *addr to expose the write.
|
||||
* The memory barrier is to stop *other* writes being moved past
|
||||
* this code.
|
||||
*/
|
||||
__asm__ __volatile__("clearf\n"
|
||||
"0:\n\t"
|
||||
"movu.b [%2],%0\n\t"
|
||||
"ax\n\t"
|
||||
"move.b %3,[%2]\n\t"
|
||||
"bwf 0b\n\t"
|
||||
"clearf"
|
||||
: "=&r" (ret), "=m" (*addr)
|
||||
: "r" (addr), "r" ((int) 1), "m" (*addr)
|
||||
: "memory");
|
||||
return ret;
|
||||
}
|
||||
# define GC_TEST_AND_SET_DEFINED
|
||||
# endif /* CRIS */
|
||||
# ifdef S390
|
||||
inline static int GC_test_and_set(volatile unsigned int *addr) {
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -1632,6 +1632,10 @@ ptr_t GC_generic_malloc_ignore_off_page GC_PROTO((size_t b, int k));
|
|||
/* are ignored. */
|
||||
ptr_t GC_generic_malloc_inner GC_PROTO((word lb, int k));
|
||||
/* Ditto, but I already hold lock, etc. */
|
||||
ptr_t GC_generic_malloc_words_small_inner GC_PROTO((word lw, int k));
|
||||
/* Analogous to the above, but assumes */
|
||||
/* a small object size, and bypasses */
|
||||
/* MERGE_SIZES mechanism. */
|
||||
ptr_t GC_generic_malloc_words_small GC_PROTO((size_t lw, int k));
|
||||
/* As above, but size in units of words */
|
||||
/* Bypasses MERGE_SIZES. Assumes */
|
||||
|
|
@ -1725,6 +1729,13 @@ extern GC_bool GC_print_stats; /* Produce at least some logging output */
|
|||
|
||||
#ifdef KEEP_BACK_PTRS
|
||||
extern long GC_backtraces;
|
||||
void GC_generate_random_backtrace_no_gc(void);
|
||||
#endif
|
||||
|
||||
extern GC_bool GC_print_back_height;
|
||||
|
||||
#ifdef MAKE_BACK_GRAPH
|
||||
void GC_print_back_graph_stats(void);
|
||||
#endif
|
||||
|
||||
/* Macros used for collector internal allocation. */
|
||||
|
|
|
|||
|
|
@ -97,6 +97,10 @@
|
|||
# define ARM32
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(NETBSD) && defined(__sh__)
|
||||
# define SH
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(vax)
|
||||
# define VAX
|
||||
# ifdef ultrix
|
||||
|
|
@ -115,8 +119,8 @@
|
|||
# if defined(nec_ews) || defined(_nec_ews)
|
||||
# define EWS4800
|
||||
# endif
|
||||
# if !defined(LINUX) && !defined(EWS4800)
|
||||
# if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__)
|
||||
# if !defined(LINUX) && !defined(EWS4800) && !defined(NETBSD)
|
||||
# if defined(ultrix) || defined(__ultrix)
|
||||
# define ULTRIX
|
||||
# else
|
||||
# if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) \
|
||||
|
|
@ -170,7 +174,7 @@
|
|||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(sparc) && defined(unix) && !defined(sun) && !defined(linux) \
|
||||
&& !defined(__OpenBSD__) && !(__NetBSD__)
|
||||
&& !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__)
|
||||
# define SPARC
|
||||
# define DRSNX
|
||||
# define mach_type_known
|
||||
|
|
@ -232,6 +236,12 @@
|
|||
# define ARM32
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(LINUX) && defined(__cris__)
|
||||
# ifndef CRIS
|
||||
# define CRIS
|
||||
# endif
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(LINUX) && (defined(powerpc) || defined(__powerpc__) || defined(powerpc64) || defined(__powerpc64__))
|
||||
# define POWERPC
|
||||
# define mach_type_known
|
||||
|
|
@ -252,6 +262,10 @@
|
|||
# define SH
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(LINUX) && defined(__m32r__)
|
||||
# define M32R
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(__alpha) || defined(__alpha__)
|
||||
# define ALPHA
|
||||
# if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) && !defined(FREEBSD)
|
||||
|
|
@ -314,6 +328,10 @@
|
|||
# define X86_64
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# if defined(FREEBSD) && defined(__sparc__)
|
||||
# define SPARC
|
||||
# define mach_type_known
|
||||
#endif
|
||||
# if defined(bsdi) && (defined(i386) || defined(__i386__))
|
||||
# define I386
|
||||
# define BSDI
|
||||
|
|
@ -474,6 +492,8 @@
|
|||
/* POWERPC ==> IBM/Apple PowerPC */
|
||||
/* (MACOS(<=9),DARWIN(incl.MACOSX),*/
|
||||
/* LINUX, NETBSD, NOSYS variants) */
|
||||
/* CRIS ==> Axis Etrax */
|
||||
/* M32R ==> Renesas M32R */
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -505,6 +525,9 @@
|
|||
* DATAEND, if not `end' where `end' is defined as ``extern int end[];''.
|
||||
* RTH suggests gaining access to linker script synth'd values with
|
||||
* this idiom instead of `&end' where `end' is defined as ``extern int end;'' .
|
||||
* Otherwise, ``GCC will assume these are in .sdata/.sbss'' and it will, e.g.,
|
||||
* cause failures on alpha*-*-* with ``-msmall-data or -fpic'' or mips-*-*
|
||||
* without any special options.
|
||||
*
|
||||
* ALIGN_DOUBLE of GC_malloc should return blocks aligned to twice
|
||||
* the pointer size.
|
||||
|
|
@ -739,8 +762,7 @@
|
|||
# define ALIGNMENT 8
|
||||
# define CPP_WORDSZ 64
|
||||
# else
|
||||
# define ALIGNMENT 4 /* Guess. Can someone verify? */
|
||||
/* This was 2, but that didn't sound right. */
|
||||
# define ALIGNMENT 4
|
||||
# endif
|
||||
# define OS_TYPE "LINUX"
|
||||
/* HEURISTIC1 has been reliably reported to fail for a 32-bit */
|
||||
|
|
@ -764,8 +786,10 @@
|
|||
# define USE_MMAP_ANON
|
||||
# define USE_ASM_PUSH_REGS
|
||||
/* This is potentially buggy. It needs more testing. See the comments in
|
||||
os_dep.c */
|
||||
# define MPROTECT_VDB
|
||||
os_dep.c. It relies on threads to track writes. */
|
||||
# ifdef GC_DARWIN_THREADS
|
||||
# define MPROTECT_VDB
|
||||
# endif
|
||||
# include <unistd.h>
|
||||
# define GETPAGESIZE() getpagesize()
|
||||
# if defined(USE_PPC_PREFETCH) && defined(__GNUC__)
|
||||
|
|
@ -938,6 +962,23 @@
|
|||
# define DATASTART ((ptr_t)(etext))
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FREEBSD
|
||||
# define OS_TYPE "FREEBSD"
|
||||
# define SIG_SUSPEND SIGUSR1
|
||||
# define SIG_THR_RESTART SIGUSR2
|
||||
# define FREEBSD_STACKBOTTOM
|
||||
# ifdef __ELF__
|
||||
# define DYNAMIC_LOADING
|
||||
# endif
|
||||
extern char etext[];
|
||||
extern char edata[];
|
||||
extern char end[];
|
||||
# define NEED_FIND_LIMIT
|
||||
# define DATASTART ((ptr_t)(&etext))
|
||||
# define DATAEND (GC_find_limit (DATASTART, TRUE))
|
||||
# define DATASTART2 ((ptr_t)(&edata))
|
||||
# define DATAEND2 ((ptr_t)(&end))
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifdef I386
|
||||
|
|
@ -1351,8 +1392,6 @@
|
|||
# define DATAEND /* not needed */
|
||||
# endif
|
||||
# if defined(NETBSD)
|
||||
/* This also checked for __MIPSEL__ . Why? NETBSD recognition */
|
||||
/* should be handled at the top of the file. */
|
||||
# define ALIGNMENT 4
|
||||
# define OS_TYPE "NETBSD"
|
||||
# define HEURISTIC2
|
||||
|
|
@ -1693,7 +1732,7 @@
|
|||
# define USE_GENERIC_PUSH_REGS
|
||||
# ifdef UTS4
|
||||
# define OS_TYPE "UTS4"
|
||||
extern int etext[];
|
||||
extern int etext[];
|
||||
extern int _etext[];
|
||||
extern int _end[];
|
||||
extern ptr_t GC_SysVGetDataStart();
|
||||
|
|
@ -1718,7 +1757,7 @@
|
|||
# define OS_TYPE "LINUX"
|
||||
# define LINUX_STACKBOTTOM
|
||||
# define DYNAMIC_LOADING
|
||||
extern int __data_start[];
|
||||
extern int __data_start[];
|
||||
# define DATASTART ((ptr_t)(__data_start))
|
||||
extern int _end[];
|
||||
# define DATAEND (_end)
|
||||
|
|
@ -1795,6 +1834,19 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
# ifdef CRIS
|
||||
# define MACH_TYPE "CRIS"
|
||||
# define CPP_WORDSZ 32
|
||||
# define ALIGNMENT 1
|
||||
# define OS_TYPE "LINUX"
|
||||
# define DYNAMIC_LOADING
|
||||
# define LINUX_STACKBOTTOM
|
||||
# define USE_GENERIC_PUSH_REGS
|
||||
# define SEARCH_FOR_DATA_START
|
||||
extern int _end[];
|
||||
# define DATAEND (_end)
|
||||
# endif
|
||||
|
||||
# ifdef SH
|
||||
# define MACH_TYPE "SH"
|
||||
# define ALIGNMENT 4
|
||||
|
|
@ -1811,6 +1863,13 @@
|
|||
extern int _end[];
|
||||
# define DATAEND (_end)
|
||||
# endif
|
||||
# ifdef NETBSD
|
||||
# define OS_TYPE "NETBSD"
|
||||
# define HEURISTIC2
|
||||
# define DATASTART GC_data_start
|
||||
# define USE_GENERIC_PUSH_REGS
|
||||
# define DYNAMIC_LOADING
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifdef SH4
|
||||
|
|
@ -1820,6 +1879,23 @@
|
|||
# define DATAEND /* not needed */
|
||||
# endif
|
||||
|
||||
# ifdef M32R
|
||||
# define CPP_WORDSZ 32
|
||||
# define MACH_TYPE "M32R"
|
||||
# define ALIGNMENT 4
|
||||
# ifdef LINUX
|
||||
# define OS_TYPE "LINUX"
|
||||
# define LINUX_STACKBOTTOM
|
||||
# undef STACK_GRAN
|
||||
# define STACK_GRAN 0x10000000
|
||||
# define USE_GENERIC_PUSH_REGS
|
||||
# define DYNAMIC_LOADING
|
||||
# define SEARCH_FOR_DATA_START
|
||||
extern int _end[];
|
||||
# define DATAEND (_end)
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifdef X86_64
|
||||
# define MACH_TYPE "X86_64"
|
||||
# define ALIGNMENT 8
|
||||
|
|
@ -2043,7 +2119,7 @@
|
|||
# endif
|
||||
|
||||
# if defined(HP_PA) || defined(M88K) || defined(POWERPC) && !defined(DARWIN) \
|
||||
|| defined(LINT) || defined(MSWINCE) || defined(ARM32) \
|
||||
|| defined(LINT) || defined(MSWINCE) || defined(ARM32) || defined(CRIS) \
|
||||
|| (defined(I386) && defined(__LCC__))
|
||||
/* Use setjmp based hack to mark from callee-save registers. */
|
||||
/* The define should move to the individual platform */
|
||||
|
|
@ -2184,7 +2260,7 @@
|
|||
# else
|
||||
# if defined(AMIGA) && defined(GC_AMIGA_FASTALLOC)
|
||||
extern void *GC_amiga_get_mem(size_t size);
|
||||
define GET_MEM(bytes) HBLKPTR((size_t) \
|
||||
# define GET_MEM(bytes) HBLKPTR((size_t) \
|
||||
GC_amiga_get_mem((size_t)bytes + GC_page_size) \
|
||||
+ GC_page_size-1)
|
||||
# else
|
||||
|
|
|
|||
|
|
@ -465,7 +465,7 @@ ptr_t cold_gc_frame;
|
|||
/* the stack. Return sp. */
|
||||
# ifdef SPARC
|
||||
asm(" .seg \"text\"");
|
||||
# if defined(SVR4) || defined(NETBSD)
|
||||
# if defined(SVR4) || defined(NETBSD) || defined(FREEBSD)
|
||||
asm(" .globl GC_save_regs_in_stack");
|
||||
asm("GC_save_regs_in_stack:");
|
||||
asm(" .type GC_save_regs_in_stack,#function");
|
||||
|
|
|
|||
|
|
@ -1450,8 +1450,8 @@ void GC_push_all_eager(bottom, top)
|
|||
ptr_t bottom;
|
||||
ptr_t top;
|
||||
{
|
||||
word * b = (word *)(((long) bottom + ALIGNMENT-1) & ~(ALIGNMENT-1));
|
||||
word * t = (word *)(((long) top) & ~(ALIGNMENT-1));
|
||||
word * b = (word *)(((word) bottom + ALIGNMENT-1) & ~(ALIGNMENT-1));
|
||||
word * t = (word *)(((word) top) & ~(ALIGNMENT-1));
|
||||
register word *p;
|
||||
register word q;
|
||||
register word *lim;
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ void *arg2;
|
|||
byte_sz = WORDS_TO_BYTES(word_sz);
|
||||
if (GC_all_interior_pointers) {
|
||||
/* We need one extra byte; don't fill in GC_size_map[byte_sz] */
|
||||
byte_sz--;
|
||||
byte_sz -= EXTRA_BYTES;
|
||||
}
|
||||
|
||||
for (j = low_limit; j <= byte_sz; j++) GC_size_map[j] = word_sz;
|
||||
|
|
@ -804,7 +804,10 @@ void GC_init_inner()
|
|||
|
||||
void GC_enable_incremental GC_PROTO(())
|
||||
{
|
||||
# if !defined(SMALL_CONFIG)
|
||||
# if !defined(SMALL_CONFIG) && !defined(KEEP_BACK_PTRS)
|
||||
/* If we are keeping back pointers, the GC itself dirties all */
|
||||
/* pages on which objects have been marked, making */
|
||||
/* incremental GC pointless. */
|
||||
if (!GC_find_leak) {
|
||||
DCL_LOCK_STATE;
|
||||
|
||||
|
|
|
|||
|
|
@ -277,7 +277,6 @@ word GC_apply_to_maps(word (*fn)(char *))
|
|||
char *GC_parse_map_entry(char *buf_ptr, word *start, word *end,
|
||||
char *prot_buf, unsigned int *maj_dev)
|
||||
{
|
||||
int i;
|
||||
char *tok;
|
||||
|
||||
if (buf_ptr == NULL || *buf_ptr == '\0') {
|
||||
|
|
@ -859,8 +858,10 @@ ptr_t GC_get_stack_base()
|
|||
# define STAT_SKIP 27 /* Number of fields preceding startstack */
|
||||
/* field in /proc/self/stat */
|
||||
|
||||
#ifdef USE_LIBC_PRIVATES
|
||||
# pragma weak __libc_stack_end
|
||||
extern ptr_t __libc_stack_end;
|
||||
#endif
|
||||
|
||||
# ifdef IA64
|
||||
/* Try to read the backing store base from /proc/self/maps. */
|
||||
|
|
@ -890,30 +891,33 @@ ptr_t GC_get_stack_base()
|
|||
return GC_apply_to_maps(backing_store_base_from_maps);
|
||||
}
|
||||
|
||||
# pragma weak __libc_ia64_register_backing_store_base
|
||||
extern ptr_t __libc_ia64_register_backing_store_base;
|
||||
# ifdef USE_LIBC_PRIVATES
|
||||
# pragma weak __libc_ia64_register_backing_store_base
|
||||
extern ptr_t __libc_ia64_register_backing_store_base;
|
||||
# endif
|
||||
|
||||
ptr_t GC_get_register_stack_base(void)
|
||||
{
|
||||
if (0 != &__libc_ia64_register_backing_store_base
|
||||
&& 0 != __libc_ia64_register_backing_store_base) {
|
||||
/* Glibc 2.2.4 has a bug such that for dynamically linked */
|
||||
/* executables __libc_ia64_register_backing_store_base is */
|
||||
/* defined but uninitialized during constructor calls. */
|
||||
/* Hence we check for both nonzero address and value. */
|
||||
return __libc_ia64_register_backing_store_base;
|
||||
} else {
|
||||
word result = backing_store_base_from_proc();
|
||||
if (0 == result) {
|
||||
# ifdef USE_LIBC_PRIVATES
|
||||
if (0 != &__libc_ia64_register_backing_store_base
|
||||
&& 0 != __libc_ia64_register_backing_store_base) {
|
||||
/* Glibc 2.2.4 has a bug such that for dynamically linked */
|
||||
/* executables __libc_ia64_register_backing_store_base is */
|
||||
/* defined but uninitialized during constructor calls. */
|
||||
/* Hence we check for both nonzero address and value. */
|
||||
return __libc_ia64_register_backing_store_base;
|
||||
}
|
||||
# endif
|
||||
word result = backing_store_base_from_proc();
|
||||
if (0 == result) {
|
||||
/* Use dumb heuristics. Works only for default configuration. */
|
||||
result = (word)GC_stackbottom - BACKING_STORE_DISPLACEMENT;
|
||||
result += BACKING_STORE_ALIGNMENT - 1;
|
||||
result &= ~(BACKING_STORE_ALIGNMENT - 1);
|
||||
/* Verify that it's at least readable. If not, we goofed. */
|
||||
GC_noop1(*(word *)result);
|
||||
}
|
||||
return (ptr_t)result;
|
||||
}
|
||||
return (ptr_t)result;
|
||||
}
|
||||
# endif
|
||||
|
||||
|
|
@ -936,6 +940,7 @@ ptr_t GC_get_stack_base()
|
|||
/* since the correct value of __libc_stack_end never */
|
||||
/* becomes visible to us. The second test works around */
|
||||
/* this. */
|
||||
# ifdef USE_LIBC_PRIVATES
|
||||
if (0 != &__libc_stack_end && 0 != __libc_stack_end ) {
|
||||
# ifdef IA64
|
||||
/* Some versions of glibc set the address 16 bytes too */
|
||||
|
|
@ -948,6 +953,7 @@ ptr_t GC_get_stack_base()
|
|||
return __libc_stack_end;
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
f = open("/proc/self/stat", O_RDONLY);
|
||||
if (f < 0 || STAT_READ(f, stat_buf, STAT_BUF_SIZE) < 2 * STAT_SKIP) {
|
||||
ABORT("Couldn't read /proc/self/stat");
|
||||
|
|
@ -2372,7 +2378,7 @@ SIG_PF GC_old_segv_handler; /* Also old MSWIN32 ACCESS_VIOLATION filter */
|
|||
# endif
|
||||
# ifdef FREEBSD
|
||||
# define SIG_OK (sig == SIGBUS)
|
||||
# define CODE_OK (code == BUS_PAGE_FAULT)
|
||||
# define CODE_OK TRUE
|
||||
# endif
|
||||
# endif /* SUNOS4 || (FREEBSD && !SUNOS5SIGS) */
|
||||
|
||||
|
|
@ -2510,7 +2516,11 @@ SIG_PF GC_old_segv_handler; /* Also old MSWIN32 ACCESS_VIOLATION filter */
|
|||
# if defined(ARM32)
|
||||
char * addr = (char *)sc.fault_address;
|
||||
# else
|
||||
--> architecture not supported
|
||||
# if defined(CRIS)
|
||||
char * addr = (char *)sc.regs.csraddr;
|
||||
# else
|
||||
--> architecture not supported
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
|
@ -3505,10 +3515,8 @@ static void *GC_mprotect_thread(void *arg) {
|
|||
|
||||
mach_msg_id_t id;
|
||||
|
||||
#if defined(THREADS)
|
||||
GC_darwin_register_mach_handler_thread(mach_thread_self());
|
||||
#endif
|
||||
|
||||
|
||||
for(;;) {
|
||||
r = mach_msg(
|
||||
&msg.head,
|
||||
|
|
@ -3945,7 +3953,11 @@ kern_return_t catch_exception_raise_state_identity(
|
|||
# if defined(OPENBSD) || defined(NETBSD)
|
||||
# include <frame.h>
|
||||
# else
|
||||
# include <sys/frame.h>
|
||||
# if defined(FREEBSD)
|
||||
# include <machine/frame.h>
|
||||
# else
|
||||
# include <sys/frame.h>
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
|
@ -3991,7 +4003,7 @@ struct callinfo info[NFRAMES];
|
|||
|
||||
#else /* No builtin backtrace; do it ourselves */
|
||||
|
||||
#if (defined(OPENBSD) || defined(NETBSD)) && defined(SPARC)
|
||||
#if (defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD)) && defined(SPARC)
|
||||
# define FR_SAVFP fr_fp
|
||||
# define FR_SAVPC fr_pc
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
; GC_push_regs function. Under some optimization levels GCC will clobber
|
||||
; some of the non-volatile registers before we get a chance to save them
|
||||
; therefore, this can't be inline asm.
|
||||
; therefore, this cannot be inline asm.
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* Copyright (c) 1994 by Xerox Corporation. All rights reserved.
|
||||
* Copyright (c) 1996 by Silicon Graphics. All rights reserved.
|
||||
* Copyright (c) 1998 by Fergus Henderson. All rights reserved.
|
||||
* Copyright (c) 2000-2001 by Hewlett-Packard Company. All rights reserved.
|
||||
* Copyright (c) 2000-2004 by Hewlett-Packard Company. All rights reserved.
|
||||
*
|
||||
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
|
||||
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
|
||||
|
|
@ -839,9 +839,9 @@ int GC_get_nprocs()
|
|||
/* We hold the allocation lock. */
|
||||
void GC_thr_init()
|
||||
{
|
||||
# ifndef GC_DARWIN_THREADS
|
||||
int dummy;
|
||||
# endif
|
||||
# ifndef GC_DARWIN_THREADS
|
||||
int dummy;
|
||||
# endif
|
||||
GC_thread t;
|
||||
|
||||
if (GC_thr_initialized) return;
|
||||
|
|
@ -927,6 +927,8 @@ void GC_thr_init()
|
|||
/* Disable true incremental collection, but generational is OK. */
|
||||
GC_time_limit = GC_TIME_UNLIMITED;
|
||||
}
|
||||
/* If we are using a parallel marker, actually start helper threads. */
|
||||
if (GC_parallel) start_mark_threads();
|
||||
# endif
|
||||
}
|
||||
|
||||
|
|
@ -943,10 +945,6 @@ void GC_init_parallel()
|
|||
|
||||
/* GC_init() calls us back, so set flag first. */
|
||||
if (!GC_is_initialized) GC_init();
|
||||
/* If we are using a parallel marker, start the helper threads. */
|
||||
# ifdef PARALLEL_MARK
|
||||
if (GC_parallel) start_mark_threads();
|
||||
# endif
|
||||
/* Initialize thread local free lists if used. */
|
||||
# if defined(THREAD_LOCAL_ALLOC) && !defined(DBG_HDRS_ALL)
|
||||
LOCK();
|
||||
|
|
@ -1222,7 +1220,7 @@ WRAP_FUNC(pthread_create)(pthread_t *new_thread,
|
|||
if (!GC_thr_initialized) GC_thr_init();
|
||||
# ifdef GC_ASSERTIONS
|
||||
{
|
||||
int stack_size;
|
||||
size_t stack_size;
|
||||
if (NULL == attr) {
|
||||
pthread_attr_t my_attr;
|
||||
pthread_attr_init(&my_attr);
|
||||
|
|
|
|||
|
|
@ -888,7 +888,7 @@ void GC_print_block_list()
|
|||
{
|
||||
struct Print_stats pstats;
|
||||
|
||||
GC_printf0("(kind(0=ptrfree,1=normal,2=unc.,3=stubborn):size_in_bytes, #_marks_set)\n");
|
||||
GC_printf1("(kind(0=ptrfree,1=normal,2=unc.,%lu=stubborn):size_in_bytes, #_marks_set)\n", STUBBORN);
|
||||
pstats.number_of_blocks = 0;
|
||||
pstats.total_bytes = 0;
|
||||
GC_apply_to_all_blocks(GC_print_block_descr, (word)&pstats);
|
||||
|
|
|
|||
|
|
@ -16,9 +16,8 @@
|
|||
* Modified by Peter C. for Solaris Posix Threads.
|
||||
*/
|
||||
|
||||
# if defined(GC_SOLARIS_PTHREADS) || defined(GC_THREADS)
|
||||
# include "private/gc_priv.h"
|
||||
# endif
|
||||
|
||||
# if defined(GC_SOLARIS_PTHREADS)
|
||||
# include <pthread.h>
|
||||
# include <thread.h>
|
||||
|
|
|
|||
|
|
@ -16,10 +16,7 @@
|
|||
*/
|
||||
/* Boehm, September 14, 1994 4:44 pm PDT */
|
||||
|
||||
# if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS) \
|
||||
|| defined(GC_THREADS)
|
||||
# include "private/gc_priv.h"
|
||||
# endif
|
||||
# include "private/gc_priv.h"
|
||||
|
||||
# if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS)
|
||||
# include "private/solaris_threads.h"
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@
|
|||
* modified is included with the above copyright notice.
|
||||
*/
|
||||
|
||||
#include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
|
||||
|
||||
#if defined(GC_LINUX_THREADS)
|
||||
|
||||
#include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
|
||||
#include "private/specific.h"
|
||||
|
||||
static tse invalid_tse = {INVALID_QTID, 0, 0, INVALID_THREADID};
|
||||
|
|
|
|||
|
|
@ -11,10 +11,17 @@ int main()
|
|||
"-Wl,--wrap -Wl,pthread_sigmask -Wl,--wrap -Wl,sleep\n");
|
||||
# endif
|
||||
# if defined(GC_LINUX_THREADS) || defined(GC_IRIX_THREADS) \
|
||||
|| defined(GC_FREEBSD_THREADS) || defined(GC_SOLARIS_PTHREADS) \
|
||||
|| defined(GC_SOLARIS_PTHREADS) \
|
||||
|| defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)
|
||||
printf("-lpthread\n");
|
||||
# endif
|
||||
# if defined(GC_FREEBSD_THREADS)
|
||||
# if (__FREEBSD_version >= 500000)
|
||||
printf("-lpthread\n");
|
||||
# else
|
||||
printf("-pthread\n");
|
||||
# endif
|
||||
# endif
|
||||
# if defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS)
|
||||
printf("-lpthread -lrt\n");
|
||||
# endif
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/* Eventually this one may become unnecessary. For now we need */
|
||||
/* it to keep the old-style build process working. */
|
||||
#define GC_TMP_VERSION_MAJOR 6
|
||||
#define GC_TMP_VERSION_MINOR 3
|
||||
#define GC_TMP_VERSION_MINOR 4
|
||||
#define GC_TMP_ALPHA_VERSION GC_NOT_ALPHA
|
||||
|
||||
#ifndef GC_NOT_ALPHA
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include "private/gc_priv.h"
|
||||
|
||||
#if defined(GC_WIN32_THREADS)
|
||||
|
||||
#include "private/gc_priv.h"
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef CYGWIN32
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue