>From 5bf1725b7287061bb54e11a2ec073373dcd5c45d Mon Sep 17 00:00:00 2001 From: Neil Jerram Date: Wed, 21 Dec 2011 19:54:09 +0000 Subject: [PATCH] Debian 7.1-8 Conflicts: ChangeLog autogen.sh configure configure.ac include/gc_config_macros.h include/private/gcconfig.h include/private/thread_local_alloc.h mach_dep.c mkinstalldirs tests/trace_test.c windows-untested/vc60/gc.dsp windows-untested/vc60/libgc.dsp windows-untested/vc60/libgcmt.dsp windows-untested/vc70/gc.vcproj windows-untested/vc70/libgc.vcproj windows-untested/vc70/libgcmt.vcproj windows-untested/vc71/gc.vcproj windows-untested/vc71/libgc.vcproj windows-untested/vc71/libgcmt.vcproj --- .pc/.quilt_patches | 1 + .pc/.quilt_series | 1 + .pc/.version | 1 + .pc/01-catch-all-linux.diff/configure.ac | 688 +++ .pc/02-manpage.diff/doc/gc.man | 97 + .../include/private/gcconfig.h | 2364 +++++++++ .../include/private/thread_local_alloc.h | 154 + .../libatomic_ops-1.2/src/atomic_ops.h | 300 ++ .pc/03-add-avr32-support.diff/mach_dep.c | 245 + .pc/04-fix-sparc-ftbfs.diff/configure.ac | 684 +++ .pc/06-m68k-no-getcontext.diff/mach_dep.c | 245 + .pc/applied-patches | 6 + .pc/enable-threads.diff/include/gc_config_macros.h | 179 + autogen.sh | 32 - configure.ac | 24 +- debian/changelog | 512 ++ debian/compat | 1 + debian/control | 47 + debian/copyright | 32 + debian/libgc-dev.install | 9 + debian/libgc1c2.docs | 1 + debian/libgc1c2.install | 1 + debian/libgc1c2.symbols | 3 + debian/libgc1c2.symbols.amd64 | 516 ++ debian/libgc1c2.symbols.armel | 513 ++ debian/libgc1c2.symbols.armhf | 513 ++ debian/libgc1c2.symbols.avr32 | 513 ++ debian/libgc1c2.symbols.hppa | 509 ++ debian/libgc1c2.symbols.hurd-i386 | 502 ++ debian/libgc1c2.symbols.i386 | 516 ++ debian/libgc1c2.symbols.kfreebsd-amd64 | 501 ++ debian/libgc1c2.symbols.kfreebsd-i386 | 501 ++ debian/libgc1c2.symbols.mips | 501 ++ debian/libgc1c2.symbols.mipsel | 501 ++ debian/libgc1c2.symbols.powerpc | 509 ++ debian/libgc1c2.symbols.powerpcspe | 509 ++ debian/libgc1c2.symbols.ppc64 | 509 ++ debian/libgc1c2.symbols.s390 | 501 ++ debian/libgc1c2.symbols.sh4 | 508 ++ debian/libgc1c2.symbols.sparc | 512 ++ debian/patches/01-catch-all-linux.diff | 28 + debian/patches/02-manpage.diff | 27 + debian/patches/03-add-avr32-support.diff | 124 + debian/patches/04-fix-sparc-ftbfs.diff | 13 + debian/patches/05-s390-includes.diff | 14 + debian/patches/05_libgc_fix_threadlocal.patch | 23 + debian/patches/06-m68k-no-getcontext.diff | 13 + debian/patches/enable-threads.diff | 24 + debian/patches/series | 7 + debian/rules | 38 + debian/source/format | 1 + debian/watch | 3 + doc/gc.man | 6 +- include/gc_config_macros.h | 4 + include/private/gcconfig.h | 13 + include/private/thread_local_alloc.h~ | 194 + libatomic_ops-1.2/AUTHORS | 4 + libatomic_ops-1.2/COPYING | 340 ++ libatomic_ops-1.2/CVS/Entries | 21 + libatomic_ops-1.2/CVS/Repository | 1 + libatomic_ops-1.2/CVS/Root | 1 + libatomic_ops-1.2/ChangeLog | 206 + libatomic_ops-1.2/INSTALL | 14 + libatomic_ops-1.2/Makefile.am | 3 + libatomic_ops-1.2/Makefile.in | 563 ++ libatomic_ops-1.2/NEWS | 1 + libatomic_ops-1.2/README | 13 + libatomic_ops-1.2/aclocal.m4 | 1076 ++++ libatomic_ops-1.2/compile | 142 + libatomic_ops-1.2/config.guess | 1500 ++++++ libatomic_ops-1.2/config.sub | 1608 ++++++ libatomic_ops-1.2/configure | 5609 ++++++++++++++++++++ libatomic_ops-1.2/configure.ac | 66 + libatomic_ops-1.2/depcomp | 530 ++ libatomic_ops-1.2/doc/COPYING | 340 ++ libatomic_ops-1.2/doc/CVS/Entries | 9 + libatomic_ops-1.2/doc/CVS/Repository | 1 + libatomic_ops-1.2/doc/CVS/Root | 1 + libatomic_ops-1.2/doc/LICENSING.txt | 64 + libatomic_ops-1.2/doc/Makefile.am | 3 + libatomic_ops-1.2/doc/Makefile.in | 329 ++ libatomic_ops-1.2/doc/README.txt | 245 + libatomic_ops-1.2/doc/README_malloc.txt | 57 + libatomic_ops-1.2/doc/README_stack.txt | 78 + libatomic_ops-1.2/doc/README_win32.txt | 28 + libatomic_ops-1.2/install-sh | 323 ++ libatomic_ops-1.2/missing | 360 ++ libatomic_ops-1.2/mkinstalldirs | 158 + libatomic_ops-1.2/src/CVS/Entries | 12 + libatomic_ops-1.2/src/CVS/Repository | 1 + libatomic_ops-1.2/src/CVS/Root | 1 + libatomic_ops-1.2/src/Makefile.am | 16 + libatomic_ops-1.2/src/Makefile.in | 597 +++ libatomic_ops-1.2/src/Makefile.msft | 45 + libatomic_ops-1.2/src/atomic_ops.c | 225 + libatomic_ops-1.2/src/atomic_ops.h | 303 ++ libatomic_ops-1.2/src/atomic_ops/CVS/Entries | 6 + libatomic_ops-1.2/src/atomic_ops/CVS/Repository | 1 + libatomic_ops-1.2/src/atomic_ops/CVS/Root | 1 + libatomic_ops-1.2/src/atomic_ops/Makefile.am | 12 + libatomic_ops-1.2/src/atomic_ops/Makefile.in | 480 ++ .../src/atomic_ops/generalize-small.h | 1725 ++++++ .../src/atomic_ops/generalize-small.template | 575 ++ libatomic_ops-1.2/src/atomic_ops/generalize.h | 1355 +++++ .../src/atomic_ops/sysdeps/CVS/Entries | 33 + .../src/atomic_ops/sysdeps/CVS/Repository | 1 + libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Root | 1 + .../src/atomic_ops/sysdeps/Makefile.am | 47 + .../src/atomic_ops/sysdeps/Makefile.in | 427 ++ libatomic_ops-1.2/src/atomic_ops/sysdeps/README | 7 + .../atomic_ops/sysdeps/acquire_release_volatile.h | 64 + .../atomic_ops/sysdeps/aligned_atomic_load_store.h | 48 + .../sysdeps/all_acquire_release_volatile.h | 31 + .../sysdeps/all_aligned_atomic_load_store.h | 30 + .../src/atomic_ops/sysdeps/all_atomic_load_store.h | 31 + .../src/atomic_ops/sysdeps/ao_t_is_int.h | 126 + .../src/atomic_ops/sysdeps/armcc/CVS/Entries | 2 + .../src/atomic_ops/sysdeps/armcc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/armcc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/armcc/arm_v6.h | 199 + .../src/atomic_ops/sysdeps/atomic_load_store.h | 46 + .../sysdeps/char_acquire_release_volatile.h | 55 + .../atomic_ops/sysdeps/char_atomic_load_store.h | 46 + .../src/atomic_ops/sysdeps/emul_cas.h | 76 + .../src/atomic_ops/sysdeps/gcc/CVS/Entries | 12 + .../src/atomic_ops/sysdeps/gcc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/gcc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/gcc/alpha.h | 68 + libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/arm.h | 250 + .../src/atomic_ops/sysdeps/gcc/avr32.h | 44 + .../src/atomic_ops/sysdeps/gcc/cris.h | 71 + .../src/atomic_ops/sysdeps/gcc/hppa.h | 97 + .../src/atomic_ops/sysdeps/gcc/ia64.h | 297 ++ .../src/atomic_ops/sysdeps/gcc/m68k.h | 45 + .../src/atomic_ops/sysdeps/gcc/powerpc.h | 270 + .../src/atomic_ops/sysdeps/gcc/s390.h | 63 + .../src/atomic_ops/sysdeps/gcc/sparc.h | 46 + libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86.h | 170 + .../src/atomic_ops/sysdeps/gcc/x86_64.h | 195 + .../src/atomic_ops/sysdeps/generic_pthread.h | 289 + .../src/atomic_ops/sysdeps/hpc/CVS/Entries | 3 + .../src/atomic_ops/sysdeps/hpc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/hpc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/hpc/hppa.h | 102 + .../src/atomic_ops/sysdeps/hpc/ia64.h | 174 + .../src/atomic_ops/sysdeps/ibmc/CVS/Entries | 2 + .../src/atomic_ops/sysdeps/ibmc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/ibmc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/ibmc/powerpc.h | 126 + .../src/atomic_ops/sysdeps/icc/CVS/Entries | 2 + .../src/atomic_ops/sysdeps/icc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/icc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/icc/ia64.h | 225 + .../sysdeps/int_acquire_release_volatile.h | 55 + .../sysdeps/int_aligned_atomic_load_store.h | 48 + .../src/atomic_ops/sysdeps/int_atomic_load_store.h | 46 + .../src/atomic_ops/sysdeps/msftc/CVS/Entries | 3 + .../src/atomic_ops/sysdeps/msftc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/msftc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/msftc/x86.h | 197 + .../src/atomic_ops/sysdeps/msftc/x86_64.h | 186 + libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered.h | 38 + .../src/atomic_ops/sysdeps/ordered_except_wr.h | 101 + .../src/atomic_ops/sysdeps/read_ordered.h | 102 + .../sysdeps/short_acquire_release_volatile.h | 55 + .../sysdeps/short_aligned_atomic_load_store.h | 48 + .../atomic_ops/sysdeps/short_atomic_load_store.h | 46 + .../src/atomic_ops/sysdeps/standard_ao_double_t.h | 36 + .../src/atomic_ops/sysdeps/sunc/CVS/Entries | 3 + .../src/atomic_ops/sysdeps/sunc/CVS/Repository | 1 + .../src/atomic_ops/sysdeps/sunc/CVS/Root | 1 + .../src/atomic_ops/sysdeps/sunc/sparc.S | 5 + .../src/atomic_ops/sysdeps/sunc/sparc.h | 38 + .../atomic_ops/sysdeps/test_and_set_t_is_ao_t.h | 36 + .../atomic_ops/sysdeps/test_and_set_t_is_char.h | 38 + libatomic_ops-1.2/src/atomic_ops_malloc.c | 288 + libatomic_ops-1.2/src/atomic_ops_malloc.h | 44 + libatomic_ops-1.2/src/atomic_ops_stack.c | 302 ++ libatomic_ops-1.2/src/atomic_ops_stack.h | 188 + libatomic_ops-1.2/src/atomic_ops_sysdeps.S | 9 + libatomic_ops-1.2/src/config.h.in | 58 + libatomic_ops-1.2/tests/CVS/Entries | 11 + libatomic_ops-1.2/tests/CVS/Repository | 1 + libatomic_ops-1.2/tests/CVS/Root | 1 + libatomic_ops-1.2/tests/Makefile.am | 51 + libatomic_ops-1.2/tests/Makefile.in | 547 ++ libatomic_ops-1.2/tests/list_atomic.c | 569 ++ libatomic_ops-1.2/tests/list_atomic.template | 71 + libatomic_ops-1.2/tests/run_parallel.inc | 204 + libatomic_ops-1.2/tests/test_atomic.c | 190 + libatomic_ops-1.2/tests/test_atomic.template | 203 + libatomic_ops-1.2/tests/test_atomic_include.h | 1633 ++++++ libatomic_ops-1.2/tests/test_malloc.c | 182 + libatomic_ops-1.2/tests/test_stack.c | 232 + tests/trace_test.c | 41 - windows-untested/README | 4 - windows-untested/gc.def | 2 - windows-untested/gc.rc | 1 - windows-untested/gc.ver | 86 - windows-untested/stdafx.c | 1 - windows-untested/stdafx.h | 20 - windows-untested/vc60/all.dsp | 63 - windows-untested/vc60/gc.dsp | 332 -- windows-untested/vc60/gc.dsw | 194 - windows-untested/vc60/libgc.dsp | 269 - windows-untested/vc60/libgcmt.dsp | 225 - windows-untested/vc60/test.dsp | 63 - windows-untested/vc60/test_gc.dsp | 93 - windows-untested/vc60/test_leak_gc.dsp | 93 - windows-untested/vc60/test_leak_libgc.dsp | 93 - windows-untested/vc60/test_leak_libgcmt.dsp | 93 - windows-untested/vc60/test_libgc.dsp | 93 - windows-untested/vc60/test_libgcmt.dsp | 93 - windows-untested/vc60/vc60crlf.cmd | 15 - windows-untested/vc70/all.vcproj | 49 - windows-untested/vc70/gc.sln | 96 - windows-untested/vc70/gc.vcproj | 347 -- windows-untested/vc70/libgc.vcproj | 258 - windows-untested/vc70/libgcmt.vcproj | 225 - windows-untested/vc70/test.vcproj | 49 - windows-untested/vc70/test_gc.vcproj | 127 - windows-untested/vc70/test_leak_gc.vcproj | 127 - windows-untested/vc70/test_leak_libgc.vcproj | 127 - windows-untested/vc70/test_leak_libgcmt.vcproj | 127 - windows-untested/vc70/test_libgc.vcproj | 127 - windows-untested/vc70/test_libgcmt.vcproj | 127 - windows-untested/vc71/all.vcproj | 57 - windows-untested/vc71/gc.sln | 116 - windows-untested/vc71/gc.vcproj | 869 --- windows-untested/vc71/libgc.vcproj | 776 --- windows-untested/vc71/libgcmt.vcproj | 743 --- windows-untested/vc71/test.vcproj | 57 - windows-untested/vc71/test_gc.vcproj | 161 - windows-untested/vc71/test_leak_gc.vcproj | 161 - windows-untested/vc71/test_leak_libgc.vcproj | 161 - windows-untested/vc71/test_leak_libgcmt.vcproj | 161 - windows-untested/vc71/test_libgc.vcproj | 161 - windows-untested/vc71/test_libgcmt.vcproj | 161 - 238 files changed, 43494 insertions(+), 7292 deletions(-) create mode 100644 .pc/.quilt_patches create mode 100644 .pc/.quilt_series create mode 100644 .pc/.version create mode 100644 .pc/01-catch-all-linux.diff/configure.ac create mode 100644 .pc/02-manpage.diff/doc/gc.man create mode 100644 .pc/03-add-avr32-support.diff/include/private/gcconfig.h create mode 100644 .pc/03-add-avr32-support.diff/include/private/thread_local_alloc.h create mode 100755 .pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops.h create mode 100644 .pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h create mode 100644 .pc/03-add-avr32-support.diff/mach_dep.c create mode 100644 .pc/04-fix-sparc-ftbfs.diff/configure.ac create mode 100644 .pc/06-m68k-no-getcontext.diff/mach_dep.c create mode 100644 .pc/applied-patches create mode 100644 .pc/enable-threads.diff/include/gc_config_macros.h mode change 100644 => 100755 NT_MAKEFILE delete mode 100755 autogen.sh create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/libgc-dev.install create mode 100644 debian/libgc1c2.docs create mode 100644 debian/libgc1c2.install create mode 100644 debian/libgc1c2.symbols create mode 100644 debian/libgc1c2.symbols.amd64 create mode 100644 debian/libgc1c2.symbols.armel create mode 100644 debian/libgc1c2.symbols.armhf create mode 100644 debian/libgc1c2.symbols.avr32 create mode 100644 debian/libgc1c2.symbols.hppa create mode 100644 debian/libgc1c2.symbols.hurd-i386 create mode 100644 debian/libgc1c2.symbols.i386 create mode 100644 debian/libgc1c2.symbols.kfreebsd-amd64 create mode 100644 debian/libgc1c2.symbols.kfreebsd-i386 create mode 100644 debian/libgc1c2.symbols.mips create mode 100644 debian/libgc1c2.symbols.mipsel create mode 100644 debian/libgc1c2.symbols.powerpc create mode 100644 debian/libgc1c2.symbols.powerpcspe create mode 100644 debian/libgc1c2.symbols.ppc64 create mode 100644 debian/libgc1c2.symbols.s390 create mode 100644 debian/libgc1c2.symbols.sh4 create mode 100644 debian/libgc1c2.symbols.sparc create mode 100644 debian/patches/01-catch-all-linux.diff create mode 100644 debian/patches/02-manpage.diff create mode 100644 debian/patches/03-add-avr32-support.diff create mode 100644 debian/patches/04-fix-sparc-ftbfs.diff create mode 100644 debian/patches/05-s390-includes.diff create mode 100644 debian/patches/05_libgc_fix_threadlocal.patch create mode 100644 debian/patches/06-m68k-no-getcontext.diff create mode 100644 debian/patches/enable-threads.diff create mode 100644 debian/patches/series create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch create mode 100644 include/private/thread_local_alloc.h~ create mode 100644 libatomic_ops-1.2/AUTHORS create mode 100644 libatomic_ops-1.2/COPYING create mode 100644 libatomic_ops-1.2/CVS/Entries create mode 100644 libatomic_ops-1.2/CVS/Repository create mode 100644 libatomic_ops-1.2/CVS/Root create mode 100644 libatomic_ops-1.2/ChangeLog create mode 100644 libatomic_ops-1.2/INSTALL create mode 100644 libatomic_ops-1.2/Makefile.am create mode 100644 libatomic_ops-1.2/Makefile.in create mode 100644 libatomic_ops-1.2/NEWS create mode 100644 libatomic_ops-1.2/README create mode 100644 libatomic_ops-1.2/aclocal.m4 create mode 100755 libatomic_ops-1.2/compile create mode 100755 libatomic_ops-1.2/config.guess create mode 100755 libatomic_ops-1.2/config.sub create mode 100755 libatomic_ops-1.2/configure create mode 100644 libatomic_ops-1.2/configure.ac create mode 100755 libatomic_ops-1.2/depcomp create mode 100644 libatomic_ops-1.2/doc/COPYING create mode 100644 libatomic_ops-1.2/doc/CVS/Entries create mode 100644 libatomic_ops-1.2/doc/CVS/Repository create mode 100644 libatomic_ops-1.2/doc/CVS/Root create mode 100644 libatomic_ops-1.2/doc/LICENSING.txt create mode 100644 libatomic_ops-1.2/doc/Makefile.am create mode 100644 libatomic_ops-1.2/doc/Makefile.in create mode 100644 libatomic_ops-1.2/doc/README.txt create mode 100644 libatomic_ops-1.2/doc/README_malloc.txt create mode 100644 libatomic_ops-1.2/doc/README_stack.txt create mode 100644 libatomic_ops-1.2/doc/README_win32.txt create mode 100755 libatomic_ops-1.2/install-sh create mode 100755 libatomic_ops-1.2/missing create mode 100755 libatomic_ops-1.2/mkinstalldirs create mode 100644 libatomic_ops-1.2/src/CVS/Entries create mode 100644 libatomic_ops-1.2/src/CVS/Repository create mode 100644 libatomic_ops-1.2/src/CVS/Root create mode 100644 libatomic_ops-1.2/src/Makefile.am create mode 100644 libatomic_ops-1.2/src/Makefile.in create mode 100644 libatomic_ops-1.2/src/Makefile.msft create mode 100644 libatomic_ops-1.2/src/atomic_ops.c create mode 100755 libatomic_ops-1.2/src/atomic_ops.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/Makefile.am create mode 100644 libatomic_ops-1.2/src/atomic_ops/Makefile.in create mode 100644 libatomic_ops-1.2/src/atomic_ops/generalize-small.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/generalize-small.template create mode 100644 libatomic_ops-1.2/src/atomic_ops/generalize.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.am create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.in create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/README create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/acquire_release_volatile.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/aligned_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/all_acquire_release_volatile.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/all_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ao_t_is_int.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/arm_v6.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/char_acquire_release_volatile.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/char_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/emul_cas.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/alpha.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/arm.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/cris.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/hppa.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/ia64.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/m68k.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/powerpc.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/sparc.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/generic_pthread.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/hppa.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/ia64.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/powerpc.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/ia64.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/int_acquire_release_volatile.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/int_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86_64.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered_except_wr.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/read_ordered.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/short_acquire_release_volatile.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/short_atomic_load_store.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/standard_ao_double_t.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Entries create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Repository create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Root create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.S create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h create mode 100644 libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_char.h create mode 100644 libatomic_ops-1.2/src/atomic_ops_malloc.c create mode 100644 libatomic_ops-1.2/src/atomic_ops_malloc.h create mode 100644 libatomic_ops-1.2/src/atomic_ops_stack.c create mode 100644 libatomic_ops-1.2/src/atomic_ops_stack.h create mode 100644 libatomic_ops-1.2/src/atomic_ops_sysdeps.S create mode 100644 libatomic_ops-1.2/src/config.h.in create mode 100644 libatomic_ops-1.2/tests/CVS/Entries create mode 100644 libatomic_ops-1.2/tests/CVS/Repository create mode 100644 libatomic_ops-1.2/tests/CVS/Root create mode 100644 libatomic_ops-1.2/tests/Makefile.am create mode 100644 libatomic_ops-1.2/tests/Makefile.in create mode 100644 libatomic_ops-1.2/tests/list_atomic.c create mode 100644 libatomic_ops-1.2/tests/list_atomic.template create mode 100644 libatomic_ops-1.2/tests/run_parallel.inc create mode 100644 libatomic_ops-1.2/tests/test_atomic.c create mode 100644 libatomic_ops-1.2/tests/test_atomic.template create mode 100644 libatomic_ops-1.2/tests/test_atomic_include.h create mode 100644 libatomic_ops-1.2/tests/test_malloc.c create mode 100644 libatomic_ops-1.2/tests/test_stack.c mode change 100644 => 100755 misc.c delete mode 100644 tests/trace_test.c mode change 100644 => 100755 win32_threads.c delete mode 100644 windows-untested/README delete mode 100644 windows-untested/gc.def delete mode 100644 windows-untested/gc.rc delete mode 100644 windows-untested/gc.ver delete mode 100644 windows-untested/stdafx.c delete mode 100644 windows-untested/stdafx.h delete mode 100644 windows-untested/vc60/all.dsp delete mode 100644 windows-untested/vc60/gc.dsp delete mode 100644 windows-untested/vc60/gc.dsw delete mode 100644 windows-untested/vc60/libgc.dsp delete mode 100644 windows-untested/vc60/libgcmt.dsp delete mode 100644 windows-untested/vc60/test.dsp delete mode 100644 windows-untested/vc60/test_gc.dsp delete mode 100644 windows-untested/vc60/test_leak_gc.dsp delete mode 100644 windows-untested/vc60/test_leak_libgc.dsp delete mode 100644 windows-untested/vc60/test_leak_libgcmt.dsp delete mode 100644 windows-untested/vc60/test_libgc.dsp delete mode 100644 windows-untested/vc60/test_libgcmt.dsp delete mode 100755 windows-untested/vc60/vc60crlf.cmd delete mode 100644 windows-untested/vc70/all.vcproj delete mode 100644 windows-untested/vc70/gc.sln delete mode 100644 windows-untested/vc70/gc.vcproj delete mode 100644 windows-untested/vc70/libgc.vcproj delete mode 100644 windows-untested/vc70/libgcmt.vcproj delete mode 100644 windows-untested/vc70/test.vcproj delete mode 100644 windows-untested/vc70/test_gc.vcproj delete mode 100644 windows-untested/vc70/test_leak_gc.vcproj delete mode 100644 windows-untested/vc70/test_leak_libgc.vcproj delete mode 100644 windows-untested/vc70/test_leak_libgcmt.vcproj delete mode 100644 windows-untested/vc70/test_libgc.vcproj delete mode 100644 windows-untested/vc70/test_libgcmt.vcproj delete mode 100644 windows-untested/vc71/all.vcproj delete mode 100644 windows-untested/vc71/gc.sln delete mode 100644 windows-untested/vc71/gc.vcproj delete mode 100644 windows-untested/vc71/libgc.vcproj delete mode 100644 windows-untested/vc71/libgcmt.vcproj delete mode 100644 windows-untested/vc71/test.vcproj delete mode 100644 windows-untested/vc71/test_gc.vcproj delete mode 100644 windows-untested/vc71/test_leak_gc.vcproj delete mode 100644 windows-untested/vc71/test_leak_libgc.vcproj delete mode 100644 windows-untested/vc71/test_leak_libgcmt.vcproj delete mode 100644 windows-untested/vc71/test_libgc.vcproj delete mode 100644 windows-untested/vc71/test_libgcmt.vcproj diff --git a/.pc/.quilt_patches b/.pc/.quilt_patches new file mode 100644 index 0000000..6857a8d --- /dev/null +++ b/.pc/.quilt_patches @@ -0,0 +1 @@ +debian/patches diff --git a/.pc/.quilt_series b/.pc/.quilt_series new file mode 100644 index 0000000..c206706 --- /dev/null +++ b/.pc/.quilt_series @@ -0,0 +1 @@ +series diff --git a/.pc/.version b/.pc/.version new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/.pc/.version @@ -0,0 +1 @@ +2 diff --git a/.pc/01-catch-all-linux.diff/configure.ac b/.pc/01-catch-all-linux.diff/configure.ac new file mode 100644 index 0000000..27c5c0e --- /dev/null +++ b/.pc/01-catch-all-linux.diff/configure.ac @@ -0,0 +1,688 @@ +# 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 +# Modified by: Grzegorz Jakacki + +dnl Process this file with autoconf to produce configure. + +# Initialization +# ============== + +AC_INIT(gc,7.1,address@hidden) + ## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)? +AC_CONFIG_SRCDIR(gcj_mlc.c) +AC_CANONICAL_TARGET +AC_PREREQ(2.53) +AC_REVISION($Revision: 1.35 $) +GC_SET_VERSION +AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects nostdinc]) +AM_MAINTAINER_MODE + +AC_SUBST(PACKAGE) +AC_SUBST(GC_VERSION) + +AM_PROG_CC_C_O +AC_PROG_CXX + +AM_PROG_AS +## FIXME: really needed? (AC_LIBTOOL already provides this) +AC_CHECK_TOOL(AR, ar) +AC_CHECK_TOOL(RANLIB, ranlib, :) # :) + +AC_PROG_INSTALL + +. ${srcdir}/configure.host + +GC_CFLAGS=${gc_cflags} +AC_SUBST(GC_CFLAGS) + +AC_ARG_ENABLE(threads, + [AC_HELP_STRING([--enable-threads=TYPE], [choose threading package])], + THREADS=$enableval, + [ AC_MSG_CHECKING([for thread model used by GCC]) + THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` + if test -z "$THREADS"; then + THREADS=no + fi + AC_MSG_RESULT([$THREADS]) ]) + +AC_ARG_ENABLE(parallel-mark, + [AC_HELP_STRING([--enable-parallel-mark], + [parallelize marking and free list construction])], + [case "$THREADS" in + no | none | single) + AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec]) + ;; + esac ] +) + +AC_ARG_ENABLE(cplusplus, + [AC_HELP_STRING([--enable-cplusplus], [install C++ support])]) + +INCLUDES=-I${srcdir}/include +THREADDLLIBS= +need_atomic_ops_asm=false +## Libraries needed to support dynamic loading and/or threads. +case "$THREADS" in + no | none | single) + THREADS=none + ;; + posix | pthreads) + THREADS=posix + THREADDLLIBS=-lpthread + case "$host" in + x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + ;; + *-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + *-*-aix*) + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + *-*-hpux11*) + AC_MSG_WARN("Only HP/UX 11 POSIX threads are supported.") + AC_DEFINE(GC_HPUX_THREADS) + AC_DEFINE(_POSIX_C_SOURCE,199506L) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + THREADDLLIBS="-lpthread -lrt" + # HPUX needs REENTRANT for the _r calls. + AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads]) + ;; + *-*-hpux10*) + AC_MSG_WARN("Only HP-UX 11 POSIX threads are supported.") + ;; + *-*-freebsd*) + AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.") + AC_DEFINE(GC_FREEBSD_THREADS) + INCLUDES="$INCLUDES -pthread" + ;; + *-*-kfreebsd*-gnu) + AC_DEFINE(GC_FREEBSD_THREADS) + INCLUDES="$INCLUDES -pthread" + THREADDLLIBS=-pthread + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_DEFINE(USE_COMPILER_TLS) + ;; + *-*-gnu*) + AC_DEFINE(GC_GNU_THREADS) + AC_DEFINE(_REENTRANT) + AC_DEFINE(THREAD_LOCAL_ALLOC) + ;; + *-*-netbsd*) + AC_MSG_WARN("Only on NetBSD 2.0 or later.") + AC_DEFINE(GC_NETBSD_THREADS) + AC_DEFINE(_REENTRANT) + AC_DEFINE(_PTHREADS) + THREADDLLIBS="-lpthread -lrt" + ;; + *-*-solaris*) + AC_DEFINE(GC_SOLARIS_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + THREADDLLIBS="-lpthread -lrt" + if test "$GCC" != yes; then + CFLAGS="$CFLAGS -O" + need_atomic_ops_asm=true + fi + ;; + *-*-irix*) + AC_DEFINE(GC_IRIX_THREADS) + ;; + *-*-cygwin*) + AC_DEFINE(GC_WIN32_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + win32_threads=true + ;; + *-*-darwin*) + AC_DEFINE(GC_DARWIN_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + # Parallel-mark is currently unreliable on Darwin; ignore request + # if test "${enable_parallel_mark}" = yes; then + # AC_DEFINE(PARALLEL_MARK) + # fi + darwin_threads=true + ;; + *-*-osf*) + AC_DEFINE(GC_OSF1_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + # May want to enable it in other cases, too. + # Measurements havent yet been done. + fi + INCLUDES="$INCLUDES -pthread" + THREADDLLIBS="-lpthread -lrt" + ;; + *) + AC_MSG_ERROR("Pthreads not supported by the GC on this platform.") + ;; + esac + ;; + win32) + AC_DEFINE(GC_WIN32_THREADS) + dnl Wine getenv may not return NULL for missing entry + AC_DEFINE(NO_GETENV) + ;; + dgux386) + THREADS=dgux386 + AC_MSG_RESULT($THREADDLLIBS) + # Use pthread GCC switch + THREADDLLIBS=-pthread + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + AC_DEFINE(GC_DGUX386_THREADS) + AC_DEFINE(DGUX_THREADS) + # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread + INCLUDES="-pthread $INCLUDES" + ;; + aix) + THREADS=posix + THREADDLLIBS=-lpthread + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + decosf1 | irix | mach | os2 | solaris | dce | vxworks) + AC_MSG_ERROR(thread package $THREADS not yet supported) + ;; + *) + AC_MSG_ERROR($THREADS is an unknown thread package) + ;; +esac +AC_SUBST(THREADDLLIBS) +AM_CONDITIONAL(THREADS, test x$THREADS != xnone) +AM_CONDITIONAL(PTHREADS, test x$THREADS = xposix) +AM_CONDITIONAL(DARWIN_THREADS, test x$darwin_threads = xtrue) +AM_CONDITIONAL(WIN32_THREADS, test x$win32_threads = xtrue) + +case "$host" in + powerpc-*-darwin*) + powerpc_darwin=true + ;; +esac + +# Darwin needs a few extra special tests to deal with variation in the +# system headers. +case "$host" in + powerpc*-*-darwin*) + AC_CHECK_MEMBER(ppc_thread_state_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE_R0,1, + [ppc_thread_state_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE___R0,1,dnl + [ppc_thread_state_t has field __r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64_R0,1,dnl + [ppc_thread_state64_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64___R0,1,dnl + [ppc_thread_state64_t has field __r0]),, + [#include ]) + ;; + i?86*-*-darwin*) + AC_CHECK_MEMBER(x86_thread_state32_t.eax, + AC_DEFINE(HAS_X86_THREAD_STATE32_EAX,1,dnl + [x86_thread_state32_t has field eax]),, + [#include + #include ]) + AC_CHECK_MEMBER(x86_thread_state32_t.__eax, + AC_DEFINE(HAS_X86_THREAD_STATE32___EAX,1,dnl + [x86_thread_state32_t has field __eax]),, + [#include + #include ]) + ;; + x86_64-*-darwin*) + AC_CHECK_MEMBER(x86_thread_state64_t.rax, + AC_DEFINE(HAS_X86_THREAD_STATE64_RAX,1,dnl + [x86_thread_state64_t has field rax]),, + [#include + #include ]) + AC_CHECK_MEMBER(x86_thread_state64_t.__rax, + AC_DEFINE(HAS_X86_THREAD_STATE64___RAX,1,dnl + [x86_thread_state64_t has field __rax]),, + [#include + #include ]) + ;; + *) ;; +esac + +AC_MSG_CHECKING(for xlc) +AC_TRY_COMPILE([],[ + #ifndef __xlC__ + # error + #endif +], [compiler_xlc=yes], [compiler_xlc=no]) +AC_MSG_RESULT($compiler_xlc) +AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes) +if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then + # the darwin stack-frame-walking code is completely broken on xlc + AC_DEFINE(DARWIN_DONT_PARSE_STACK) +fi + +# We never want libdl on darwin. It is a fake libdl that just ends up making +# dyld calls anyway +case "$host" in + *-*-darwin*) ;; + *) + AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl") + ;; +esac + +case "$host" in + *-*-hpux*) + avoid_cpp_lib=yes;; + *) + avoid_cpp_lib=no; + ;; +esac +AM_CONDITIONAL(AVOID_CPP_LIB,test $avoid_cpp_lib = yes) + +# extra LD Flags which are required for targets +case "${host}" in + *-*-darwin*) + extra_ldflags_libgc=-Wl,-single_module + ;; +esac +AC_SUBST(extra_ldflags_libgc) + +AC_SUBST(EXTRA_TEST_LIBS) + +target_all=libgc.la +AC_SUBST(target_all) + +dnl If the target is an eCos system, use the appropriate eCos +dnl I/O routines. +dnl FIXME: this should not be a local option but a global target +dnl system; at present there is no eCos target. +TARGET_ECOS="no" +AC_ARG_WITH(ecos, +[ --with-ecos enable runtime eCos target support], +TARGET_ECOS="$with_ecos" +) + +addobjs= +addlibs= +CXXINCLUDES= +case "$TARGET_ECOS" in + no) + ;; + *) + AC_DEFINE(ECOS) + CXXINCLUDES="-I${TARGET_ECOS}/include" + addobjs="$addobjs ecos.lo" + ;; +esac + +AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes) + +AC_SUBST(CXX) + +AC_SUBST(INCLUDES) +AC_SUBST(CXXINCLUDES) + +# Configuration of shared libraries +# +AC_MSG_CHECKING(whether to build shared libraries) +AC_ENABLE_SHARED + +case "$host" in + alpha-*-openbsd*) + enable_shared=no + ;; + *) + ;; +esac + +AC_MSG_RESULT($enable_shared) + +# Configuration of machine-dependent code +# +AC_MSG_CHECKING(which machine-dependent code should be used) +machdep= +case "$host" in + alpha-*-openbsd*) + machdep="mach_dep.lo" + if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then + AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled) + fi + ;; + alpha*-*-linux*) + machdep="mach_dep.lo" + ;; + i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?) + AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED) + ;; + mipstx39-*-elf*) + machdep="mach_dep.lo" + AC_DEFINE(STACKBASE, __stackbase) + AC_DEFINE(DATASTART_IS_ETEXT) + ;; + mips-dec-ultrix*) + machdep="mach-dep.lo" + ;; + mips-nec-sysv*|mips-unknown-sysv*) + ;; + mips*-*-linux*) + ;; + mips-*-*) + machdep="mach_dep.lo" + dnl AC_DEFINE(NO_EXECUTE_PERMISSION) + dnl This is now redundant, but it is also important for incremental GC + dnl performance under Irix. + ;; + sparc-*-netbsd*) + machdep="mach_dep.lo sparc_netbsd_mach_dep.lo" + ;; + sparc-sun-solaris2.3) + machdep="mach_dep.lo sparc_mach_dep.lo" + AC_DEFINE(SUNOS53_SHARED_LIB) + ;; + sparc*-sun-solaris2.*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; + ia64-*-*) + machdep="mach_dep.lo ia64_save_regs_in_stack.lo" + ;; +esac +if test x"$machdep" = x; then +AC_MSG_RESULT($machdep) + machdep="mach_dep.lo" +fi +addobjs="$addobjs $machdep" +AC_SUBST(addobjs) +AC_SUBST(addlibs) + +AC_PROG_LIBTOOL + +# +# Check for AViiON Machines running DGUX +# +ac_is_dgux=no +AC_CHECK_HEADER(sys/dg_sys_info.h, +[ac_is_dgux=yes;]) + + ## :GOTCHA: we do not check anything but sys/dg_sys_info.h +if test $ac_is_dgux = yes; then + if test "$enable_full_debug" = "yes"; then + CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + else + CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + fi + AC_SUBST(CFLAGS) + AC_SUBST(CXXFLAGS) +fi + +dnl We use these options to decide which functions to include. +AC_ARG_WITH(target-subdir, +[ --with-target-subdir=SUBDIR + configuring with a cross compiler]) +AC_ARG_WITH(cross-host, +[ --with-cross-host=HOST configuring with a cross compiler]) + +# automake wants to see AC_EXEEXT. But we don't need it. And having +# it is actually a problem, because the compiler we're passed can't +# necessarily do a full link. So we fool automake here. +if false; then + # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands + # to nothing, so nothing would remain between `then' and `fi' if it + # were not for the `:' below. + : + AC_EXEEXT +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 Not needed anymore on Solaris. +AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary) +case "$host" in + *aix*) + if test "$GCC" = yes; then + AC_MSG_RESULT(yes) + new_CFLAGS= + for i in $CFLAGS; do + case "$i" in + -O*) + ;; + *) + new_CFLAGS="$new_CFLAGS $i" + ;; + esac + done + CFLAGS="$new_CFLAGS" + else + AC_MSG_RESULT(no) + fi + ;; + *) AC_MSG_RESULT(no) ;; +esac + +dnl Include defines that have become de facto standard. +dnl ALL_INTERIOR_POINTERS can be overridden in startup code. +AC_DEFINE(NO_EXECUTE_PERMISSION) +AC_DEFINE(ALL_INTERIOR_POINTERS) + + +dnl Interface Selection +dnl ------------------- +dnl +dnl By default, make the library as general as possible. +dnl enable_gcj_support=no +AC_ARG_ENABLE(gcj-support, + [AC_HELP_STRING([--disable-gcj-support], + [Disable support for gcj.])]) +AM_CONDITIONAL(ENABLE_GCJ_SUPPORT, + [test x"$enable_gcj_support" != xno]) +if test x"$enable_gcj_support" != xno; then + AC_DEFINE(GC_GCJ_SUPPORT, 1, [Define to include support for gcj]) +fi + +AC_ARG_ENABLE(java-finalization, + [AC_HELP_STRING([--disable-java-finalization], + [Disable support for java finalization.])]) +if test x"$enable_java_finalization" != xno; then + AC_DEFINE(JAVA_FINALIZATION) +fi + +AC_ARG_ENABLE(atomic-uncollectable, + [AC_HELP_STRING([--disable-atomic-uncollectible], + [Disable support for atomic uncollectible allocation.])]) +if test x"$enable_atomic_uncollectible" != x"no"; then + AC_DEFINE(ATOMIC_UNCOLLECTABLE, 1, + [Define to enable atomic uncollectible allocation.]) +fi + +AC_ARG_ENABLE(redirect-malloc, + [AC_HELP_STRING([--enable-redirect-malloc], + [Redirect malloc and friends to GC routines])]) + +if test "${enable_redirect_malloc}" = yes; then + if test "${enable_full_debug}" = yes; then + AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement) + AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement) + AC_DEFINE(REDIRECT_FREE, GC_debug_free) + else + AC_DEFINE(REDIRECT_MALLOC, GC_malloc) + fi + AC_DEFINE(GC_USE_DLOPEN_WRAP) +fi + +AC_ARG_ENABLE(large-config, + [AC_HELP_STRING([--enable-large-config], + [Optimize for large (> 100 MB) heap or root set])]) + +if test "${enable_large_config}" = yes; then + AC_DEFINE(LARGE_CONFIG, 1, [Define to optimize for large heaps or root sets]) +fi + +dnl This is something of a hack. When cross-compiling we turn off +dnl some functionality. We also enable the "small" configuration. +dnl These is only correct when targetting an embedded system. FIXME. +if test -n "${with_cross_host}"; then + AC_DEFINE(NO_CLOCK) + AC_DEFINE(SMALL_CONFIG) + AC_DEFINE(NO_DEBUGGING) +fi + + +dnl Debugging +dnl --------- + +UNWINDLIBS= +AC_ARG_ENABLE(gc-debug, +[AC_HELP_STRING([--enable-gc-debug], + [include full support for pointer backtracing etc.])], +[ if test "$enable_gc_debug" = "yes"; then + AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.") + AC_DEFINE(KEEP_BACK_PTRS) + AC_DEFINE(DBG_HDRS_ALL) + case $host in + ia64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_DEFINE(SAVE_CALL_COUNT, 8) + AC_CHECK_LIB(unwind, backtrace, [ + AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE) + UNWINDLIBS=-lunwind + AC_MSG_WARN("Client code may need to link against libunwind.") + ]) + ;; + x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_MSG_WARN("Client must not use -fomit-frame-pointer.") + AC_DEFINE(SAVE_CALL_COUNT, 8) + ;; + i[3456]86-*-dgux*) + AC_DEFINE(MAKE_BACK_GRAPH) + ;; + esac ] + fi) + +AC_SUBST(UNWINDLIBS) + +AC_ARG_ENABLE(gc-assertions, + [AC_HELP_STRING([--enable-gc-assertions], + [collector-internal assertion checking])]) +if test "${enable_gc_assertions}" = yes; then + AC_DEFINE(GC_ASSERTIONS) +fi + +AC_ARG_ENABLE(munmap, + [AC_HELP_STRING([--enable-munmap=N], + [return page to the os if empty for N collections])], + MUNMAP_THRESHOLD=$enableval; + [case "$MMAP" in + no) + AC_MSG_ERROR([--enable-munmap requires --enable-mmap]) + ;; + esac] + ) +if test "${enable_munmap}" != ""; then + AC_DEFINE(USE_MMAP) + AC_DEFINE(USE_MUNMAP) + if test "${MUNMAP_THRESHOLD}" = "yes"; then + MUNMAP_THRESHOLD=6 + fi + AC_DEFINE_UNQUOTED(MUNMAP_THRESHOLD, ${MUNMAP_THRESHOLD}) +fi + +AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") + + +dnl Atomic Ops +dnl ---------- + +atomic_ops_libs=-latomic_ops +AC_CHECK_HEADER(atomic_ops.h, + [ AC_MSG_NOTICE([Using pre-installed libatomic_ops]) ], + [ ao_dir= + for candidate in ${srcdir}/libatomic_ops*; do + case $candidate in + *.tar.gz) + ;; + *install) + dnl generated by alternate Makefile. + ;; + *) + if test -e "$candidate"; then + ao_dir="$candidate" + fi + ;; + esac + done + if test -z "$ao_dir"; then + AC_MSG_ERROR([Missig libatomic_ops.]) + fi + ao_version="${ao_dir#*libatomic_ops-}" + AC_MSG_NOTICE([Using internal version of libatomic_ops]) + + dnl Automake does not accept shell variables in AC_CONFIG_SUBDIRS + test -e libatomic_ops \ + || ln -s ${ao_dir} libatomic_ops + AC_CONFIG_SUBDIRS(libatomic_ops) + + dnl Also copy the source files to be linked in. + test -e atomic_ops.c \ + || ln -s libatomic_ops/src/atomic_ops.c \ + atomic_ops.c + + test -e atomic_ops_sysdeps.S \ + || ln -s libatomic_ops/src/atomic_ops_sysdeps.S \ + atomic_ops_sysdeps.S + + dnl This gets the source include files, which is often close enough. + dnl It also makes atomic_ops_sysdeps.S assemble. + GC_CFLAGS="${GC_CFLAGS} -I libatomic_ops/src" + maybe_libatomic_ops="libatomic_ops" + ]) + +AM_CONDITIONAL(USE_INTERNAL_LIBATOMIC_OPS, + test -n "$maybe_libatomic_ops" -a "$THREADS" != "none") +AM_CONDITIONAL(NEED_ATOMIC_OPS_ASM, test -n "$maybe_libatomic_ops" -a x$need_atomic_ops_asm = xtrue) +AC_SUBST(atomic_ops_libs) + +dnl Produce the Files +dnl ----------------- + +AC_CONFIG_FILES([Makefile bdw-gc.pc]) + +AC_CONFIG_COMMANDS([default],, + [ srcdir=${srcdir} + host=${host} + CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + CC="${CC}" + DEFS="$DEFS" ]) + +AC_OUTPUT diff --git a/.pc/02-manpage.diff/doc/gc.man b/.pc/02-manpage.diff/doc/gc.man new file mode 100644 index 0000000..2a550c7 --- /dev/null +++ b/.pc/02-manpage.diff/doc/gc.man @@ -0,0 +1,97 @@ +.TH GC_MALLOC 1L "2 October 2003" +.SH NAME +GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement +.SH SYNOPSIS +#include "gc.h" +.br +void * GC_malloc(size_t size); +.br +void GC_free(void *ptr); +.br +void * GC_realloc(void *ptr, size_t size); +.br +.sp +cc ... gc.a +.LP +.SH DESCRIPTION +.I GC_malloc +and +.I GC_free +are plug-in replacements for standard malloc and free. However, +.I +GC_malloc +will attempt to reclaim inaccessible space automatically by invoking a conservative garbage collector at appropriate points. The collector traverses all data structures accessible by following pointers from the machines registers, stack(s), data, and bss segments. Inaccessible structures will be reclaimed. A machine word is considered to be a valid pointer if it is an address inside an object allocated by +.I +GC_malloc +or friends. +.LP +In most cases it is preferable to call the macros GC_MALLOC, GC_FREE, etc. +instead of calling GC_malloc and friends directly. This allows debugging +versions of the routines to be substituted by defining GC_DEBUG before +including gc.h. +.LP +See the documentation in the include file gc_cpp.h for an alternate, C++ specific interface to the garbage collector. +.LP +Unlike the standard implementations of malloc, +.I +GC_malloc +clears the newly allocated storage. +.I +GC_malloc_atomic +does not. Furthermore, it informs the collector that the resulting object will never contain any pointers, and should therefore not be scanned by the collector. +.LP +.I +GC_free +can be used to deallocate objects, but its use is optional, and generally discouraged. +.I +GC_realloc +has the standard realloc semantics. It preserves pointer-free-ness. +.I +GC_register_finalizer +allows for registration of functions that are invoked when an object becomes inaccessible. +.LP +The garbage collector tries to avoid allocating memory at locations that already appear to be referenced before allocation. (Such apparent ``pointers'' are usually large integers and the like that just happen to look like an address.) This may make it hard to allocate very large objects. An attempt to do so may generate a warning. +.LP +.I +GC_malloc_ignore_off_page +and +.I +GC_malloc_atomic_ignore_off_page +inform the collector that the client code will always maintain a pointer to near the beginning of the object (within the first 512 bytes), and that pointers beyond that can be ignored by the collector. This makes it much easier for the collector to place large objects. These are recommended for large object allocation. (Objects expected to be larger than about 100KBytes should be allocated this way.) +.LP +It is also possible to use the collector to find storage leaks in programs destined to be run with standard malloc/free. The collector can be compiled for thread-safe operation. Unlike standard malloc, it is safe to call malloc after a previous malloc call was interrupted by a signal, provided the original malloc call is not resumed. +.LP +The collector may, on rare occasion produce warning messages. On UNIX machines these appear on stderr. Warning messages can be filtered, redirected, or ignored with +.I +GC_set_warn_proc +This is recommended for production code. See gc.h for details. +.LP +Fully portable code should call +.I +GC_INIT +from the main program before making any other GC calls. +On most platforms this does nothing and the collector is initialized on first use. +On a few platforms explicit initialization is necessary. And it can never hurt. +.LP +Debugging versions of many of the above routines are provided as macros. Their names are identical to the above, but consist of all capital letters. If GC_DEBUG is defined before gc.h is included, these routines do additional checking, and allow the leak detecting version of the collector to produce slightly more useful output. Without GC_DEBUG defined, they behave exactly like the lower-case versions. +.LP +On some machines, collection will be performed incrementally after a call to +.I +GC_enable_incremental. +This may temporarily write protect pages in the heap. See the README file for more information on how this interacts with system calls that write to the heap. +.LP +Other facilities not discussed here include limited facilities to support incremental collection on machines without appropriate VM support, provisions for providing more explicit object layout information to the garbage collector, more direct support for ``weak'' pointers, support for ``abortable'' garbage collections during idle time, etc. +.LP +.SH "SEE ALSO" +The README and gc.h files in the distribution. More detailed definitions of the functions exported by the collector are given there. (The above list is not complete.) +.LP +The web site at http://www.hpl.hp.com/personal/Hans_Boehm/gc . +.LP +Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment", +\fISoftware Practice & Experience\fP, September 1988, pp. 807-820. +.LP +The malloc(3) man page. +.LP +.SH AUTHOR +Hans-J. Boehm (address@hidden). +Some of the code was written by others, most notably Alan Demers. diff --git a/.pc/03-add-avr32-support.diff/include/private/gcconfig.h b/.pc/03-add-avr32-support.diff/include/private/gcconfig.h new file mode 100644 index 0000000..a7128f1 --- /dev/null +++ b/.pc/03-add-avr32-support.diff/include/private/gcconfig.h @@ -0,0 +1,2364 @@ +/* + * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996 by Silicon Graphics. All rights reserved. + * Copyright (c) 2000-2004 Hewlett-Packard Development Company, L.P. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ + +/* + * This header is private to the gc. It is almost always included from + * gc_priv.h. However it is possible to include it by itself if just the + * configuration macros are needed. In that + * case, a few declarations relying on types declared in gc_priv.h will be + * omitted. + */ + +#ifndef GCCONFIG_H + +# define GCCONFIG_H + +# ifndef GC_PRIVATE_H + /* Fake ptr_t declaration, just to avoid compilation errors. */ + /* This avoids many instances if "ifndef GC_PRIVATE_H" below. */ + typedef struct GC_undefined_struct * ptr_t; +# include /* For size_t etc. */ +# endif + +/* Machine dependent parameters. Some tuning parameters can be found */ +/* near the top of gc_private.h. */ + +/* Machine specific parts contributed by various people. See README file. */ + +/* First a unified test for Linux: */ +# if defined(linux) || defined(__linux__) +# ifndef LINUX +# define LINUX +# endif +# endif + +/* And one for NetBSD: */ +# if defined(__NetBSD__) +# define NETBSD +# endif + +/* And one for OpenBSD: */ +# if defined(__OpenBSD__) +# define OPENBSD +# endif + +/* And one for FreeBSD: */ +# if (defined(__FreeBSD__) || defined(__DragonFly__) || \ + defined(__FreeBSD_kernel__)) && !defined(FREEBSD) +# define FREEBSD +# endif + +/* Determine the machine type: */ +# if defined(__arm__) || defined(__thumb__) +# define ARM32 +# if !defined(LINUX) && !defined(NETBSD) +# define NOSYS +# define mach_type_known +# endif +# endif +# if defined(sun) && defined(mc68000) +# error SUNOS4 no longer supported +# endif +# if defined(hp9000s300) +# error M68K based HP machines no longer supported. +# endif +# if defined(OPENBSD) && defined(m68k) +# define M68K +# define mach_type_known +# endif +# if defined(OPENBSD) && defined(__sparc__) +# define SPARC +# define mach_type_known +# endif +# if defined(NETBSD) && (defined(m68k) || defined(__m68k__)) +# define M68K +# define mach_type_known +# endif +# if defined(NETBSD) && defined(__powerpc__) +# define POWERPC +# define mach_type_known +# endif +# if defined(NETBSD) && (defined(__arm32__) || defined(__arm__)) +# 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 +# define ULTRIX +# else +# define BSD +# endif +# define mach_type_known +# endif +# if defined(__NetBSD__) && defined(__vax__) +# define VAX +# define mach_type_known +# endif +# if defined(mips) || defined(__mips) || defined(_mips) +# define MIPS +# if defined(nec_ews) || defined(_nec_ews) +# define EWS4800 +# endif +# if !defined(LINUX) && !defined(EWS4800) && !defined(NETBSD) +# if defined(ultrix) || defined(__ultrix) +# define ULTRIX +# else +# define IRIX5 /* or IRIX 6.X */ +# endif +# endif /* !LINUX */ +# if defined(__NetBSD__) && defined(__MIPSEL__) +# undef ULTRIX +# endif +# define mach_type_known +# endif +# if defined(DGUX) && (defined(i386) || defined(__i386__)) +# define I386 +# ifndef _USING_DGUX +# define _USING_DGUX +# endif +# define mach_type_known +# endif +# if defined(sequent) && (defined(i386) || defined(__i386__)) +# define I386 +# define SEQUENT +# define mach_type_known +# endif +# if defined(sun) && (defined(i386) || defined(__i386__)) +# define I386 +# define SOLARIS +# define mach_type_known +# endif +# if defined(sun) && defined(__amd64) +# define X86_64 +# define SOLARIS +# define mach_type_known +# endif +# if (defined(__OS2__) || defined(__EMX__)) && defined(__32BIT__) +# define I386 +# define OS2 +# define mach_type_known +# endif +# if defined(ibm032) +# error IBM PC/RT no longer supported. +# endif +# if defined(sun) && (defined(sparc) || defined(__sparc)) +# define SPARC + /* Test for SunOS 5.x */ +# include +# define SOLARIS +# define mach_type_known +# endif +# if defined(sparc) && defined(unix) && !defined(sun) && !defined(linux) \ + && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) \ + && !defined(__DragonFly__) +# define SPARC +# define DRSNX +# define mach_type_known +# endif +# if defined(_IBMR2) +# define POWERPC +# define AIX +# define mach_type_known +# endif +# if defined(__NetBSD__) && defined(__sparc__) +# define SPARC +# define mach_type_known +# endif +# if defined(_M_XENIX) && defined(_M_SYSV) && defined(_M_I386) + /* The above test may need refinement */ +# define I386 +# if defined(_SCO_ELF) +# define SCO_ELF +# else +# define SCO +# endif +# define mach_type_known +# endif +# if defined(_AUX_SOURCE) +# error A/UX no longer supported +# endif +# if defined(_PA_RISC1_0) || defined(_PA_RISC1_1) || defined(_PA_RISC2_0) \ + || defined(hppa) || defined(__hppa__) +# define HP_PA +# if !defined(LINUX) && !defined(HPUX) +# define HPUX +# endif +# define mach_type_known +# endif +# if defined(__ia64) && (defined(_HPUX_SOURCE) || defined(__HP_aCC)) +# define IA64 +# ifndef HPUX +# define HPUX +# endif +# define mach_type_known +# endif +# if defined(__BEOS__) && defined(_X86_) +# define I386 +# define BEOS +# define mach_type_known +# endif +# if defined(LINUX) && (defined(i386) || defined(__i386__)) +# define I386 +# define mach_type_known +# endif +# if defined(LINUX) && defined(__x86_64__) +# define X86_64 +# define mach_type_known +# endif +# if defined(LINUX) && (defined(__ia64__) || defined(__ia64)) +# define IA64 +# define mach_type_known +# endif +# if defined(LINUX) && defined(__arm__) +# 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 +# endif +# if defined(FREEBSD) && (defined(powerpc) || defined(__powerpc__)) +# define POWERPC +# define mach_type_known +# endif +# if defined(LINUX) && defined(__mc68000__) +# define M68K +# define mach_type_known +# endif +# if defined(LINUX) && (defined(sparc) || defined(__sparc__)) +# define SPARC +# define mach_type_known +# endif +# if defined(LINUX) && defined(__arm__) +# define ARM32 +# define mach_type_known +# endif +# if defined(LINUX) && defined(__sh__) +# 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) +# define OSF1 /* a.k.a Digital Unix */ +# endif +# define mach_type_known +# endif +# if defined(_AMIGA) && !defined(AMIGA) +# define AMIGA +# endif +# ifdef AMIGA +# define M68K +# define mach_type_known +# endif +# if defined(THINK_C) || defined(__MWERKS__) && !defined(__powerc) +# define M68K +# define MACOS +# define mach_type_known +# endif +# if defined(__MWERKS__) && defined(__powerc) && !defined(__MACH__) +# define POWERPC +# define MACOS +# define mach_type_known +# endif +# if defined(macosx) || (defined(__APPLE__) && defined(__MACH__)) +# define DARWIN +# if defined(__ppc__) || defined(__ppc64__) +# define POWERPC +# define mach_type_known +# elif defined(__x86_64__) +# define X86_64 +# define mach_type_known +# elif defined(__i386__) +# define I386 +# define mach_type_known +# endif +# endif +# if defined(NeXT) && defined(mc68000) +# define M68K +# define NEXT +# define mach_type_known +# endif +# if defined(NeXT) && (defined(i386) || defined(__i386__)) +# define I386 +# define NEXT +# define mach_type_known +# endif +# if defined(__OpenBSD__) && (defined(i386) || defined(__i386__)) +# define I386 +# define OPENBSD +# define mach_type_known +# endif +# if defined(FREEBSD) && (defined(i386) || defined(__i386__)) +# define I386 +# define mach_type_known +# endif +# if defined(FREEBSD) && defined(__x86_64__) +# define X86_64 +# define mach_type_known +# endif +# if defined(__NetBSD__) && (defined(i386) || defined(__i386__)) +# define I386 +# define mach_type_known +# endif +# if defined(__NetBSD__) && defined(__x86_64__) +# 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 +# define mach_type_known +# endif +# if !defined(mach_type_known) && defined(__386BSD__) +# define I386 +# define THREE86BSD +# define mach_type_known +# endif +# if defined(_CX_UX) && defined(_M88K) +# define M88K +# define CX_UX +# define mach_type_known +# endif +# if defined(DGUX) && defined(m88k) +# define M88K + /* DGUX defined */ +# define mach_type_known +# endif +# if defined(_WIN32_WCE) + /* SH3, SH4, MIPS already defined for corresponding architectures */ +# if defined(SH3) || defined(SH4) +# define SH +# endif +# if defined(x86) +# define I386 +# endif +# if defined(ARM) +# define ARM32 +# endif +# define MSWINCE +# define mach_type_known +# else +# if (defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \ + || defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) +# if defined(__LP64__) || defined(_WIN64) +# define X86_64 +# else +# define I386 +# endif +# define MSWIN32 /* or Win64 */ +# define mach_type_known +# endif +# if defined(_MSC_VER) && defined(_M_IA64) +# define IA64 +# define MSWIN32 /* Really win64, but we don't treat 64-bit */ + /* variants as a differnt platform. */ +# endif +# endif +# if defined(__DJGPP__) +# define I386 +# ifndef DJGPP +# define DJGPP /* MSDOS running the DJGPP port of GCC */ +# endif +# define mach_type_known +# endif +# if defined(__CYGWIN32__) || defined(__CYGWIN__) +# define I386 +# define CYGWIN32 +# define mach_type_known +# endif +# if defined(__MINGW32__) +# define I386 +# define MSWIN32 +# define mach_type_known +# endif +# if defined(__BORLANDC__) +# define I386 +# define MSWIN32 +# define mach_type_known +# endif +# if defined(_UTS) && !defined(mach_type_known) +# define S370 +# define UTS4 +# define mach_type_known +# endif +# if defined(__pj__) +# error PicoJava no longer supported + /* The implementation had problems, and I haven't heard of users */ + /* in ages. If you want it resurrected, let me know. */ +# endif +# if defined(__embedded__) && defined(PPC) +# define POWERPC +# define NOSYS +# define mach_type_known +# endif +/* Ivan Demakov */ +# if defined(__WATCOMC__) && defined(__386__) +# define I386 +# if !defined(OS2) && !defined(MSWIN32) && !defined(DOS4GW) +# if defined(__OS2__) +# define OS2 +# else +# if defined(__WINDOWS_386__) || defined(__NT__) +# define MSWIN32 +# else +# define DOS4GW +# endif +# endif +# endif +# define mach_type_known +# endif +# if defined(__s390__) && defined(LINUX) +# define S390 +# define mach_type_known +# endif +# if defined(__GNU__) +# if defined(__i386__) +/* The Debian Hurd running on generic PC */ +# define HURD +# define I386 +# define mach_type_known +# endif +# endif +# if defined(__TANDEM) + /* Nonstop S-series */ + /* FIXME: Should recognize Integrity series? */ +# define MIPS +# define NONSTOP +# define mach_type_known +# endif + +/* Feel free to add more clauses here */ + +/* Or manually define the machine type here. A machine type is */ +/* characterized by the architecture. Some */ +/* machine types are further subdivided by OS. */ +/* Macros such as LINUX, FREEBSD, etc. distinguish them. */ +/* SYSV on an M68K actually means A/UX. */ +/* The distinction in these cases is usually the stack starting address */ +# ifndef mach_type_known +# error "The collector has not been ported to this machine/OS combination." +# endif + /* Mapping is: M68K ==> Motorola 680X0 */ + /* (NEXT, and SYSV (A/UX), */ + /* MACOS and AMIGA variants) */ + /* I386 ==> Intel 386 */ + /* (SEQUENT, OS2, SCO, LINUX, NETBSD, */ + /* FREEBSD, THREE86BSD, MSWIN32, */ + /* BSDI,SOLARIS, NEXT, other variants) */ + /* NS32K ==> Encore Multimax */ + /* MIPS ==> R2000 through R14K */ + /* (many variants) */ + /* VAX ==> DEC VAX */ + /* (BSD, ULTRIX variants) */ + /* HP_PA ==> HP9000/700 & /800 */ + /* HP/UX, LINUX */ + /* SPARC ==> SPARC v7/v8/v9 */ + /* (SOLARIS, LINUX, DRSNX variants) */ + /* ALPHA ==> DEC Alpha */ + /* (OSF1 and LINUX variants) */ + /* M88K ==> Motorola 88XX0 */ + /* (CX_UX and DGUX) */ + /* S370 ==> 370-like machine */ + /* running Amdahl UTS4 */ + /* S390 ==> 390-like machine */ + /* running LINUX */ + /* ARM32 ==> Intel StrongARM */ + /* IA64 ==> Intel IPF */ + /* (e.g. Itanium) */ + /* (LINUX and HPUX) */ + /* SH ==> Hitachi SuperH */ + /* (LINUX & MSWINCE) */ + /* X86_64 ==> AMD x86-64 */ + /* POWERPC ==> IBM/Apple PowerPC */ + /* (MACOS(<=9),DARWIN(incl.MACOSX),*/ + /* LINUX, NETBSD, AIX, NOSYS */ + /* variants) */ + /* Handles 32 and 64-bit variants. */ + /* CRIS ==> Axis Etrax */ + /* M32R ==> Renesas M32R */ + + +/* + * For each architecture and OS, the following need to be defined: + * + * CPP_WORDSZ is a simple integer constant representing the word size. + * in bits. We assume byte addressibility, where a byte has 8 bits. + * We also assume CPP_WORDSZ is either 32 or 64. + * (We care about the length of pointers, not hardware + * bus widths. Thus a 64 bit processor with a C compiler that uses + * 32 bit pointers should use CPP_WORDSZ of 32, not 64. Default is 32.) + * + * MACH_TYPE is a string representation of the machine type. + * OS_TYPE is analogous for the OS. + * + * ALIGNMENT is the largest N, such that + * all pointer are guaranteed to be aligned on N byte boundaries. + * defining it to be 1 will always work, but perform poorly. + * + * DATASTART is the beginning of the data segment. + * On some platforms SEARCH_FOR_DATA_START is defined. + * SEARCH_FOR_DATASTART will cause GC_data_start to + * be set to an address determined by accessing data backwards from _end + * until an unmapped page is found. DATASTART will be defined to be + * GC_data_start. + * On UNIX-like systems, the collector will scan the area between DATASTART + * and DATAEND for root pointers. + * + * 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. + * + * STACKBOTTOM is the cool end of the stack, which is usually the + * highest address in the stack. + * Under PCR or OS/2, we have other ways of finding thread stacks. + * For each machine, the following should: + * 1) define STACK_GROWS_UP if the stack grows toward higher addresses, and + * 2) define exactly one of + * STACKBOTTOM (should be defined to be an expression) + * LINUX_STACKBOTTOM + * HEURISTIC1 + * HEURISTIC2 + * If STACKBOTTOM is defined, then it's value will be used directly as the + * stack base. If LINUX_STACKBOTTOM is defined, then it will be determined + * with a method appropriate for most Linux systems. Currently we look + * first for __libc_stack_end (currently only id USE_LIBC_PRIVATES is + * defined), and if that fails read it from /proc. (If USE_LIBC_PRIVATES + * is not defined and NO_PROC_STAT is defined, we revert to HEURISTIC2.) + * If either of the last two macros are defined, then STACKBOTTOM is computed + * during collector startup using one of the following two heuristics: + * HEURISTIC1: Take an address inside GC_init's frame, and round it up to + * the next multiple of STACK_GRAN. + * HEURISTIC2: Take an address inside GC_init's frame, increment it repeatedly + * in small steps (decrement if STACK_GROWS_UP), and read the value + * at each location. Remember the value when the first + * Segmentation violation or Bus error is signalled. Round that + * to the nearest plausible page boundary, and use that instead + * of STACKBOTTOM. + * + * Gustavo Rodriguez-Rivera points out that on most (all?) Unix machines, + * the value of environ is a pointer that can serve as STACKBOTTOM. + * I expect that HEURISTIC2 can be replaced by this approach, which + * interferes far less with debugging. However it has the disadvantage + * that it's confused by a putenv call before the collector is initialized. + * This could be dealt with by intercepting putenv ... + * + * If no expression for STACKBOTTOM can be found, and neither of the above + * heuristics are usable, the collector can still be used with all of the above + * undefined, provided one of the following is done: + * 1) GC_mark_roots can be changed to somehow mark from the correct stack(s) + * without reference to STACKBOTTOM. This is appropriate for use in + * conjunction with thread packages, since there will be multiple stacks. + * (Allocating thread stacks in the heap, and treating them as ordinary + * heap data objects is also possible as a last resort. However, this is + * likely to introduce significant amounts of excess storage retention + * unless the dead parts of the thread stacks are periodically cleared.) + * 2) Client code may set GC_stackbottom before calling any GC_ routines. + * If the author of the client code controls the main program, this is + * easily accomplished by introducing a new main program, setting + * GC_stackbottom to the address of a local variable, and then calling + * the original main program. The new main program would read something + * like: + * + * # include "gc_private.h" + * + * main(argc, argv, envp) + * int argc; + * char **argv, **envp; + * { + * int dummy; + * + * GC_stackbottom = (ptr_t)(&dummy); + * return(real_main(argc, argv, envp)); + * } + * + * + * Each architecture may also define the style of virtual dirty bit + * implementation to be used: + * MPROTECT_VDB: Write protect the heap and catch faults. + * GWW_VDB: Use win32 GetWriteWatch primitive. + * PROC_VDB: Use the SVR4 /proc primitives to read dirty bits. + * + * The first and second one may be combined, in which case a runtime + * selection will be made, based on GetWriteWatch availability. + * + * An architecture may define DYNAMIC_LOADING if dynamic_load.c + * defined GC_register_dynamic_libraries() for the architecture. + * + * An architecture may define PREFETCH(x) to preload the cache with *x. + * This defaults to a no-op. + * + * PREFETCH_FOR_WRITE(x) is used if *x is about to be written. + * + * An architecture may also define CLEAR_DOUBLE(x) to be a fast way to + * clear the two words at GC_malloc-aligned address x. By default, + * word stores of 0 are used instead. + * + * HEAP_START may be defined as the initial address hint for mmap-based + * allocation. + */ + +/* If we are using a recent version of gcc, we can use __builtin_unwind_init() + * to push the relevant registers onto the stack. + */ +# if defined(__GNUC__) && ((__GNUC__ >= 3) || \ + (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) \ + && !defined(__INTEL_COMPILER) && !defined(__PATHCC__) +# define HAVE_BUILTIN_UNWIND_INIT +# endif + +# define STACK_GRAN 0x1000000 +# ifdef M68K +# define MACH_TYPE "M68K" +# define ALIGNMENT 2 +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# define HEURISTIC2 +# ifdef __ELF__ +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# else + extern char etext[]; +# define DATASTART ((ptr_t)(etext)) +# endif +# endif +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 +# ifdef __ELF__ +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# else + extern char etext[]; +# define DATASTART ((ptr_t)(etext)) +# endif +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# define MPROTECT_VDB +# ifdef __ELF__ +# define DYNAMIC_LOADING +# include +# if defined(__GLIBC__)&& __GLIBC__>=2 +# define SEARCH_FOR_DATA_START +# else /* !GLIBC2 */ + extern char **__environ; +# define DATASTART ((ptr_t)(&__environ)) + /* hideous kludge: __environ is the first */ + /* word in crt0.o, and delimits the start */ + /* of the data segment, no matter which */ + /* ld options were passed through. */ + /* We could use _etext instead, but that */ + /* would include .rodata, which may */ + /* contain large read-only data tables */ + /* that we'd rather not scan. */ +# endif /* !GLIBC2 */ + extern int _end[]; +# define DATAEND (_end) +# else + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# endif +# endif +# ifdef AMIGA +# define OS_TYPE "AMIGA" + /* STACKBOTTOM and DATASTART handled specially */ + /* in os_dep.c */ +# define DATAEND /* not needed */ +# define GETPAGESIZE() 4096 +# endif +# ifdef MACOS +# ifndef __LOWMEM__ +# include +# endif +# define OS_TYPE "MACOS" + /* see os_dep.c for details of global data segments. */ +# define STACKBOTTOM ((ptr_t) LMGetCurStackBase()) +# define DATAEND /* not needed */ +# define GETPAGESIZE() 4096 +# endif +# ifdef NEXT +# define OS_TYPE "NEXT" +# define DATASTART ((ptr_t) get_etext()) +# define STACKBOTTOM ((ptr_t) 0x4000000) +# define DATAEND /* not needed */ +# endif +# endif + +# if defined(POWERPC) +# define MACH_TYPE "POWERPC" +# ifdef MACOS +# define ALIGNMENT 2 /* Still necessary? Could it be 4? */ +# ifndef __LOWMEM__ +# include +# endif +# define OS_TYPE "MACOS" + /* see os_dep.c for details of global data segments. */ +# define STACKBOTTOM ((ptr_t) LMGetCurStackBase()) +# define DATAEND /* not needed */ +# endif +# ifdef LINUX +# if defined(__powerpc64__) +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif +# else +# define ALIGNMENT 4 +# endif +# define OS_TYPE "LINUX" + /* HEURISTIC1 has been reliably reported to fail for a 32-bit */ + /* executable on a 64 bit kernel. */ +# define LINUX_STACKBOTTOM +# define DYNAMIC_LOADING +# define SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND (_end) +# endif +# ifdef DARWIN +# define OS_TYPE "DARWIN" +# define DYNAMIC_LOADING +# if defined(__ppc64__) +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) +# define CACHE_LINE_SIZE 64 +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif +# else +# define ALIGNMENT 4 +# define STACKBOTTOM ((ptr_t) 0xc0000000) +# endif + /* XXX: see get_end(3), get_etext() and get_end() should not be used. + These aren't used when dyld support is enabled (it is by default) */ +# define DATASTART ((ptr_t) get_etext()) +# define DATAEND ((ptr_t) get_end()) +# define USE_MMAP +# define USE_MMAP_ANON +# ifdef GC_DARWIN_THREADS +# define MPROTECT_VDB +# endif +# include +# define GETPAGESIZE() getpagesize() +# if defined(USE_PPC_PREFETCH) && defined(__GNUC__) + /* The performance impact of prefetches is untested */ +# define PREFETCH(x) \ + __asm__ __volatile__ ("dcbt 0,%0" : : "r" ((const void *) (x))) +# define PREFETCH_FOR_WRITE(x) \ + __asm__ __volatile__ ("dcbtst 0,%0" : : "r" ((const void *) (x))) +# endif + /* There seems to be some issues with trylock hanging on darwin. This + should be looked into some more */ +# define NO_PTHREAD_TRYLOCK +# endif +# ifdef FREEBSD +# define ALIGNMENT 4 +# define OS_TYPE "FREEBSD" +# ifndef GC_FREEBSD_THREADS +# define MPROTECT_VDB +# endif +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# define FREEBSD_STACKBOTTOM +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif + extern char etext[]; + extern char * GC_FreeBSDGetDataStart(); +# define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext) +# endif +# ifdef NETBSD +# define ALIGNMENT 4 +# define OS_TYPE "NETBSD" +# define HEURISTIC2 + extern char etext[]; +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# endif +# ifdef AIX +# define OS_TYPE "AIX" +# undef ALIGNMENT /* in case it's defined */ +# ifdef IA64 +# undef IA64 + /* DOB: some AIX installs stupidly define IA64 in */ + /* /usr/include/sys/systemcfg.h */ +# endif +# ifdef __64BIT__ +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# define STACKBOTTOM ((ptr_t)0x1000000000000000) +# else +# define ALIGNMENT 4 +# define CPP_WORDSZ 32 +# define STACKBOTTOM ((ptr_t)((ulong)&errno)) +# endif +# define USE_MMAP +# define USE_MMAP_ANON + /* From AIX linker man page: + _text Specifies the first location of the program. + _etext Specifies the first location after the program. + _data Specifies the first location of the data. + _edata Specifies the first location after the initialized data + _end or end Specifies the first location after all data. + */ + extern int _data[], _end[]; +# define DATASTART ((ptr_t)((ulong)_data)) +# define DATAEND ((ptr_t)((ulong)_end)) + extern int errno; +# define DYNAMIC_LOADING + /* For really old versions of AIX, this may have to be removed. */ +# endif + +# ifdef NOSYS +# define ALIGNMENT 4 +# define OS_TYPE "NOSYS" + extern void __end[], __dso_handle[]; +# define DATASTART (__dso_handle) /* OK, that's ugly. */ +# define DATAEND (__end) + /* Stack starts at 0xE0000000 for the simulator. */ +# undef STACK_GRAN +# define STACK_GRAN 0x10000000 +# define HEURISTIC1 +# endif +# endif + +# ifdef VAX +# define MACH_TYPE "VAX" +# define ALIGNMENT 4 /* Pointers are longword aligned by 4.2 C compiler */ + extern char etext[]; +# define DATASTART ((ptr_t)(etext)) +# ifdef BSD +# define OS_TYPE "BSD" +# define HEURISTIC1 + /* HEURISTIC2 may be OK, but it's hard to test. */ +# endif +# ifdef ULTRIX +# define OS_TYPE "ULTRIX" +# define STACKBOTTOM ((ptr_t) 0x7fffc800) +# endif +# endif + +# ifdef SPARC +# define MACH_TYPE "SPARC" +# if defined(__arch64__) || defined(__sparcv9) +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# define ELF_CLASS ELFCLASS64 +# else +# define ALIGNMENT 4 /* Required by hardware */ +# define CPP_WORDSZ 32 +# endif + /* Don't define USE_ASM_PUSH_REGS. We do use an asm helper, but */ + /* not to push the registers on the mark stack. */ +# ifdef SOLARIS +# define OS_TYPE "SOLARIS" + extern int _etext[]; + extern int _end[]; + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x10000, (ptr_t)_etext) +# define DATAEND (_end) +# if !defined(USE_MMAP) && defined(REDIRECT_MALLOC) +# define USE_MMAP + /* Otherwise we now use calloc. Mmap may result in the */ + /* heap interleaved with thread stacks, which can result in */ + /* excessive blacklisting. Sbrk is unusable since it */ + /* doesn't interact correctly with the system malloc. */ +# endif +# ifdef USE_MMAP +# define HEAP_START (ptr_t)0x40000000 +# else +# define HEAP_START DATAEND +# endif +# define PROC_VDB +/* HEURISTIC1 reportedly no longer works under 2.7. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +/* Apparently USRSTACK is defined to be USERLIMIT, but in some */ +/* installations that's undefined. We work around this with a */ +/* gross hack: */ +# include +# ifdef USERLIMIT + /* This should work everywhere, but doesn't. */ +# define STACKBOTTOM USRSTACK +# else +# define HEURISTIC2 +# endif +# include +# define GETPAGESIZE() sysconf(_SC_PAGESIZE) + /* getpagesize() appeared to be missing from at least one */ + /* Solaris 5.4 installation. Weird. */ +# define DYNAMIC_LOADING +# endif +# ifdef DRSNX +# define OS_TYPE "DRSNX" + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); + extern int etext[]; +# define DATASTART GC_SysVGetDataStart(0x10000, (ptr_t)etext) +# define MPROTECT_VDB +# define STACKBOTTOM ((ptr_t) 0xdfff0000) +# define DYNAMIC_LOADING +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# ifdef __ELF__ +# define DYNAMIC_LOADING +# else + Linux Sparc/a.out not supported +# endif + extern int _end[]; + extern int _etext[]; +# define DATAEND (_end) +# define SVR4 + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# ifdef __arch64__ +# define DATASTART GC_SysVGetDataStart(0x100000, (ptr_t)_etext) +# else +# define DATASTART GC_SysVGetDataStart(0x10000, (ptr_t)_etext) +# endif +# define LINUX_STACKBOTTOM +# endif +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# define STACKBOTTOM ((ptr_t) 0xf8000000) + extern int etext[]; +# define DATASTART ((ptr_t)(etext)) +# endif +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 +# ifdef __ELF__ +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# else + extern char etext[]; +# 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 +# define MACH_TYPE "I386" +# if defined(__LP64__) || defined(_WIN64) +# error This should be handled as X86_64 +# else +# define CPP_WORDSZ 32 +# define ALIGNMENT 4 + /* Appears to hold for all "32 bit" compilers */ + /* except Borland. The -a4 option fixes */ + /* Borland. */ + /* Ivan Demakov: For Watcom the option is -zp4. */ +# endif +# ifdef SEQUENT +# define OS_TYPE "SEQUENT" + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# define STACKBOTTOM ((ptr_t) 0x3ffff000) +# endif +# ifdef BEOS +# define OS_TYPE "BEOS" +# include +# define GETPAGESIZE() B_PAGE_SIZE + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# endif +# ifdef SOLARIS +# define OS_TYPE "SOLARIS" + extern int _etext[], _end[]; + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)_etext) +# define DATAEND (_end) +/* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */ +/* but reportedly breaks under 2.8. It appears that the stack */ +/* base is a property of the executable, so this should not break */ +/* old executables. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +# include +# define STACKBOTTOM USRSTACK +/* At least in Solaris 2.5, PROC_VDB gives wrong values for dirty bits. */ +/* It appears to be fixed in 2.8 and 2.9. */ +# ifdef SOLARIS25_PROC_VDB_BUG_FIXED +# define PROC_VDB +# endif +# define DYNAMIC_LOADING +# if !defined(USE_MMAP) && defined(REDIRECT_MALLOC) +# define USE_MMAP + /* Otherwise we now use calloc. Mmap may result in the */ + /* heap interleaved with thread stacks, which can result in */ + /* excessive blacklisting. Sbrk is unusable since it */ + /* doesn't interact correctly with the system malloc. */ +# endif +# ifdef USE_MMAP +# define HEAP_START (ptr_t)0x40000000 +# else +# define HEAP_START DATAEND +# endif +# endif +# ifdef SCO +# define OS_TYPE "SCO" + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0x3fffff) \ + & ~0x3fffff) \ + +((word)etext & 0xfff)) +# define STACKBOTTOM ((ptr_t) 0x7ffffffc) +# endif +# ifdef SCO_ELF +# define OS_TYPE "SCO_ELF" + extern int etext[]; +# define DATASTART ((ptr_t)(etext)) +# define STACKBOTTOM ((ptr_t) 0x08048000) +# define DYNAMIC_LOADING +# define ELF_CLASS ELFCLASS32 +# endif +# ifdef DGUX +# define OS_TYPE "DGUX" + extern int _etext, _end; + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)(&_etext)) +# define DATAEND (&_end) +# define STACK_GROWS_DOWN +# define HEURISTIC2 +# include +# define GETPAGESIZE() sysconf(_SC_PAGESIZE) +# define DYNAMIC_LOADING +# ifndef USE_MMAP +# define USE_MMAP +# endif /* USE_MMAP */ +# define MAP_FAILED (void *) -1 +# ifdef USE_MMAP +# define HEAP_START (ptr_t)0x40000000 +# else /* USE_MMAP */ +# define HEAP_START DATAEND +# endif /* USE_MMAP */ +# endif /* DGUX */ + +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# if 0 +# define HEURISTIC1 +# undef STACK_GRAN +# define STACK_GRAN 0x10000000 + /* STACKBOTTOM is usually 0xc0000000, but this changes with */ + /* different kernel configurations. In particular, systems */ + /* with 2GB physical memory will usually move the user */ + /* address space limit, and hence initial SP to 0x80000000. */ +# endif +# if !defined(GC_LINUX_THREADS) || !defined(REDIRECT_MALLOC) +# define MPROTECT_VDB +# else + /* We seem to get random errors in incremental mode, */ + /* possibly because Linux threads is itself a malloc client */ + /* and can't deal with the signals. */ +# endif +# define HEAP_START (ptr_t)0x1000 + /* This encourages mmap to give us low addresses, */ + /* thus allowing the heap to grow to ~3GB */ +# ifdef __ELF__ +# define DYNAMIC_LOADING +# ifdef UNDEFINED /* includes ro data */ + extern int _etext[]; +# define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) +# endif +# include +# if defined(__GLIBC__) && __GLIBC__ >= 2 +# define SEARCH_FOR_DATA_START +# else + extern char **__environ; +# define DATASTART ((ptr_t)(&__environ)) + /* hideous kludge: __environ is the first */ + /* word in crt0.o, and delimits the start */ + /* of the data segment, no matter which */ + /* ld options were passed through. */ + /* We could use _etext instead, but that */ + /* would include .rodata, which may */ + /* contain large read-only data tables */ + /* that we'd rather not scan. */ +# endif + extern int _end[]; +# define DATAEND (_end) +# else + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# endif +# ifdef USE_I686_PREFETCH + /* FIXME: Thus should use __builtin_prefetch, but we'll leave that */ + /* for the next rtelease. */ +# define PREFETCH(x) \ + __asm__ __volatile__ (" prefetchnta %0": : "m"(*(char *)(x))) + /* Empirically prefetcht0 is much more effective at reducing */ + /* cache miss stalls for the targetted load instructions. But it */ + /* seems to interfere enough with other cache traffic that the net */ + /* result is worse than prefetchnta. */ +# if 0 + /* Using prefetches for write seems to have a slight negative */ + /* impact on performance, at least for a PIII/500. */ +# define PREFETCH_FOR_WRITE(x) \ + __asm__ __volatile__ (" prefetcht0 %0": : "m"(*(char *)(x))) +# endif +# endif +# ifdef USE_3DNOW_PREFETCH +# define PREFETCH(x) \ + __asm__ __volatile__ (" prefetch %0": : "m"(*(char *)(x))) +# define PREFETCH_FOR_WRITE(x) \ + __asm__ __volatile__ (" prefetchw %0": : "m"(*(char *)(x))) +# endif +# endif +# ifdef CYGWIN32 +# define OS_TYPE "CYGWIN32" +# define DATASTART ((ptr_t)GC_DATASTART) /* From gc.h */ +# define DATAEND ((ptr_t)GC_DATAEND) +# undef STACK_GRAN +# define STACK_GRAN 0x10000 +# define HEURISTIC1 +# endif +# ifdef OS2 +# define OS_TYPE "OS2" + /* STACKBOTTOM and DATASTART are handled specially in */ + /* os_dep.c. OS2 actually has the right */ + /* system call! */ +# define DATAEND /* not needed */ +# endif +# ifdef MSWIN32 +# define OS_TYPE "MSWIN32" + /* STACKBOTTOM and DATASTART are handled specially in */ + /* os_dep.c. */ +# if !defined(__WATCOMC__) +# define MPROTECT_VDB + /* We also avoided doing this in the past with GC_WIN32_THREADS */ + /* Hopefully that's fixed. */ +# endif +# if _MSC_VER >= 1300 /* .NET, i.e. > VisualStudio 6 */ +# define GWW_VDB +# endif +# define DATAEND /* not needed */ +# endif +# ifdef MSWINCE +# define OS_TYPE "MSWINCE" +# define DATAEND /* not needed */ +# endif +# ifdef DJGPP +# define OS_TYPE "DJGPP" +# include "stubinfo.h" + extern int etext[]; + extern int _stklen; + extern int __djgpp_stack_limit; +# define DATASTART ((ptr_t)((((word) (etext)) + 0x1ff) & ~0x1ff)) +/* # define STACKBOTTOM ((ptr_t)((word) _stubinfo + _stubinfo->size \ + + _stklen)) */ +# define STACKBOTTOM ((ptr_t)((word) __djgpp_stack_limit + _stklen)) + /* This may not be right. */ +# endif +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# endif +# ifdef FREEBSD +# define OS_TYPE "FREEBSD" +# ifndef GC_FREEBSD_THREADS +# define MPROTECT_VDB +# endif +# ifdef __GLIBC__ +# define SIG_SUSPEND (32+6) +# define SIG_THR_RESTART (32+5) + extern int _end[]; +# define DATAEND (_end) +# else +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# endif +# define FREEBSD_STACKBOTTOM +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif + extern char etext[]; + extern char * GC_FreeBSDGetDataStart(size_t, ptr_t); +# define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext) +# endif +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif +# endif +# ifdef THREE86BSD +# define OS_TYPE "THREE86BSD" +# endif +# ifdef BSDI +# define OS_TYPE "BSDI" +# endif +# if defined(OPENBSD) || defined(NETBSD) \ + || defined(THREE86BSD) || defined(BSDI) +# define HEURISTIC2 + extern char etext[]; +# define DATASTART ((ptr_t)(etext)) +# endif +# ifdef NEXT +# define OS_TYPE "NEXT" +# define DATASTART ((ptr_t) get_etext()) +# define STACKBOTTOM ((ptr_t)0xc0000000) +# define DATAEND /* not needed */ +# endif +# ifdef DOS4GW +# define OS_TYPE "DOS4GW" + extern long __nullarea; + extern char _end; + extern char *_STACKTOP; + /* Depending on calling conventions Watcom C either precedes + or does not precedes with undescore names of C-variables. + Make sure startup code variables always have the same names. */ + #pragma aux __nullarea "*"; + #pragma aux _end "*"; +# define STACKBOTTOM ((ptr_t) _STACKTOP) + /* confused? me too. */ +# define DATASTART ((ptr_t) &__nullarea) +# define DATAEND ((ptr_t) &_end) +# endif +# ifdef HURD +# define OS_TYPE "HURD" +# define STACK_GROWS_DOWN +# define HEURISTIC2 +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# define SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND ((ptr_t) (_end)) +/* # define MPROTECT_VDB Not quite working yet? */ +# define DYNAMIC_LOADING +# endif +# ifdef DARWIN +# define OS_TYPE "DARWIN" +# define DARWIN_DONT_PARSE_STACK +# define DYNAMIC_LOADING + /* XXX: see get_end(3), get_etext() and get_end() should not be used. + These aren't used when dyld support is enabled (it is by default) */ +# define DATASTART ((ptr_t) get_etext()) +# define DATAEND ((ptr_t) get_end()) +# define STACKBOTTOM ((ptr_t) 0xc0000000) +# define USE_MMAP +# define USE_MMAP_ANON +# ifdef GC_DARWIN_THREADS +# define MPROTECT_VDB +# endif +# include +# define GETPAGESIZE() getpagesize() + /* There seems to be some issues with trylock hanging on darwin. This + should be looked into some more */ +# define NO_PTHREAD_TRYLOCK +# endif /* DARWIN */ +# endif + +# ifdef NS32K +# define MACH_TYPE "NS32K" +# define ALIGNMENT 4 + extern char **environ; +# define DATASTART ((ptr_t)(&environ)) + /* hideous kludge: environ is the first */ + /* word in crt0.o, and delimits the start */ + /* of the data segment, no matter which */ + /* ld options were passed through. */ +# define STACKBOTTOM ((ptr_t) 0xfffff000) /* for Encore */ +# endif + +# ifdef MIPS +# define MACH_TYPE "MIPS" +# ifdef LINUX + /* This was developed for a linuxce style platform. Probably */ + /* needs to be tweaked for workstation class machines. */ +# define OS_TYPE "LINUX" +# define DYNAMIC_LOADING + extern int _end[]; +# define DATAEND (_end) + extern int __data_start[]; +# define DATASTART ((ptr_t)(__data_start)) +# ifdef _MIPS_SZPTR +# define CPP_WORDSZ _MIPS_SZPTR +# define ALIGNMENT (_MIPS_SZPTR/8) +# else +# define ALIGNMENT 4 +# endif +# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2 +# define LINUX_STACKBOTTOM +# else +# define STACKBOTTOM 0x80000000 +# endif +# endif /* Linux */ +# ifdef EWS4800 +# define HEURISTIC2 +# if defined(_MIPS_SZPTR) && (_MIPS_SZPTR == 64) + extern int _fdata[], _end[]; +# define DATASTART ((ptr_t)_fdata) +# define DATAEND ((ptr_t)_end) +# define CPP_WORDSZ _MIPS_SZPTR +# define ALIGNMENT (_MIPS_SZPTR/8) +# else + extern int etext[], edata[], end[]; + extern int _DYNAMIC_LINKING[], _gp[]; +# define DATASTART ((ptr_t)((((word)etext + 0x3ffff) & ~0x3ffff) \ + + ((word)etext & 0xffff))) +# define DATAEND (edata) +# define DATASTART2 (_DYNAMIC_LINKING \ + ? (ptr_t)(((word)_gp + 0x8000 + 0x3ffff) & ~0x3ffff) \ + : (ptr_t)edata) +# define DATAEND2 (end) +# define ALIGNMENT 4 +# endif +# define OS_TYPE "EWS4800" +# endif +# ifdef ULTRIX +# define HEURISTIC2 +# define DATASTART (ptr_t)0x10000000 + /* Could probably be slightly higher since */ + /* startup code allocates lots of stuff. */ +# define OS_TYPE "ULTRIX" +# define ALIGNMENT 4 +# endif +# ifdef IRIX5 +# define HEURISTIC2 + extern int _fdata[]; +# define DATASTART ((ptr_t)(_fdata)) +# ifdef USE_MMAP +# define HEAP_START (ptr_t)0x30000000 +# else +# define HEAP_START DATASTART +# endif + /* Lowest plausible heap address. */ + /* In the MMAP case, we map there. */ + /* In either case it is used to identify */ + /* heap sections so they're not */ + /* considered as roots. */ +# define OS_TYPE "IRIX5" +/*# define MPROTECT_VDB DOB: this should work, but there is evidence */ +/* of recent breakage. */ +# ifdef _MIPS_SZPTR +# define CPP_WORDSZ _MIPS_SZPTR +# define ALIGNMENT (_MIPS_SZPTR/8) +# else +# define ALIGNMENT 4 +# endif +# define DYNAMIC_LOADING +# endif +# ifdef MSWINCE +# define OS_TYPE "MSWINCE" +# define ALIGNMENT 4 +# define DATAEND /* not needed */ +# endif +# if defined(NETBSD) +# define OS_TYPE "NETBSD" +# define ALIGNMENT 4 +# define HEURISTIC2 +# ifdef __ELF__ + extern int etext[]; +# define DATASTART GC_data_start +# define NEED_FIND_LIMIT +# define DYNAMIC_LOADING +# else +# define DATASTART ((ptr_t) 0x10000000) +# define STACKBOTTOM ((ptr_t) 0x7ffff000) +# endif /* _ELF_ */ +# endif +# if defined(NONSTOP) +# define CPP_WORDSZ 32 +# define OS_TYPE "NONSTOP" +# define ALIGNMENT 4 +# define DATASTART ((ptr_t) 0x08000000) + extern char **environ; +# define DATAEND ((ptr_t)(environ - 0x10)) +# define STACKBOTTOM ((ptr_t) 0x4fffffff) +# endif +# endif + +# ifdef HP_PA +# define MACH_TYPE "HP_PA" +# ifdef __LP64__ +# define CPP_WORDSZ 64 +# define ALIGNMENT 8 +# else +# define CPP_WORDSZ 32 +# define ALIGNMENT 4 +# endif +# if !defined(GC_HPUX_THREADS) && !defined(GC_LINUX_THREADS) +# ifndef LINUX /* For now. */ +# define MPROTECT_VDB +# endif +# else +# ifdef PARALLEL_MARK +# define USE_MARK_BYTES + /* Minimize compare-and-swap usage. */ +# endif +# endif +# define STACK_GROWS_UP +# ifdef HPUX +# define OS_TYPE "HPUX" + extern int __data_start[]; +# define DATASTART ((ptr_t)(__data_start)) +# if 0 + /* The following appears to work for 7xx systems running HP/UX */ + /* 9.xx Furthermore, it might result in much faster */ + /* collections than HEURISTIC2, which may involve scanning */ + /* segments that directly precede the stack. It is not the */ + /* default, since it may not work on older machine/OS */ + /* combinations. (Thanks to Raymond X.T. Nijssen for uncovering */ + /* this.) */ +# define STACKBOTTOM ((ptr_t) 0x7b033000) /* from /etc/conf/h/param.h */ +# else + /* Gustavo Rodriguez-Rivera suggested changing HEURISTIC2 */ + /* to this. Note that the GC must be initialized before the */ + /* first putenv call. */ + extern char ** environ; +# define STACKBOTTOM ((ptr_t)environ) +# endif +# define DYNAMIC_LOADING +# include +# define GETPAGESIZE() sysconf(_SC_PAGE_SIZE) +# ifndef __GNUC__ +# define PREFETCH(x) { \ + register long addr = (long)(x); \ + (void) _asm ("LDW", 0, 0, addr, 0); \ + } +# endif +# endif /* HPUX */ +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# define DYNAMIC_LOADING +# define SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND (&_end) +# endif /* LINUX */ +# endif /* HP_PA */ + +# ifdef ALPHA +# define MACH_TYPE "ALPHA" +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 +# define DATASTART GC_data_start +# define ELFCLASS32 32 +# define ELFCLASS64 64 +# define ELF_CLASS ELFCLASS64 +# define DYNAMIC_LOADING +# endif +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# define HEURISTIC2 +# ifdef __ELF__ /* since OpenBSD/Alpha 2.9 */ +# define DATASTART GC_data_start +# define ELFCLASS32 32 +# define ELFCLASS64 64 +# define ELF_CLASS ELFCLASS64 +# else /* ECOFF, until OpenBSD/Alpha 2.7 */ +# define DATASTART ((ptr_t) 0x140000000) +# endif +# endif +# ifdef FREEBSD +# define OS_TYPE "FREEBSD" +/* MPROTECT_VDB is not yet supported at all on FreeBSD/alpha. */ +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# define FREEBSD_STACKBOTTOM +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif +/* Handle unmapped hole alpha*-*-freebsd[45]* puts between etext and edata. */ + 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 +# ifdef OSF1 +# define OS_TYPE "OSF1" +# define DATASTART ((ptr_t) 0x140000000) + extern int _end[]; +# define DATAEND ((ptr_t) &_end) + extern char ** environ; + /* round up from the value of environ to the nearest page boundary */ + /* Probably breaks if putenv is called before collector */ + /* initialization. */ +# define STACKBOTTOM ((ptr_t)(((word)(environ) | (getpagesize()-1))+1)) +/* # define HEURISTIC2 */ + /* Normally HEURISTIC2 is too conervative, since */ + /* the text segment immediately follows the stack. */ + /* Hence we give an upper pound. */ + /* This is currently unused, since we disabled HEURISTIC2 */ + extern int __start[]; +# define HEURISTIC2_LIMIT ((ptr_t)((word)(__start) & ~(getpagesize()-1))) +# ifndef GC_OSF1_THREADS + /* Unresolved signal issues with threads. */ +# define MPROTECT_VDB +# endif +# define DYNAMIC_LOADING +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# ifdef __ELF__ +# define SEARCH_FOR_DATA_START +# define DYNAMIC_LOADING +# else +# define DATASTART ((ptr_t) 0x140000000) +# endif + extern int _end[]; +# define DATAEND (_end) +# define MPROTECT_VDB + /* Has only been superficially tested. May not */ + /* work on all versions. */ +# endif +# endif + +# ifdef IA64 +# define MACH_TYPE "IA64" +# ifdef HPUX +# ifdef _ILP32 +# define CPP_WORDSZ 32 + /* Requires 8 byte alignment for malloc */ +# define ALIGNMENT 4 +# else +# ifndef _LP64 + ---> unknown ABI +# endif +# define CPP_WORDSZ 64 + /* Requires 16 byte alignment for malloc */ +# define ALIGNMENT 8 +# endif +# define OS_TYPE "HPUX" + extern int __data_start[]; +# define DATASTART ((ptr_t)(__data_start)) + /* Gustavo Rodriguez-Rivera suggested changing HEURISTIC2 */ + /* to this. Note that the GC must be initialized before the */ + /* first putenv call. */ + extern char ** environ; +# define STACKBOTTOM ((ptr_t)environ) +# define HPUX_STACKBOTTOM +# define DYNAMIC_LOADING +# include +# define GETPAGESIZE() sysconf(_SC_PAGE_SIZE) + /* The following was empirically determined, and is probably */ + /* not very robust. */ + /* Note that the backing store base seems to be at a nice */ + /* address minus one page. */ +# define BACKING_STORE_DISPLACEMENT 0x1000000 +# define BACKING_STORE_ALIGNMENT 0x1000 + extern ptr_t GC_register_stackbottom; +# define BACKING_STORE_BASE GC_register_stackbottom + /* Known to be wrong for recent HP/UX versions!!! */ +# endif +# ifdef LINUX +# define CPP_WORDSZ 64 +# define ALIGNMENT 8 +# define OS_TYPE "LINUX" + /* The following works on NUE and older kernels: */ +/* # define STACKBOTTOM ((ptr_t) 0xa000000000000000l) */ + /* This does not work on NUE: */ +# define LINUX_STACKBOTTOM + /* We also need the base address of the register stack */ + /* backing store. This is computed in */ + /* GC_linux_register_stack_base based on the following */ + /* constants: */ +# define BACKING_STORE_ALIGNMENT 0x100000 +# define BACKING_STORE_DISPLACEMENT 0x80000000 + extern ptr_t GC_register_stackbottom; +# define BACKING_STORE_BASE GC_register_stackbottom +# define SEARCH_FOR_DATA_START +# ifdef __GNUC__ +# define DYNAMIC_LOADING +# else + /* In the Intel compiler environment, we seem to end up with */ + /* statically linked executables and an undefined reference */ + /* to _DYNAMIC */ +# endif +# define MPROTECT_VDB + /* Requires Linux 2.3.47 or later. */ + extern int _end[]; +# define DATAEND (_end) +# ifdef __GNUC__ +# ifndef __INTEL_COMPILER +# define PREFETCH(x) \ + __asm__ (" lfetch [%0]": : "r"(x)) +# define PREFETCH_FOR_WRITE(x) \ + __asm__ (" lfetch.excl [%0]": : "r"(x)) +# define CLEAR_DOUBLE(x) \ + __asm__ (" stf.spill [%0]=f0": : "r"((void *)(x))) +# else +# include +# define PREFETCH(x) \ + __lfetch(__lfhint_none, (x)) +# define PREFETCH_FOR_WRITE(x) \ + __lfetch(__lfhint_nta, (x)) +# define CLEAR_DOUBLE(x) \ + __stf_spill((void *)(x), 0) +# endif // __INTEL_COMPILER +# endif +# endif +# ifdef MSWIN32 + /* FIXME: This is a very partial guess. There is no port, yet. */ +# define OS_TYPE "MSWIN32" + /* STACKBOTTOM and DATASTART are handled specially in */ + /* os_dep.c. */ +# define DATAEND /* not needed */ +# if defined(_WIN64) +# define CPP_WORDSZ 64 +# else +# define CPP_WORDSZ 32 /* Is this possible? */ +# endif +# define ALIGNMENT 8 +# define STRTOULL _strtoui64 +# endif +# endif + +# ifdef M88K +# define MACH_TYPE "M88K" +# define ALIGNMENT 4 + extern int etext[]; +# ifdef CX_UX +# define OS_TYPE "CX_UX" +# define DATASTART ((((word)etext + 0x3fffff) & ~0x3fffff) + 0x10000) +# endif +# ifdef DGUX +# define OS_TYPE "DGUX" + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x10000, (ptr_t)etext) +# endif +# define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */ +# endif + +# ifdef S370 + /* If this still works, and if anyone cares, this should probably */ + /* be moved to the S390 category. */ +# define MACH_TYPE "S370" +# define ALIGNMENT 4 /* Required by hardware */ +# ifdef UTS4 +# define OS_TYPE "UTS4" + extern int etext[]; + extern int _etext[]; + extern int _end[]; + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x10000, (ptr_t)_etext) +# define DATAEND (_end) +# define HEURISTIC2 +# endif +# endif + +# ifdef S390 +# define MACH_TYPE "S390" +# ifndef __s390x__ +# define ALIGNMENT 4 +# define CPP_WORDSZ 32 +# else +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# define DYNAMIC_LOADING + extern int __data_start[]; +# define DATASTART ((ptr_t)(__data_start)) + extern int _end[]; +# define DATAEND (_end) +# define CACHE_LINE_SIZE 256 +# define GETPAGESIZE() 4096 +# endif +# endif + +# ifdef ARM32 +# define CPP_WORDSZ 32 +# define MACH_TYPE "ARM32" +# define ALIGNMENT 4 +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 +# ifdef __ELF__ +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# else + extern char etext[]; +# define DATASTART ((ptr_t)(etext)) +# endif +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# undef STACK_GRAN +# define STACK_GRAN 0x10000000 +# ifdef __ELF__ +# define DYNAMIC_LOADING +# include +# if defined(__GLIBC__) && __GLIBC__ >= 2 +# define SEARCH_FOR_DATA_START +# else + extern char **__environ; +# define DATASTART ((ptr_t)(&__environ)) + /* hideous kludge: __environ is the first */ + /* word in crt0.o, and delimits the start */ + /* of the data segment, no matter which */ + /* ld options were passed through. */ + /* We could use _etext instead, but that */ + /* would include .rodata, which may */ + /* contain large read-only data tables */ + /* that we'd rather not scan. */ +# endif + extern int _end[]; +# define DATAEND (_end) +# else + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# endif +# endif +# ifdef MSWINCE +# define OS_TYPE "MSWINCE" +# define DATAEND /* not needed */ +# endif +# ifdef NOSYS + /* __data_start is usually defined in the target linker script. */ + extern int __data_start[]; +# define DATASTART (ptr_t)(__data_start) + /* __stack_base__ is set in newlib/libc/sys/arm/crt0.S */ + extern void *__stack_base__; +# define STACKBOTTOM ((ptr_t) (__stack_base__)) +# 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 SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND (_end) +# endif + +# ifdef SH +# define MACH_TYPE "SH" +# define ALIGNMENT 4 +# ifdef MSWINCE +# define OS_TYPE "MSWINCE" +# define DATAEND /* not needed */ +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# define DYNAMIC_LOADING +# define SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND (_end) +# endif +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# define HEURISTIC2 +# define DATASTART GC_data_start +# define DYNAMIC_LOADING +# endif +# endif + +# ifdef SH4 +# define MACH_TYPE "SH4" +# define OS_TYPE "MSWINCE" +# define ALIGNMENT 4 +# 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 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 +# define CPP_WORDSZ 64 +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif +# define CACHE_LINE_SIZE 64 +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# if !defined(GC_LINUX_THREADS) || !defined(REDIRECT_MALLOC) +# define MPROTECT_VDB +# else + /* We seem to get random errors in incremental mode, */ + /* possibly because Linux threads is itself a malloc client */ + /* and can't deal with the signals. */ +# endif +# ifdef __ELF__ +# define DYNAMIC_LOADING +# ifdef UNDEFINED /* includes ro data */ + extern int _etext[]; +# define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) +# endif +# include +# define SEARCH_FOR_DATA_START + extern int _end[]; +# define DATAEND (_end) +# else + extern int etext[]; +# define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) +# endif +# if defined(__GNUC__) && __GNUC__ >= 3 +# define PREFETCH(x) __builtin_prefetch((x), 0, 0) +# define PREFETCH_FOR_WRITE(x) __builtin_prefetch((x), 1) +# endif +# endif +# ifdef DARWIN +# define OS_TYPE "DARWIN" +# define DARWIN_DONT_PARSE_STACK +# define DYNAMIC_LOADING + /* XXX: see get_end(3), get_etext() and get_end() should not be used. + These aren't used when dyld support is enabled (it is by default) */ +# define DATASTART ((ptr_t) get_etext()) +# define DATAEND ((ptr_t) get_end()) +# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) +# define USE_MMAP +# define USE_MMAP_ANON +# ifdef GC_DARWIN_THREADS +# define MPROTECT_VDB +# endif +# include +# define GETPAGESIZE() getpagesize() + /* There seems to be some issues with trylock hanging on darwin. This + should be looked into some more */ +# define NO_PTHREAD_TRYLOCK +# endif +# ifdef FREEBSD +# define OS_TYPE "FREEBSD" +# ifndef GC_FREEBSD_THREADS +# define MPROTECT_VDB +# endif +# ifdef __GLIBC__ +# define SIG_SUSPEND (32+6) +# define SIG_THR_RESTART (32+5) + extern int _end[]; +# define DATAEND (_end) +# else +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# endif +# define FREEBSD_STACKBOTTOM +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif + extern char etext[]; + extern char * GC_FreeBSDGetDataStart(); +# define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext) +# endif +# ifdef NETBSD +# define OS_TYPE "NETBSD" +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif +# define HEURISTIC2 + extern char etext[]; +# define SEARCH_FOR_DATA_START +# endif +# ifdef SOLARIS +# define OS_TYPE "SOLARIS" +# define ELF_CLASS ELFCLASS64 + extern int _etext[], _end[]; + extern ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)_etext) +# define DATAEND (_end) +/* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */ +/* but reportedly breaks under 2.8. It appears that the stack */ +/* base is a property of the executable, so this should not break */ +/* old executables. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +/* Apparently USRSTACK is defined to be USERLIMIT, but in some */ +/* installations that's undefined. We work around this with a */ +/* gross hack: */ +# include +# ifdef USERLIMIT + /* This should work everywhere, but doesn't. */ +# define STACKBOTTOM USRSTACK +# else +# define HEURISTIC2 +# endif +/* At least in Solaris 2.5, PROC_VDB gives wrong values for dirty bits. */ +/* It appears to be fixed in 2.8 and 2.9. */ +# ifdef SOLARIS25_PROC_VDB_BUG_FIXED +# define PROC_VDB +# endif +# define DYNAMIC_LOADING +# if !defined(USE_MMAP) && defined(REDIRECT_MALLOC) +# define USE_MMAP + /* Otherwise we now use calloc. Mmap may result in the */ + /* heap interleaved with thread stacks, which can result in */ + /* excessive blacklisting. Sbrk is unusable since it */ + /* doesn't interact correctly with the system malloc. */ +# endif +# ifdef USE_MMAP +# define HEAP_START (ptr_t)0x40000000 +# else +# define HEAP_START DATAEND +# endif +# endif +# ifdef MSWIN32 +# define OS_TYPE "MSWIN32" + /* STACKBOTTOM and DATASTART are handled specially in */ + /* os_dep.c. */ +# if !defined(__WATCOMC__) +# define MPROTECT_VDB + /* We also avoided doing this in the past with GC_WIN32_THREADS */ + /* Hopefully that's fixed. */ +# endif +# if _MSC_VER >= 1300 /* .NET, i.e. > VisualStudio 6 */ +# define GWW_VDB +# endif +# define DATAEND /* not needed */ +# endif +# endif + +#if defined(LINUX_STACKBOTTOM) && defined(NO_PROC_STAT) \ + && !defined(USE_LIBC_PRIVATES) + /* This combination will fail, since we have no way to get */ + /* the stack base. Use HEURISTIC2 instead. */ +# undef LINUX_STACKBOTTOM +# define HEURISTIC2 + /* This may still fail on some architectures like IA64. */ + /* We tried ... */ +#endif + +#if defined(LINUX) && defined(USE_MMAP) + /* The kernel may do a somewhat better job merging mappings etc. */ + /* with anonymous mappings. */ +# define USE_MMAP_ANON +#endif + +#if defined(GC_LINUX_THREADS) && defined(REDIRECT_MALLOC) + /* Nptl allocates thread stacks with mmap, which is fine. But it */ + /* keeps a cache of thread stacks. Thread stacks contain the */ + /* thread control blocks. These in turn contain a pointer to */ + /* (sizeof (void *) from the beginning of) the dtv for thread-local */ + /* storage, which is calloc allocated. If we don't scan the cached */ + /* thread stacks, we appear to lose the dtv. This tends to */ + /* result in something that looks like a bogus dtv count, which */ + /* tends to result in a memset call on a block that is way too */ + /* large. Sometimes we're lucky and the process just dies ... */ + /* There seems to be a similar issue with some other memory */ + /* allocated by the dynamic loader. */ + /* This should be avoidable by either: */ + /* - Defining USE_PROC_FOR_LIBRARIES here. */ + /* That performs very poorly, precisely because we end up */ + /* scanning cached stacks. */ + /* - Have calloc look at its callers. */ + /* In spite of the fact that it is gross and disgusting. */ + /* In fact neither seems to suffice, probably in part because */ + /* even with USE_PROC_FOR_LIBRARIES, we don't scan parts of stack */ + /* segments that appear to be out of bounds. Thus we actually */ + /* do both, which seems to yield the best results. */ + +# define USE_PROC_FOR_LIBRARIES +#endif + +# ifndef STACK_GROWS_UP +# define STACK_GROWS_DOWN +# endif + +# ifndef CPP_WORDSZ +# define CPP_WORDSZ 32 +# endif + +# ifndef OS_TYPE +# define OS_TYPE "" +# endif + +# ifndef DATAEND + extern int end[]; +# define DATAEND (end) +# endif + +# if defined(SVR4) && !defined(GETPAGESIZE) +# include +# define GETPAGESIZE() sysconf(_SC_PAGESIZE) +# endif + +# ifndef GETPAGESIZE +# if defined(SOLARIS) || defined(IRIX5) || defined(LINUX) \ + || defined(NETBSD) || defined(FREEBSD) || defined(HPUX) +# include +# endif +# define GETPAGESIZE() getpagesize() +# endif + +# if defined(SOLARIS) || defined(DRSNX) || defined(UTS4) + /* OS has SVR4 generic features. */ + /* Probably others also qualify. */ +# define SVR4 +# endif + +# if defined(SOLARIS) || defined(DRSNX) + /* OS has SOLARIS style semi-undocumented interface */ + /* to dynamic loader. */ +# define SOLARISDL + /* OS has SOLARIS style signal handlers. */ +# define SUNOS5SIGS +# endif + +# if defined(HPUX) +# define SUNOS5SIGS +# endif + +# if defined(FREEBSD) && \ + (defined(__DragonFly__) || __FreeBSD__ >= 4 || (__FreeBSD_kernel__ >= 4)) +# define SUNOS5SIGS +# endif + +# ifdef GC_NETBSD_THREADS +# define SIGRTMIN 33 +# define SIGRTMAX 63 +# endif + +# if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \ + || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \ + || defined(DGUX) || defined(BSD) \ + || defined(AIX) || defined(DARWIN) || defined(OSF1) \ + || defined(HURD) +# define UNIX_LIKE /* Basic Unix-like system calls work. */ +# endif + +# if CPP_WORDSZ != 32 && CPP_WORDSZ != 64 + -> bad word size +# endif + +# ifdef PCR +# undef DYNAMIC_LOADING +# undef STACKBOTTOM +# undef HEURISTIC1 +# undef HEURISTIC2 +# undef PROC_VDB +# undef MPROTECT_VDB +# define PCR_VDB +# endif + +# ifdef SMALL_CONFIG + /* Presumably not worth the space it takes. */ +# undef PROC_VDB +# undef MPROTECT_VDB +# endif + +# ifdef USE_MUNMAP +# undef MPROTECT_VDB /* Can't deal with address space holes. */ +# endif + +# ifdef PARALLEL_MARK +# undef MPROTECT_VDB /* For now. */ +# endif + +# if !defined(PCR_VDB) && !defined(PROC_VDB) && !defined(MPROTECT_VDB) \ + && !defined(GWW_VDB) +# define DEFAULT_VDB +# endif + +# ifndef PREFETCH +# define PREFETCH(x) +# define NO_PREFETCH +# endif + +# ifndef PREFETCH_FOR_WRITE +# define PREFETCH_FOR_WRITE(x) +# define NO_PREFETCH_FOR_WRITE +# endif + +# ifndef CACHE_LINE_SIZE +# define CACHE_LINE_SIZE 32 /* Wild guess */ +# endif + +# if defined(LINUX) || defined(HURD) || defined(__GLIBC__) +# define REGISTER_LIBRARIES_EARLY + /* We sometimes use dl_iterate_phdr, which may acquire an internal */ + /* lock. This isn't safe after the world has stopped. So we must */ + /* call GC_register_dynamic_libraries before stopping the world. */ + /* For performance reasons, this may be beneficial on other */ + /* platforms as well, though it should be avoided in win32. */ +# endif /* LINUX */ + +# if defined(SEARCH_FOR_DATA_START) + extern ptr_t GC_data_start; +# define DATASTART GC_data_start +# endif + +# ifndef CLEAR_DOUBLE +# define CLEAR_DOUBLE(x) \ + ((word*)x)[0] = 0; \ + ((word*)x)[1] = 0; +# endif /* CLEAR_DOUBLE */ + +# if defined(GC_LINUX_THREADS) && defined(REDIRECT_MALLOC) \ + && !defined(INCLUDE_LINUX_THREAD_DESCR) + /* Will not work, since libc and the dynamic loader use thread */ + /* locals, sometimes as the only reference. */ +# define INCLUDE_LINUX_THREAD_DESCR +# endif + +# if defined(GC_IRIX_THREADS) && !defined(IRIX5) + --> inconsistent configuration +# endif +# if defined(GC_LINUX_THREADS) && !defined(LINUX) + --> inconsistent configuration +# endif +# if defined(GC_NETBSD_THREADS) && !defined(NETBSD) + --> inconsistent configuration +# endif +# if defined(GC_FREEBSD_THREADS) && !defined(FREEBSD) + --> inconsistent configuration +# endif +# if defined(GC_SOLARIS_THREADS) && !defined(SOLARIS) + --> inconsistent configuration +# endif +# if defined(GC_HPUX_THREADS) && !defined(HPUX) + --> inconsistent configuration +# endif +# if defined(GC_AIX_THREADS) && !defined(_AIX) + --> inconsistent configuration +# endif +# if defined(GC_GNU_THREADS) && !defined(HURD) + --> inconsistent configuration +# endif +# if defined(GC_WIN32_THREADS) && !defined(MSWIN32) && !defined(CYGWIN32) + --> inconsistent configuration +# endif + +# if defined(PCR) || defined(GC_WIN32_THREADS) || defined(GC_PTHREADS) +# define THREADS +# endif + +# if !defined(USE_MARK_BITS) && !defined(USE_MARK_BYTES) +# if defined(THREADS) && defined(PARALLEL_MARK) +# define USE_MARK_BYTES +# else +# define USE_MARK_BITS +# endif +# endif + +# if defined(MSWINCE) +# define NO_GETENV +# endif + +# if defined(SPARC) +# define ASM_CLEAR_CODE /* Stack clearing is crucial, and we */ + /* include assembly code to do it well. */ +# endif + + /* Can we save call chain in objects for debugging? */ + /* SET NFRAMES (# of saved frames) and NARGS (#of args for each */ + /* frame) to reasonable values for the platform. */ + /* Set SAVE_CALL_CHAIN if we can. SAVE_CALL_COUNT can be specified */ + /* at build time, though we feel free to adjust it slightly. */ + /* Define NEED_CALLINFO if we either save the call stack or */ + /* GC_ADD_CALLER is defined. */ + /* GC_CAN_SAVE_CALL_STACKS is set in gc.h. */ + +#if defined(SPARC) +# define CAN_SAVE_CALL_ARGS +#endif +#if (defined(I386) || defined(X86_64)) && (defined(LINUX) || defined(__GLIBC__)) + /* SAVE_CALL_CHAIN is supported if the code is compiled to save */ + /* frame pointers by default, i.e. no -fomit-frame-pointer flag. */ +# define CAN_SAVE_CALL_ARGS +#endif + +# if defined(SAVE_CALL_COUNT) && !defined(GC_ADD_CALLER) \ + && defined(GC_CAN_SAVE_CALL_STACKS) +# define SAVE_CALL_CHAIN +# endif +# ifdef SAVE_CALL_CHAIN +# if defined(SAVE_CALL_NARGS) && defined(CAN_SAVE_CALL_ARGS) +# define NARGS SAVE_CALL_NARGS +# else +# define NARGS 0 /* Number of arguments to save for each call. */ +# endif +# endif +# ifdef SAVE_CALL_CHAIN +# ifndef SAVE_CALL_COUNT +# define NFRAMES 6 /* Number of frames to save. Even for */ + /* alignment reasons. */ +# else +# define NFRAMES ((SAVE_CALL_COUNT + 1) & ~1) +# endif +# define NEED_CALLINFO +# endif /* SAVE_CALL_CHAIN */ +# ifdef GC_ADD_CALLER +# define NFRAMES 1 +# define NARGS 0 +# define NEED_CALLINFO +# endif + +# if defined(MAKE_BACK_GRAPH) && !defined(DBG_HDRS_ALL) +# define DBG_HDRS_ALL +# endif + +# if defined(POINTER_MASK) && !defined(POINTER_SHIFT) +# define POINTER_SHIFT 0 +# endif + +# if defined(POINTER_SHIFT) && !defined(POINTER_MASK) +# define POINTER_MASK ((GC_word)(-1)) +# endif + +# if !defined(FIXUP_POINTER) && defined(POINTER_MASK) +# define FIXUP_POINTER(p) (p) = ((p) & (POINTER_MASK) << POINTER_SHIFT) +# endif + +# if defined(FIXUP_POINTER) +# define NEED_FIXUP_POINTER 1 +# else +# define NEED_FIXUP_POINTER 0 +# define FIXUP_POINTER(p) +# endif + +# if !defined(MARK_BIT_PER_GRANULE) && !defined(MARK_BIT_PER_OBJ) +# define MARK_BIT_PER_GRANULE /* Usually faster */ +# endif + +/* Some static sanity tests. */ +# if defined(MARK_BIT_PER_GRANULE) && defined(MARK_BIT_PER_OBJ) +# error Define only one of MARK_BIT_PER_GRANULE and MARK_BIT_PER_OBJ. +# endif + +# if defined(STACK_GROWS_UP) && defined(STACK_GROWS_DOWN) +# error "Only one of STACK_GROWS_UP and STACK_GROWS_DOWN should be defd." +# endif +# if !defined(STACK_GROWS_UP) && !defined(STACK_GROWS_DOWN) +# error "One of STACK_GROWS_UP and STACK_GROWS_DOWN should be defd." +# endif + +# if defined(REDIRECT_MALLOC) && defined(THREADS) && !defined(LINUX) +# error "REDIRECT_MALLOC with THREADS works at most on Linux." +# endif + +#ifdef GC_PRIVATE_H + /* This relies on some type definitions from gc_priv.h, from */ + /* where it's normally included. */ + /* */ + /* How to get heap memory from the OS: */ + /* Note that sbrk()-like allocation is preferred, since it */ + /* usually makes it possible to merge consecutively allocated */ + /* chunks. It also avoids unintented recursion with */ + /* -DREDIRECT_MALLOC. */ + /* GET_MEM() returns a HLKSIZE aligned chunk. */ + /* 0 is taken to mean failure. */ + /* In the case os USE_MMAP, the argument must also be a */ + /* physical page size. */ + /* GET_MEM is currently not assumed to retrieve 0 filled space, */ + /* though we should perhaps take advantage of the case in which */ + /* does. */ + struct hblk; /* See gc_priv.h. */ +# if defined(PCR) + char * real_malloc(); +# define GET_MEM(bytes) HBLKPTR(real_malloc((size_t)bytes + GC_page_size) \ + + GC_page_size-1) +# elif defined(OS2) + void * os2_alloc(size_t bytes); +# define GET_MEM(bytes) HBLKPTR((ptr_t)os2_alloc((size_t)bytes \ + + GC_page_size) \ + + GC_page_size-1) +# elif defined(NEXT) || defined(DOS4GW) || defined(NONSTOP) || \ + (defined(AMIGA) && !defined(GC_AMIGA_FASTALLOC)) || \ + (defined(SOLARIS) && !defined(USE_MMAP)) +# define GET_MEM(bytes) HBLKPTR((size_t) calloc(1, (size_t)bytes + GC_page_size) \ + + GC_page_size-1) +# elif defined(MSWIN32) + extern ptr_t GC_win32_get_mem(); +# define GET_MEM(bytes) (struct hblk *)GC_win32_get_mem(bytes) +# elif defined(MACOS) +# if defined(USE_TEMPORARY_MEMORY) + extern Ptr GC_MacTemporaryNewPtr(size_t size, Boolean clearMemory); +# define GET_MEM(bytes) HBLKPTR( \ + GC_MacTemporaryNewPtr(bytes + GC_page_size, true) \ + + GC_page_size-1) +# else +# define GET_MEM(bytes) HBLKPTR( \ + NewPtrClear(bytes + GC_page_size) + GC_page_size-1) +# endif +# elif defined(MSWINCE) + extern ptr_t GC_wince_get_mem(); +# define GET_MEM(bytes) (struct hblk *)GC_wince_get_mem(bytes) +# elif defined(AMIGA) && defined(GC_AMIGA_FASTALLOC) + extern void *GC_amiga_get_mem(size_t size); +# define GET_MEM(bytes) HBLKPTR((size_t) \ + GC_amiga_get_mem((size_t)bytes + GC_page_size) \ + + GC_page_size-1) +# else + extern ptr_t GC_unix_get_mem(); +# define GET_MEM(bytes) (struct hblk *)GC_unix_get_mem(bytes) +# endif + +#endif /* GC_PRIVATE_H */ + +# endif /* GCCONFIG_H */ diff --git a/.pc/03-add-avr32-support.diff/include/private/thread_local_alloc.h b/.pc/03-add-avr32-support.diff/include/private/thread_local_alloc.h new file mode 100644 index 0000000..90a246a --- /dev/null +++ b/.pc/03-add-avr32-support.diff/include/private/thread_local_alloc.h @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2000-2005 by Hewlett-Packard Company. All rights reserved. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ + +/* Included indirectly from a thread-library-specific file. */ +/* This is the interface for thread-local allocation, whose */ +/* implementation is mostly thread-library-independent. */ +/* Here we describe only the interface that needs to be known */ +/* and invoked from the thread support layer; the actual */ +/* implementation also exports GC_malloc and friends, which */ +/* are declared in gc.h. */ + +#include "private/gc_priv.h" + +#if defined(THREAD_LOCAL_ALLOC) + +#include "gc_inline.h" + + +# if defined USE_HPUX_TLS +# error USE_HPUX_TLS macro was replaced by USE_COMPILER_TLS +# endif + +# if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_WIN32_SPECIFIC) && \ + !defined(USE_WIN32_COMPILER_TLS) && !defined(USE_COMPILER_TLS) && \ + !defined(USE_CUSTOM_SPECIFIC) +# if defined(MSWIN32) || defined(MSWINCE) || defined(CYGWIN32) +# if defined(__GNUC__) /* Fixed for versions past 2.95? */ +# define USE_WIN32_SPECIFIC +# else +# define USE_WIN32_COMPILER_TLS +# endif /* !GNU */ +# elif defined(LINUX) && !defined(ARM32) && \ + (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >=3)) +# define USE_COMPILER_TLS +# elif (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \ + defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)) || \ + defined(GC_NETBSD_THREADS) +# define USE_PTHREAD_SPECIFIC +# elif defined(GC_HPUX_THREADS) +# ifdef __GNUC__ +# define USE_PTHREAD_SPECIFIC + /* Empirically, as of gcc 3.3, USE_COMPILER_TLS doesn't work. */ +# else +# define USE_COMPILER_TLS +# endif +# else +# define USE_CUSTOM_SPECIFIC /* Use our own. */ +# endif +# endif + +# include + +/* One of these should be declared as the tlfs field in the */ +/* structure pointed to by a GC_thread. */ +typedef struct thread_local_freelists { +# ifdef THREAD_LOCAL_ALLOC + void * ptrfree_freelists[TINY_FREELISTS]; + void * normal_freelists[TINY_FREELISTS]; +# ifdef GC_GCJ_SUPPORT + void * gcj_freelists[TINY_FREELISTS]; +# define ERROR_FL (void *)(-1) + /* Value used for gcj_freelist[-1]; allocation is */ + /* erroneous. */ +# endif + /* Free lists contain either a pointer or a small count */ + /* reflecting the number of granules allocated at that */ + /* size. */ + /* 0 ==> thread-local allocation in use, free list */ + /* empty. */ + /* > 0, <= DIRECT_GRANULES ==> Using global allocation, */ + /* too few objects of this size have been */ + /* allocated by this thread. */ + /* >= HBLKSIZE => pointer to nonempty free list. */ + /* > DIRECT_GRANULES, < HBLKSIZE ==> transition to */ + /* local alloc, equivalent to 0. */ +# define DIRECT_GRANULES (HBLKSIZE/GRANULE_BYTES) + /* Don't use local free lists for up to this much */ + /* allocation. */ + +# endif +} *GC_tlfs; + +# if defined(USE_PTHREAD_SPECIFIC) +# define GC_getspecific pthread_getspecific +# define GC_setspecific pthread_setspecific +# define GC_key_create pthread_key_create +# define GC_remove_specific(key) /* No need for cleanup on exit. */ + typedef pthread_key_t GC_key_t; +# elif defined(USE_COMPILER_TLS) || defined(USE_WIN32_COMPILER_TLS) +# define GC_getspecific(x) (x) +# define GC_setspecific(key, v) ((key) = (v), 0) +# define GC_key_create(key, d) 0 +# define GC_remove_specific(key) /* No need for cleanup on exit. */ + typedef void * GC_key_t; +# elif defined(USE_WIN32_SPECIFIC) +# include +# define GC_getspecific TlsGetValue +# define GC_setspecific(key, v) !TlsSetValue(key, v) + /* We assume 0 == success, msft does the opposite. */ +# define GC_key_create(key, d) \ + ((d) != 0? (ABORT("Destructor unsupported by TlsAlloc"),0) \ + : ((*(key) = TlsAlloc()) == TLS_OUT_OF_INDEXES? \ + (ABORT("Out of tls"), 0): \ + 0)) +# define GC_remove_specific(key) /* No need for cleanup on thread exit. */ + /* Need TlsFree on process exit/detach ? */ + typedef DWORD GC_key_t; +# elif defined(USE_CUSTOM_SPECIFIC) +# include "private/specific.h" +# else +# error implement me +# endif + + +/* Each thread structure must be initialized. */ +/* This call must be made from the new thread. */ +/* Caller holds allocation lock. */ +void GC_init_thread_local(GC_tlfs p); + +/* Called when a thread is unregistered, or exits. */ +/* We hold the allocator lock. */ +void GC_destroy_thread_local(GC_tlfs p); + +/* The thread support layer must arrange to mark thread-local */ +/* free lists explicitly, since the link field is often */ +/* invisible to the marker. It knows hoe to find all threads; */ +/* we take care of an individual thread freelist structure. */ +void GC_mark_thread_local_fls_for(GC_tlfs p); + +extern +#if defined(USE_COMPILER_TLS) + __thread +#elif defined(USE_WIN32_COMPILER_TLS) + __declspec(thread) +#endif +GC_key_t GC_thread_key; + +/* This is set up by the thread_local_alloc implementation. But the */ +/* thread support layer calls GC_remove_specific(GC_thread_key) */ +/* before a thread exits. */ +/* And the thread support layer makes sure that GC_thread_key is traced,*/ +/* if necessary. */ + +#endif /* THREAD_LOCAL_ALLOC */ diff --git a/.pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops.h b/.pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops.h new file mode 100755 index 0000000..e1b40ca --- /dev/null +++ b/.pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops.h @@ -0,0 +1,300 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef ATOMIC_OPS_H + +#define ATOMIC_OPS_H + +#include +#include + +/* We define various atomic operations on memory in a */ +/* machine-specific way. Unfortunately, this is complicated */ +/* by the fact that these may or may not be combined with */ +/* various memory barriers. Thus the actual operations we */ +/* define have the form AO__, for all */ +/* plausible combinations of and . */ +/* This of course results in a mild combinatorial explosion. */ +/* To deal with it, we try to generate derived */ +/* definitions for as many of the combinations as we can, as */ +/* automatically as possible. */ +/* */ +/* Our assumption throughout is that the programmer will */ +/* specify the least demanding operation and memory barrier */ +/* that will guarantee correctness for the implementation. */ +/* Our job is to find the least expensive way to implement it */ +/* on the applicable hardware. In many cases that will */ +/* involve, for example, a stronger memory barrier, or a */ +/* combination of hardware primitives. */ +/* */ +/* Conventions: */ +/* "plain" atomic operations are not guaranteed to include */ +/* a barrier. The suffix in the name specifies the barrier */ +/* type. Suffixes are: */ +/* _release: Earlier operations may not be delayed past it. */ +/* _acquire: Later operations may not move ahead of it. */ +/* _read: Subsequent reads must follow this operation and */ +/* preceding reads. */ +/* _write: Earlier writes precede both this operation and */ +/* later writes. */ +/* _full: Ordered with respect to both earlier and later memops.*/ +/* _release_write: Ordered with respect to earlier writes. */ +/* _acquire_read: Ordered with repsect to later reads. */ +/* */ +/* Currently we try to define the following atomic memory */ +/* operations, in combination with the above barriers: */ +/* AO_nop */ +/* AO_load */ +/* AO_store */ +/* AO_test_and_set (binary) */ +/* AO_fetch_and_add */ +/* AO_fetch_and_add1 */ +/* AO_fetch_and_sub1 */ +/* AO_or */ +/* AO_compare_and_swap */ +/* */ +/* Note that atomicity guarantees are valid only if both */ +/* readers and writers use AO_ operations to access the */ +/* shared value, while ordering constraints are intended to */ +/* apply all memory operations. If a location can potentially */ +/* be accessed simultaneously from multiple threads, and one of */ +/* those accesses may be a write access, then all such */ +/* accesses to that location should be through AO_ primitives. */ +/* However if AO_ operations enforce sufficient ordering to */ +/* ensure that a location x cannot be accessed concurrently, */ +/* or can only be read concurrently, then x can be accessed */ +/* via ordinary references and assignments. */ +/* */ +/* Compare_and_exchange takes an address and an expected old */ +/* value and a new value, and returns an int. Nonzero */ +/* indicates that it succeeded. */ +/* Test_and_set takes an address, atomically replaces it by */ +/* AO_TS_SET, and returns the prior value. */ +/* An AO_TS_t location can be reset with the */ +/* AO_CLEAR macro, which normally uses AO_store_release. */ +/* AO_fetch_and_add takes an address and an AO_t increment */ +/* value. The AO_fetch_and_add1 and AO_fetch_and_sub1 variants */ +/* are provided, since they allow faster implementations on */ +/* some hardware. AO_or atomically ors an AO_t value into a */ +/* memory location, but does not provide access to the original.*/ +/* */ +/* We expect this list to grow slowly over time. */ +/* */ +/* Note that AO_nop_full is a full memory barrier. */ +/* */ +/* Note that if some data is initialized with */ +/* data.x = ...; data.y = ...; ... */ +/* AO_store_release_write(&data_is_initialized, 1) */ +/* then data is guaranteed to be initialized after the test */ +/* if (AO_load_release_read(&data_is_initialized)) ... */ +/* succeeds. Furthermore, this should generate near-optimal */ +/* code on all common platforms. */ +/* */ +/* All operations operate on unsigned AO_t, which */ +/* is the natural word size, and usually unsigned long. */ +/* It is possible to check whether a particular operation op */ +/* is available on a particular platform by checking whether */ +/* AO_HAVE_op is defined. We make heavy use of these macros */ +/* internally. */ + +/* The rest of this file basically has three sections: */ +/* */ +/* Some utility and default definitions. */ +/* */ +/* The architecture dependent section: */ +/* This defines atomic operations that have direct hardware */ +/* support on a particular platform, mostly by uncluding the */ +/* appropriate compiler- and hardware-dependent file. */ +/* */ +/* The synthesis section: */ +/* This tries to define other atomic operations in terms of */ +/* those that are explicitly available on the platform. */ +/* This section is hardware independent. */ +/* We make no attempt to synthesize operations in ways that */ +/* effectively introduce locks, except for the debugging/demo */ +/* pthread-based implementation at the beginning. A more */ +/* relistic implementation that falls back to locks could be */ +/* added as a higher layer. But that would sacrifice */ +/* usability from signal handlers. */ +/* The synthesis section is implemented almost entirely in */ +/* atomic_ops_generalize.h. */ + +/* Some common defaults. Overridden for some architectures. */ +#define AO_t size_t + +/* The test_and_set primitive returns an AO_TS_VAL_t value. */ +/* AO_TS_t is the type of an in-memory test-and-set location. */ + +#define AO_TS_INITIALIZER (AO_t)AO_TS_CLEAR + +/* Platform-dependent stuff: */ +#if defined(__GNUC__) || defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define AO_INLINE static __inline +#else +# define AO_INLINE static +#endif + +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +# define AO_compiler_barrier() __asm__ __volatile__("" : : : "memory") +#elif defined(_MSC_VER) +# if defined(_AMD64_) +# pragma intrinsic(_ReadWriteBarrier) +# define AO_compiler_barrier() _ReadWriteBarrier() + /* We assume this does not generate a fence instruction. */ + /* The documentation is a bit unclear. */ +# else +# define AO_compiler_barrier() __asm { } + /* The preceding implementation may be preferable here too. */ + /* But the documentation warns about VC++ 2003 and earlier. */ +# endif +#elif defined(__INTEL_COMPILER) +# define AO_compiler_barrier() __memory_barrier() /* Too strong? IA64-only? */ +#elif defined(_HPUX_SOURCE) +# if defined(__ia64) +# include +# define AO_compiler_barrier() _Asm_sched_fence() +# else + /* FIXME - We dont know how to do this. This is a guess. */ + /* And probably a bad one. */ + static volatile int AO_barrier_dummy; +# define AO_compiler_barrier() AO_barrier_dummy = AO_barrier_dummy +# endif +#else + /* We conjecture that the following usually gives us the right */ + /* semantics or an error. */ +# define AO_compiler_barrier() asm("") +#endif + +#if defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/generic_pthread.h" +#endif /* AO_USE_PTHREAD_DEFS */ + +#if defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS) \ + && !defined(__INTEL_COMPILER) +# if defined(__i386__) +# include "atomic_ops/sysdeps/gcc/x86.h" +# endif /* __i386__ */ +# if defined(__x86_64__) +# include "atomic_ops/sysdeps/gcc/x86_64.h" +# endif /* __i386__ */ +# if defined(__ia64__) +# include "atomic_ops/sysdeps/gcc/ia64.h" +# define AO_GENERALIZE_TWICE +# endif /* __ia64__ */ +# if defined(__hppa__) +# include "atomic_ops/sysdeps/gcc/hppa.h" +# define AO_CAN_EMUL_CAS +# endif /* __hppa__ */ +# if defined(__alpha__) +# include "atomic_ops/sysdeps/gcc/alpha.h" +# define AO_GENERALIZE_TWICE +# endif /* __alpha__ */ +# if defined(__s390__) +# include "atomic_ops/sysdeps/gcc/s390.h" +# endif /* __s390__ */ +# if defined(__sparc__) +# include "atomic_ops/sysdeps/gcc/sparc.h" +# define AO_CAN_EMUL_CAS +# endif /* __sparc__ */ +# if defined(__m68k__) +# include "atomic_ops/sysdeps/gcc/m68k.h" +# endif /* __m68k__ */ +# if defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) \ + || defined(__powerpc64__) || defined(__ppc64__) +# include "atomic_ops/sysdeps/gcc/powerpc.h" +# endif /* __powerpc__ */ +# if defined(__arm__) && !defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/gcc/arm.h" +# define AO_CAN_EMUL_CAS +# endif /* __arm__ */ +# if defined(__cris__) || defined(CRIS) +# include "atomic_ops/sysdeps/gcc/cris.h" +# endif +#endif /* __GNUC__ && !AO_USE_PTHREAD_DEFS */ + +#if defined(__INTEL_COMPILER) && !defined(AO_USE_PTHREAD_DEFS) +# if defined(__ia64__) +# include "atomic_ops/sysdeps/icc/ia64.h" +# define AO_GENERALIZE_TWICE +# endif +#endif + +#if defined(_HPUX_SOURCE) && !defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS) +# if defined(__ia64) +# include "atomic_ops/sysdeps/hpc/ia64.h" +# define AO_GENERALIZE_TWICE +# else +# include "atomic_ops/sysdeps/hpc/hppa.h" +# define AO_CAN_EMUL_CAS +# endif +#endif + +#if !defined(__GNUC__) && (defined(sparc) || defined(__sparc)) \ + && !defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/sunc/sparc.h" +# define AO_CAN_EMUL_CAS +#endif + +#if defined(_MSC_VER) +# if defined(_AMD64_) +# include "atomic_ops/sysdeps/msftc/x86_64.h" +# elif _M_IX86 >= 400 +# include "atomic_ops/sysdeps/msftc/x86.h" +# endif +#endif + +#if defined(AO_REQUIRE_CAS) && !defined(AO_HAVE_compare_and_swap) \ + && !defined(AO_HAVE_compare_and_swap_full) \ + && !defined(AO_HAVE_compare_and_swap_acquire) +# if defined(AO_CAN_EMUL_CAS) +# include "atomic_ops/sysdeps/emul_cas.h" +# else +# error Cannot implement AO_compare_and_swap_full on this architecture. +# endif +#endif /* AO_REQUIRE_CAS && !AO_HAVE_compare_and_swap ... */ + +/* The most common way to clear a test-and-set location */ +/* at the end of a critical section. */ +#if AO_AO_TS_T && !defined(AO_CLEAR) +# define AO_CLEAR(addr) AO_store_release((AO_TS_t *)addr, AO_TS_CLEAR) +#endif +#if AO_CHAR_TS_T && !defined(AO_CLEAR) +# define AO_CLEAR(addr) AO_char_store_release((AO_TS_t *)addr, AO_TS_CLEAR) +#endif + +/* + * The generalization section. + * Theoretically this should repeatedly include atomic_ops_generalize.h. + * In fact, we observe that this converges after a small fixed number + * of iterations, usually one. + */ +#include "atomic_ops/generalize.h" +#ifdef AO_GENERALIZE_TWICE +# include "atomic_ops/generalize.h" +#endif + +/* For compatibility with version 0.4 and earlier */ +#define AO_TS_T AO_TS_t +#define AO_T AO_t +#define AO_TS_VAL AO_TS_VAL_t + +#endif /* ATOMIC_OPS_H */ diff --git a/.pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h b/.pc/03-add-avr32-support.diff/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h new file mode 100644 index 0000000..e69de29 diff --git a/.pc/03-add-avr32-support.diff/mach_dep.c b/.pc/03-add-avr32-support.diff/mach_dep.c new file mode 100644 index 0000000..0491a52 --- /dev/null +++ b/.pc/03-add-avr32-support.diff/mach_dep.c @@ -0,0 +1,245 @@ +/* + * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ +/* Boehm, November 17, 1995 12:13 pm PST */ +# include "private/gc_priv.h" +# include +# include +# if defined(OS2) || defined(CX_UX) +# define _setjmp(b) setjmp(b) +# define _longjmp(b,v) longjmp(b,v) +# endif +# ifdef AMIGA +# ifndef __GNUC__ +# include +# else +# include +# endif +# endif + +#if defined(__MWERKS__) && !defined(POWERPC) + +asm static void PushMacRegisters() +{ + sub.w #4,sp // reserve space for one parameter. + move.l a2,(sp) + jsr GC_push_one + move.l a3,(sp) + jsr GC_push_one + move.l a4,(sp) + jsr GC_push_one +# if !__option(a6frames) + // perhaps a6 should be pushed if stack frames are not being used. + move.l a6,(sp) + jsr GC_push_one +# endif + // skip a5 (globals), a6 (frame pointer), and a7 (stack pointer) + move.l d2,(sp) + jsr GC_push_one + move.l d3,(sp) + jsr GC_push_one + move.l d4,(sp) + jsr GC_push_one + move.l d5,(sp) + jsr GC_push_one + move.l d6,(sp) + jsr GC_push_one + move.l d7,(sp) + jsr GC_push_one + add.w #4,sp // fix stack. + rts +} + +#endif /* __MWERKS__ */ + +# if defined(SPARC) || defined(IA64) + /* Value returned from register flushing routine; either sp (SPARC) */ + /* or ar.bsp (IA64) */ + ptr_t GC_save_regs_ret_val; +# endif + +/* Routine to mark from registers that are preserved by the C compiler. */ +/* This must be ported to every new architecture. It is noe optional, */ +/* and should not be used on platforms that are either UNIX-like, or */ +/* require thread support. */ + +#undef HAVE_PUSH_REGS + +#if defined(USE_ASM_PUSH_REGS) +# define HAVE_PUSH_REGS +#else /* No asm implementation */ +void GC_push_regs() +{ +# if defined(M68K) && defined(AMIGA) + /* AMIGA - could be replaced by generic code */ + /* a0, a1, d0 and d1 are caller save */ + +# ifdef __GNUC__ + asm("subq.w &0x4,%sp"); /* allocate word on top of stack */ + + asm("mov.l %a2,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a3,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a4,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a5,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a6,(%sp)"); asm("jsr _GC_push_one"); + /* Skip frame pointer and stack pointer */ + asm("mov.l %d2,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d3,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d4,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d5,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d6,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d7,(%sp)"); asm("jsr _GC_push_one"); + + asm("addq.w &0x4,%sp"); /* put stack back where it was */ +# define HAVE_PUSH_REGS +# else /* !__GNUC__ */ + GC_push_one(getreg(REG_A2)); + GC_push_one(getreg(REG_A3)); +# ifndef __SASC + /* Can probably be changed to #if 0 -Kjetil M. (a4=globals)*/ + GC_push_one(getreg(REG_A4)); +# endif + GC_push_one(getreg(REG_A5)); + GC_push_one(getreg(REG_A6)); + /* Skip stack pointer */ + GC_push_one(getreg(REG_D2)); + GC_push_one(getreg(REG_D3)); + GC_push_one(getreg(REG_D4)); + GC_push_one(getreg(REG_D5)); + GC_push_one(getreg(REG_D6)); + GC_push_one(getreg(REG_D7)); +# define HAVE_PUSH_REGS +# endif /* !__GNUC__ */ +# endif /* AMIGA */ + +# if defined(M68K) && defined(MACOS) +# if defined(THINK_C) +# define PushMacReg(reg) \ + move.l reg,(sp) \ + jsr GC_push_one + asm { + sub.w #4,sp ; reserve space for one parameter. + PushMacReg(a2); + PushMacReg(a3); + PushMacReg(a4); + ; skip a5 (globals), a6 (frame pointer), and a7 (stack pointer) + PushMacReg(d2); + PushMacReg(d3); + PushMacReg(d4); + PushMacReg(d5); + PushMacReg(d6); + PushMacReg(d7); + add.w #4,sp ; fix stack. + } +# define HAVE_PUSH_REGS +# undef PushMacReg +# endif /* THINK_C */ +# if defined(__MWERKS__) + PushMacRegisters(); +# define HAVE_PUSH_REGS +# endif /* __MWERKS__ */ +# endif /* MACOS */ +} +#endif /* !USE_ASM_PUSH_REGS */ + +#if defined(HAVE_PUSH_REGS) && defined(THREADS) +# error GC_push_regs cannot be used with threads + /* Would fail for GC_do_blocking. There are probably other safety */ + /* issues. */ +# undef HAVE_PUSH_REGS +#endif + +#if !defined(HAVE_PUSH_REGS) && defined(UNIX_LIKE) +# include +#endif + +/* Ensure that either registers are pushed, or callee-save registers */ +/* are somewhere on the stack, and then call fn(arg, ctxt). */ +/* ctxt is either a pointer to a ucontext_t we generated, or NULL. */ +void GC_with_callee_saves_pushed(void (*fn)(ptr_t, void *), + ptr_t arg) +{ + word dummy; + void * context = 0; + +# if defined(HAVE_PUSH_REGS) + GC_push_regs(); +# elif defined(UNIX_LIKE) && !defined(DARWIN) && !defined(ARM32) && \ + !defined(HURD) + /* Older versions of Darwin seem to lack getcontext(). */ + /* ARM Linux often doesn't support a real getcontext(). */ + ucontext_t ctxt; + if (getcontext(&ctxt) < 0) + ABORT ("Getcontext failed: Use another register retrieval method?"); + context = &ctxt; +# if defined(SPARC) || defined(IA64) + /* On a register window machine, we need to save register */ + /* contents on the stack for this to work. This may already be */ + /* subsumed by the getcontext() call. */ + { + GC_save_regs_ret_val = GC_save_regs_in_stack(); + } +# endif /* register windows. */ +# elif defined(HAVE_BUILTIN_UNWIND_INIT) + /* This was suggested by Richard Henderson as the way to */ + /* force callee-save registers and register windows onto */ + /* the stack. */ + __builtin_unwind_init(); +# else /* !HAVE_BUILTIN_UNWIND_INIT && !UNIX_LIKE */ + /* && !HAVE_PUSH_REGS */ + /* Generic code */ + /* The idea is due to Parag Patel at HP. */ + /* We're not sure whether he would like */ + /* to be he acknowledged for it or not. */ + jmp_buf regs; + register word * i = (word *) regs; + register ptr_t lim = (ptr_t)(regs) + (sizeof regs); + + /* Setjmp doesn't always clear all of the buffer. */ + /* That tends to preserve garbage. Clear it. */ + for (; (char *)i < lim; i++) { + *i = 0; + } +# if defined(MSWIN32) || defined(MSWINCE) \ + || defined(UTS4) || defined(LINUX) || defined(EWS4800) + (void) setjmp(regs); +# else + (void) _setjmp(regs); + /* We don't want to mess with signals. According to */ + /* SUSV3, setjmp() may or may not save signal mask. */ + /* _setjmp won't, but is less portable. */ +# endif +# endif /* !HAVE_PUSH_REGS ... */ + /* FIXME: context here is sometimes just zero. At the moment the callees */ + /* don't really need it. */ + fn(arg, context); + /* Strongly discourage the compiler from treating the above */ + /* as a tail-call, since that would pop the register */ + /* contents before we get a chance to look at them. */ + GC_noop1((word)(&dummy)); +} + +void GC_push_regs_and_stack(ptr_t cold_gc_frame) +{ + GC_with_callee_saves_pushed(GC_push_current_stack, cold_gc_frame); +} + +#if defined(ASM_CLEAR_CODE) +# ifdef LINT + /*ARGSUSED*/ + ptr_t GC_clear_stack_inner(arg, limit) + ptr_t arg; word limit; + { return(arg); } + /* The real version is in a .S file */ +# endif +#endif /* ASM_CLEAR_CODE */ diff --git a/.pc/04-fix-sparc-ftbfs.diff/configure.ac b/.pc/04-fix-sparc-ftbfs.diff/configure.ac new file mode 100644 index 0000000..3295ffd --- /dev/null +++ b/.pc/04-fix-sparc-ftbfs.diff/configure.ac @@ -0,0 +1,684 @@ +# 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 +# Modified by: Grzegorz Jakacki + +dnl Process this file with autoconf to produce configure. + +# Initialization +# ============== + +AC_INIT(gc,7.1,address@hidden) + ## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)? +AC_CONFIG_SRCDIR(gcj_mlc.c) +AC_CANONICAL_TARGET +AC_PREREQ(2.53) +AC_REVISION($Revision: 1.35 $) +GC_SET_VERSION +AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects nostdinc]) +AM_MAINTAINER_MODE + +AC_SUBST(PACKAGE) +AC_SUBST(GC_VERSION) + +AM_PROG_CC_C_O +AC_PROG_CXX + +AM_PROG_AS +## FIXME: really needed? (AC_LIBTOOL already provides this) +AC_CHECK_TOOL(AR, ar) +AC_CHECK_TOOL(RANLIB, ranlib, :) # :) + +AC_PROG_INSTALL + +. ${srcdir}/configure.host + +GC_CFLAGS=${gc_cflags} +AC_SUBST(GC_CFLAGS) + +AC_ARG_ENABLE(threads, + [AC_HELP_STRING([--enable-threads=TYPE], [choose threading package])], + THREADS=$enableval, + [ AC_MSG_CHECKING([for thread model used by GCC]) + THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` + if test -z "$THREADS"; then + THREADS=no + fi + AC_MSG_RESULT([$THREADS]) ]) + +AC_ARG_ENABLE(parallel-mark, + [AC_HELP_STRING([--enable-parallel-mark], + [parallelize marking and free list construction])], + [case "$THREADS" in + no | none | single) + AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec]) + ;; + esac ] +) + +AC_ARG_ENABLE(cplusplus, + [AC_HELP_STRING([--enable-cplusplus], [install C++ support])]) + +INCLUDES=-I${srcdir}/include +THREADDLLIBS= +need_atomic_ops_asm=false +## Libraries needed to support dynamic loading and/or threads. +case "$THREADS" in + no | none | single) + THREADS=none + ;; + posix | pthreads) + THREADS=posix + THREADDLLIBS=-lpthread + case "$host" in + *-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + ;; + *-*-aix*) + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + *-*-hpux11*) + AC_MSG_WARN("Only HP/UX 11 POSIX threads are supported.") + AC_DEFINE(GC_HPUX_THREADS) + AC_DEFINE(_POSIX_C_SOURCE,199506L) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + THREADDLLIBS="-lpthread -lrt" + # HPUX needs REENTRANT for the _r calls. + AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads]) + ;; + *-*-hpux10*) + AC_MSG_WARN("Only HP-UX 11 POSIX threads are supported.") + ;; + *-*-freebsd*) + AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.") + AC_DEFINE(GC_FREEBSD_THREADS) + INCLUDES="$INCLUDES -pthread" + ;; + *-*-kfreebsd*-gnu) + AC_DEFINE(GC_FREEBSD_THREADS) + INCLUDES="$INCLUDES -pthread" + THREADDLLIBS=-pthread + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_DEFINE(USE_COMPILER_TLS) + ;; + *-*-gnu*) + AC_DEFINE(GC_GNU_THREADS) + AC_DEFINE(_REENTRANT) + AC_DEFINE(THREAD_LOCAL_ALLOC) + ;; + *-*-netbsd*) + AC_MSG_WARN("Only on NetBSD 2.0 or later.") + AC_DEFINE(GC_NETBSD_THREADS) + AC_DEFINE(_REENTRANT) + AC_DEFINE(_PTHREADS) + THREADDLLIBS="-lpthread -lrt" + ;; + *-*-solaris*) + AC_DEFINE(GC_SOLARIS_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + THREADDLLIBS="-lpthread -lrt" + if test "$GCC" != yes; then + CFLAGS="$CFLAGS -O" + need_atomic_ops_asm=true + fi + ;; + *-*-irix*) + AC_DEFINE(GC_IRIX_THREADS) + ;; + *-*-cygwin*) + AC_DEFINE(GC_WIN32_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + win32_threads=true + ;; + *-*-darwin*) + AC_DEFINE(GC_DARWIN_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + # Parallel-mark is currently unreliable on Darwin; ignore request + # if test "${enable_parallel_mark}" = yes; then + # AC_DEFINE(PARALLEL_MARK) + # fi + darwin_threads=true + ;; + *-*-osf*) + AC_DEFINE(GC_OSF1_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + # May want to enable it in other cases, too. + # Measurements havent yet been done. + fi + INCLUDES="$INCLUDES -pthread" + THREADDLLIBS="-lpthread -lrt" + ;; + *) + AC_MSG_ERROR("Pthreads not supported by the GC on this platform.") + ;; + esac + ;; + win32) + AC_DEFINE(GC_WIN32_THREADS) + dnl Wine getenv may not return NULL for missing entry + AC_DEFINE(NO_GETENV) + ;; + dgux386) + THREADS=dgux386 + AC_MSG_RESULT($THREADDLLIBS) + # Use pthread GCC switch + THREADDLLIBS=-pthread + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + AC_DEFINE(GC_DGUX386_THREADS) + AC_DEFINE(DGUX_THREADS) + # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread + INCLUDES="-pthread $INCLUDES" + ;; + aix) + THREADS=posix + THREADDLLIBS=-lpthread + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + decosf1 | irix | mach | os2 | solaris | dce | vxworks) + AC_MSG_ERROR(thread package $THREADS not yet supported) + ;; + *) + AC_MSG_ERROR($THREADS is an unknown thread package) + ;; +esac +AC_SUBST(THREADDLLIBS) +AM_CONDITIONAL(THREADS, test x$THREADS != xnone) +AM_CONDITIONAL(PTHREADS, test x$THREADS = xposix) +AM_CONDITIONAL(DARWIN_THREADS, test x$darwin_threads = xtrue) +AM_CONDITIONAL(WIN32_THREADS, test x$win32_threads = xtrue) + +case "$host" in + powerpc-*-darwin*) + powerpc_darwin=true + ;; +esac + +# Darwin needs a few extra special tests to deal with variation in the +# system headers. +case "$host" in + powerpc*-*-darwin*) + AC_CHECK_MEMBER(ppc_thread_state_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE_R0,1, + [ppc_thread_state_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE___R0,1,dnl + [ppc_thread_state_t has field __r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64_R0,1,dnl + [ppc_thread_state64_t has field r0]),, + [#include ]) + AC_CHECK_MEMBER(ppc_thread_state64_t.__r0, + AC_DEFINE(HAS_PPC_THREAD_STATE64___R0,1,dnl + [ppc_thread_state64_t has field __r0]),, + [#include ]) + ;; + i?86*-*-darwin*) + AC_CHECK_MEMBER(x86_thread_state32_t.eax, + AC_DEFINE(HAS_X86_THREAD_STATE32_EAX,1,dnl + [x86_thread_state32_t has field eax]),, + [#include + #include ]) + AC_CHECK_MEMBER(x86_thread_state32_t.__eax, + AC_DEFINE(HAS_X86_THREAD_STATE32___EAX,1,dnl + [x86_thread_state32_t has field __eax]),, + [#include + #include ]) + ;; + x86_64-*-darwin*) + AC_CHECK_MEMBER(x86_thread_state64_t.rax, + AC_DEFINE(HAS_X86_THREAD_STATE64_RAX,1,dnl + [x86_thread_state64_t has field rax]),, + [#include + #include ]) + AC_CHECK_MEMBER(x86_thread_state64_t.__rax, + AC_DEFINE(HAS_X86_THREAD_STATE64___RAX,1,dnl + [x86_thread_state64_t has field __rax]),, + [#include + #include ]) + ;; + *) ;; +esac + +AC_MSG_CHECKING(for xlc) +AC_TRY_COMPILE([],[ + #ifndef __xlC__ + # error + #endif +], [compiler_xlc=yes], [compiler_xlc=no]) +AC_MSG_RESULT($compiler_xlc) +AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes) +if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then + # the darwin stack-frame-walking code is completely broken on xlc + AC_DEFINE(DARWIN_DONT_PARSE_STACK) +fi + +# We never want libdl on darwin. It is a fake libdl that just ends up making +# dyld calls anyway +case "$host" in + *-*-darwin*) ;; + *) + AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl") + ;; +esac + +case "$host" in + *-*-hpux*) + avoid_cpp_lib=yes;; + *) + avoid_cpp_lib=no; + ;; +esac +AM_CONDITIONAL(AVOID_CPP_LIB,test $avoid_cpp_lib = yes) + +# extra LD Flags which are required for targets +case "${host}" in + *-*-darwin*) + extra_ldflags_libgc=-Wl,-single_module + ;; +esac +AC_SUBST(extra_ldflags_libgc) + +AC_SUBST(EXTRA_TEST_LIBS) + +target_all=libgc.la +AC_SUBST(target_all) + +dnl If the target is an eCos system, use the appropriate eCos +dnl I/O routines. +dnl FIXME: this should not be a local option but a global target +dnl system; at present there is no eCos target. +TARGET_ECOS="no" +AC_ARG_WITH(ecos, +[ --with-ecos enable runtime eCos target support], +TARGET_ECOS="$with_ecos" +) + +addobjs= +addlibs= +CXXINCLUDES= +case "$TARGET_ECOS" in + no) + ;; + *) + AC_DEFINE(ECOS) + CXXINCLUDES="-I${TARGET_ECOS}/include" + addobjs="$addobjs ecos.lo" + ;; +esac + +AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes) + +AC_SUBST(CXX) + +AC_SUBST(INCLUDES) +AC_SUBST(CXXINCLUDES) + +# Configuration of shared libraries +# +AC_MSG_CHECKING(whether to build shared libraries) +AC_ENABLE_SHARED + +case "$host" in + alpha-*-openbsd*) + enable_shared=no + ;; + *) + ;; +esac + +AC_MSG_RESULT($enable_shared) + +# Configuration of machine-dependent code +# +AC_MSG_CHECKING(which machine-dependent code should be used) +machdep= +case "$host" in + alpha-*-openbsd*) + machdep="mach_dep.lo" + if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then + AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled) + fi + ;; + alpha*-*-linux*) + machdep="mach_dep.lo" + ;; + i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?) + AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED) + ;; + mipstx39-*-elf*) + machdep="mach_dep.lo" + AC_DEFINE(STACKBASE, __stackbase) + AC_DEFINE(DATASTART_IS_ETEXT) + ;; + mips-dec-ultrix*) + machdep="mach-dep.lo" + ;; + mips-nec-sysv*|mips-unknown-sysv*) + ;; + mips*-*-linux*) + ;; + mips-*-*) + machdep="mach_dep.lo" + dnl AC_DEFINE(NO_EXECUTE_PERMISSION) + dnl This is now redundant, but it is also important for incremental GC + dnl performance under Irix. + ;; + sparc-*-netbsd*) + machdep="mach_dep.lo sparc_netbsd_mach_dep.lo" + ;; + sparc-sun-solaris2.3) + machdep="mach_dep.lo sparc_mach_dep.lo" + AC_DEFINE(SUNOS53_SHARED_LIB) + ;; + sparc*-sun-solaris2.*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; + ia64-*-*) + machdep="mach_dep.lo ia64_save_regs_in_stack.lo" + ;; +esac +if test x"$machdep" = x; then +AC_MSG_RESULT($machdep) + machdep="mach_dep.lo" +fi +addobjs="$addobjs $machdep" +AC_SUBST(addobjs) +AC_SUBST(addlibs) + +AC_PROG_LIBTOOL + +# +# Check for AViiON Machines running DGUX +# +ac_is_dgux=no +AC_CHECK_HEADER(sys/dg_sys_info.h, +[ac_is_dgux=yes;]) + + ## :GOTCHA: we do not check anything but sys/dg_sys_info.h +if test $ac_is_dgux = yes; then + if test "$enable_full_debug" = "yes"; then + CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + else + CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + fi + AC_SUBST(CFLAGS) + AC_SUBST(CXXFLAGS) +fi + +dnl We use these options to decide which functions to include. +AC_ARG_WITH(target-subdir, +[ --with-target-subdir=SUBDIR + configuring with a cross compiler]) +AC_ARG_WITH(cross-host, +[ --with-cross-host=HOST configuring with a cross compiler]) + +# automake wants to see AC_EXEEXT. But we don't need it. And having +# it is actually a problem, because the compiler we're passed can't +# necessarily do a full link. So we fool automake here. +if false; then + # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands + # to nothing, so nothing would remain between `then' and `fi' if it + # were not for the `:' below. + : + AC_EXEEXT +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 Not needed anymore on Solaris. +AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary) +case "$host" in + *aix*) + if test "$GCC" = yes; then + AC_MSG_RESULT(yes) + new_CFLAGS= + for i in $CFLAGS; do + case "$i" in + -O*) + ;; + *) + new_CFLAGS="$new_CFLAGS $i" + ;; + esac + done + CFLAGS="$new_CFLAGS" + else + AC_MSG_RESULT(no) + fi + ;; + *) AC_MSG_RESULT(no) ;; +esac + +dnl Include defines that have become de facto standard. +dnl ALL_INTERIOR_POINTERS can be overridden in startup code. +AC_DEFINE(NO_EXECUTE_PERMISSION) +AC_DEFINE(ALL_INTERIOR_POINTERS) + + +dnl Interface Selection +dnl ------------------- +dnl +dnl By default, make the library as general as possible. +dnl enable_gcj_support=no +AC_ARG_ENABLE(gcj-support, + [AC_HELP_STRING([--disable-gcj-support], + [Disable support for gcj.])]) +AM_CONDITIONAL(ENABLE_GCJ_SUPPORT, + [test x"$enable_gcj_support" != xno]) +if test x"$enable_gcj_support" != xno; then + AC_DEFINE(GC_GCJ_SUPPORT, 1, [Define to include support for gcj]) +fi + +AC_ARG_ENABLE(java-finalization, + [AC_HELP_STRING([--disable-java-finalization], + [Disable support for java finalization.])]) +if test x"$enable_java_finalization" != xno; then + AC_DEFINE(JAVA_FINALIZATION) +fi + +AC_ARG_ENABLE(atomic-uncollectable, + [AC_HELP_STRING([--disable-atomic-uncollectible], + [Disable support for atomic uncollectible allocation.])]) +if test x"$enable_atomic_uncollectible" != x"no"; then + AC_DEFINE(ATOMIC_UNCOLLECTABLE, 1, + [Define to enable atomic uncollectible allocation.]) +fi + +AC_ARG_ENABLE(redirect-malloc, + [AC_HELP_STRING([--enable-redirect-malloc], + [Redirect malloc and friends to GC routines])]) + +if test "${enable_redirect_malloc}" = yes; then + if test "${enable_full_debug}" = yes; then + AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement) + AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement) + AC_DEFINE(REDIRECT_FREE, GC_debug_free) + else + AC_DEFINE(REDIRECT_MALLOC, GC_malloc) + fi + AC_DEFINE(GC_USE_DLOPEN_WRAP) +fi + +AC_ARG_ENABLE(large-config, + [AC_HELP_STRING([--enable-large-config], + [Optimize for large (> 100 MB) heap or root set])]) + +if test "${enable_large_config}" = yes; then + AC_DEFINE(LARGE_CONFIG, 1, [Define to optimize for large heaps or root sets]) +fi + +dnl This is something of a hack. When cross-compiling we turn off +dnl some functionality. We also enable the "small" configuration. +dnl These is only correct when targetting an embedded system. FIXME. +if test -n "${with_cross_host}"; then + AC_DEFINE(NO_CLOCK) + AC_DEFINE(SMALL_CONFIG) + AC_DEFINE(NO_DEBUGGING) +fi + + +dnl Debugging +dnl --------- + +UNWINDLIBS= +AC_ARG_ENABLE(gc-debug, +[AC_HELP_STRING([--enable-gc-debug], + [include full support for pointer backtracing etc.])], +[ if test "$enable_gc_debug" = "yes"; then + AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.") + AC_DEFINE(KEEP_BACK_PTRS) + AC_DEFINE(DBG_HDRS_ALL) + case $host in + ia64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_DEFINE(SAVE_CALL_COUNT, 8) + AC_CHECK_LIB(unwind, backtrace, [ + AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE) + UNWINDLIBS=-lunwind + AC_MSG_WARN("Client code may need to link against libunwind.") + ]) + ;; + x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_MSG_WARN("Client must not use -fomit-frame-pointer.") + AC_DEFINE(SAVE_CALL_COUNT, 8) + ;; + i[3456]86-*-dgux*) + AC_DEFINE(MAKE_BACK_GRAPH) + ;; + esac ] + fi) + +AC_SUBST(UNWINDLIBS) + +AC_ARG_ENABLE(gc-assertions, + [AC_HELP_STRING([--enable-gc-assertions], + [collector-internal assertion checking])]) +if test "${enable_gc_assertions}" = yes; then + AC_DEFINE(GC_ASSERTIONS) +fi + +AC_ARG_ENABLE(munmap, + [AC_HELP_STRING([--enable-munmap=N], + [return page to the os if empty for N collections])], + MUNMAP_THRESHOLD=$enableval; + [case "$MMAP" in + no) + AC_MSG_ERROR([--enable-munmap requires --enable-mmap]) + ;; + esac] + ) +if test "${enable_munmap}" != ""; then + AC_DEFINE(USE_MMAP) + AC_DEFINE(USE_MUNMAP) + if test "${MUNMAP_THRESHOLD}" = "yes"; then + MUNMAP_THRESHOLD=6 + fi + AC_DEFINE_UNQUOTED(MUNMAP_THRESHOLD, ${MUNMAP_THRESHOLD}) +fi + +AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") + + +dnl Atomic Ops +dnl ---------- + +atomic_ops_libs=-latomic_ops +AC_CHECK_HEADER(atomic_ops.h, + [ AC_MSG_NOTICE([Using pre-installed libatomic_ops]) ], + [ ao_dir= + for candidate in ${srcdir}/libatomic_ops*; do + case $candidate in + *.tar.gz) + ;; + *install) + dnl generated by alternate Makefile. + ;; + *) + if test -e "$candidate"; then + ao_dir="$candidate" + fi + ;; + esac + done + if test -z "$ao_dir"; then + AC_MSG_ERROR([Missig libatomic_ops.]) + fi + ao_version="${ao_dir#*libatomic_ops-}" + AC_MSG_NOTICE([Using internal version of libatomic_ops]) + + dnl Automake does not accept shell variables in AC_CONFIG_SUBDIRS + test -e libatomic_ops \ + || ln -s ${ao_dir} libatomic_ops + AC_CONFIG_SUBDIRS(libatomic_ops) + + dnl Also copy the source files to be linked in. + test -e atomic_ops.c \ + || ln -s libatomic_ops/src/atomic_ops.c \ + atomic_ops.c + + test -e atomic_ops_sysdeps.S \ + || ln -s libatomic_ops/src/atomic_ops_sysdeps.S \ + atomic_ops_sysdeps.S + + dnl This gets the source include files, which is often close enough. + dnl It also makes atomic_ops_sysdeps.S assemble. + GC_CFLAGS="${GC_CFLAGS} -I libatomic_ops/src" + maybe_libatomic_ops="libatomic_ops" + ]) + +AM_CONDITIONAL(USE_INTERNAL_LIBATOMIC_OPS, + test -n "$maybe_libatomic_ops" -a "$THREADS" != "none") +AM_CONDITIONAL(NEED_ATOMIC_OPS_ASM, test -n "$maybe_libatomic_ops" -a x$need_atomic_ops_asm = xtrue) +AC_SUBST(atomic_ops_libs) + +dnl Produce the Files +dnl ----------------- + +AC_CONFIG_FILES([Makefile bdw-gc.pc]) + +AC_CONFIG_COMMANDS([default],, + [ srcdir=${srcdir} + host=${host} + CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + CC="${CC}" + DEFS="$DEFS" ]) + +AC_OUTPUT diff --git a/.pc/06-m68k-no-getcontext.diff/mach_dep.c b/.pc/06-m68k-no-getcontext.diff/mach_dep.c new file mode 100644 index 0000000..fc896b6 --- /dev/null +++ b/.pc/06-m68k-no-getcontext.diff/mach_dep.c @@ -0,0 +1,245 @@ +/* + * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ +/* Boehm, November 17, 1995 12:13 pm PST */ +# include "private/gc_priv.h" +# include +# include +# if defined(OS2) || defined(CX_UX) +# define _setjmp(b) setjmp(b) +# define _longjmp(b,v) longjmp(b,v) +# endif +# ifdef AMIGA +# ifndef __GNUC__ +# include +# else +# include +# endif +# endif + +#if defined(__MWERKS__) && !defined(POWERPC) + +asm static void PushMacRegisters() +{ + sub.w #4,sp // reserve space for one parameter. + move.l a2,(sp) + jsr GC_push_one + move.l a3,(sp) + jsr GC_push_one + move.l a4,(sp) + jsr GC_push_one +# if !__option(a6frames) + // perhaps a6 should be pushed if stack frames are not being used. + move.l a6,(sp) + jsr GC_push_one +# endif + // skip a5 (globals), a6 (frame pointer), and a7 (stack pointer) + move.l d2,(sp) + jsr GC_push_one + move.l d3,(sp) + jsr GC_push_one + move.l d4,(sp) + jsr GC_push_one + move.l d5,(sp) + jsr GC_push_one + move.l d6,(sp) + jsr GC_push_one + move.l d7,(sp) + jsr GC_push_one + add.w #4,sp // fix stack. + rts +} + +#endif /* __MWERKS__ */ + +# if defined(SPARC) || defined(IA64) + /* Value returned from register flushing routine; either sp (SPARC) */ + /* or ar.bsp (IA64) */ + ptr_t GC_save_regs_ret_val; +# endif + +/* Routine to mark from registers that are preserved by the C compiler. */ +/* This must be ported to every new architecture. It is noe optional, */ +/* and should not be used on platforms that are either UNIX-like, or */ +/* require thread support. */ + +#undef HAVE_PUSH_REGS + +#if defined(USE_ASM_PUSH_REGS) +# define HAVE_PUSH_REGS +#else /* No asm implementation */ +void GC_push_regs() +{ +# if defined(M68K) && defined(AMIGA) + /* AMIGA - could be replaced by generic code */ + /* a0, a1, d0 and d1 are caller save */ + +# ifdef __GNUC__ + asm("subq.w &0x4,%sp"); /* allocate word on top of stack */ + + asm("mov.l %a2,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a3,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a4,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a5,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %a6,(%sp)"); asm("jsr _GC_push_one"); + /* Skip frame pointer and stack pointer */ + asm("mov.l %d2,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d3,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d4,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d5,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d6,(%sp)"); asm("jsr _GC_push_one"); + asm("mov.l %d7,(%sp)"); asm("jsr _GC_push_one"); + + asm("addq.w &0x4,%sp"); /* put stack back where it was */ +# define HAVE_PUSH_REGS +# else /* !__GNUC__ */ + GC_push_one(getreg(REG_A2)); + GC_push_one(getreg(REG_A3)); +# ifndef __SASC + /* Can probably be changed to #if 0 -Kjetil M. (a4=globals)*/ + GC_push_one(getreg(REG_A4)); +# endif + GC_push_one(getreg(REG_A5)); + GC_push_one(getreg(REG_A6)); + /* Skip stack pointer */ + GC_push_one(getreg(REG_D2)); + GC_push_one(getreg(REG_D3)); + GC_push_one(getreg(REG_D4)); + GC_push_one(getreg(REG_D5)); + GC_push_one(getreg(REG_D6)); + GC_push_one(getreg(REG_D7)); +# define HAVE_PUSH_REGS +# endif /* !__GNUC__ */ +# endif /* AMIGA */ + +# if defined(M68K) && defined(MACOS) +# if defined(THINK_C) +# define PushMacReg(reg) \ + move.l reg,(sp) \ + jsr GC_push_one + asm { + sub.w #4,sp ; reserve space for one parameter. + PushMacReg(a2); + PushMacReg(a3); + PushMacReg(a4); + ; skip a5 (globals), a6 (frame pointer), and a7 (stack pointer) + PushMacReg(d2); + PushMacReg(d3); + PushMacReg(d4); + PushMacReg(d5); + PushMacReg(d6); + PushMacReg(d7); + add.w #4,sp ; fix stack. + } +# define HAVE_PUSH_REGS +# undef PushMacReg +# endif /* THINK_C */ +# if defined(__MWERKS__) + PushMacRegisters(); +# define HAVE_PUSH_REGS +# endif /* __MWERKS__ */ +# endif /* MACOS */ +} +#endif /* !USE_ASM_PUSH_REGS */ + +#if defined(HAVE_PUSH_REGS) && defined(THREADS) +# error GC_push_regs cannot be used with threads + /* Would fail for GC_do_blocking. There are probably other safety */ + /* issues. */ +# undef HAVE_PUSH_REGS +#endif + +#if !defined(HAVE_PUSH_REGS) && defined(UNIX_LIKE) +# include +#endif + +/* Ensure that either registers are pushed, or callee-save registers */ +/* are somewhere on the stack, and then call fn(arg, ctxt). */ +/* ctxt is either a pointer to a ucontext_t we generated, or NULL. */ +void GC_with_callee_saves_pushed(void (*fn)(ptr_t, void *), + ptr_t arg) +{ + word dummy; + void * context = 0; + +# if defined(HAVE_PUSH_REGS) + GC_push_regs(); +# elif defined(UNIX_LIKE) && !defined(DARWIN) && !defined(ARM32) && \ + !defined(HURD) && !defined(AVR32) + /* Older versions of Darwin seem to lack getcontext(). */ + /* ARM Linux often doesn't support a real getcontext(). */ + ucontext_t ctxt; + if (getcontext(&ctxt) < 0) + ABORT ("Getcontext failed: Use another register retrieval method?"); + context = &ctxt; +# if defined(SPARC) || defined(IA64) + /* On a register window machine, we need to save register */ + /* contents on the stack for this to work. This may already be */ + /* subsumed by the getcontext() call. */ + { + GC_save_regs_ret_val = GC_save_regs_in_stack(); + } +# endif /* register windows. */ +# elif defined(HAVE_BUILTIN_UNWIND_INIT) + /* This was suggested by Richard Henderson as the way to */ + /* force callee-save registers and register windows onto */ + /* the stack. */ + __builtin_unwind_init(); +# else /* !HAVE_BUILTIN_UNWIND_INIT && !UNIX_LIKE */ + /* && !HAVE_PUSH_REGS */ + /* Generic code */ + /* The idea is due to Parag Patel at HP. */ + /* We're not sure whether he would like */ + /* to be he acknowledged for it or not. */ + jmp_buf regs; + register word * i = (word *) regs; + register ptr_t lim = (ptr_t)(regs) + (sizeof regs); + + /* Setjmp doesn't always clear all of the buffer. */ + /* That tends to preserve garbage. Clear it. */ + for (; (char *)i < lim; i++) { + *i = 0; + } +# if defined(MSWIN32) || defined(MSWINCE) \ + || defined(UTS4) || defined(LINUX) || defined(EWS4800) + (void) setjmp(regs); +# else + (void) _setjmp(regs); + /* We don't want to mess with signals. According to */ + /* SUSV3, setjmp() may or may not save signal mask. */ + /* _setjmp won't, but is less portable. */ +# endif +# endif /* !HAVE_PUSH_REGS ... */ + /* FIXME: context here is sometimes just zero. At the moment the callees */ + /* don't really need it. */ + fn(arg, context); + /* Strongly discourage the compiler from treating the above */ + /* as a tail-call, since that would pop the register */ + /* contents before we get a chance to look at them. */ + GC_noop1((word)(&dummy)); +} + +void GC_push_regs_and_stack(ptr_t cold_gc_frame) +{ + GC_with_callee_saves_pushed(GC_push_current_stack, cold_gc_frame); +} + +#if defined(ASM_CLEAR_CODE) +# ifdef LINT + /*ARGSUSED*/ + ptr_t GC_clear_stack_inner(arg, limit) + ptr_t arg; word limit; + { return(arg); } + /* The real version is in a .S file */ +# endif +#endif /* ASM_CLEAR_CODE */ diff --git a/.pc/applied-patches b/.pc/applied-patches new file mode 100644 index 0000000..bbc90d5 --- /dev/null +++ b/.pc/applied-patches @@ -0,0 +1,6 @@ +01-catch-all-linux.diff +02-manpage.diff +03-add-avr32-support.diff +04-fix-sparc-ftbfs.diff +enable-threads.diff +06-m68k-no-getcontext.diff diff --git a/.pc/enable-threads.diff/include/gc_config_macros.h b/.pc/enable-threads.diff/include/gc_config_macros.h new file mode 100644 index 0000000..66abf0b --- /dev/null +++ b/.pc/enable-threads.diff/include/gc_config_macros.h @@ -0,0 +1,179 @@ +/* + * This should never be included directly. It is included only from gc.h. + * We separate it only to make gc.h more suitable as documentation. + * + * Some tests for old macros. These violate our namespace rules and will + * disappear shortly. Use the GC_ names. + */ +#if defined(SOLARIS_THREADS) || defined(_SOLARIS_THREADS) \ + || defined(_SOLARIS_PTHREADS) || defined(GC_SOLARIS_PTHREADS) + /* We no longer support old style Solaris threads. */ + /* GC_SOLARIS_THREADS now means pthreads. */ +# ifndef GC_SOLARIS_THREADS +# define GC_SOLARIS_THREADS +# endif +#endif +#if defined(IRIX_THREADS) +# define GC_IRIX_THREADS +#endif +#if defined(DGUX_THREADS) +# if !defined(GC_DGUX386_THREADS) +# define GC_DGUX386_THREADS +# endif +#endif +#if defined(AIX_THREADS) +# define GC_AIX_THREADS +#endif +#if defined(HPUX_THREADS) +# define GC_HPUX_THREADS +#endif +#if defined(OSF1_THREADS) +# define GC_OSF1_THREADS +#endif +#if defined(LINUX_THREADS) +# define GC_LINUX_THREADS +#endif +#if defined(WIN32_THREADS) +# define GC_WIN32_THREADS +#endif +#if defined(USE_LD_WRAP) +# define GC_USE_LD_WRAP +#endif + +#if !defined(_REENTRANT) && (defined(GC_SOLARIS_THREADS) \ + || defined(GC_HPUX_THREADS) \ + || defined(GC_AIX_THREADS) \ + || defined(GC_LINUX_THREADS) \ + || defined(GC_NETBSD_THREADS) \ + || defined(GC_GNU_THREADS)) +# define _REENTRANT + /* Better late than never. This fails if system headers that */ + /* depend on this were previously included. */ +#endif + +#if !defined(_PTHREADS) && defined(GC_NETBSD_THREADS) +# define _PTHREADS +#endif + +#if defined(GC_DGUX386_THREADS) && !defined(_POSIX4A_DRAFT10_SOURCE) +# define _POSIX4A_DRAFT10_SOURCE 1 +#endif + +# if defined(GC_SOLARIS_THREADS) || defined(GC_FREEBSD_THREADS) || \ + defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) || \ + defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \ + defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \ + defined(GC_AIX_THREADS) || defined(GC_NETBSD_THREADS) || \ + (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \ + defined(GC_GNU_THREADS) +# define GC_PTHREADS +# endif + +#if defined(GC_WIN32_PTHREADS) +# define GC_WIN32_THREADS +# define GC_PTHREADS +#endif + +#if defined(GC_THREADS) && !defined(GC_PTHREADS) +# if defined(__linux__) +# define GC_LINUX_THREADS +# define GC_PTHREADS +# endif +# if !defined(__linux__) && (defined(_PA_RISC1_1) || defined(_PA_RISC2_0) \ + || defined(hppa) || defined(__HPPA)) \ + || (defined(__ia64) && defined(_HPUX_SOURCE)) +# define GC_HPUX_THREADS +# define GC_PTHREADS +# endif +# if !defined(__linux__) && (defined(__alpha) || defined(__alpha__)) +# define GC_OSF1_THREADS +# define GC_PTHREADS +# endif +# if defined(__mips) && !defined(__linux__) +# define GC_IRIX_THREADS +# define GC_PTHREADS +# endif +# if defined(__sparc) && !defined(__linux__) \ + || defined(sun) && (defined(i386) || defined(__i386__)) +# define GC_SOLARIS_THREADS +# define GC_PTHREADS +# endif +# if defined(__APPLE__) && defined(__MACH__) +# define GC_DARWIN_THREADS +# define GC_PTHREADS +# endif +# if !defined(GC_PTHREADS) && (defined(__FreeBSD__) || defined(__DragonFly__)) +# define GC_FREEBSD_THREADS +# define GC_PTHREADS +# endif +# if !defined(GC_PTHREADS) && defined(__NetBSD__) +# define GC_NETBSD_THREADS +# define GC_PTHREADS +# endif +# if defined(DGUX) && (defined(i386) || defined(__i386__)) +# define GC_DGUX386_THREADS +# define GC_PTHREADS +# endif +# if defined(_AIX) +# define GC_AIX_THREADS +# define GC_PTHREADS +# endif +#endif /* GC_THREADS */ + +#if defined(GC_THREADS) && !defined(GC_PTHREADS) && !defined(GC_WIN32_THREADS) \ + && (defined(_WIN32) || defined(_MSC_VER) || defined(__CYGWIN__) \ + || defined(__MINGW32__) || defined(__BORLANDC__) \ + || defined(_WIN32_WCE)) +# define GC_WIN32_THREADS +# if defined(__CYGWIN__) +# define GC_PTHREADS +# endif +#endif + +# define __GC +# ifndef _WIN32_WCE +# include +# if defined(__MINGW32__) +# include + /* We mention uintptr_t. */ + /* Perhaps this should be included in pure msft environments */ + /* as well? */ +# endif +# else /* ! _WIN32_WCE */ +/* Yet more kluges for WinCE */ +# include /* size_t is defined here */ + typedef long ptrdiff_t; /* ptrdiff_t is not defined */ +# endif + +#if defined(_DLL) && !defined(GC_NOT_DLL) && !defined(GC_DLL) +# define GC_DLL +#endif + +#if defined(__MINGW32__) && defined(GC_DLL) +# ifdef GC_BUILD +# define GC_API __declspec(dllexport) +# else +# define GC_API __declspec(dllimport) +# endif +#endif + +#if (defined(__DMC__) || defined(_MSC_VER)) && defined(GC_DLL) +# ifdef GC_BUILD +# define GC_API extern __declspec(dllexport) +# else +# define GC_API __declspec(dllimport) +# endif +#endif + +#if defined(__WATCOMC__) && defined(GC_DLL) +# ifdef GC_BUILD +# define GC_API extern __declspec(dllexport) +# else +# define GC_API extern __declspec(dllimport) +# endif +#endif + +#ifndef GC_API +#define GC_API extern +#endif + diff --git a/NT_MAKEFILE b/NT_MAKEFILE old mode 100644 new mode 100755 diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 3bbdf3a..0000000 --- a/autogen.sh +++ /dev/null @@ -1,32 +0,0 @@ -#! /bin/sh - -set -e - -# These version are ok, pre-1.7 is not. Post 1.7 may produce a lot of -# warnings for unrelated projects, so prefer 1.7 for now. -am_version= -for v in 1.10 1.9 1.8 1.7; do - if type -p &>/dev/null automake-$v; then - am_version="-$v" - break - fi -done -if [ -z "$am_version" ]; then - case "`automake --version`" in - *\ 0.*|*\ 1.[0-6].*|*\ 1.[0-6]\ *) - echo "$0: Automake-1.7 or later is needed." - exit 2 - ;; - esac -fi - -set -x -aclocal$am_version -autoconf -autoheader -automake$am_version -ac -libtoolize --automake --force -set +x -echo -echo "Ready to run './configure'." -echo diff --git a/configure.ac b/configure.ac index ab8b27c..dc1cf36 100644 --- a/configure.ac +++ b/configure.ac @@ -165,20 +165,15 @@ case "$THREADS" in THREADS=posix AC_CHECK_LIB(pthread, pthread_self, THREADDLLIBS="-lpthread",,) case "$host" in - x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* \ - | x86_64-*-linux* | alpha-*-linux* | sparc*-*-linux*) - AC_DEFINE(GC_LINUX_THREADS) - AC_DEFINE(_REENTRANT) - if test "${enable_parallel_mark}" = yes; then - AC_DEFINE(PARALLEL_MARK) - fi - AC_DEFINE(THREAD_LOCAL_ALLOC) - AC_MSG_WARN("Explicit GC_INIT() calls may be required."); - ;; *-*-linux*) - AC_DEFINE(GC_LINUX_THREADS) - AC_DEFINE(_REENTRANT) - ;; + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); + ;; *-*-aix*) AC_DEFINE(GC_AIX_THREADS) AC_DEFINE(_REENTRANT) @@ -540,6 +535,9 @@ case "$host" in dnl This is now redundant, but it is also important for incremental GC dnl performance under Irix. ;; + sparc*-*-linux*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; sparc-*-netbsd*) machdep="src/sparc_netbsd_mach_dep.lo" ;; diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..f2abba0 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,512 @@ +libgc (1:7.1-8) unstable; urgency=low + + * Import patch by Thorsten Glaser + * d/p/06-m68k-no-getcontext.diff: new, don’t use getcontext(2) + on m68k because it’s not implemented there (Closes: #624833) + * Import patch by Aaron M. Ucko + * build with GC_THREADS on non-linux platforms as well + * remove *.la files (Closes: #621660) + * update policy version from 3.9.1 to 3.9.2, no changes + + -- Christoph Egger Sun, 29 May 2011 18:55:21 +0200 + +libgc (1:7.1-7) unstable; urgency=low + + * Add ppc64 symbol file (Closes: #615469) + * Add sh4 symbol file (Closes: #614744) + * Add armhf symbol file + * Add powerpcspe symbol file + * Handle sparc64 the same as sparc + * Clear non-arch symbol file to support building on not yet captured + architectures + * add -pthread to fix build with --no-add-needed + + -- Christoph Egger Wed, 02 Mar 2011 13:43:18 +0100 + +libgc (1:7.1-6) unstable; urgency=low + + * include pkg-config file (Closes: #546833) + * Include Hurd symbol file (Closes: #611643) thanks to Svante Signell + for providing it + * add hppa symbol file + + -- Christoph Egger Tue, 22 Feb 2011 17:17:54 +0100 + +libgc (1:7.1-5) unstable; urgency=low + + * Upload to unstable + + -- Christoph Egger Sat, 19 Feb 2011 12:19:56 +0100 + +libgc (1:7.1-4) experimental; urgency=low + + * Adopt package (Closes: #590772) + * Adopt debian/control git headers (moved to collab-maint) + * Convert to source format 3.0 (quilt) + * Build against system libatomic-ops (Closes: #559345) + * Now builds on mipsen as well (Closes: #542285) + * Include correct arch-specific symbols file for mipsen + * Remove atomic-ops specific symbols from symbols file + * Drop patch for automic-ops on s390 + * Fix dependency on debhelper (needs 7.0.50 > 7) + * Bump standards version to 3.9.1 + * Fix symbol files (Closes: #565778) + + -- Christoph Egger Sat, 09 Oct 2010 16:08:53 +0200 + +libgc (1:7.1-3) experimental; urgency=low + + * Add symbols for armel and i386. + + -- Chris Lamb Sun, 16 Aug 2009 20:28:41 +0100 + +libgc (1:7.1-2) experimental; urgency=low + + * Fix FTBFS on sparc by specifying correct machine-dependent code. + * Fix FTBFS on s390 by correcting #include directory. + * Add avr32 support. Patch by Bradley Smith . + (Closes: #528406) + * Symbols maintenance: + - Add Build-Depends-Package + - Add required arch-dependent symbols for sparc, powerpc, s390 and avr32 + * Add Vcs-{Git,Browser} headers. + + -- Chris Lamb Fri, 14 Aug 2009 00:15:45 +0100 + +libgc (1:7.1-1) experimental; urgency=low + + * New maintainer. (Closes: #541015) + * New upstream release. (Closes: #434106, #446068) + * Fix debian/watch file. Thanks Jonny and Ruben Molina + . (Closes: #535985) + * debian/patches/* + - Extract changes from .diff.gz into quilt patch series + - Update architecture patches for new upstream; partly applied upstream + * Move to debhelper 7. + * Add symbols file for libgc1c2. + * debian/control: + - Bump Standards-Version to 3.8.2. + - Add Homepage: field. + - Add ${misc:Depends} for all binary packages. + - Use ${binary:Version} in libgc-dev => libgcX versioned dependency. + - Drop duplicate "Section:" heading in libgc1c2. + - Update long description, clarifying ambiguity caused by Debian's choice + of configuration. (Closes: #329338) + * Remove some cruft from debian/rules. + * Install README.environment via dh_installdocs, not dh_install. + * Don't install README.cords if we aren't shipping that library + (Closes: #422440) + + -- Chris Lamb Wed, 12 Aug 2009 02:16:30 +0100 + +libgc (1:6.8-1.2) unstable; urgency=low + + * Non-maintainer upload. + * Apply patch support for GNU/kFreeBSD amd64. (closes: #405669) + + -- Aurelien Jarno Thu, 14 Aug 2008 21:21:44 +0200 + +libgc (1:6.8-1.1) unstable; urgency=low + + * Non-maintainer upload. + * Enable local malloc on all linux arches. (closes: #431424) + + -- Bastian Blank Wed, 18 Jul 2007 20:27:44 +0000 + +libgc (1:6.8-1) unstable; urgency=low + + * New upstream release (closes: #366864) + * Apply patch to fix m68k (closes: #383817) + + -- Ryan Murray Fri, 22 Sep 2006 20:08:09 -0700 + +libgc (1:6.7-2) unstable; urgency=low + + * Disable --enable-redirect-malloc again (closes: #371886) + + -- Ryan Murray Tue, 13 Jun 2006 17:28:27 -0700 + +libgc (1:6.7-1) unstable; urgency=low + + * New upstream release (closes: #356246) + * Fix typo in description (closes: #341086) + + -- Ryan Murray Sun, 28 May 2006 20:19:58 -0700 + +libgc (1:6.6-2) unstable; urgency=low + + * Apply libgc-6.6-arm-swp-fix.diff to fix arm build (closes: #343612) + + -- Ryan Murray Fri, 16 Dec 2005 10:53:15 -0800 + +libgc (1:6.6-1) unstable; urgency=low + + * New upstream release (closes: #335816, #342586) + * Run make check from debian/rules + * Disable threads for hurd-i386 (closes: #319912) + + -- Ryan Murray Thu, 15 Dec 2005 00:53:36 -0800 + +libgc (1:6.5-1) unstable; urgency=low + + * New upstream release + * Rename libgc1 to libgc1c2 for C++ transition. + * Update libgc-dev description (closes: #264124) + * Add debian/watch file (currently ignores alpha versions) + * Remove obsolete Replaces and Conflicts on libgc-dev + + -- Ryan Murray Sun, 10 Jul 2005 10:51:20 -0700 + +libgc (1:6.4-1) unstable; urgency=low + + * New upstream release (closes: #292708) + + -- Ryan Murray Thu, 3 Feb 2005 00:50:53 -0800 + +libgc (1:6.3-1) unstable; urgency=low + + * New upstream release (closes: #253171) + + -- Ryan Murray Fri, 9 Jul 2004 08:38:53 -0700 + +libgc (1:6.2+6.3alpha4-1) unstable; urgency=low + + * New upstream release + * Apply fix to check stack end for prelinked binaries (closes: #233233) + + -- Ryan Murray Sat, 28 Feb 2004 01:09:04 -0800 + +libgc (1:6.2+6.3alpha2-1) unstable; urgency=low + + * New upstream release + * Link libgccpp against libgc (closes: #215966) + + -- Ryan Murray Sat, 18 Oct 2003 03:34:33 -0700 + +libgc (1:6.2+6.3alpha1-1) unstable; urgency=low + + * New upstream release (closes: #197031) + * Switch to using upstream's autoconf (and therefore upstream's sonames, so + rename packages to match the sonames) (closes: #178869) + * Relibtoolize. + + -- Ryan Murray Mon, 11 Aug 2003 15:57:57 -0700 + +libgc (1:6.1-2) unstable; urgency=low + + * Change GLIBC_MINOR check for mips to look for version 2.2 or better. + glibc has had __libc_stack_end since at least then, and possibly sometime + in 2.1.x + + -- Ryan Murray Fri, 17 Jan 2003 14:17:22 -0800 + +libgc (1:6.1-1) unstable; urgency=low + + * New upstream release + * g++-3.2 transition + + -- Ryan Murray Fri, 17 Jan 2003 04:41:04 -0800 + +libgc (1:6.0+6.1alpha4-3) unstable; urgency=low + + * Fix ia64 build. + + -- Ryan Murray Mon, 25 Mar 2002 20:27:15 -0800 + +libgc (1:6.0+6.1alpha4-2) unstable; urgency=low + + * Add -lstdc++ to link line for now + + -- Ryan Murray Tue, 19 Mar 2002 01:08:01 -0800 + +libgc (1:6.0+6.1alpha4-1) unstable; urgency=low + + * New upstream release (closes: #96661) + * build with OPERATOR_NEW_ARRY (closes: #127608) + * link libgc with g++ for now + * remove duplicate manpage (closes: #137511) + + -- Ryan Murray Mon, 18 Mar 2002 22:13:32 -0800 + +libgc (1:6.0-3) unstable; urgency=low + + * Fix builds on mips, mipsel, and powerpc + * Disable threading on arm until someone has time to fix it. + + -- Ryan Murray Fri, 25 Jan 2002 08:36:00 -0800 + +libgc (1:6.0-2) unstable; urgency=low + + * New Maintainer (closes: #129586) + * Enable threading on Linux, disable on hurd + (closes: #129525, #110157) + * Add patch already in upstream alphas to fix leak_detector for calloc and + realloc. The strdup support will come when I upgrade to a 6.1 version + (closes: #118455) + * Add upstream changelog, fix typo in manpage (closes: #115374) + + -- Ryan Murray Sat, 19 Jan 2002 02:31:58 -0800 + +libgc (1:6.0-1) unstable; urgency=medium (closes several serious and important bugs) + + * Adopted NMU fixes by Rick Younie and Ryan Murray + (closes: #84608, #87184, #89970, #102652, #103078) + * New upstream release, updates support for SPARC (closes: #89211) + + -- Mike Goldman Sun, 19 Aug 2001 07:30:19 -0400 + +libgc (1:5.3-2.2) unstable; urgency=low + + * NMU + * Fix build on m68k (closes: #89970, 103078) + + -- Rick Younie Wed, 1 Aug 2001 12:12:33 -0700 + +libgc (1:5.3-2.1) unstable; urgency=low + + * Fix build on mips(el) (closes: #102652, 84608) + * Fix build on alpha (closes: #87184) + + -- Ryan Murray Mon, 2 Jul 2001 08:32:17 -0700 + +libgc (1:5.3-2) unstable; urgency=low + + * Fixed dependency on libgc5 to same version (closes: #87339). + + -- Mike Goldman Sat, 24 Feb 2001 12:22:07 -0500 + +libgc (1:5.3-1) unstable; urgency=medium + + * Updated to latest version of released upstream 5.x version + (closes: #83041, #65044), + * Tuned for larger heap sizes (-DLARGE_CONFIG) (closes: #62400). + + -- Mike Goldman Thu, 22 Feb 2001 12:34:45 -0500 + +libgc (1:5.0.alpha4-8) frozen unstable; urgency=medium + + * Applied patch by Philip Blundell + to provide Linux ARM support (closes: #58950) + + -- Mike Goldman Fri, 25 Feb 2000 03:38:48 -0500 + +libgc (1:5.0.alpha4-7) frozen unstable; urgency=low + + * Include "../gcconfig.h" in cordprnt.c for correct PPC compilation + (patch supplied by address@hidden) -- Closes: #57360 + * Uploaded to frozen and unstable (closes: #57147, #57293) + + -- Mike Goldman Tue, 8 Feb 2000 15:58:24 -0500 + +libgc (1:5.0.alpha4-6) frozen; urgency=low + + * Replaced C++-style comments from gc_priv.h with C comments -- + required for standards-conforming C programs (closes: #55577) + * debian/rules now copies include/private files automatically + + -- Mike Goldman Fri, 4 Feb 2000 03:56:44 -0500 + +libgc (1:5.0.alpha4-5) unstable; urgency=low + + * Fixed misapplied patch from Daniel Jacobowitz. + + -- Mike Goldman Fri, 31 Dec 1999 12:23:26 -0500 + +libgc (1:5.0.alpha4-4) unstable; urgency=low + + * Added -DPIC flag to DEBIAN_PIC. + * Updated standards version. + + -- Mike Goldman Thu, 30 Dec 1999 09:34:25 -0500 + +libgc (1:5.0.alpha4-3) unstable; urgency=low + + * Copied gcconfig.h to include/private (closes #53599) + * Added DEBIAN_PIC flag to pass -fPIC to mach_dep.o (closes #53600) + + -- Mike Goldman Thu, 30 Dec 1999 08:36:31 -0500 + +libgc (1:5.0.alpha4-2) unstable; urgency=low + + * Incorporated fix from Daniel Jacobowitz for building on powerpc + (closes: #53112) + + -- Mike Goldman Sun, 26 Dec 1999 02:57:32 -0500 + +libgc (1:5.0.alpha4-1) unstable; urgency=low + + * New upstream release. + * Incorporated fix from Dave Love for building on sparc (closes: #51208) + + -- Mike Goldman Sun, 12 Dec 1999 04:47:28 -0500 + +libgc (1:5.0.alpha3-7) unstable; urgency=low + + * Once and for all ensuring that this will build on powerpc, + CORD_vsprintf on that platform may well not work, however. + Closes: #46092 + + -- Mike Goldman Sat, 30 Oct 1999 09:00:32 -0400 + +libgc (1:5.0.alpha3-6) unstable; urgency=low + + * Manual implementation of /usr/doc -> /usr/share/doc policy + removed, defers to debhelper now. + + -- Mike Goldman Sat, 9 Oct 1999 18:07:40 -0400 + +libgc (1:5.0.alpha3-5) unstable; urgency=low + + * Another pass at fixing va_list copy on POWERPC. + + -- Mike Goldman Fri, 8 Oct 1999 12:40:21 -0400 + +libgc (1:5.0.alpha3-4) unstable; urgency=low + + * Restrict invalid initializer bugfix to POWERPC, breaks other platforms. + Closes: Bug#45559 (again) + + -- Mike Goldman Thu, 7 Oct 1999 06:43:27 -0400 + +libgc (1:5.0.alpha3-3) unstable; urgency=low + + * Fixed invalid initializer bug copying va_list in cord/cordprnt.c. + Closes: Bug#45559 + + -- Mike Goldman Tue, 21 Sep 1999 13:53:53 -0400 + +libgc (1:5.0.alpha3-2) unstable; urgency=low + + * Moved libgc5 to section libs. + + -- Mike Goldman Sat, 18 Sep 1999 22:52:45 -0400 + +libgc (1:5.0.alpha3-1) unstable; urgency=low + + * New upstream (testing) release. + * Complies with Debian Technical Committee on /usr/share/doc. + + -- Mike Goldman Sat, 18 Sep 1999 21:52:43 -0400 + +libgc (1:5.0.alpha2-2) unstable; urgency=low + + * Some documentation was being copied to the wrong place. + + -- Mike Goldman Tue, 31 Aug 1999 06:14:53 -0400 + +libgc (1:5.0.alpha2-1) unstable; urgency=low + + * New upstream (testing) release. + * Unlike 4.14, this should work on Linux Alpha. + + -- Mike Goldman Tue, 31 Aug 1999 05:02:44 -0400 + +libgc (1:4.14-3) unstable; urgency=low + + * Symlinks were written to /usr/include/gc.h. Fixed. + + -- Mike Goldman Thu, 29 Jul 1999 13:11:04 -0400 + +libgc (1:4.14-2) unstable; urgency=low + + * Incorporated NMU updates by Adam DiCarlo (thanks!) (Closes Bug#41222) + * libgc4-dev conflicts with bigloo less than 2.0e-1, since that package + had a libgc.so symlink in it (Closes Bug#39427) + * the bigloo maintainer and the w3m maintainer's experience seems to + support the notion that threading even on i386 is not a good idea. It + might be desired later to have a threaded version of libgc provided + somehow as well, but AFAI(Adam)CT, threading is causing problems and + isn't necessary for any software using libgc + * must disable threads on non-i386 architectures because gc_priv.h only + has an implementation for GC_test_and_set in i386 assembly + (closes important Bug#39285) + * adapt patch for powerpc GC_test_and_set (closes Bug#41063), allowing + powerpc to use LINUX_THREADS + * compile with the '-DDONT_ADD_BYTE_AT_END' switch, claimed to be needed + by bigloo + + -- Mike Goldman Thu, 29 Jul 1999 02:07:53 -0400 + +libgc (1:4.14-1) unstable; urgency=low + + * New upstream release (Closes Bug#38715) + * Replace hard links with symbolic links (Closes Bug#41062) + + -- Mike Goldman Wed, 28 Jul 1999 15:20:47 -0400 + +libgc (1:4.13-2) unstable; urgency=low + + * Changed upstream URL + + -- Mike Goldman Thu, 18 Mar 1999 04:27:11 -0500 + +libgc (1:4.13-1) unstable; urgency=low + + * New upstream release + * Eliminated LinuxThreads check for internal library symbol, which caused + glibc2.1 incompatibility + * Closes bug #34609 + + -- Mike Goldman Thu, 18 Mar 1999 03:34:50 -0500 + +libgc (1:4.12.4.13alpha3-3) unstable; urgency=low + + * Replaces libgc4 packages with new debhelper-ized version. + * Incorporates non-maintainer patch by Hartmut Koptein + for powerpc + * Warns on non-i386 of no GC_test_and_set() + * Closes bug #31937 + + -- Mike Goldman Tue, 9 Feb 1999 09:14:37 -0500 + +libgc4 (4.12-4.13alpha3-2) unstable; urgency=low + + * Incorporated non-maintainer fix by Paul Slootman : + On Alpha, preprocess the asm source explicitly, apparently 'as' does + not invoke the preprocessor. + + -- Mike Goldman Mon, 28 Dec 1998 04:38:37 -0500 + +libgc4 (4.12-4.13alpha3-1) unstable; urgency=low + + * New upstream release. + + -- Mike Goldman Sat, 12 Dec 1998 02:44:53 -0500 + +libgc4 (4.12-4.13alpha2-4) unstable; urgency=low + + * Fixed several serious lintian errors. + + -- Mike Goldman Fri, 11 Dec 1998 09:08:02 -0500 + +libgc4 (4.12-4.13alpha2-3) unstable; urgency=low + + * Split into libgc4, libgc4-dev + + -- Mike Goldman Thu, 10 Dec 1998 08:42:34 -0500 + +libgc4 (4.12-4.13alpha2-2) unstable; urgency=low + + * Needed to link with -lpthreads. + + -- Mike Goldman Mon, 7 Dec 1998 15:22:10 -0500 + +libgc4 (4.12-4.13alpha2-1) unstable; urgency=low + + * New upstream maintainer release. + * Now supports LinuxThreads. Please read README.linux first. + + -- Mike Goldman Sun, 6 Dec 1998 05:44:51 -0500 + +libgc4 (4.12-4.13alpha1-2) unstable; urgency=low + + * Manpage links in *wrong* place (fixed). + + -- Rob Browning Wed, 1 Jul 1998 14:50:22 -0500 + +libgc4 (4.12-4.13alpha1-1) unstable; urgency=low + + * Initial release. This will need to be split into -dev, etc later... + + -- Rob Browning Fri, 26 Jun 1998 23:48:09 -0500 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..5ffdd88 --- /dev/null +++ b/debian/control @@ -0,0 +1,47 @@ +Source: libgc +Maintainer: Christoph Egger +Section: libs +Priority: standard +Build-Depends: debhelper (>= 7.0.50~), autoconf, libatomic-ops-dev (>= 7.2~) +Standards-Version: 3.9.2 +Homepage: http://www.hpl.hp.com/personal/Hans_Boehm/gc/ +Vcs-Git: git://git.debian.org/git/collab-maint/libgc.git +Vcs-Browser: http://git.debian.org/?p=collab-maint/libgc.git;a=summary + +Package: libgc1c2 +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Conflicts: libgc1 +Replaces: libgc1 +Description: conservative garbage collector for C and C++ + Boehm-Demers-Weiser's GC is a garbage collecting storage allocator that is + intended to be used as a plug-in replacement for C's malloc or C++'s new(). + . + It allows you to allocate memory basically as you normally would without + explicitly deallocating memory that is no longer useful. The collector + automatically recycles memory when it determines that it can no longer be + used. + . + This version of the collector is thread safe, has C++ support and uses the + defaults for everything else. However, it does not work as a drop-in malloc(3) + replacement. + +Package: libgc-dev +Architecture: any +Priority: optional +Section: libdevel +Depends: ${misc:Depends}, libgc1c2 (= ${binary:Version}), libc-dev +Description: conservative garbage collector for C (development) + Boehm-Demers-Weiser's GC is a garbage collecting storage allocator that is + intended to be used as a plug-in replacement for C's malloc or C++'s new(). + . + It allows you to allocate memory basically as you normally would without + explicitly deallocating memory that is no longer useful. The collector + automatically recycles memory when it determines that it can no longer be + used. + . + This version of the collector is thread safe, has C++ support and uses the + defaults for everything else. However, it does not work as a drop-in malloc(3) + replacement. + . + This package is required to compile and link programs that use libgc1c2. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..0fa3076 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,32 @@ +This package was debianized by Mike Goldman on +Tue, 9 Feb 1999 09:14:37 -0500, and taken over by +Ryan Murray on Sat Jan 19 02:13:04 PST 2002 + +It was downloaded from +http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ + +Upstream Author: Hans-J. Boehm + +Copyright: + +Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers +Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. +Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. +Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + +The file linux_threads.c is also +Copyright (c) 1998 by Fergus Henderson. All rights reserved. + +The files Makefile.am, and configure.in are +Copyright (c) 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. + +Some code modified for Debian GNU/Linux by Ryan Murray diff --git a/debian/libgc-dev.install b/debian/libgc-dev.install new file mode 100644 index 0000000..0caffbc --- /dev/null +++ b/debian/libgc-dev.install @@ -0,0 +1,9 @@ +usr/include +usr/lib/libgc*.so +usr/lib/libgc*.a +usr/lib/pkgconfig/bdw-gc.pc +usr/share/doc/gc/*.html usr/share/doc/libgc1c2 +usr/share/doc/gc/barrett_diagram usr/share/doc/libgc1c2 +usr/share/doc/gc/README usr/share/doc/libgc1c2 +usr/share/doc/gc/README.contributors usr/share/doc/libgc1c2 +usr/share/doc/gc/README.linux usr/share/doc/libgc1c2 diff --git a/debian/libgc1c2.docs b/debian/libgc1c2.docs new file mode 100644 index 0000000..2e9e915 --- /dev/null +++ b/debian/libgc1c2.docs @@ -0,0 +1 @@ +doc/README.environment diff --git a/debian/libgc1c2.install b/debian/libgc1c2.install new file mode 100644 index 0000000..5c53425 --- /dev/null +++ b/debian/libgc1c2.install @@ -0,0 +1 @@ +usr/lib/libgc*.so.* diff --git a/debian/libgc1c2.symbols b/debian/libgc1c2.symbols new file mode 100644 index 0000000..6fe7755 --- /dev/null +++ b/debian/libgc1c2.symbols @@ -0,0 +1,3 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev +libgccpp.so.1 libgc1c2 #MINVER# diff --git a/debian/libgc1c2.symbols.amd64 b/debian/libgc1c2.symbols.amd64 new file mode 100644 index 0000000..c4b3bf5 --- /dev/null +++ b/debian/libgc1c2.symbols.amd64 @@ -0,0 +1,516 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.armel b/debian/libgc1c2.symbols.armel new file mode 100644 index 0000000..5c19124 --- /dev/null +++ b/debian/libgc1c2.symbols.armel @@ -0,0 +1,513 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1-2 diff --git a/debian/libgc1c2.symbols.armhf b/debian/libgc1c2.symbols.armhf new file mode 100644 index 0000000..c84f384 --- /dev/null +++ b/debian/libgc1c2.symbols.armhf @@ -0,0 +1,513 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1-6 diff --git a/debian/libgc1c2.symbols.avr32 b/debian/libgc1c2.symbols.avr32 new file mode 100644 index 0000000..651c4d7 --- /dev/null +++ b/debian/libgc1c2.symbols.avr32 @@ -0,0 +1,513 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.hppa b/debian/libgc1c2.symbols.hppa new file mode 100644 index 0000000..7eaeb36 --- /dev/null +++ b/debian/libgc1c2.symbols.hppa @@ -0,0 +1,509 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.hurd-i386 b/debian/libgc1c2.symbols.hurd-i386 new file mode 100644 index 0000000..8cee43e --- /dev/null +++ b/debian/libgc1c2.symbols.hurd-i386 @@ -0,0 +1,502 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-4 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-4 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-4 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-4 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-4 + address@hidden 1:7.1-4 diff --git a/debian/libgc1c2.symbols.i386 b/debian/libgc1c2.symbols.i386 new file mode 100644 index 0000000..b2c9f52 --- /dev/null +++ b/debian/libgc1c2.symbols.i386 @@ -0,0 +1,516 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-2 + address@hidden 1:7.1-2 diff --git a/debian/libgc1c2.symbols.kfreebsd-amd64 b/debian/libgc1c2.symbols.kfreebsd-amd64 new file mode 100644 index 0000000..6c7f6fe --- /dev/null +++ b/debian/libgc1c2.symbols.kfreebsd-amd64 @@ -0,0 +1,501 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.kfreebsd-i386 b/debian/libgc1c2.symbols.kfreebsd-i386 new file mode 100644 index 0000000..9f1378a --- /dev/null +++ b/debian/libgc1c2.symbols.kfreebsd-i386 @@ -0,0 +1,501 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.mips b/debian/libgc1c2.symbols.mips new file mode 100644 index 0000000..95e00ed --- /dev/null +++ b/debian/libgc1c2.symbols.mips @@ -0,0 +1,501 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.mipsel b/debian/libgc1c2.symbols.mipsel new file mode 100644 index 0000000..95e00ed --- /dev/null +++ b/debian/libgc1c2.symbols.mipsel @@ -0,0 +1,501 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.powerpc b/debian/libgc1c2.symbols.powerpc new file mode 100644 index 0000000..9904bdc --- /dev/null +++ b/debian/libgc1c2.symbols.powerpc @@ -0,0 +1,509 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1-1 diff --git a/debian/libgc1c2.symbols.powerpcspe b/debian/libgc1c2.symbols.powerpcspe new file mode 100644 index 0000000..df9ee1a --- /dev/null +++ b/debian/libgc1c2.symbols.powerpcspe @@ -0,0 +1,509 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-6 + address@hidden 1:7.1-6 diff --git a/debian/libgc1c2.symbols.ppc64 b/debian/libgc1c2.symbols.ppc64 new file mode 100644 index 0000000..8fd9489 --- /dev/null +++ b/debian/libgc1c2.symbols.ppc64 @@ -0,0 +1,509 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.s390 b/debian/libgc1c2.symbols.s390 new file mode 100644 index 0000000..b6cccdf --- /dev/null +++ b/debian/libgc1c2.symbols.s390 @@ -0,0 +1,501 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.sh4 b/debian/libgc1c2.symbols.sh4 new file mode 100644 index 0000000..0800ab2 --- /dev/null +++ b/debian/libgc1c2.symbols.sh4 @@ -0,0 +1,508 @@ +libgc.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 diff --git a/debian/libgc1c2.symbols.sparc b/debian/libgc1c2.symbols.sparc new file mode 100644 index 0000000..f6d6924 --- /dev/null +++ b/debian/libgc1c2.symbols.sparc @@ -0,0 +1,512 @@ +libgc.so.1 libgc1c2 #MINVER# +* Build-Depends-Package: libgc-dev + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1 +libgccpp.so.1 libgc1c2 #MINVER# + address@hidden 1:7.1 + address@hidden 1:7.1 + address@hidden 1:7.1-1 + address@hidden 1:7.1-1 + address@hidden 1:7.1-1 diff --git a/debian/patches/01-catch-all-linux.diff b/debian/patches/01-catch-all-linux.diff new file mode 100644 index 0000000..99a1c66 --- /dev/null +++ b/debian/patches/01-catch-all-linux.diff @@ -0,0 +1,28 @@ + +Catch all linux variants. + + -- Chris Lamb Wed, 12 Aug 2009 01:14:45 +0100 + +diff -urNad /tmp/bp-build/gc-7.1.orig/configure.ac /tmp/bp-build/gc-7.1/configure.ac +--- gc-7.1.orig/configure.ac 2009-08-12 01:11:00.000000000 +0100 ++++ gc-7.1/configure.ac 2009-08-12 01:11:40.000000000 +0100 +@@ -80,7 +80,7 @@ + THREADS=posix + THREADDLLIBS=-lpthread + case "$host" in +- x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*) ++ *-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then +@@ -89,10 +89,6 @@ + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explict GC_INIT() calls may be required."); + ;; +- *-*-linux*) +- AC_DEFINE(GC_LINUX_THREADS) +- AC_DEFINE(_REENTRANT) +- ;; + *-*-aix*) + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) diff --git a/debian/patches/02-manpage.diff b/debian/patches/02-manpage.diff new file mode 100644 index 0000000..1345b0f --- /dev/null +++ b/debian/patches/02-manpage.diff @@ -0,0 +1,27 @@ + +Various manpage changes. Imported semi-automatically from .diff.gz. + +diff --git a/doc/gc.man b/doc/gc.man +index 2a550c7..5c0232a 100644 +--- a/doc/gc.man ++++ b/doc/gc.man +@@ -1,8 +1,8 @@ +-.TH GC_MALLOC 1L "2 October 2003" ++.TH GC_MALLOC 3 "2 October 2003" + .SH NAME + GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement + .SH SYNOPSIS +-#include "gc.h" ++#include + .br + void * GC_malloc(size_t size); + .br +@@ -11,7 +11,7 @@ void GC_free(void *ptr); + void * GC_realloc(void *ptr, size_t size); + .br + .sp +-cc ... gc.a +++ cc ... -I/usr/include/gc -lgc + .LP + .SH DESCRIPTION + .I GC_malloc diff --git a/debian/patches/03-add-avr32-support.diff b/debian/patches/03-add-avr32-support.diff new file mode 100644 index 0000000..764fa25 --- /dev/null +++ b/debian/patches/03-add-avr32-support.diff @@ -0,0 +1,124 @@ +Index: libgc-7.1.new/include/private/gcconfig.h +=================================================================== +--- libgc-7.1.new.orig/include/private/gcconfig.h 2009-08-12 20:10:04.000000000 +0100 ++++ libgc-7.1.new/include/private/gcconfig.h 2009-08-12 20:10:18.000000000 +0100 +@@ -258,6 +258,10 @@ + # define ARM32 + # define mach_type_known + # endif ++# if defined(LINUX) && defined(__avr32__) ++# define AVR32 ++# define mach_type_known ++# endif + # if defined(LINUX) && defined(__sh__) + # define SH + # define mach_type_known +@@ -1781,6 +1785,19 @@ + # endif + #endif + ++# ifdef AVR32 ++# define MACH_TYPE "AVR32" ++# define CPP_WORDSZ 32 ++# define ALIGNMENT 4 ++# 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 CRIS + # define MACH_TYPE "CRIS" + # define CPP_WORDSZ 32 +Index: libgc-7.1.new/include/private/thread_local_alloc.h +=================================================================== +--- libgc-7.1.new.orig/include/private/thread_local_alloc.h 2009-08-12 20:10:04.000000000 +0100 ++++ libgc-7.1.new/include/private/thread_local_alloc.h 2009-08-12 20:10:18.000000000 +0100 +@@ -39,7 +39,7 @@ + # else + # define USE_WIN32_COMPILER_TLS + # endif /* !GNU */ +-# elif defined(LINUX) && !defined(ARM32) && \ ++# elif defined(LINUX) && !defined(ARM32) && !defined(AVR32) && \ + (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >=3)) + # define USE_COMPILER_TLS + # elif (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \ +Index: libgc-7.1.new/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ libgc-7.1.new/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h 2009-08-12 20:10:18.000000000 +0100 +@@ -0,0 +1,44 @@ ++/* ++ * Copyright (C) 2009 Bradley Smith ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included ++ * in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ */ ++ ++#include "../all_atomic_load_store.h" ++ ++#include "../ordered.h" /* There are no multiprocessor implementations. */ ++ ++#include "../test_and_set_t_is_ao_t.h" ++ ++AO_INLINE AO_TS_VAL_t ++AO_test_and_set(volatile AO_TS_t *addr) { ++ int ret; ++ ++ __asm__ __volatile__( ++ "xchg %[old], %[mem], %[newv]" ++ : [old] "=&r"(ret) ++ : [mem] "r"(addr), [newv] "r"(1) ++ : "memory"); ++ ++ return ret; ++} ++ ++#define AO_HAVE_test_and_set +Index: libgc-7.1.new/libatomic_ops-1.2/src/atomic_ops.h +=================================================================== +--- libgc-7.1.new.orig/libatomic_ops-1.2/src/atomic_ops.h 2009-08-12 20:10:04.000000000 +0100 ++++ libgc-7.1.new/libatomic_ops-1.2/src/atomic_ops.h 2009-08-12 20:10:18.000000000 +0100 +@@ -229,6 +229,9 @@ + # if defined(__cris__) || defined(CRIS) + # include "atomic_ops/sysdeps/gcc/cris.h" + # endif ++# if defined(__avr32__) ++# include "atomic_ops/sysdeps/gcc/avr32.h" ++# endif + #endif /* __GNUC__ && !AO_USE_PTHREAD_DEFS */ + + #if defined(__INTEL_COMPILER) && !defined(AO_USE_PTHREAD_DEFS) +Index: libgc-7.1.new/mach_dep.c +=================================================================== +--- libgc-7.1.new.orig/mach_dep.c 2009-08-12 20:10:25.000000000 +0100 ++++ libgc-7.1.new/mach_dep.c 2009-08-12 20:10:46.000000000 +0100 +@@ -175,7 +175,7 @@ + # if defined(HAVE_PUSH_REGS) + GC_push_regs(); + # elif defined(UNIX_LIKE) && !defined(DARWIN) && !defined(ARM32) && \ +- !defined(HURD) ++ !defined(HURD) && !defined(AVR32) + /* Older versions of Darwin seem to lack getcontext(). */ + /* ARM Linux often doesn't support a real getcontext(). */ + ucontext_t ctxt; diff --git a/debian/patches/04-fix-sparc-ftbfs.diff b/debian/patches/04-fix-sparc-ftbfs.diff new file mode 100644 index 0000000..955e265 --- /dev/null +++ b/debian/patches/04-fix-sparc-ftbfs.diff @@ -0,0 +1,13 @@ +diff -urNad /tmp/bp-build/gc-7.1.orig/configure.ac /tmp/bp-build/gc-7.1/configure.ac +--- gc-7.1.orig/configure.ac 2009-08-13 23:40:28.000000000 +0100 ++++ gc-7.1/configure.ac 2009-08-13 23:56:04.000000000 +0100 +@@ -402,6 +402,9 @@ + dnl This is now redundant, but it is also important for incremental GC + dnl performance under Irix. + ;; ++ sparc*-*-linux*) ++ machdep="mach_dep.lo sparc_mach_dep.lo" ++ ;; + sparc-*-netbsd*) + machdep="mach_dep.lo sparc_netbsd_mach_dep.lo" + ;; diff --git a/debian/patches/05-s390-includes.diff b/debian/patches/05-s390-includes.diff new file mode 100644 index 0000000..aa3a4c8 --- /dev/null +++ b/debian/patches/05-s390-includes.diff @@ -0,0 +1,14 @@ +diff -urNad /tmp/bp-build/gc-7.1.orig/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h /tmp/bp-build/gc-7.1/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h +--- gc-7.1.orig/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h 2009-08-14 00:10:47.000000000 +0100 ++++ gc-7.1/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h 2009-08-14 00:11:40.000000000 +0100 +@@ -30,8 +30,8 @@ + /* may be delayed. Otherwise everything is ordered. */ + /* - There is a hardware compare-and-swap (CS) instruction. */ + +-#include "ordered_except_wr.h" +-#include "all_aligned_atomic_load_store.h" ++#include "../ordered_except_wr.h" ++#include "../all_aligned_atomic_load_store.h" + + #include "../test_and_set_t_is_ao_t.h" + /* FIXME: Is there a way to do byte-sized test-and-set? */ diff --git a/debian/patches/05_libgc_fix_threadlocal.patch b/debian/patches/05_libgc_fix_threadlocal.patch new file mode 100644 index 0000000..31f5ce9 --- /dev/null +++ b/debian/patches/05_libgc_fix_threadlocal.patch @@ -0,0 +1,23 @@ +Description: BDWGC change for stop scanning freelist of dead threads +Author: NIIBE Yutaka +Forwarded: Yes +Last-Update: 2010-04-16 + +2010-04-16 NIIBE Yutaka + + * pthread_support.c (GC_mark_thread_local_free_lists): Mark only + for live threads. + +--- gauche-0.9.orig/gc/pthread_support.c 5 Mar 2010 14:26:16 -0000 ++++ gauche-0.9/gc/pthread_support.c 2010-04-16 17:04:59.000000000 +0900 +@@ -235,7 +235,9 @@ void GC_mark_thread_local_free_lists(voi + + for (i = 0; i < THREAD_TABLE_SZ; ++i) { + for (p = GC_threads[i]; 0 != p; p = p -> next) { +- GC_mark_thread_local_fls_for(&(p->tlfs)); ++ if (!(p -> flags & FINISHED)) { ++ GC_mark_thread_local_fls_for(&(p->tlfs)); ++ } + } + } + } diff --git a/debian/patches/06-m68k-no-getcontext.diff b/debian/patches/06-m68k-no-getcontext.diff new file mode 100644 index 0000000..d0c3e93 --- /dev/null +++ b/debian/patches/06-m68k-no-getcontext.diff @@ -0,0 +1,13 @@ +Index: libgc-7.1/mach_dep.c +=================================================================== +--- libgc-7.1.orig/mach_dep.c 2011-05-07 14:21:31.000000000 +0000 ++++ libgc-7.1/mach_dep.c 2011-05-07 14:21:44.000000000 +0000 +@@ -175,7 +175,7 @@ + # if defined(HAVE_PUSH_REGS) + GC_push_regs(); + # elif defined(UNIX_LIKE) && !defined(DARWIN) && !defined(ARM32) && \ +- !defined(HURD) && !defined(AVR32) ++ !defined(HURD) && !defined(AVR32) && !defined(M68K) + /* Older versions of Darwin seem to lack getcontext(). */ + /* ARM Linux often doesn't support a real getcontext(). */ + ucontext_t ctxt; diff --git a/debian/patches/enable-threads.diff b/debian/patches/enable-threads.diff new file mode 100644 index 0000000..da39eb9 --- /dev/null +++ b/debian/patches/enable-threads.diff @@ -0,0 +1,24 @@ +Index: libgc-7.1/include/gc_config_macros.h +=================================================================== +--- libgc-7.1.orig/include/gc_config_macros.h 2011-03-12 18:35:55.961958955 +0100 ++++ libgc-7.1/include/gc_config_macros.h 2011-03-12 18:36:09.169958955 +0100 +@@ -102,7 +102,7 @@ + # define GC_DARWIN_THREADS + # define GC_PTHREADS + # endif +-# if !defined(GC_PTHREADS) && (defined(__FreeBSD__) || defined(__DragonFly__)) ++# if !defined(GC_PTHREADS) && (defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)) + # define GC_FREEBSD_THREADS + # define GC_PTHREADS + # endif +@@ -118,6 +118,10 @@ + # define GC_AIX_THREADS + # define GC_PTHREADS + # endif ++# if defined(__gnu_hurd__) ++# define GC_GNU_THREADS ++# define GC_PTHREADS ++# endif + #endif /* GC_THREADS */ + + #if defined(GC_THREADS) && !defined(GC_PTHREADS) && !defined(GC_WIN32_THREADS) \ diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..4efd356 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,7 @@ +01-catch-all-linux.diff +02-manpage.diff +03-add-avr32-support.diff +04-fix-sparc-ftbfs.diff +#05-s390-includes.diff +enable-threads.diff +06-m68k-no-getcontext.diff diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..3fe1753 --- /dev/null +++ b/debian/rules @@ -0,0 +1,38 @@ +#!/usr/bin/make -f + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_BUILD_ARCH:=$(shell dpkg --print-architecture) + +LDFLAGS += -pthread + +%: + dh $@ + +override_dh_auto_configure: + [ ! -d libatomic_ops-1.2 ] || mv libatomic_ops-1.2 libatomic_ops-1.2.bak + autoconf + ./configure \ + $(CONFIG_OPTS) \ + --enable-cplusplus \ + --disable-dependency-tracking \ + --with-tags=CXX \ + --prefix=/usr \ + --mandir=\$${prefix}/share/man \ + --sysconfdir=/etc \ + --localstatedir=/var/lib \ + --datadir=\$${prefix}/share/doc \ + --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) + +override_dh_install: + install -D doc/gc.man debian/tmp/usr/share/man/man3/gc_malloc.3 + dh_install + +override_dh_auto_clean: + [ -d libatomic_ops-1.2 ] || [ ! -d libatomic_ops-1.2.bak ] || mv libatomic_ops-1.2.bak libatomic_ops-1.2 + dh_auto_clean + rm -rf autom4te.cache libatomic_ops atomic_ops_sysdeps.S atomic_ops.c + +override_dh_installchangelogs: + dh_installchangelogs doc/README.changes diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..5736f2d --- /dev/null +++ b/debian/watch @@ -0,0 +1,3 @@ +version=3 +opts="uversionmangle=s/alpha/~alpha/" \ + http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-?(.*)\.tar\.gz diff --git a/doc/gc.man b/doc/gc.man index 109aca6..39c59a3 100644 --- a/doc/gc.man +++ b/doc/gc.man @@ -1,8 +1,8 @@ -.TH GC_MALLOC 1L "2 October 2003" +.TH GC_MALLOC 3 "2 October 2003" .SH NAME GC_malloc, GC_malloc_atomic, GC_free, GC_realloc, GC_enable_incremental, GC_register_finalizer, GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page, GC_set_warn_proc \- Garbage collecting malloc replacement .SH SYNOPSIS -#include "gc.h" +#include .br void * GC_malloc(size_t size); .br @@ -11,7 +11,7 @@ void GC_free(void *ptr); void * GC_realloc(void *ptr, size_t size); .br .sp -cc ... gc.a ++ cc ... -I/usr/include/gc -lgc .LP .SH DESCRIPTION .I GC_malloc diff --git a/include/gc_config_macros.h b/include/gc_config_macros.h index d3b5f6a..77db3f1 100644 --- a/include/gc_config_macros.h +++ b/include/gc_config_macros.h @@ -121,6 +121,10 @@ # if defined(__rtems__) && (defined(i386) || defined(__i386__)) # define GC_RTEMS_PTHREADS # endif +# if defined(__gnu_hurd__) +# define GC_GNU_THREADS +# define GC_PTHREADS +# endif #endif /* GC_THREADS */ #undef GC_PTHREADS diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index ebc1fc3..902925a 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -1990,6 +1990,19 @@ # endif #endif +# ifdef AVR32 +# define MACH_TYPE "AVR32" +# define CPP_WORDSZ 32 +# define ALIGNMENT 4 +# 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 CRIS # define MACH_TYPE "CRIS" # define CPP_WORDSZ 32 diff --git a/include/private/thread_local_alloc.h~ b/include/private/thread_local_alloc.h~ new file mode 100644 index 0000000..4270cbc --- /dev/null +++ b/include/private/thread_local_alloc.h~ @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2000-2005 by Hewlett-Packard Company. All rights reserved. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ + +/* Included indirectly from a thread-library-specific file. */ +/* This is the interface for thread-local allocation, whose */ +/* implementation is mostly thread-library-independent. */ +/* Here we describe only the interface that needs to be known */ +/* and invoked from the thread support layer; the actual */ +/* implementation also exports GC_malloc and friends, which */ +/* are declared in gc.h. */ + +#ifndef GC_THREAD_LOCAL_ALLOC_H +#define GC_THREAD_LOCAL_ALLOC_H + +#include "private/gc_priv.h" + +#ifdef THREAD_LOCAL_ALLOC + +#include "gc_inline.h" + +#if defined(USE_HPUX_TLS) +# error USE_HPUX_TLS macro was replaced by USE_COMPILER_TLS +#endif + +<<<<<<< HEAD +#if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_WIN32_SPECIFIC) \ + && !defined(USE_WIN32_COMPILER_TLS) && !defined(USE_COMPILER_TLS) \ + && !defined(USE_CUSTOM_SPECIFIC) +# if defined(MSWIN32) || defined(MSWINCE) || defined(CYGWIN32) +# if defined(__GNUC__) /* Fixed for versions past 2.95? */ \ + || defined(MSWINCE) +# define USE_WIN32_SPECIFIC +# else +# define USE_WIN32_COMPILER_TLS +# endif /* !GNU */ +# elif defined(LINUX) && !defined(ARM32) && !defined(AVR32) \ + && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >=3)) +# define USE_COMPILER_TLS +# elif defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) \ + || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \ + || defined(GC_NETBSD_THREADS) || defined(GC_RTEMS_PTHREADS) +# define USE_PTHREAD_SPECIFIC +# elif defined(GC_HPUX_THREADS) +# ifdef __GNUC__ +# define USE_PTHREAD_SPECIFIC + /* Empirically, as of gcc 3.3, USE_COMPILER_TLS doesn't work. */ +======= +# if defined USE_HPUX_TLS +# error USE_HPUX_TLS macro was replaced by USE_COMPILER_TLS +# endif + +# if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_WIN32_SPECIFIC) && \ + !defined(USE_WIN32_COMPILER_TLS) && !defined(USE_COMPILER_TLS) && \ + !defined(USE_CUSTOM_SPECIFIC) +# if defined(MSWIN32) || defined(MSWINCE) || defined(CYGWIN32) +# if defined(__GNUC__) /* Fixed for versions past 2.95? */ +# define USE_WIN32_SPECIFIC +# else +# define USE_WIN32_COMPILER_TLS +# endif /* !GNU */ +# elif defined(LINUX) && !defined(ARM32) && !defined(AVR32) && \ + (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >=3)) +# define USE_COMPILER_TLS +# elif (defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) || \ + defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)) || \ + defined(GC_NETBSD_THREADS) +# define USE_PTHREAD_SPECIFIC +# elif defined(GC_HPUX_THREADS) +# ifdef __GNUC__ +# define USE_PTHREAD_SPECIFIC + /* Empirically, as of gcc 3.3, USE_COMPILER_TLS doesn't work. */ +# else +# define USE_COMPILER_TLS +# endif +>>>>>>> 160ba45... Debian 7.1-8 +# else +# define USE_COMPILER_TLS +# endif +# else +# define USE_CUSTOM_SPECIFIC /* Use our own. */ +# endif +#endif + +#include + +/* One of these should be declared as the tlfs field in the */ +/* structure pointed to by a GC_thread. */ +typedef struct thread_local_freelists { + void * ptrfree_freelists[TINY_FREELISTS]; + void * normal_freelists[TINY_FREELISTS]; +# ifdef GC_GCJ_SUPPORT + void * gcj_freelists[TINY_FREELISTS]; +# define ERROR_FL ((void *)(word)-1) + /* Value used for gcj_freelist[-1]; allocation is */ + /* erroneous. */ +# endif +# ifdef ENABLE_DISCLAIM + void * finalized_freelists[TINY_FREELISTS]; +# endif + /* Free lists contain either a pointer or a small count */ + /* reflecting the number of granules allocated at that */ + /* size. */ + /* 0 ==> thread-local allocation in use, free list */ + /* empty. */ + /* > 0, <= DIRECT_GRANULES ==> Using global allocation, */ + /* too few objects of this size have been */ + /* allocated by this thread. */ + /* >= HBLKSIZE => pointer to nonempty free list. */ + /* > DIRECT_GRANULES, < HBLKSIZE ==> transition to */ + /* local alloc, equivalent to 0. */ +# define DIRECT_GRANULES (HBLKSIZE/GRANULE_BYTES) + /* Don't use local free lists for up to this much */ + /* allocation. */ +} *GC_tlfs; + +#if defined(USE_PTHREAD_SPECIFIC) +# define GC_getspecific pthread_getspecific +# define GC_setspecific pthread_setspecific +# define GC_key_create pthread_key_create +# define GC_remove_specific(key) /* No need for cleanup on exit. */ + typedef pthread_key_t GC_key_t; +#elif defined(USE_COMPILER_TLS) || defined(USE_WIN32_COMPILER_TLS) +# define GC_getspecific(x) (x) +# define GC_setspecific(key, v) ((key) = (v), 0) +# define GC_key_create(key, d) 0 +# define GC_remove_specific(key) /* No need for cleanup on exit. */ + typedef void * GC_key_t; +#elif defined(USE_WIN32_SPECIFIC) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +# define NOSERVICE +# include +# define GC_getspecific TlsGetValue +# define GC_setspecific(key, v) !TlsSetValue(key, v) + /* We assume 0 == success, msft does the opposite. */ +# ifndef TLS_OUT_OF_INDEXES + /* this is currently missing in WinCE */ +# define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF +# endif +# define GC_key_create(key, d) \ + ((d) != 0 || (*(key) = TlsAlloc()) == TLS_OUT_OF_INDEXES ? -1 : 0) +# define GC_remove_specific(key) /* No need for cleanup on exit. */ + /* Need TlsFree on process exit/detach? */ + typedef DWORD GC_key_t; +#elif defined(USE_CUSTOM_SPECIFIC) +# include "private/specific.h" +#else +# error implement me +#endif + +/* Each thread structure must be initialized. */ +/* This call must be made from the new thread. */ +/* Caller holds allocation lock. */ +GC_INNER void GC_init_thread_local(GC_tlfs p); + +/* Called when a thread is unregistered, or exits. */ +/* We hold the allocator lock. */ +GC_INNER void GC_destroy_thread_local(GC_tlfs p); + +/* The thread support layer must arrange to mark thread-local */ +/* free lists explicitly, since the link field is often */ +/* invisible to the marker. It knows how to find all threads; */ +/* we take care of an individual thread freelist structure. */ +GC_INNER void GC_mark_thread_local_fls_for(GC_tlfs p); + +#ifdef ENABLE_DISCLAIM + GC_EXTERN ptr_t * GC_finalized_objfreelist; +#endif + +extern +#if defined(USE_COMPILER_TLS) + __thread +#elif defined(USE_WIN32_COMPILER_TLS) + __declspec(thread) +#endif +GC_key_t GC_thread_key; +/* This is set up by the thread_local_alloc implementation. No need */ +/* for cleanup on thread exit. But the thread support layer makes sure */ +/* that GC_thread_key is traced, if necessary. */ + +#endif /* THREAD_LOCAL_ALLOC */ + +#endif /* GC_THREAD_LOCAL_ALLOC_H */ diff --git a/libatomic_ops-1.2/AUTHORS b/libatomic_ops-1.2/AUTHORS new file mode 100644 index 0000000..b770890 --- /dev/null +++ b/libatomic_ops-1.2/AUTHORS @@ -0,0 +1,4 @@ +Originally written by Hans Boehm, with some platform-dependent code +imported from the Boehm-Demers-Weiser GC, where it was contributed +by many others. + diff --git a/libatomic_ops-1.2/COPYING b/libatomic_ops-1.2/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/libatomic_ops-1.2/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libatomic_ops-1.2/CVS/Entries b/libatomic_ops-1.2/CVS/Entries new file mode 100644 index 0000000..503a352 --- /dev/null +++ b/libatomic_ops-1.2/CVS/Entries @@ -0,0 +1,21 @@ +D/doc//// +D/src//// +D/tests//// +/AUTHORS/1.1/Tue Jul 11 22:55:09 2006// +/COPYING/1.1/Tue Jul 11 22:55:09 2006// +/INSTALL/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.am/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.in/1.1/Tue Jul 11 22:55:09 2006// +/NEWS/1.1/Tue Jul 11 22:55:09 2006// +/README/1.1/Tue Jul 11 22:55:09 2006// +/aclocal.m4/1.1/Tue Jul 11 22:55:09 2006// +/compile/1.1/Tue Jul 11 22:55:09 2006// +/config.guess/1.1/Tue Jul 11 22:55:09 2006// +/config.sub/1.1/Tue Jul 11 22:55:09 2006// +/configure/1.1/Tue Jul 11 22:55:09 2006// +/configure.ac/1.1/Tue Jul 11 22:55:09 2006// +/depcomp/1.1/Tue Jul 11 22:55:09 2006// +/install-sh/1.1/Tue Jul 11 22:55:09 2006// +/missing/1.1/Tue Jul 11 22:55:09 2006// +/mkinstalldirs/1.1/Tue Jul 11 22:55:09 2006// +/ChangeLog/1.15/Tue Feb 12 00:18:39 2008// diff --git a/libatomic_ops-1.2/CVS/Repository b/libatomic_ops-1.2/CVS/Repository new file mode 100644 index 0000000..525a8b9 --- /dev/null +++ b/libatomic_ops-1.2/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2 diff --git a/libatomic_ops-1.2/CVS/Root b/libatomic_ops-1.2/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/ChangeLog b/libatomic_ops-1.2/ChangeLog new file mode 100644 index 0000000..e68ab4c --- /dev/null +++ b/libatomic_ops-1.2/ChangeLog @@ -0,0 +1,206 @@ +2008-02-11 Hans Boehm + (Really Ian Wienand & Debian maintainers) + * src/atomic_ops/sysdeps/gcc/x86.h + (AO_compare_double_and_swap_double_full): Correctly account for + ebx usage with PIC. + +2008-01-09 Hans Boehm + * src/atomic_ops/sysdeps/standard_ao_double_t.h: Let + double_ptr_storage default to long long; define everywhere. + +2008-01-08 Hans Boehm (Really mostly Joerg Wagner) + * src/atomic_ops/sysdeps/msftc/x86.h: Conditionally add + compare_double_and_swap_double. + +2008-01-06 Hans Boehm (Really mostly Joerg Wagner) + * src/atomic_ops/generalize.h: Add test_and_set generalizations, + Add AO_double_compare_and_swap generalizations. + * src/atomic_ops/sysdeps/armcc/arm_v6.h: New file. + * src/atomic_ops/sysdeps/gcc/arm.h: Handle V6 and V7. + * src/atomic_ops/sysdeps/gcc/x86.h, + src/atomic_ops/sysdeps/{gcc,msftc}/x86_64.h: Conditionally add + compare_double_and_swap_double, commented out for msftc. + * src/atomic_ops/sysdeps/standard_ao_double_t.h: Add + double_ptr_storage field. + +2008-01-03 Hans Boehm + (Merge from separate atomic_ops tree) + * src/atomic_ops/sysdeps/gcc/x86.h: Define correct macro for + double-width cas, and fix its implementation. + * doc/README.txt: Clarify use of _full. Add more warnings about + data dependencies. + +2008-01-02 Hans Boehm + * src/atomic_ops/sysdeps/gcc/powerpc.h (AO_load_acquire): Add + %X1 modifier to support indexed addressing. + +2007-07-23 Hans Boehm (really Jim Marshall) + * src/atomic_ops/sysdeps/msftc/x86.h (_InterlockedExchangeAdd): Define + for VC++6. + +2007-07-05 Andreas Tobler + * src/atomic_ops.h: Check for __powerpc64__ and __ppc64__ to include + powerpc.h. + +2007-06-26 Hans Boehm (really Luca Barbato) + * src/atomic_ops/sysdeps/gcc/powerpc.h (AO_load_acquire): Add + 64-bit version. + +2007-06-13 Hans Boehm + * src/atomic_ops.h: include stddef.h + +2007-06-06 Hans Boehm + * src/atomic_ops/sysdeps/msftc/x86_64.h: New file. + * src/atomic_ops.h: Add test for msftc/x86_64.h. + * src/atomic_ops/sysdeps/msftc/x86.h: Complain for _WIN64. + * src/atomic_ops/sysdeps/Makefile.am: Add x86_64.h. + * src/atomic_ops/sysdeps/Makefile.in: Regenerate. + * src/atomic_ops/sysdeps/aligned_atomic_load_store.h, + src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h, + src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h: + Replace unsigned long cast with size_t. + +2007-05-17 Hans Boehm + * src/atomic_ops/sysdeps/gcc/hppa.h (AO_test_and_set_full): + Add cast for return. + +2007-05-14 Hans Boehm + doc/README.txt: Update to reflect C++0x effort. + +2007-05-07 Hans Boehm (with help from Philipp Zambelli) + * src/atomic_ops/sysdeps/msftc/x86.h: Don't just assume that mfence + is present. + * src/atomic_ops/sysdeps/gcc/arm.h (AO_test_and_set_full): Correct + oldval type. + +2006-11-09 Earl Chew (Agilent) + * msftc/x86.h: Follow Microsoft documentation and include + windows.h. + +[1.2 release] + +2006-07-11 Hans Boehm + * src/atomic_ops/sysdeps/hpc/ia64.h: Fix typos. + +2006-03-28 Earl Chew (Agilent) + * src/atomic_ops/sysdeps/gcc/powerpc.h: Remove unused variable cr. + * src/atomic_ops/sysdeps/msftc/x86.h: + Use new intrinsics available in MSVC 2003 and MSVC 2005. + Use inline assembler to generate mfence and byte sized xchg + Use correct prototype for InterlockedCompareExchange. + * src/atomic_ops.h: Add test for __PPC__ . + * tests/run_parallel.inc: Add simple VxWorks support. + * tests/test_atomic.c, tests/test_atomic_include.h: Add prototypes + to silence compiler warnings. + +2006-1-13 Hans Boehm + *src/atomic_ops/sysdeps/gcc/powerpc.h: Beginnings of 64 bit support. + *src/atomic_ops/sysdeps/gcc/x86.h: Use "=q" for AO_test_and_set_full. + +2005-11-4 Hans Boehm + *src/atomic_ops/sysdeps/gcc/ia64.h: Include + all_acquire_release_volatile.h, instead of just the pointer-sized + version. + *src/atomic_ops/sysdeps/gcc/ia64.h: Include + all_acquire_release_volatile.h and all_atomic_load_store.h, + instead of just the pointer-sized versions. + +[1.1 release] + +2005-09-27 Hans Boehm + *src/atomic_ops.h: Define AO_CAN_EMUL_CAS for arm. + *src/atomic_ops/sysdeps/read_ordered.h: New file, extracted from + ordered_except_wr.h. + *src/atomic_ops/sysdeps/ordered_except_wr.h: include read_ordered.h + instead of duplicating it. + *src/atomic_ops/sysdeps/gcc/arm.h: Include read_ordered.h. + +2005-09-16 Hans Boehm + *src/atomic_ops/sysdeps/gcc/arm.h: Replace the AO_test_and_set + definition with one that might actually work. (Thanks to Kazu + Hirata and Paul Brook.) + +2005-08-01 Hans Boehm + *src/atomic_ops/Makefile.am: Change function naming from "byte" to + "char" (again). + +[1.0 release] + +2005-03-21 Hans Boehm + Fix various acquire_release_volatile.h files to reflect the fact + that both icc and gcc seem to reorder ordinary memory accesses around + volatile accesses early in the compilation. Modify the acquire + release test to catch this problem (with high probablity, and only on + a multiprocessor). + +2005-03 Hans Boehm + Fixes for recently introduced bugs. Update x86 and x86-64 assembly + syntax to deal with complaints by some recent gcc versions. + +2005-02 Hans Boehm + Added libatomic_ops_gpl library with support for mostly + lock-free stack and malloc(). + +2005-01 Ian Wienand , Al Stone , + Hans Boehm + Use autoconf, automake, starting with code from Debian package. + Don't use libtool. + +2005-01 Hans Boehm + * test_and_set_t_is_ao_t.h, test_and_set_t_is_char.h, others: + Change most platforms to use byte-wide test-and-set locations. + +2005-01 Hans Boehm + * ao_t_is_int.h: Add to trivially support int-wide operations + on platforms with int-sized pointers. + +2004-12 Hans Boehm + * gcc/powerpc.h: First serious attempt to support PowerPC (with + help from Maged Michael and others). + +2004-12 Hans Boehm + * sunc/sparc.[hS]: Added minimal supprt for the Sun SPARC compiler. + * atomic_ops_sysdeps.S: Add support for platforms that require + out-of-line assmebly code. + +2004-10 Hans Boehm + More work on char, short, int sized data. Add both + compare_double_and_swap_double and compare_and_swap_double. + Typically each platform will provide at most one of these. + +2004-07-02 Ranko Zivojnovic + Replace both instances of AO_HAVE_NOP_FULL with AO_HAVE_nop_full. + +2004-06 Hans Boehm + Start to add atomic_ops primitives for different sized data. + +2003-12-18 Hans Boehm + * atomic_ops/sysdeps/acquire_release_volatile.h, atomic_ops.h: + Fix support for ecc on IA64. Remove compiler_barrier workaround + for gcc 3.4 and later. + +2003-12-17 Hans Boehm + * atomic_ops/sysdeps/hpc/{ia64.h,hppa.h}, + atomic_ops/sysdeps/msftc/x86.h, Makefile, Makefile.atomic_ops, + Makefile.atomic_ops.msft, atomic_ops.h: Add initial support + for atomic_ops for VC++/Windows/X86 and HP/UX with the HP + compiler on PA_RISC and IA64. + +2003-12-09 Hans Boehm + + * many: Install under "atomic_ops" instead of "ao". + Change atomic_ops include file structure. Auxiliary include + files are all under include/atomic_ops. + Fix (hopefully) "make dist" in atomic_ops distribution. + Renamed various types to end in _t, though the old versions + are still defined for backward compatibility. + +2003-12-08 Carlos O'Donell + + * ao_sysdeps/gcc/hppa.h: Define AO_CLEAR macro. Change + AO_pa_clearable_loc type. Add __ldcw, and __ldcw_align + helper macros. AO_test_and_set_full uses helper macros. + + +Started sometime after version 0.4 release. Currently the format is +informal. Eventually should become more GNU-like. diff --git a/libatomic_ops-1.2/INSTALL b/libatomic_ops-1.2/INSTALL new file mode 100644 index 0000000..ab8c872 --- /dev/null +++ b/libatomic_ops-1.2/INSTALL @@ -0,0 +1,14 @@ +The configuration and build scripts for this package were generated by +automake/autoconf. "configure --prefix=; make; make install" +in this directory should work. + +Note that much of the content of this library is in the header files. + +However two small libraries are built and installed: + +- libatomic_ops.a is a support library, which is not needed on some platforms. + This is intended to be usable, under some mild restrictions, in free or + proprietary code, as are all the header files. See doc/LICENSING.txt. +- libatomic_ops_gpl.a contains some higher level facilities. This code is + currently covered by the GPL. The contents currently correspond to + the headers atomic_ops_stack.h and atomic_ops_malloc.h. diff --git a/libatomic_ops-1.2/Makefile.am b/libatomic_ops-1.2/Makefile.am new file mode 100644 index 0000000..da64dc2 --- /dev/null +++ b/libatomic_ops-1.2/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = src doc tests + +#distclean-local: diff --git a/libatomic_ops-1.2/Makefile.in b/libatomic_ops-1.2/Makefile.in new file mode 100644 index 0000000..8766159 --- /dev/null +++ b/libatomic_ops-1.2/Makefile.in @@ -0,0 +1,563 @@ +# Makefile.in generated by automake 1.9.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 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. + address@hidden@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog INSTALL NEWS compile config.guess config.sub depcomp \ + install-sh missing mkinstalldirs +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno configure.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +SUBDIRS = src doc tests +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ + cd $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ + check-am clean clean-generic clean-recursive ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ + dist-tarZ dist-zip distcheck distclean distclean-generic \ + distclean-recursive distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-info-am + + +#distclean-local: +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/NEWS b/libatomic_ops-1.2/NEWS new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libatomic_ops-1.2/NEWS @@ -0,0 +1 @@ + diff --git a/libatomic_ops-1.2/README b/libatomic_ops-1.2/README new file mode 100644 index 0000000..81aa8b7 --- /dev/null +++ b/libatomic_ops-1.2/README @@ -0,0 +1,13 @@ +This package provides semi-portable access to hardware provided +atomic memory operations. These might allow you to write code: + +- That does more interesting things in signal handlers. +- Makes more effective use of multiprocessors by allowing you to write + clever lock-free code. Note that such code is very difficult to get + right, and will unavoidably be less portable than lock-based code. It + ia also not always faster than lock-based code. But it may occasionally + be a large performance win. +- To experiment with new and much better thread programming paradigms, etc. + +For details and licensing restrictions see the files in the doc +subdirectory. diff --git a/libatomic_ops-1.2/aclocal.m4 b/libatomic_ops-1.2/aclocal.m4 new file mode 100644 index 0000000..2cfa0ef --- /dev/null +++ b/libatomic_ops-1.2/aclocal.m4 @@ -0,0 +1,1076 @@ +# generated automatically by aclocal 1.9.3 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# -*- Autoconf -*- +# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +# Generated from amversion.in; do not edit by hand. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.3])]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# serial 3 + +# Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +]) + +# AM_AUX_DIR_EXPAND + +# Copyright (C) 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 6 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# serial 7 -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 7 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 11 + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright (C) 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# -*- Autoconf -*- +# Copyright (C) 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# -*- Autoconf -*- + + +# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. + +# Copyright (C) 2003, 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright (C) 2001, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/libatomic_ops-1.2/compile b/libatomic_ops-1.2/compile new file mode 100755 index 0000000..1b1d232 --- /dev/null +++ b/libatomic_ops-1.2/compile @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/libatomic_ops-1.2/config.guess b/libatomic_ops-1.2/config.guess new file mode 100755 index 0000000..7924ac0 --- /dev/null +++ b/libatomic_ops-1.2/config.guess @@ -0,0 +1,1500 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-06-06' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +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. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + 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 ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (address@hidden 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # 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 + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # address@hidden (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[345]*) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[345]*) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 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 + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + 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 | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + 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-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + 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 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + 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 + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /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_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*: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 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From address@hidden + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From address@hidden + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From address@hidden + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libatomic_ops-1.2/config.sub b/libatomic_ops-1.2/config.sub new file mode 100755 index 0000000..70584b0 --- /dev/null +++ b/libatomic_ops-1.2/config.sub @@ -0,0 +1,1608 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2006-06-06' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# 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* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + 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/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -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* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libatomic_ops-1.2/configure b/libatomic_ops-1.2/configure new file mode 100755 index 0000000..2884582 --- /dev/null +++ b/libatomic_ops-1.2/configure @@ -0,0 +1,5609 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for libatomic_ops 1.2. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='libatomic_ops' +PACKAGE_TARNAME='libatomic_ops' +PACKAGE_VERSION='1.2' +PACKAGE_STRING='libatomic_ops 1.2' +PACKAGE_BUGREPORT='' + +ac_unique_file="src/atomic_ops.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar RANLIB ac_ct_RANLIB CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CCAS CCASFLAGS CPP EGREP PICFLAG NEED_ASM_TRUE NEED_ASM_FALSE LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CCAS_set=${CCAS+set} +ac_env_CCAS_value=$CCAS +ac_cv_env_CCAS_set=${CCAS+set} +ac_cv_env_CCAS_value=$CCAS +ac_env_CCASFLAGS_set=${CCASFLAGS+set} +ac_env_CCASFLAGS_value=$CCASFLAGS +ac_cv_env_CCASFLAGS_set=${CCASFLAGS+set} +ac_cv_env_CCASFLAGS_value=$CCASFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libatomic_ops 1.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libatomic_ops 1.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +libatomic_ops configure 1.2 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libatomic_ops $as_me 1.2, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +am__api_version="1.9" +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libatomic_ops' + VERSION='1.2' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + ac_config_headers="$ac_config_headers src/config.h" + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + + +# Checks for functions. + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ---------------------------------------- ## +## Report this to the libatomic_ops lists. ## +## ---------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +echo "$as_me:$LINENO: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !STDC_HEADERS && !HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#if !HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# if !HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# if HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + exit (1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + exit (1); + if (write (fd, data, pagesize) != pagesize) + exit (1); + close (fd); + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + exit (1); + data2 = (char *) malloc (2 * pagesize); + if (!data2) + exit (1); + data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit (1); + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + exit (1); + if (read (fd, data3, pagesize) != pagesize) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit (1); + close (fd); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MMAP 1 +_ACEOF + +fi +rm -f conftest.mmap + + +# Checks for header files. +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# AC_CHECK_HEADERS([ ]) + +# Determine PIC flag, adjust default CFLAGS +need_asm=false +PICFLAG= +echo "$as_me:$LINENO: checking Determining PIC compiler flag" >&5 +echo $ECHO_N "checking Determining PIC compiler flag... $ECHO_C" >&6 +if test "$GCC" = yes; then + echo "$as_me:$LINENO: result: -fPIC" >&5 +echo "${ECHO_T}-fPIC" >&6 + PICFLAG=-fPIC +else + case "$host" in + *-*-hpux*) + echo "$as_me:$LINENO: result: \"+Z\"" >&5 +echo "${ECHO_T}\"+Z\"" >&6 + PICFLAG="+Z" + if test "$GCC" != yes; then + CFLAGS="$CFLAGS +O2 -mt" + fi + ;; + *-*-solaris*) + echo "$as_me:$LINENO: result: -Kpic" >&5 +echo "${ECHO_T}-Kpic" >&6 + PICFLAG=-Kpic + if test "$GCC" != yes; then + CFLAGS="$CFLAGS -O" + need_asm=true + fi + ;; + *-*-linux*) + echo "$as_me:$LINENO: result: -fPIC" >&5 +echo "${ECHO_T}-fPIC" >&6 + PICFLAG=-fPIC + # Any Linux compiler had better be gcc compatible. + ;; + *) + echo "$as_me:$LINENO: result: \"\"" >&5 +echo "${ECHO_T}\"\"" >&6 + ;; + esac +fi +CFLAGS="$CFLAGS -DNDEBUG" + + + + + + +if test x$need_asm = xtrue; then + NEED_ASM_TRUE= + NEED_ASM_FALSE='#' +else + NEED_ASM_TRUE='#' + NEED_ASM_FALSE= +fi + + + ac_config_files="$ac_config_files Makefile src/Makefile src/atomic_ops/Makefile src/atomic_ops/sysdeps/Makefile doc/Makefile tests/Makefile" + + ac_config_commands="$ac_config_commands default" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:address@hidden@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${NEED_ASM_TRUE}" && test -z "${NEED_ASM_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"NEED_ASM\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"NEED_ASM\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by libatomic_ops $as_me 1.2, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +libatomic_ops config.status 1.2 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +PICFLAG=${PICFLAG} +CC=${CC} +DEFS=${DEFS} + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/atomic_ops/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/atomic_ops/Makefile" ;; + "src/atomic_ops/sysdeps/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/atomic_ops/sysdeps/Makefile" ;; + "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@mkdir_p@,$mkdir_p,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@AMTAR@,$AMTAR,;t t +s,@am__tar@,$am__tar,;t t +s,@am__untar@,$am__untar,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@CCAS@,$CCAS,;t t +s,@CCASFLAGS@,$CCASFLAGS,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@PICFLAG@,$PICFLAG,;t t +s,@NEED_ASM_TRUE@,$NEED_ASM_TRUE,;t t +s,@NEED_ASM_FALSE@,$NEED_ASM_FALSE,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + default ) ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/libatomic_ops-1.2/configure.ac b/libatomic_ops-1.2/configure.ac new file mode 100644 index 0000000..3d0efe7 --- /dev/null +++ b/libatomic_ops-1.2/configure.ac @@ -0,0 +1,66 @@ +# Process this file with autoconf to produce a configure script. +AC_INIT([libatomic_ops],[1.2]) +AC_CANONICAL_TARGET([]) +AC_CONFIG_SRCDIR(src/atomic_ops.c) +AM_INIT_AUTOMAKE +AC_PROG_RANLIB + +AM_CONFIG_HEADER(src/config.h) + +# Checks for programs. +AC_PROG_CC +AM_PROG_AS + +# Checks for functions. +AC_FUNC_MMAP + +# Checks for header files. +AC_HEADER_STDC +# AC_CHECK_HEADERS([ ]) + +# Determine PIC flag, adjust default CFLAGS +need_asm=false +PICFLAG= +AC_MSG_CHECKING(Determining PIC compiler flag) +if test "$GCC" = yes; then + AC_MSG_RESULT(-fPIC) + PICFLAG=-fPIC +else + case "$host" in + *-*-hpux*) + AC_MSG_RESULT("+Z") + PICFLAG="+Z" + if test "$GCC" != yes; then + CFLAGS="$CFLAGS +O2 -mt" + fi + ;; + *-*-solaris*) + AC_MSG_RESULT(-Kpic) + PICFLAG=-Kpic + if test "$GCC" != yes; then + CFLAGS="$CFLAGS -O" + need_asm=true + fi + ;; + *-*-linux*) + AC_MSG_RESULT(-fPIC) + PICFLAG=-fPIC + # Any Linux compiler had better be gcc compatible. + ;; + *) + AC_MSG_RESULT("") + ;; + esac +fi +CFLAGS="$CFLAGS -DNDEBUG" + +AC_SUBST(PICFLAG) +AC_SUBST(DEFS) + +AM_CONDITIONAL(NEED_ASM, test x$need_asm = xtrue) + +AC_CONFIG_FILES([Makefile src/Makefile src/atomic_ops/Makefile src/atomic_ops/sysdeps/Makefile doc/Makefile tests/Makefile]) +AC_CONFIG_COMMANDS([default],[[]],[[PICFLAG=${PICFLAG} +CC=${CC} +DEFS=${DEFS}]]) +AC_OUTPUT diff --git a/libatomic_ops-1.2/depcomp b/libatomic_ops-1.2/depcomp new file mode 100755 index 0000000..04701da --- /dev/null +++ b/libatomic_ops-1.2/depcomp @@ -0,0 +1,530 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-07-09.11 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/libatomic_ops-1.2/doc/COPYING b/libatomic_ops-1.2/doc/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/libatomic_ops-1.2/doc/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libatomic_ops-1.2/doc/CVS/Entries b/libatomic_ops-1.2/doc/CVS/Entries new file mode 100644 index 0000000..9d31b42 --- /dev/null +++ b/libatomic_ops-1.2/doc/CVS/Entries @@ -0,0 +1,9 @@ +/COPYING/1.1/Tue Jul 11 22:55:09 2006// +/LICENSING.txt/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.am/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.in/1.1/Tue Jul 11 22:55:09 2006// +/README_malloc.txt/1.1/Tue Jul 11 22:55:09 2006// +/README_stack.txt/1.1/Tue Jul 11 22:55:09 2006// +/README_win32.txt/1.1/Tue Jul 11 22:55:09 2006// +/README.txt/1.3/Fri Jan 4 00:15:10 2008// +D diff --git a/libatomic_ops-1.2/doc/CVS/Repository b/libatomic_ops-1.2/doc/CVS/Repository new file mode 100644 index 0000000..67925f2 --- /dev/null +++ b/libatomic_ops-1.2/doc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/doc diff --git a/libatomic_ops-1.2/doc/CVS/Root b/libatomic_ops-1.2/doc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/doc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/doc/LICENSING.txt b/libatomic_ops-1.2/doc/LICENSING.txt new file mode 100644 index 0000000..1ae0e93 --- /dev/null +++ b/libatomic_ops-1.2/doc/LICENSING.txt @@ -0,0 +1,64 @@ +Our intent is to make it easy to use libatomic_ops, in +both free and proprietary software. Hence most code that we expect to be +linked into a client application is covered by an MIT-style license. + +A few library routines are covered by the GNU General Public License. +These are put into a separate library, libatomic_ops_gpl.a . + +The low-level part of the library is mostly covered by the following +license: + +---------------------------------------- + +Copyright (c) ... + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------- + +A few files in the sysdeps directory were inherited in part from the +Boehm-Demers-Weiser conservative garbage collector, and are covered by +its license, which is similar in spirit: + +-------------------------------- + +Copyright (c) ... + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +---------------------------------- + +A few files are covered by the GNU General Public License. (See file +"COPYING".) This applies only to test code, sample applications, +and the libatomic_ops_gpl portion of the library. +Thus libatomic_ops_gpl should generally not be linked into proprietary code. +(This distinction was motivated by patent considerations.) + +It is possible that the license of the GPL pieces may be changed for +future versions to make them more consistent with the rest of the package. +If you submit patches, and have strong preferences about licensing, please +express them. + diff --git a/libatomic_ops-1.2/doc/Makefile.am b/libatomic_ops-1.2/doc/Makefile.am new file mode 100644 index 0000000..ce212d0 --- /dev/null +++ b/libatomic_ops-1.2/doc/Makefile.am @@ -0,0 +1,3 @@ +# installed documentation +# +dist_pkgdata_DATA=COPYING LICENSING.txt README.txt COPYING README_stack.txt README_malloc.txt README_win32.txt diff --git a/libatomic_ops-1.2/doc/Makefile.in b/libatomic_ops-1.2/doc/Makefile.in new file mode 100644 index 0000000..f0eb954 --- /dev/null +++ b/libatomic_ops-1.2/doc/Makefile.in @@ -0,0 +1,329 @@ +# Makefile.in generated by automake 1.9.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 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. + address@hidden@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = doc +DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in COPYING +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgdatadir)" +dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_pkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ + +# installed documentation +# +dist_pkgdata_DATA = COPYING LICENSING.txt README.txt COPYING README_stack.txt README_malloc.txt README_win32.txt +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-dist_pkgdataDATA: $(dist_pkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" + @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done + +uninstall-dist_pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgdatadir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_pkgdataDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_pkgdataDATA uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dist_pkgdataDATA install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_pkgdataDATA uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/doc/README.txt b/libatomic_ops-1.2/doc/README.txt new file mode 100644 index 0000000..e7c2f0d --- /dev/null +++ b/libatomic_ops-1.2/doc/README.txt @@ -0,0 +1,245 @@ +Usage: + +0) If possible, do this on a multiprocessor, especially if you are planning +on modifying or enhancing the package. It will work on a uniprocessor, +but the tests are much more likely to pass in the presence of serious problems. + +1) Type ./configure --prefix=; make; make check +in the directory containing unpacked source. The usual GNU build machinery +is used, except that only static, but position-independent, libraries +are normally built. On Windows, read README_win32.txt instead. + +2) Applications should include atomic_ops.h. Nearly all operations +are implemented by header files included from it. It is sometimes +necessary, and always recommended to also link against libatomic_ops.a. +To use the almost non-blocking stack or malloc implementations, +see the corresponding README files, and also link against libatomic_gpl.a +before linking against libatomic_ops.a. + +OVERVIEW: +Atomic_ops.h defines a large collection of operations, each one of which is +a combination of an (optional) atomic memory operation, and a memory barrier. +Also defines associated feature-test macros to determine whether a particular +operation is available on the current target hardware (either directly or +by synthesis). This is an attempt to replace various existing files with +similar goals, since they usually do not handle differences in memory +barrier styles with sufficient generality. + +If this is included after defining AO_REQUIRE_CAS, then the package +will make an attempt to emulate compare-and-swap in a way that (at least +on Linux) should still be async-signal-safe. As a result, most other +atomic operations will then be defined using the compare-and-swap +emulation. This emulation is slow, since it needs to disable signals. +And it needs to block in case of contention. If you care about performance +on a platform that can't directly provide compare-and-swap, there are +probably better alternatives. But this allows easy ports to some such +platforms (e.g. PA_RISC). The option is ignored if compare-and-swap +can be implemented directly. + +If atomic_ops.h is included after defining AO_USE_PTHREAD_DEFS, then all +atomic operations will be emulated with pthread locking. This is NOT +async-signal-safe. And it is slow. It is intended primarily for debugging +of the atomic_ops package itself. + +Note that the implementation reflects our understanding of real processor +behavior. This occasionally diverges from the documented behavior. (E.g. +the documented X86 behavior seems to be weak enough that it is impractical +to use. Current real implementations appear to be much better behaved.) +We of course are in no position to guarantee that future processors +(even HPs) will continue to behave this way, though we hope they will. + +This is a work in progress. Corrections/additions for other platforms are +greatly appreciated. It passes rudimentary tests on X86, Itanium, and +Alpha. + +OPERATIONS: + +Most operations operate on values of type AO_t, which are unsigned integers +whose size matches that of pointers on the given architecture. Exceptions +are: + +- AO_test_and_set operates on AO_TS_t, which is whatever size the hardware +supports with good performance. In some cases this is the length of a cache +line. In some cases it is a byte. In many cases it is equivalent to AO_t. + +- A few operations are implemented on smaller or larger size integers. +Such operations are indicated by the appropriate prefix: + +AO_char_... Operates on unsigned char values. +AO_short_... Operates on unsigned short values. +AO_int_... Operates on unsigned int values. + +(Currently a very limited selection of these is implemented. We're +working on it.) + +The defined operations are all of the form AO_[_](). + +The component specifies an atomic memory operation. It may be +one of the following, where the corresponding argument and result types +are also specified: + +void nop() + No atomic operation. The barrier may still be useful. +AO_t load(volatile AO_t * addr) + Atomic load of *addr. +void store(volatile AO_t * addr, AO_t new_val) + Atomically store new_val to *addr. +AO_t fetch_and_add(volatile AO_t *addr, AO_t incr) + Atomically add incr to *addr, and return the original value of *addr. +AO_t fetch_and_add1(volatile AO_t *addr) + Equivalent to AO_fetch_and_add(addr, 1). +AO_t fetch_and_sub1(volatile AO_t *addr) + Equivalent to AO_fetch_and_add(addr, (AO_t)(-1)). +void or(volatile AO_t *addr, AO_t incr) + Atomically or incr into *addr. +int compare_and_swap(volatile AO_t * addr, AO_t old_val, AO_t new_val) + Atomically compare *addr to old_val, and replace *addr by new_val + if the first comparison succeeds. Returns nonzero if the comparison + succeeded and *addr was updated. +AO_TS_VAL_t test_and_set(volatile AO_TS_t * addr) + Atomically read the binary value at *addr, and set it. AO_TS_VAL_t + is an enumeration type which includes the two values AO_TS_SET and + and AO_TS_CLEAR. An AO_TS_t location is capable of holding an + AO_TS_VAL_t, but may be much larger, as dictated by hardware + constraints. Test_and_set logically sets the value to AO_TS_SET. + It may be reset to AO_TS_CLEAR with the AO_CLEAR(AO_TS_t *) macro. + AO_TS_t locations should be initialized to AO_TS_INITIALIZER. + The values of AO_TS_SET and AO_TS_CLEAR are hardware dependent. + (On PA-RISC, AO_TS_SET is zero!) + +Test_and_set is a more limited version of compare_and_swap. Its only +advantage is that it is more easily implementable on some hardware. It +should thus be used if only binary test-and-set functionality is needed. + +If available, we also provide compare_and_swap operations that operate +on wider values. Since standard data types for double width values +may not be available, these explicitly take pairs of arguments for the +new and/or old value. Unfortunately, there are two common variants, +neither of which can easily and efficiently emulate the other. +The first performs a comparison against the entire value being replaced, +where the second replaces a double-width replacement, but performs +a single-width comparison: + +int compare_double_and_swap_double(volatile AO_double_t * addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2); + +int compare_and_swap_double(volatile AO_double_t * addr, + AO_t old_val1, + AO_t new_val1, AO_t new_val2); + +where AO_double_t is a structure containing AO_val1 and AO_val2 fields, +both of type AO_t. For compare_and_swap_double, we compare against +the val1 field. AO_double_t exists only if AO_HAVE_double_t +is defined. + +ORDERING CONSTRAINTS: + +Each operation name also includes a suffix that specifies the associated +ordering semantics. The ordering constraint limits reordering of this +operation with repsect to other atomic operations and ordinary memory +references. The current implementation assumes that all memory references +are to ordinary cacheable memory; the ordering guarantee is with respect +to other threads or processes, not I/O devices. (Whether or not this +distinction is important is platform-dependent.) + +Ordering suffixes are one of the following: + +: No memory barrier. A plain AO_nop() really does nothing. +_release: Earlier operations must become visible to other threads + before the atomic operation. +_acquire: Later operations must become visible after this operation. +_read: Subsequent reads must become visible after reads included in + the atomic operation or preceding it. Rarely useful for clients? +_write: Earlier writes become visible before writes during or after + the atomic operation. Rarely useful for clients? +_full: Ordered with respect to both earlier and later memops. + AO_store_full or AO_nop_full are the normal ways to force a store + to be ordered with respect to a later load. +_release_write: Ordered with respect to earlier writes. This is + normally implemented as either a _write or _release + barrier. +_dd_acquire_read: Ordered with respect to later reads that are data + dependent on this one. This is needed on + a pointer read, which is later dereferenced to read a + second value, with the expectation that the second + read is ordered after the first one. On most architectures, + this is equivalent to no barrier. (This is very + hard to define precisely. It should probably be avoided. + A major problem is that optimizers tend to try to + eliminate dependencies from the generated code, since + dependencies force the hardware to execute the code + serially.) +_release_read: Ordered with respect to earlier reads. Useful for + implementing read locks. Can be implemented as _release, + but not as _read, since _read groups the current operation + with the earlier ones. + +We assume that if a store is data-dependent on an a previous load, then +the two are always implicitly ordered. + +It is possible to test whether AO_ is available on the +current platform by checking whether AO_HAVE__ is defined +as a macro. + +Note that we generally don't implement operations that are either +meaningless (e.g. AO_nop_acquire, AO_nop_release) or which appear to +have no clear use (e.g. AO_load_release, AO_store_acquire, AO_load_write, +AO_store_read). On some platforms (e.g. PA-RISC) many operations +will remain undefined unless AO_REQUIRE_CAS is defined before including +the package. + +When typed in the package build directory, the following command +will print operations that are unimplemented on the platform: + +make test_atomic; ./test_atomic + +The following command generates a file "list_atomic.i" containing the +macro expansions of all implemented operations on the platform: + +make list_atomic.i + +Future directions: + +It currently appears that something roughly analogous to this is very likely +to become part of the C++0x standard. That effort has pointed out a number +of issues that we expect to address there. Since some of the solutions +really require compiler support, they may not be completely addressed here. + +Known issues include: + +We should be more precise in defining the semantics of the ordering +constraints, and if and how we can guarantee sequential consistency. + +Dd_acquire_read is very hard or impossible to define in a way that cannot +be invalidated by reasonably standard compiler transformations. + +There is probably no good reason to provide operations on standard +integer types, since those may have the wrong alignment constraints. + + +Example: + +If you want to initialize an object, and then "publish" a pointer to it +in a global location p, such that other threads reading the new value of +p are guaranteed to see an initialized object, it suffices to use +AO_release_write(p, ...) to write the pointer to the object, and to +retrieve it in other threads with AO_acquire_read(p). + +Platform notes: + +All X86: We quietly assume 486 or better. + +Windows: +Currently AO_REQUIRE_CAS is not supported. + +Microsoft compilers: +Define AO_ASSUME_WINDOWS98 to get access to hardware compare-and-swap +functionality. This relies on the InterlockedCompareExchange() function +which was apparently not supported in Windows95. (There may be a better +way to get access to this.) Currently only X86(32 bit) is supported for +Windows. + +Gcc on x86: +Define AO_USE_PENTIUM4_INSTRS to use the Pentium 4 mfence instruction. +Currently this is appears to be of marginal benefit. diff --git a/libatomic_ops-1.2/doc/README_malloc.txt b/libatomic_ops-1.2/doc/README_malloc.txt new file mode 100644 index 0000000..680b3e2 --- /dev/null +++ b/libatomic_ops-1.2/doc/README_malloc.txt @@ -0,0 +1,57 @@ +The libatomic_ops_gpl includes a simple almost-lock-free malloc implementation. + +This is intended as a safe way to allocate memory from a signal handler, +or to allocate memory in the context of a library that does not know what +thread library it will be used with. In either case locking is impossible. + +Note that the operations are only guaranteed to be 1-lock-free, i.e. a +single blocked thread will not prevent progress, but multiple blocked +threads may. To safely use these operations in a signal handler, +the handler should be non-reentrant, i.e. it should not be interruptable +by another handler using these operations. Furthermore use outside +of signal handlers in a multithreaded application should be protected +by a lock, so that at most one invocation may be interrupted by a signal. +The header will define the macro "AO_MALLOC_IS_LOCK_FREE" on platforms +on which malloc is completely lock-free, and hence these restrictions +do not apply. + +In the presence of threads, but absence of contention, the time performance +of this package should be as good, or slightly better than, most system +malloc implementations. Its space performance +is theoretically optimal (to within a constant factor), but probably +quite poor in practice. In particular, no attempt is made to +coalesce free small memory blocks. Something like Doug Lea's malloc is +likely to use significantly less memory for complex applications. + +Perfomance on platforms without an efficient compare-and-swap implementation +will be poor. + +This package was not designed for processor-scalability in the face of +high allocation rates. If all threads happen to allocate different-sized +objects, you might get lucky. Otherwise expect contention and false-sharing +problems. If this is an issue, something like Maged Michael's algorithm +(PLDI 2004) would be technically a far better choice. If you are concerned +only with scalablity, and not signal-safety, you might also consider +using Hoard instead. We have seen a factor of 3 to 4 slowdown from the +standard glibc malloc implementation with contention, even when the +performance without contention was faster. (To make the implementation +more scalable, one would need to replicate at least the free list headers, +so that concurrent access is possible without cache conflicts.) + +Unfortunately there is no portable async-signal-safe way to obtain large +chunks of memory from the OS. Based on reading of the source code, +mmap-based allocation appears safe under Linux, and probably BSD variants. +It is probably unsafe for operating systems built on Mach, such as +Apple's Darwin. Without use of mmap, the allocator is +limited to a fixed size, statically preallocated heap (2MB by default), +and will fail to allocate objects above a certain size (just under 64K +by default). Use of mmap to circumvent these limitations requires an +explicit call. + +The entire interface to the AO_malloc package currently consists of: + +#include /* includes atomic_ops.h */ + +void *AO_malloc(size_t sz); +void AO_free(void *p); +void AO_malloc_enable_mmap(void); diff --git a/libatomic_ops-1.2/doc/README_stack.txt b/libatomic_ops-1.2/doc/README_stack.txt new file mode 100644 index 0000000..98ff87c --- /dev/null +++ b/libatomic_ops-1.2/doc/README_stack.txt @@ -0,0 +1,78 @@ +Note that the AO_stack implementation is licensed under the GPL, +unlike the lower level routines. + +The header file atomic_ops_stack.h defines a linked stack abstraction. +Stacks may be accessed by multiple concurrent threads. The implementation +is 1-lock-free, i.e. it will continue to make progress if at most one +thread becomes inactive while operating on the data structure. + +(The implementation can be built to be N-lock-free for any given N. But that +seems to rarely be useful, especially since larger N involve some slowdown.) + +This makes it safe to access these data structures from non-reentrant +signal handlers, provided at most one non-signal-handler thread is +accessing the data structure at once. This latter condition can be +ensured by acquiring an ordinary lock around the non-hndler accesses +to the data structure. + +For details see: + +Hans-J. Boehm, "An Almost Non-Blocking Stack", PODC 2004, +http://portal.acm.org/citation.cfm?doid=1011767.1011774, or +http://www.hpl.hp.com/techreports/2004/HPL-2004-105.html +(This is not exactly the implementation described there, since the +interface was cleaned up in the interim. But it should perform +very similarly.) + +We use a fully lock-free implementation when the underlying hardware +makes that less expensive, i.e. when we have a double-wide compare-and-swap +operation available. (The fully lock-free implementation uses an AO_t- +sized version count, and assumes it does not wrap during the time any +given operation is active. This seems reasonably safe on 32-bit hardware, +and very safe on 64-bit hardware.) If a fully lock-free implementation +is used, the macro AO_STACK_IS_LOCK_FREE will be defined. + +The implementation is interesting only because it allows reuse of +existing nodes. This is necessary, for example, to implement a memory +allocator. + +Since we want to leave the precise stack node type up to the client, +we insist only that each stack node contains a link field of type AO_t. +When a new node is pushed on the stack, the push operation expects to be +passed the pointer to this link field, which will then be overwritten by +this link field. Similarly, the pop operation returns a pointer to the +link field of the object that previously was on the top of the stack. + +The cleanest way to use these routines is probably to define the stack node +type with an initial AO_t link field, so that the conversion between the +link-field pointer and the stack element pointer is just a compile-time +cast. But other possibilities exist. (This would be cleaner in C++ with +templates.) + +A stack is represented by an AO_stack_t structure. (This is normally +2 or 3 times the size of a pointer.) It may be statically initialized +by setting it to AO_STACK_INITIALIZER, or dynamically initialized to +an empty stack with AO_stack_init. There are only three operations for +accessing stacks: + +void AO_stack_init(AO_stack_t *list); +void AO_stack_push_release(AO_stack_t *list, AO_t *new_element); +AO_t * AO_stack_pop_acquire(volatile AO_stack_t *list); + +We require that the objects pushed as list elements remain addressable +as long as any push or pop operation are in progress. (It is OK for an object +to be "pop"ped off a stack and "deallocated" with a concurrent "pop" on +the same stack still in progress, but only if "deallocation" leaves the +object addressable. The second "pop" may still read the object, but +the value it reads will not matter.) + +We require that the headers (AO_stack objects) remain allocated and +valid as long as any operations on them are still in-flight. + +We also provide macros AO_REAL_HEAD_PTR that converts an AO_stack_t +to a pointer to the link field in the next element, and AO_REAL_NEXT_PTR +that converts a link field to a real, dereferencable, pointer to the link field +in the next element. This is intended only for debugging, or to traverse +the list after modification has ceased. There is otherwise no guarantee that +walking a stack using this macro will produce any kind of consistent +picture of the data structure. diff --git a/libatomic_ops-1.2/doc/README_win32.txt b/libatomic_ops-1.2/doc/README_win32.txt new file mode 100644 index 0000000..0fe6f88 --- /dev/null +++ b/libatomic_ops-1.2/doc/README_win32.txt @@ -0,0 +1,28 @@ +Most of the atomic_ops functionality is available under Win32 with +the Microsoft tools, but the build process currently is considerably more +primitive than on Linux/Unix platforms. + +To build: + +1) Go to the src directory in the distribution. +2) Make sure the Microsoft command-line tools (e.g. nmake) are available. +3) Run "nmake -f Makefile.msft". This should run some tests, which +may print warnings about the types of the "Interlocked" functions. +I haven't been able to make all versions of VC++ happy. If you know +how to, please send a patch. +4) To compile applications, you will need to retain or copy the following +pieces from the resulting src directory contents: + "atomic_ops.h" - Header file defining low-level primitives. This + includes files from: + "atomic_ops"- Subdirectory containing implementation header files. + "atomic_ops_stack.h" - Header file describing almost lock-free stack. + "atomic_ops_malloc.h" - Header file describing almost lock-free malloc. + "libatomic_ops_gpl.lib" - Library containing implementation of the + above two. The atomic_ops.h implementation + is entirely in the header files in Win32. + +Most clients of atomic_ops.h will need to define AO_ASSUME_WINDOWS98 before +including it. Compare_and_swap is otherwise not available. + +Note that the library is covered by the GNU General Public License, while +the top 2 of these pieces allow use in proprietary code. diff --git a/libatomic_ops-1.2/install-sh b/libatomic_ops-1.2/install-sh new file mode 100755 index 0000000..4d4a951 --- /dev/null +++ b/libatomic_ops-1.2/install-sh @@ -0,0 +1,323 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2005-05-14.22 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # Otherwise, the last argument is the destination. Remove it from address@hidden + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done + break;; + esac +done + +if test -z "$1"; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set x `echo "$dstdir" | sed -e 's@/@address@hidden' -e 'address@hidden@/@'` + shift + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $cpprog "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit 1; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit 0 +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/libatomic_ops-1.2/missing b/libatomic_ops-1.2/missing new file mode 100755 index 0000000..894e786 --- /dev/null +++ b/libatomic_ops-1.2/missing @@ -0,0 +1,360 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2005-06-08.21 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/address@hidden/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/libatomic_ops-1.2/mkinstalldirs b/libatomic_ops-1.2/mkinstalldirs new file mode 100755 index 0000000..259dbfc --- /dev/null +++ b/libatomic_ops-1.2/mkinstalldirs @@ -0,0 +1,158 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2005-06-29.22 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp=$pathcomp/ + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/libatomic_ops-1.2/src/CVS/Entries b/libatomic_ops-1.2/src/CVS/Entries new file mode 100644 index 0000000..72ec033 --- /dev/null +++ b/libatomic_ops-1.2/src/CVS/Entries @@ -0,0 +1,12 @@ +D/atomic_ops//// +/Makefile.am/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.in/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.msft/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops.c/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops_malloc.c/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops_malloc.h/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops_stack.c/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops_stack.h/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops_sysdeps.S/1.1/Tue Jul 11 22:55:09 2006// +/config.h.in/1.1/Tue Jul 11 22:55:09 2006// +/atomic_ops.h/1.4/Mon Jul 9 23:21:07 2007// diff --git a/libatomic_ops-1.2/src/CVS/Repository b/libatomic_ops-1.2/src/CVS/Repository new file mode 100644 index 0000000..7f1bcad --- /dev/null +++ b/libatomic_ops-1.2/src/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src diff --git a/libatomic_ops-1.2/src/CVS/Root b/libatomic_ops-1.2/src/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/Makefile.am b/libatomic_ops-1.2/src/Makefile.am new file mode 100644 index 0000000..7ca41ff --- /dev/null +++ b/libatomic_ops-1.2/src/Makefile.am @@ -0,0 +1,16 @@ +SUBDIRS=atomic_ops + address@hidden@ + +include_HEADERS=atomic_ops.h atomic_ops_stack.h atomic_ops_malloc.h +lib_LIBRARIES = libatomic_ops.a libatomic_ops_gpl.a +if NEED_ASM +libatomic_ops_a_SOURCES = atomic_ops.c atomic_ops_sysdeps.S +else +libatomic_ops_a_SOURCES = atomic_ops.c +endif + +libatomic_ops_gpl_a_SOURCES = atomic_ops_stack.c atomic_ops_malloc.c + +EXTRA_DIST=Makefile.msft + diff --git a/libatomic_ops-1.2/src/Makefile.in b/libatomic_ops-1.2/src/Makefile.in new file mode 100644 index 0000000..81e8023 --- /dev/null +++ b/libatomic_ops-1.2/src/Makefile.in @@ -0,0 +1,597 @@ +# Makefile.in generated by automake 1.9.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 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. + address@hidden@ + + +SOURCES = $(libatomic_ops_a_SOURCES) $(libatomic_ops_gpl_a_SOURCES) + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = src +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +libLIBRARIES_INSTALL = $(INSTALL_DATA) +LIBRARIES = $(lib_LIBRARIES) +AR = ar +ARFLAGS = cru +libatomic_ops_a_AR = $(AR) $(ARFLAGS) +libatomic_ops_a_LIBADD = +am__libatomic_ops_a_SOURCES_DIST = atomic_ops.c atomic_ops_sysdeps.S address@hidden@am_libatomic_ops_a_OBJECTS = atomic_ops.$(OBJEXT) address@hidden@am_libatomic_ops_a_OBJECTS = atomic_ops.$(OBJEXT) \ address@hidden@ atomic_ops_sysdeps.$(OBJEXT) +libatomic_ops_a_OBJECTS = $(am_libatomic_ops_a_OBJECTS) +libatomic_ops_gpl_a_AR = $(AR) $(ARFLAGS) +libatomic_ops_gpl_a_LIBADD = +am_libatomic_ops_gpl_a_OBJECTS = atomic_ops_stack.$(OBJEXT) \ + atomic_ops_malloc.$(OBJEXT) +libatomic_ops_gpl_a_OBJECTS = $(am_libatomic_ops_gpl_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libatomic_ops_a_SOURCES) $(libatomic_ops_gpl_a_SOURCES) +DIST_SOURCES = $(am__libatomic_ops_a_SOURCES_DIST) \ + $(libatomic_ops_gpl_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +includeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +SUBDIRS = atomic_ops +AM_CFLAGS = @PICFLAG@ +include_HEADERS = atomic_ops.h atomic_ops_stack.h atomic_ops_malloc.h +lib_LIBRARIES = libatomic_ops.a libatomic_ops_gpl.a address@hidden@libatomic_ops_a_SOURCES = atomic_ops.c address@hidden@libatomic_ops_a_SOURCES = atomic_ops.c atomic_ops_sysdeps.S +libatomic_ops_gpl_a_SOURCES = atomic_ops_stack.c atomic_ops_malloc.c +EXTRA_DIST = Makefile.msft +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .S .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + p=$(am__strip_dir) \ + echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ + $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +libatomic_ops.a: $(libatomic_ops_a_OBJECTS) $(libatomic_ops_a_DEPENDENCIES) + -rm -f libatomic_ops.a + $(libatomic_ops_a_AR) libatomic_ops.a $(libatomic_ops_a_OBJECTS) $(libatomic_ops_a_LIBADD) + $(RANLIB) libatomic_ops.a +libatomic_ops_gpl.a: $(libatomic_ops_gpl_a_OBJECTS) $(libatomic_ops_gpl_a_DEPENDENCIES) + -rm -f libatomic_ops_gpl.a + $(libatomic_ops_gpl_a_AR) libatomic_ops_gpl.a $(libatomic_ops_gpl_a_OBJECTS) $(libatomic_ops_gpl_a_LIBADD) + $(RANLIB) libatomic_ops_gpl.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ + +.S.o: + $(CCASCOMPILE) -c $< + +.S.obj: + $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` + +.c.o: address@hidden@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ address@hidden@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(COMPILE) -c $< + +.c.obj: address@hidden@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ address@hidden@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +uninstall-info-am: +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ + $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ + rm -f "$(DESTDIR)$(includedir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LIBRARIES) $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS + +install-exec-am: install-libLIBRARIES + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-info-am \ + uninstall-libLIBRARIES + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-libLIBRARIES clean-recursive ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-hdr distclean-recursive distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-includeHEADERS install-info install-info-am \ + install-libLIBRARIES install-man install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-info-am uninstall-libLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/src/Makefile.msft b/libatomic_ops-1.2/src/Makefile.msft new file mode 100644 index 0000000..5b93d27 --- /dev/null +++ b/libatomic_ops-1.2/src/Makefile.msft @@ -0,0 +1,45 @@ +# +# Copyright (c) 2003-2005 Hewlett-Packard Developlment Company, L.P. +# +# The really trivial win32/VC++ Makefile. Note that atomic_ops.c isn't useful. +# And we rely on a pre-built test_atomic_include.h and generalize-small.h, +# since we can't rely on sed. +# Win32 clients only need to include the header files. +# To install, copy atomic_ops.h and the atomic_ops/... tree to your favorite +# include directory. + +#MY_CPU=X86 +#CPU=$(MY_CPU) +#!include + +LIB_OBJS=atomic_ops_stack.obj atomic_ops_malloc.obj + +all: check + +atomic_ops_stack.obj: + cl -O2 -c -DAO_ASSUME_WINDOWS98 atomic_ops_stack.c + +atomic_ops_malloc.obj: + cl -O2 -c -DAO_ASSUME_WINDOWS98 atomic_ops_malloc.c + +test_atomic: ..\tests\test_atomic.c ..\tests\test_atomic_include.h + cl -O2 -I. -DAO_ASSUME_WINDOWS98 ..\tests\test_atomic.c -o test_atomic + +test_atomic_w95: ..\tests\test_atomic.c ..\tests\test_atomic_include.h + cl -O2 -I. ..\tests\test_atomic.c -o test_atomic_w95 + +test_malloc: ..\tests\test_malloc.c ..\tests\test_atomic_include.h \ + libatomic_ops_gpl.lib + cl -O2 -DAO_ASSUME_WINDOWS98 -I. ..\tests\test_malloc.c -o test_malloc libatomic_ops_gpl.lib + +libatomic_ops_gpl.lib: $(LIB_OBJS) + lib /MACHINE:i386 /out:libatomic_ops_gpl.lib $(LIB_OBJS) + +check: test_atomic test_atomic_w95 test_malloc + echo The following will print lots of \"Missing ...\" messages. + test_atomic_w95 + echo The following will print some \"Missing ...\" messages. + test_atomic + test_malloc + + diff --git a/libatomic_ops-1.2/src/atomic_ops.c b/libatomic_ops-1.2/src/atomic_ops.c new file mode 100644 index 0000000..f01b8d2 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops.c @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Initialized data and out-of-line functions to support atomic_ops.h + * go here. Currently this is needed only for pthread-based atomics + * emulation, or for compare-and-swap emulation. + * Pthreads emulation isn't useful on a native Windows platform, and + * cas emulation is not needed. Thus we skip this on Windows. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + +#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__BORLANDC__) + +#undef AO_REQUIRE_CAS + +#include +#include +#ifdef _HPUX_SOURCE +# include +#else +# include +#endif +#include "atomic_ops.h" /* Without cas emulation! */ + +#ifndef AO_HAVE_double_t +# include "atomic_ops/sysdeps/standard_ao_double_t.h" +#endif + +/* + * Lock for pthreads-based implementation. + */ + +pthread_mutex_t AO_pt_lock = PTHREAD_MUTEX_INITIALIZER; + +/* + * Out of line compare-and-swap emulation based on test and set. + * + * We use a small table of locks for different compare_and_swap locations. + * Before we update perform a compare-and-swap, we grap the corresponding + * lock. Different locations may hash to the same lock, but since we + * never acquire more than one lock at a time, this can't deadlock. + * We explicitly disable signals while we perform this operation. + * + * FIXME: We should probably also suppport emulation based on Lamport + * locks, since we may not have test_and_set either. + */ +#define AO_HASH_SIZE 16 + +#define AO_HASH(x) (((unsigned long)(x) >> 12) & (AO_HASH_SIZE-1)) + +AO_TS_t AO_locks[AO_HASH_SIZE] = { + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, + AO_TS_INITIALIZER, AO_TS_INITIALIZER, +}; + +static AO_T dummy = 1; + +/* Spin for 2**n units. */ +void AO_spin(int n) +{ + int i; + AO_T j = AO_load(&dummy); + + for (i = 0; i < (2 << n); ++i) + { + j *= 5; + j -= 4; + } + AO_store(&dummy, j); +} + +void AO_pause(int n) +{ + if (n < 12) + AO_spin(n); + else + { + struct timeval tv; + + /* Short async-signal-safe sleep. */ + tv.tv_sec = 0; + tv.tv_usec = (n > 28? 100000 : (1 << (n - 12))); + select(0, 0, 0, 0, &tv); + } +} + +static void lock_ool(volatile AO_TS_t *l) +{ + int i = 0; + + while (AO_test_and_set_acquire(l) == AO_TS_SET) + AO_pause(++i); +} + +AO_INLINE void lock(volatile AO_TS_t *l) +{ + if (AO_test_and_set_acquire(l) == AO_TS_SET) + lock_ool(l); +} + +AO_INLINE void unlock(volatile AO_TS_t *l) +{ + AO_CLEAR(l); +} + +static sigset_t all_sigs; + +static volatile AO_t initialized = 0; + +static volatile AO_TS_t init_lock = AO_TS_INITIALIZER; + +int AO_compare_and_swap_emulation(volatile AO_t *addr, AO_t old, + AO_t new_val) +{ + AO_TS_t *my_lock = AO_locks + AO_HASH(addr); + sigset_t old_sigs; + int result; + + if (!AO_load_acquire(&initialized)) + { + lock(&init_lock); + if (!initialized) sigfillset(&all_sigs); + unlock(&init_lock); + AO_store_release(&initialized, 1); + } + sigprocmask(SIG_BLOCK, &all_sigs, &old_sigs); + /* Neither sigprocmask nor pthread_sigmask is 100% */ + /* guaranteed to work here. Sigprocmask is not */ + /* guaranteed be thread safe, and pthread_sigmask */ + /* is not async-signal-safe. Under linuxthreads, */ + /* sigprocmask may block some pthreads-internal */ + /* signals. So long as we do that for short periods, */ + /* we should be OK. */ + lock(my_lock); + if (*addr == old) + { + *addr = new_val; + result = 1; + } + else + result = 0; + unlock(my_lock); + sigprocmask(SIG_SETMASK, &old_sigs, NULL); + return result; +} + +int AO_compare_double_and_swap_double_emulation(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + AO_TS_t *my_lock = AO_locks + AO_HASH(addr); + sigset_t old_sigs; + int result; + + if (!AO_load_acquire(&initialized)) + { + lock(&init_lock); + if (!initialized) sigfillset(&all_sigs); + unlock(&init_lock); + AO_store_release(&initialized, 1); + } + sigprocmask(SIG_BLOCK, &all_sigs, &old_sigs); + /* Neither sigprocmask nor pthread_sigmask is 100% */ + /* guaranteed to work here. Sigprocmask is not */ + /* guaranteed be thread safe, and pthread_sigmask */ + /* is not async-signal-safe. Under linuxthreads, */ + /* sigprocmask may block some pthreads-internal */ + /* signals. So long as we do that for short periods, */ + /* we should be OK. */ + lock(my_lock); + if (addr -> AO_val1 == old_val1 && addr -> AO_val2 == old_val2) + { + addr -> AO_val1 = new_val1; + addr -> AO_val2 = new_val2; + result = 1; + } + else + result = 0; + unlock(my_lock); + sigprocmask(SIG_SETMASK, &old_sigs, NULL); + return result; +} + +void AO_store_full_emulation(volatile AO_t *addr, AO_t val) +{ + AO_TS_t *my_lock = AO_locks + AO_HASH(addr); + lock(my_lock); + *addr = val; + unlock(my_lock); +} + +#else /* Non-posix platform */ + +int AO_non_posix_implementation_is_entirely_in_headers; + +#endif diff --git a/libatomic_ops-1.2/src/atomic_ops.h b/libatomic_ops-1.2/src/atomic_ops.h new file mode 100755 index 0000000..ff45bae --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops.h @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef ATOMIC_OPS_H + +#define ATOMIC_OPS_H + +#include +#include + +/* We define various atomic operations on memory in a */ +/* machine-specific way. Unfortunately, this is complicated */ +/* by the fact that these may or may not be combined with */ +/* various memory barriers. Thus the actual operations we */ +/* define have the form AO__, for all */ +/* plausible combinations of and . */ +/* This of course results in a mild combinatorial explosion. */ +/* To deal with it, we try to generate derived */ +/* definitions for as many of the combinations as we can, as */ +/* automatically as possible. */ +/* */ +/* Our assumption throughout is that the programmer will */ +/* specify the least demanding operation and memory barrier */ +/* that will guarantee correctness for the implementation. */ +/* Our job is to find the least expensive way to implement it */ +/* on the applicable hardware. In many cases that will */ +/* involve, for example, a stronger memory barrier, or a */ +/* combination of hardware primitives. */ +/* */ +/* Conventions: */ +/* "plain" atomic operations are not guaranteed to include */ +/* a barrier. The suffix in the name specifies the barrier */ +/* type. Suffixes are: */ +/* _release: Earlier operations may not be delayed past it. */ +/* _acquire: Later operations may not move ahead of it. */ +/* _read: Subsequent reads must follow this operation and */ +/* preceding reads. */ +/* _write: Earlier writes precede both this operation and */ +/* later writes. */ +/* _full: Ordered with respect to both earlier and later memops.*/ +/* _release_write: Ordered with respect to earlier writes. */ +/* _acquire_read: Ordered with repsect to later reads. */ +/* */ +/* Currently we try to define the following atomic memory */ +/* operations, in combination with the above barriers: */ +/* AO_nop */ +/* AO_load */ +/* AO_store */ +/* AO_test_and_set (binary) */ +/* AO_fetch_and_add */ +/* AO_fetch_and_add1 */ +/* AO_fetch_and_sub1 */ +/* AO_or */ +/* AO_compare_and_swap */ +/* */ +/* Note that atomicity guarantees are valid only if both */ +/* readers and writers use AO_ operations to access the */ +/* shared value, while ordering constraints are intended to */ +/* apply all memory operations. If a location can potentially */ +/* be accessed simultaneously from multiple threads, and one of */ +/* those accesses may be a write access, then all such */ +/* accesses to that location should be through AO_ primitives. */ +/* However if AO_ operations enforce sufficient ordering to */ +/* ensure that a location x cannot be accessed concurrently, */ +/* or can only be read concurrently, then x can be accessed */ +/* via ordinary references and assignments. */ +/* */ +/* Compare_and_exchange takes an address and an expected old */ +/* value and a new value, and returns an int. Nonzero */ +/* indicates that it succeeded. */ +/* Test_and_set takes an address, atomically replaces it by */ +/* AO_TS_SET, and returns the prior value. */ +/* An AO_TS_t location can be reset with the */ +/* AO_CLEAR macro, which normally uses AO_store_release. */ +/* AO_fetch_and_add takes an address and an AO_t increment */ +/* value. The AO_fetch_and_add1 and AO_fetch_and_sub1 variants */ +/* are provided, since they allow faster implementations on */ +/* some hardware. AO_or atomically ors an AO_t value into a */ +/* memory location, but does not provide access to the original.*/ +/* */ +/* We expect this list to grow slowly over time. */ +/* */ +/* Note that AO_nop_full is a full memory barrier. */ +/* */ +/* Note that if some data is initialized with */ +/* data.x = ...; data.y = ...; ... */ +/* AO_store_release_write(&data_is_initialized, 1) */ +/* then data is guaranteed to be initialized after the test */ +/* if (AO_load_release_read(&data_is_initialized)) ... */ +/* succeeds. Furthermore, this should generate near-optimal */ +/* code on all common platforms. */ +/* */ +/* All operations operate on unsigned AO_t, which */ +/* is the natural word size, and usually unsigned long. */ +/* It is possible to check whether a particular operation op */ +/* is available on a particular platform by checking whether */ +/* AO_HAVE_op is defined. We make heavy use of these macros */ +/* internally. */ + +/* The rest of this file basically has three sections: */ +/* */ +/* Some utility and default definitions. */ +/* */ +/* The architecture dependent section: */ +/* This defines atomic operations that have direct hardware */ +/* support on a particular platform, mostly by uncluding the */ +/* appropriate compiler- and hardware-dependent file. */ +/* */ +/* The synthesis section: */ +/* This tries to define other atomic operations in terms of */ +/* those that are explicitly available on the platform. */ +/* This section is hardware independent. */ +/* We make no attempt to synthesize operations in ways that */ +/* effectively introduce locks, except for the debugging/demo */ +/* pthread-based implementation at the beginning. A more */ +/* relistic implementation that falls back to locks could be */ +/* added as a higher layer. But that would sacrifice */ +/* usability from signal handlers. */ +/* The synthesis section is implemented almost entirely in */ +/* atomic_ops_generalize.h. */ + +/* Some common defaults. Overridden for some architectures. */ +#define AO_t size_t + +/* The test_and_set primitive returns an AO_TS_VAL_t value. */ +/* AO_TS_t is the type of an in-memory test-and-set location. */ + +#define AO_TS_INITIALIZER (AO_t)AO_TS_CLEAR + +/* Platform-dependent stuff: */ +#if defined(__GNUC__) || defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define AO_INLINE static __inline +#else +# define AO_INLINE static +#endif + +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +# define AO_compiler_barrier() __asm__ __volatile__("" : : : "memory") +#elif defined(_MSC_VER) +# if defined(_AMD64_) +# pragma intrinsic(_ReadWriteBarrier) +# define AO_compiler_barrier() _ReadWriteBarrier() + /* We assume this does not generate a fence instruction. */ + /* The documentation is a bit unclear. */ +# else +# define AO_compiler_barrier() __asm { } + /* The preceding implementation may be preferable here too. */ + /* But the documentation warns about VC++ 2003 and earlier. */ +# endif +#elif defined(__INTEL_COMPILER) +# define AO_compiler_barrier() __memory_barrier() /* Too strong? IA64-only? */ +#elif defined(_HPUX_SOURCE) +# if defined(__ia64) +# include +# define AO_compiler_barrier() _Asm_sched_fence() +# else + /* FIXME - We dont know how to do this. This is a guess. */ + /* And probably a bad one. */ + static volatile int AO_barrier_dummy; +# define AO_compiler_barrier() AO_barrier_dummy = AO_barrier_dummy +# endif +#else + /* We conjecture that the following usually gives us the right */ + /* semantics or an error. */ +# define AO_compiler_barrier() asm("") +#endif + +#if defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/generic_pthread.h" +#endif /* AO_USE_PTHREAD_DEFS */ + +#if defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS) \ + && !defined(__INTEL_COMPILER) +# if defined(__i386__) +# include "atomic_ops/sysdeps/gcc/x86.h" +# endif /* __i386__ */ +# if defined(__x86_64__) +# include "atomic_ops/sysdeps/gcc/x86_64.h" +# endif /* __i386__ */ +# if defined(__ia64__) +# include "atomic_ops/sysdeps/gcc/ia64.h" +# define AO_GENERALIZE_TWICE +# endif /* __ia64__ */ +# if defined(__hppa__) +# include "atomic_ops/sysdeps/gcc/hppa.h" +# define AO_CAN_EMUL_CAS +# endif /* __hppa__ */ +# if defined(__alpha__) +# include "atomic_ops/sysdeps/gcc/alpha.h" +# define AO_GENERALIZE_TWICE +# endif /* __alpha__ */ +# if defined(__s390__) +# include "atomic_ops/sysdeps/gcc/s390.h" +# endif /* __s390__ */ +# if defined(__sparc__) +# include "atomic_ops/sysdeps/gcc/sparc.h" +# define AO_CAN_EMUL_CAS +# endif /* __sparc__ */ +# if defined(__m68k__) +# include "atomic_ops/sysdeps/gcc/m68k.h" +# endif /* __m68k__ */ +# if defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) \ + || defined(__powerpc64__) || defined(__ppc64__) +# include "atomic_ops/sysdeps/gcc/powerpc.h" +# endif /* __powerpc__ */ +# if defined(__arm__) && !defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/gcc/arm.h" +# define AO_CAN_EMUL_CAS +# endif /* __arm__ */ +# if defined(__cris__) || defined(CRIS) +# include "atomic_ops/sysdeps/gcc/cris.h" +# endif +# if defined(__avr32__) +# include "atomic_ops/sysdeps/gcc/avr32.h" +# endif +#endif /* __GNUC__ && !AO_USE_PTHREAD_DEFS */ + +#if defined(__INTEL_COMPILER) && !defined(AO_USE_PTHREAD_DEFS) +# if defined(__ia64__) +# include "atomic_ops/sysdeps/icc/ia64.h" +# define AO_GENERALIZE_TWICE +# endif +#endif + +#if defined(_HPUX_SOURCE) && !defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS) +# if defined(__ia64) +# include "atomic_ops/sysdeps/hpc/ia64.h" +# define AO_GENERALIZE_TWICE +# else +# include "atomic_ops/sysdeps/hpc/hppa.h" +# define AO_CAN_EMUL_CAS +# endif +#endif + +#if !defined(__GNUC__) && (defined(sparc) || defined(__sparc)) \ + && !defined(AO_USE_PTHREAD_DEFS) +# include "atomic_ops/sysdeps/sunc/sparc.h" +# define AO_CAN_EMUL_CAS +#endif + +#if defined(_MSC_VER) +# if defined(_AMD64_) +# include "atomic_ops/sysdeps/msftc/x86_64.h" +# elif _M_IX86 >= 400 +# include "atomic_ops/sysdeps/msftc/x86.h" +# endif +#endif + +#if defined(AO_REQUIRE_CAS) && !defined(AO_HAVE_compare_and_swap) \ + && !defined(AO_HAVE_compare_and_swap_full) \ + && !defined(AO_HAVE_compare_and_swap_acquire) +# if defined(AO_CAN_EMUL_CAS) +# include "atomic_ops/sysdeps/emul_cas.h" +# else +# error Cannot implement AO_compare_and_swap_full on this architecture. +# endif +#endif /* AO_REQUIRE_CAS && !AO_HAVE_compare_and_swap ... */ + +/* The most common way to clear a test-and-set location */ +/* at the end of a critical section. */ +#if AO_AO_TS_T && !defined(AO_CLEAR) +# define AO_CLEAR(addr) AO_store_release((AO_TS_t *)addr, AO_TS_CLEAR) +#endif +#if AO_CHAR_TS_T && !defined(AO_CLEAR) +# define AO_CLEAR(addr) AO_char_store_release((AO_TS_t *)addr, AO_TS_CLEAR) +#endif + +/* + * The generalization section. + * Theoretically this should repeatedly include atomic_ops_generalize.h. + * In fact, we observe that this converges after a small fixed number + * of iterations, usually one. + */ +#include "atomic_ops/generalize.h" +#ifdef AO_GENERALIZE_TWICE +# include "atomic_ops/generalize.h" +#endif + +/* For compatibility with version 0.4 and earlier */ +#define AO_TS_T AO_TS_t +#define AO_T AO_t +#define AO_TS_VAL AO_TS_VAL_t + +#endif /* ATOMIC_OPS_H */ diff --git a/libatomic_ops-1.2/src/atomic_ops/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/CVS/Entries new file mode 100644 index 0000000..cbdea51 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/CVS/Entries @@ -0,0 +1,6 @@ +D/sysdeps//// +/Makefile.am/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.in/1.1/Tue Jul 11 22:55:09 2006// +/generalize-small.h/1.1/Tue Jul 11 22:55:09 2006// +/generalize-small.template/1.1/Tue Jul 11 22:55:09 2006// +/generalize.h/1.2/Fri Jan 4 01:40:11 2008// diff --git a/libatomic_ops-1.2/src/atomic_ops/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/CVS/Repository new file mode 100644 index 0000000..f061ff8 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops diff --git a/libatomic_ops-1.2/src/atomic_ops/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/Makefile.am b/libatomic_ops-1.2/src/atomic_ops/Makefile.am new file mode 100644 index 0000000..8000273 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/Makefile.am @@ -0,0 +1,12 @@ +SUBDIRS=sysdeps + +EXTRA_DIST=generalize-small.template + +#Private Headers +private_HEADERS=generalize.h generalize-small.h +privatedir=${includedir}/atomic_ops/ + +generalize-small.h: generalize-small.template + sed -e s:XSIZE:char:g -e s:XCTYPE:char:g $? > $@ + sed -e s:XSIZE:short:g -e s:XCTYPE:short:g $? >> $@ + sed -e s:XSIZE:int:g -e s:XCTYPE:int:g $? >> $@ diff --git a/libatomic_ops-1.2/src/atomic_ops/Makefile.in b/libatomic_ops-1.2/src/atomic_ops/Makefile.in new file mode 100644 index 0000000..33e8123 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/Makefile.in @@ -0,0 +1,480 @@ +# Makefile.in generated by automake 1.9.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 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. + address@hidden@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = src/atomic_ops +DIST_COMMON = $(private_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(privatedir)" +privateHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(private_HEADERS) +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +SUBDIRS = sysdeps +EXTRA_DIST = generalize-small.template + +#Private Headers +private_HEADERS = generalize.h generalize-small.h +privatedir = ${includedir}/atomic_ops/ +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/atomic_ops/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/atomic_ops/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-privateHEADERS: $(private_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(privatedir)" || $(mkdir_p) "$(DESTDIR)$(privatedir)" + @list='$(private_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(privateHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(privatedir)/$$f'"; \ + $(privateHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(privatedir)/$$f"; \ + done + +uninstall-privateHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(private_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(privatedir)/$$f'"; \ + rm -f "$(DESTDIR)$(privatedir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(privatedir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-privateHEADERS + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am uninstall-privateHEADERS + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-recursive ctags ctags-recursive \ + distclean distclean-generic distclean-recursive distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-privateHEADERS install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-info-am uninstall-privateHEADERS + + +generalize-small.h: generalize-small.template + sed -e s:XSIZE:char:g -e s:XCTYPE:char:g $? > $@ + sed -e s:XSIZE:short:g -e s:XCTYPE:short:g $? >> $@ + sed -e s:XSIZE:int:g -e s:XCTYPE:int:g $? >> $@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/src/atomic_ops/generalize-small.h b/libatomic_ops-1.2/src/atomic_ops/generalize-small.h new file mode 100644 index 0000000..4e45a0d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/generalize-small.h @@ -0,0 +1,1725 @@ +/* char_load */ +#if defined(AO_HAVE_char_load_acquire) && !defined(AO_HAVE_char_load) +# define AO_char_load(addr) AO_char_load_acquire(addr) +# define AO_HAVE_char_load +#endif + +#if defined(AO_HAVE_char_load_full) && !defined(AO_HAVE_char_load_acquire) +# define AO_char_load_acquire(addr) AO_char_load_full(addr) +# define AO_HAVE_char_load_acquire +#endif + +#if defined(AO_HAVE_char_load_full) && !defined(AO_HAVE_char_load_read) +# define AO_char_load_read(addr) AO_char_load_full(addr) +# define AO_HAVE_char_load_read +#endif + +#if !defined(AO_HAVE_char_load_acquire_read) && defined(AO_HAVE_char_load_acquire) +# define AO_char_load_acquire_read(addr) AO_char_load_acquire(addr) +# define AO_HAVE_char_load_acquire_read +#endif + +#if defined(AO_HAVE_char_load) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_load_acquire) + AO_INLINE unsigned char + AO_char_load_acquire(volatile unsigned char *addr) + { + unsigned char result = AO_char_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_full(); + return result; + } +# define AO_HAVE_char_load_acquire +#endif + +#if defined(AO_HAVE_char_load) && defined(AO_HAVE_nop_read) && \ + !defined(AO_HAVE_char_load_read) + AO_INLINE unsigned char + AO_char_load_read(volatile unsigned char *addr) + { + unsigned char result = AO_char_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_read(); + return result; + } +# define AO_HAVE_char_load_read +#endif + +#if defined(AO_HAVE_char_load_acquire) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_load_full) +# define AO_char_load_full(addr) (AO_nop_full(), AO_char_load_acquire(addr)) +# define AO_HAVE_char_load_full +#endif + +#if !defined(AO_HAVE_char_load_acquire_read) && defined(AO_HAVE_char_load_read) +# define AO_char_load_acquire_read(addr) AO_char_load_read(addr) +# define AO_HAVE_char_load_acquire_read +#endif + +#if defined(AO_HAVE_char_load_acquire_read) && !defined(AO_HAVE_char_load) +# define AO_char_load(addr) AO_char_load_acquire_read(addr) +# define AO_HAVE_char_load +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_char_load_acquire_read) +# define AO_char_load_dd_acquire_read(addr) \ + AO_char_load_acquire_read(addr) +# define AO_HAVE_char_load_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_char_load) +# define AO_char_load_dd_acquire_read(addr) \ + AO_char_load(addr) +# define AO_HAVE_char_load_dd_acquire_read +# endif +#endif + + +/* char_store */ + +#if defined(AO_HAVE_char_store_release) && !defined(AO_HAVE_char_store) +# define AO_char_store(addr, val) AO_char_store_release(addr,val) +# define AO_HAVE_char_store +#endif + +#if defined(AO_HAVE_char_store_full) && !defined(AO_HAVE_char_store_release) +# define AO_char_store_release(addr,val) AO_char_store_full(addr,val) +# define AO_HAVE_char_store_release +#endif + +#if defined(AO_HAVE_char_store_full) && !defined(AO_HAVE_char_store_write) +# define AO_char_store_write(addr,val) AO_char_store_full(addr,val) +# define AO_HAVE_char_store_write +#endif + +#if defined(AO_HAVE_char_store_release) && \ + !defined(AO_HAVE_char_store_release_write) +# define AO_char_store_release_write(addr, val) \ + AO_char_store_release(addr,val) +# define AO_HAVE_char_store_release_write +#endif + +#if defined(AO_HAVE_char_store_write) && !defined(AO_HAVE_char_store) +# define AO_char_store(addr, val) AO_char_store_write(addr,val) +# define AO_HAVE_char_store +#endif + +#if defined(AO_HAVE_char_store) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_store_release) +# define AO_char_store_release(addr,val) \ + (AO_nop_full(), AO_char_store(addr,val)) +# define AO_HAVE_char_store_release +#endif + +#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_char_store) && \ + !defined(AO_HAVE_char_store_write) +# define AO_char_store_write(addr, val) \ + (AO_nop_write(), AO_char_store(addr,val)) +# define AO_HAVE_char_store_write +#endif + +#if defined(AO_HAVE_char_store_write) && \ + !defined(AO_HAVE_char_store_release_write) +# define AO_char_store_release_write(addr, val) AO_char_store_write(addr,val) +# define AO_HAVE_char_store_release_write +#endif + +#if defined(AO_HAVE_char_store_release) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_store_full) +# define AO_char_store_full(addr, val) \ + (AO_char_store_release(addr, val), AO_nop_full()) +# define AO_HAVE_char_store_full +#endif + + +/* char_fetch_and_add */ +#if defined(AO_HAVE_char_compare_and_swap_full) && \ + !defined(AO_HAVE_char_fetch_and_add_full) + AO_INLINE AO_t + AO_char_fetch_and_add_full(volatile unsigned char *addr, + unsigned char incr) + { + unsigned char old; + do + { + old = *addr; + } + while (!AO_char_compare_and_swap_full(addr, old, old+incr)); + return old; + } +# define AO_HAVE_char_fetch_and_add_full +#endif + +#if defined(AO_HAVE_char_compare_and_swap_acquire) && \ + !defined(AO_HAVE_char_fetch_and_add_acquire) + AO_INLINE AO_t + AO_char_fetch_and_add_acquire(volatile unsigned char *addr, + unsigned char incr) + { + unsigned char old; + do + { + old = *addr; + } + while (!AO_char_compare_and_swap_acquire(addr, old, old+incr)); + return old; + } +# define AO_HAVE_char_fetch_and_add_acquire +#endif + +#if defined(AO_HAVE_char_compare_and_swap_release) && \ + !defined(AO_HAVE_char_fetch_and_add_release) + AO_INLINE AO_t + AO_char_fetch_and_add_release(volatile unsigned char *addr, + unsigned char incr) + { + unsigned char old; + do + { + old = *addr; + } + while (!AO_char_compare_and_swap_release(addr, old, old+incr)); + return old; + } +# define AO_HAVE_char_fetch_and_add_release +#endif + +#if defined(AO_HAVE_char_fetch_and_add_full) +# if !defined(AO_HAVE_char_fetch_and_add_release) +# define AO_char_fetch_and_add_release(addr, val) \ + AO_char_fetch_and_add_full(addr, val) +# define AO_HAVE_char_fetch_and_add_release +# endif +# if !defined(AO_HAVE_char_fetch_and_add_acquire) +# define AO_char_fetch_and_add_acquire(addr, val) \ + AO_char_fetch_and_add_full(addr, val) +# define AO_HAVE_char_fetch_and_add_acquire +# endif +# if !defined(AO_HAVE_char_fetch_and_add_write) +# define AO_char_fetch_and_add_write(addr, val) \ + AO_char_fetch_and_add_full(addr, val) +# define AO_HAVE_char_fetch_and_add_write +# endif +# if !defined(AO_HAVE_char_fetch_and_add_read) +# define AO_char_fetch_and_add_read(addr, val) \ + AO_char_fetch_and_add_full(addr, val) +# define AO_HAVE_char_fetch_and_add_read +# endif +#endif /* AO_HAVE_char_fetch_and_add_full */ + +#if !defined(AO_HAVE_char_fetch_and_add) && \ + defined(AO_HAVE_char_fetch_and_add_release) +# define AO_char_fetch_and_add(addr, val) \ + AO_char_fetch_and_add_release(addr, val) +# define AO_HAVE_char_fetch_and_add +#endif +#if !defined(AO_HAVE_char_fetch_and_add) && \ + defined(AO_HAVE_char_fetch_and_add_acquire) +# define AO_char_fetch_and_add(addr, val) \ + AO_char_fetch_and_add_acquire(addr, val) +# define AO_HAVE_char_fetch_and_add +#endif +#if !defined(AO_HAVE_char_fetch_and_add) && \ + defined(AO_HAVE_char_fetch_and_add_write) +# define AO_char_fetch_and_add(addr, val) \ + AO_char_fetch_and_add_write(addr, val) +# define AO_HAVE_char_fetch_and_add +#endif +#if !defined(AO_HAVE_char_fetch_and_add) && \ + defined(AO_HAVE_char_fetch_and_add_read) +# define AO_char_fetch_and_add(addr, val) \ + AO_char_fetch_and_add_read(addr, val) +# define AO_HAVE_char_fetch_and_add +#endif + +#if defined(AO_HAVE_char_fetch_and_add_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_fetch_and_add_full) +# define AO_char_fetch_and_add_full(addr, val) \ + (AO_nop_full(), AO_char_fetch_and_add_acquire(addr, val)) +#endif + +#if !defined(AO_HAVE_char_fetch_and_add_release_write) && \ + defined(AO_HAVE_char_fetch_and_add_write) +# define AO_char_fetch_and_add_release_write(addr, val) \ + AO_char_fetch_and_add_write(addr, val) +# define AO_HAVE_char_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_add_release_write) && \ + defined(AO_HAVE_char_fetch_and_add_release) +# define AO_char_fetch_and_add_release_write(addr, val) \ + AO_char_fetch_and_add_release(addr, val) +# define AO_HAVE_char_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_add_read) +# define AO_char_fetch_and_add_acquire_read(addr, val) \ + AO_char_fetch_and_add_read(addr, val) +# define AO_HAVE_char_fetch_and_add_acquire_read +#endif +#if !defined(AO_HAVE_char_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_add_acquire) +# define AO_char_fetch_and_add_acquire_read(addr, val) \ + AO_char_fetch_and_add_acquire(addr, val) +# define AO_HAVE_char_fetch_and_add_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_char_fetch_and_add_acquire_read) +# define AO_char_fetch_and_add_dd_acquire_read(addr, val) \ + AO_char_fetch_and_add_acquire_read(addr, val) +# define AO_HAVE_char_fetch_and_add_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_char_fetch_and_add) +# define AO_char_fetch_and_add_dd_acquire_read(addr, val) \ + AO_char_fetch_and_add(addr, val) +# define AO_HAVE_char_fetch_and_add_dd_acquire_read +# endif +#endif + +/* char_fetch_and_add1 */ + +#if defined(AO_HAVE_char_fetch_and_add_full) &&\ + !defined(AO_HAVE_char_fetch_and_add1_full) +# define AO_char_fetch_and_add1_full(addr) \ + AO_char_fetch_and_add_full(addr,1) +# define AO_HAVE_char_fetch_and_add1_full +#endif +#if defined(AO_HAVE_char_fetch_and_add_release) &&\ + !defined(AO_HAVE_char_fetch_and_add1_release) +# define AO_char_fetch_and_add1_release(addr) \ + AO_char_fetch_and_add_release(addr,1) +# define AO_HAVE_char_fetch_and_add1_release +#endif +#if defined(AO_HAVE_char_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_char_fetch_and_add1_acquire) +# define AO_char_fetch_and_add1_acquire(addr) \ + AO_char_fetch_and_add_acquire(addr,1) +# define AO_HAVE_char_fetch_and_add1_acquire +#endif +#if defined(AO_HAVE_char_fetch_and_add_write) &&\ + !defined(AO_HAVE_char_fetch_and_add1_write) +# define AO_char_fetch_and_add1_write(addr) \ + AO_char_fetch_and_add_write(addr,1) +# define AO_HAVE_char_fetch_and_add1_write +#endif +#if defined(AO_HAVE_char_fetch_and_add_read) &&\ + !defined(AO_HAVE_char_fetch_and_add1_read) +# define AO_char_fetch_and_add1_read(addr) \ + AO_char_fetch_and_add_read(addr,1) +# define AO_HAVE_char_fetch_and_add1_read +#endif +#if defined(AO_HAVE_char_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_char_fetch_and_add1_release_write) +# define AO_char_fetch_and_add1_release_write(addr) \ + AO_char_fetch_and_add_release_write(addr,1) +# define AO_HAVE_char_fetch_and_add1_release_write +#endif +#if defined(AO_HAVE_char_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_char_fetch_and_add1_acquire_read) +# define AO_char_fetch_and_add1_acquire_read(addr) \ + AO_char_fetch_and_add_acquire_read(addr,1) +# define AO_HAVE_char_fetch_and_add1_acquire_read +#endif +#if defined(AO_HAVE_char_fetch_and_add) &&\ + !defined(AO_HAVE_char_fetch_and_add1) +# define AO_char_fetch_and_add1(addr) \ + AO_char_fetch_and_add(addr,1) +# define AO_HAVE_char_fetch_and_add1 +#endif + +#if defined(AO_HAVE_char_fetch_and_add1_full) +# if !defined(AO_HAVE_char_fetch_and_add1_release) +# define AO_char_fetch_and_add1_release(addr) \ + AO_char_fetch_and_add1_full(addr) +# define AO_HAVE_char_fetch_and_add1_release +# endif +# if !defined(AO_HAVE_char_fetch_and_add1_acquire) +# define AO_char_fetch_and_add1_acquire(addr) \ + AO_char_fetch_and_add1_full(addr) +# define AO_HAVE_char_fetch_and_add1_acquire +# endif +# if !defined(AO_HAVE_char_fetch_and_add1_write) +# define AO_char_fetch_and_add1_write(addr) \ + AO_char_fetch_and_add1_full(addr) +# define AO_HAVE_char_fetch_and_add1_write +# endif +# if !defined(AO_HAVE_char_fetch_and_add1_read) +# define AO_char_fetch_and_add1_read(addr) \ + AO_char_fetch_and_add1_full(addr) +# define AO_HAVE_char_fetch_and_add1_read +# endif +#endif /* AO_HAVE_char_fetch_and_add1_full */ + +#if !defined(AO_HAVE_char_fetch_and_add1) && \ + defined(AO_HAVE_char_fetch_and_add1_release) +# define AO_char_fetch_and_add1(addr) \ + AO_char_fetch_and_add1_release(addr) +# define AO_HAVE_char_fetch_and_add1 +#endif +#if !defined(AO_HAVE_char_fetch_and_add1) && \ + defined(AO_HAVE_char_fetch_and_add1_acquire) +# define AO_char_fetch_and_add1(addr) \ + AO_char_fetch_and_add1_acquire(addr) +# define AO_HAVE_char_fetch_and_add1 +#endif +#if !defined(AO_HAVE_char_fetch_and_add1) && \ + defined(AO_HAVE_char_fetch_and_add1_write) +# define AO_char_fetch_and_add1(addr) \ + AO_char_fetch_and_add1_write(addr) +# define AO_HAVE_char_fetch_and_add1 +#endif +#if !defined(AO_HAVE_char_fetch_and_add1) && \ + defined(AO_HAVE_char_fetch_and_add1_read) +# define AO_char_fetch_and_add1(addr) \ + AO_char_fetch_and_add1_read(addr) +# define AO_HAVE_char_fetch_and_add1 +#endif + +#if defined(AO_HAVE_char_fetch_and_add1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_fetch_and_add1_full) +# define AO_char_fetch_and_add1_full(addr) \ + (AO_nop_full(), AO_char_fetch_and_add1_acquire(addr)) +# define AO_HAVE_char_fetch_and_add1_full +#endif + +#if !defined(AO_HAVE_char_fetch_and_add1_release_write) && \ + defined(AO_HAVE_char_fetch_and_add1_write) +# define AO_char_fetch_and_add1_release_write(addr) \ + AO_char_fetch_and_add1_write(addr) +# define AO_HAVE_char_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_add1_release_write) && \ + defined(AO_HAVE_char_fetch_and_add1_release) +# define AO_char_fetch_and_add1_release_write(addr) \ + AO_char_fetch_and_add1_release(addr) +# define AO_HAVE_char_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_add1_read) +# define AO_char_fetch_and_add1_acquire_read(addr) \ + AO_char_fetch_and_add1_read(addr) +# define AO_HAVE_char_fetch_and_add1_acquire_read +#endif +#if !defined(AO_HAVE_char_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_add1_acquire) +# define AO_char_fetch_and_add1_acquire_read(addr) \ + AO_char_fetch_and_add1_acquire(addr) +# define AO_HAVE_char_fetch_and_add1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_char_fetch_and_add1_acquire_read) +# define AO_char_fetch_and_add1_dd_acquire_read(addr) \ + AO_char_fetch_and_add1_acquire_read(addr) +# define AO_HAVE_char_fetch_and_add1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_char_fetch_and_add1) +# define AO_char_fetch_and_add1_dd_acquire_read(addr) \ + AO_char_fetch_and_add1(addr) +# define AO_HAVE_char_fetch_and_add1_dd_acquire_read +# endif +#endif + +/* char_fetch_and_sub1 */ + +#if defined(AO_HAVE_char_fetch_and_add_full) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_full) +# define AO_char_fetch_and_sub1_full(addr) \ + AO_char_fetch_and_add_full(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_full +#endif +#if defined(AO_HAVE_char_fetch_and_add_release) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_release) +# define AO_char_fetch_and_sub1_release(addr) \ + AO_char_fetch_and_add_release(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_release +#endif +#if defined(AO_HAVE_char_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_acquire) +# define AO_char_fetch_and_sub1_acquire(addr) \ + AO_char_fetch_and_add_acquire(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_acquire +#endif +#if defined(AO_HAVE_char_fetch_and_add_write) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_write) +# define AO_char_fetch_and_sub1_write(addr) \ + AO_char_fetch_and_add_write(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_write +#endif +#if defined(AO_HAVE_char_fetch_and_add_read) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_read) +# define AO_char_fetch_and_sub1_read(addr) \ + AO_char_fetch_and_add_read(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_read +#endif +#if defined(AO_HAVE_char_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_release_write) +# define AO_char_fetch_and_sub1_release_write(addr) \ + AO_char_fetch_and_add_release_write(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_release_write +#endif +#if defined(AO_HAVE_char_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_char_fetch_and_sub1_acquire_read) +# define AO_char_fetch_and_sub1_acquire_read(addr) \ + AO_char_fetch_and_add_acquire_read(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1_acquire_read +#endif +#if defined(AO_HAVE_char_fetch_and_add) &&\ + !defined(AO_HAVE_char_fetch_and_sub1) +# define AO_char_fetch_and_sub1(addr) \ + AO_char_fetch_and_add(addr,(unsigned char)(-1)) +# define AO_HAVE_char_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_char_fetch_and_sub1_full) +# if !defined(AO_HAVE_char_fetch_and_sub1_release) +# define AO_char_fetch_and_sub1_release(addr) \ + AO_char_fetch_and_sub1_full(addr) +# define AO_HAVE_char_fetch_and_sub1_release +# endif +# if !defined(AO_HAVE_char_fetch_and_sub1_acquire) +# define AO_char_fetch_and_sub1_acquire(addr) \ + AO_char_fetch_and_sub1_full(addr) +# define AO_HAVE_char_fetch_and_sub1_acquire +# endif +# if !defined(AO_HAVE_char_fetch_and_sub1_write) +# define AO_char_fetch_and_sub1_write(addr) \ + AO_char_fetch_and_sub1_full(addr) +# define AO_HAVE_char_fetch_and_sub1_write +# endif +# if !defined(AO_HAVE_char_fetch_and_sub1_read) +# define AO_char_fetch_and_sub1_read(addr) \ + AO_char_fetch_and_sub1_full(addr) +# define AO_HAVE_char_fetch_and_sub1_read +# endif +#endif /* AO_HAVE_char_fetch_and_sub1_full */ + +#if !defined(AO_HAVE_char_fetch_and_sub1) && \ + defined(AO_HAVE_char_fetch_and_sub1_release) +# define AO_char_fetch_and_sub1(addr) \ + AO_char_fetch_and_sub1_release(addr) +# define AO_HAVE_char_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1) && \ + defined(AO_HAVE_char_fetch_and_sub1_acquire) +# define AO_char_fetch_and_sub1(addr) \ + AO_char_fetch_and_sub1_acquire(addr) +# define AO_HAVE_char_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1) && \ + defined(AO_HAVE_char_fetch_and_sub1_write) +# define AO_char_fetch_and_sub1(addr) \ + AO_char_fetch_and_sub1_write(addr) +# define AO_HAVE_char_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1) && \ + defined(AO_HAVE_char_fetch_and_sub1_read) +# define AO_char_fetch_and_sub1(addr) \ + AO_char_fetch_and_sub1_read(addr) +# define AO_HAVE_char_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_char_fetch_and_sub1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_char_fetch_and_sub1_full) +# define AO_char_fetch_and_sub1_full(addr) \ + (AO_nop_full(), AO_char_fetch_and_sub1_acquire(addr)) +# define AO_HAVE_char_fetch_and_sub1_full +#endif + +#if !defined(AO_HAVE_char_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_char_fetch_and_sub1_write) +# define AO_char_fetch_and_sub1_release_write(addr) \ + AO_char_fetch_and_sub1_write(addr) +# define AO_HAVE_char_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_char_fetch_and_sub1_release) +# define AO_char_fetch_and_sub1_release_write(addr) \ + AO_char_fetch_and_sub1_release(addr) +# define AO_HAVE_char_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_sub1_read) +# define AO_char_fetch_and_sub1_acquire_read(addr) \ + AO_char_fetch_and_sub1_read(addr) +# define AO_HAVE_char_fetch_and_sub1_acquire_read +#endif +#if !defined(AO_HAVE_char_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_char_fetch_and_sub1_acquire) +# define AO_char_fetch_and_sub1_acquire_read(addr) \ + AO_char_fetch_and_sub1_acquire(addr) +# define AO_HAVE_char_fetch_and_sub1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_char_fetch_and_sub1_acquire_read) +# define AO_char_fetch_and_sub1_dd_acquire_read(addr) \ + AO_char_fetch_and_sub1_acquire_read(addr) +# define AO_HAVE_char_fetch_and_sub1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_char_fetch_and_sub1) +# define AO_char_fetch_and_sub1_dd_acquire_read(addr) \ + AO_char_fetch_and_sub1(addr) +# define AO_HAVE_char_fetch_and_sub1_dd_acquire_read +# endif +#endif + +/* short_load */ +#if defined(AO_HAVE_short_load_acquire) && !defined(AO_HAVE_short_load) +# define AO_short_load(addr) AO_short_load_acquire(addr) +# define AO_HAVE_short_load +#endif + +#if defined(AO_HAVE_short_load_full) && !defined(AO_HAVE_short_load_acquire) +# define AO_short_load_acquire(addr) AO_short_load_full(addr) +# define AO_HAVE_short_load_acquire +#endif + +#if defined(AO_HAVE_short_load_full) && !defined(AO_HAVE_short_load_read) +# define AO_short_load_read(addr) AO_short_load_full(addr) +# define AO_HAVE_short_load_read +#endif + +#if !defined(AO_HAVE_short_load_acquire_read) && defined(AO_HAVE_short_load_acquire) +# define AO_short_load_acquire_read(addr) AO_short_load_acquire(addr) +# define AO_HAVE_short_load_acquire_read +#endif + +#if defined(AO_HAVE_short_load) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_load_acquire) + AO_INLINE unsigned short + AO_short_load_acquire(volatile unsigned short *addr) + { + unsigned short result = AO_short_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_full(); + return result; + } +# define AO_HAVE_short_load_acquire +#endif + +#if defined(AO_HAVE_short_load) && defined(AO_HAVE_nop_read) && \ + !defined(AO_HAVE_short_load_read) + AO_INLINE unsigned short + AO_short_load_read(volatile unsigned short *addr) + { + unsigned short result = AO_short_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_read(); + return result; + } +# define AO_HAVE_short_load_read +#endif + +#if defined(AO_HAVE_short_load_acquire) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_load_full) +# define AO_short_load_full(addr) (AO_nop_full(), AO_short_load_acquire(addr)) +# define AO_HAVE_short_load_full +#endif + +#if !defined(AO_HAVE_short_load_acquire_read) && defined(AO_HAVE_short_load_read) +# define AO_short_load_acquire_read(addr) AO_short_load_read(addr) +# define AO_HAVE_short_load_acquire_read +#endif + +#if defined(AO_HAVE_short_load_acquire_read) && !defined(AO_HAVE_short_load) +# define AO_short_load(addr) AO_short_load_acquire_read(addr) +# define AO_HAVE_short_load +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_short_load_acquire_read) +# define AO_short_load_dd_acquire_read(addr) \ + AO_short_load_acquire_read(addr) +# define AO_HAVE_short_load_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_short_load) +# define AO_short_load_dd_acquire_read(addr) \ + AO_short_load(addr) +# define AO_HAVE_short_load_dd_acquire_read +# endif +#endif + + +/* short_store */ + +#if defined(AO_HAVE_short_store_release) && !defined(AO_HAVE_short_store) +# define AO_short_store(addr, val) AO_short_store_release(addr,val) +# define AO_HAVE_short_store +#endif + +#if defined(AO_HAVE_short_store_full) && !defined(AO_HAVE_short_store_release) +# define AO_short_store_release(addr,val) AO_short_store_full(addr,val) +# define AO_HAVE_short_store_release +#endif + +#if defined(AO_HAVE_short_store_full) && !defined(AO_HAVE_short_store_write) +# define AO_short_store_write(addr,val) AO_short_store_full(addr,val) +# define AO_HAVE_short_store_write +#endif + +#if defined(AO_HAVE_short_store_release) && \ + !defined(AO_HAVE_short_store_release_write) +# define AO_short_store_release_write(addr, val) \ + AO_short_store_release(addr,val) +# define AO_HAVE_short_store_release_write +#endif + +#if defined(AO_HAVE_short_store_write) && !defined(AO_HAVE_short_store) +# define AO_short_store(addr, val) AO_short_store_write(addr,val) +# define AO_HAVE_short_store +#endif + +#if defined(AO_HAVE_short_store) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_store_release) +# define AO_short_store_release(addr,val) \ + (AO_nop_full(), AO_short_store(addr,val)) +# define AO_HAVE_short_store_release +#endif + +#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_short_store) && \ + !defined(AO_HAVE_short_store_write) +# define AO_short_store_write(addr, val) \ + (AO_nop_write(), AO_short_store(addr,val)) +# define AO_HAVE_short_store_write +#endif + +#if defined(AO_HAVE_short_store_write) && \ + !defined(AO_HAVE_short_store_release_write) +# define AO_short_store_release_write(addr, val) AO_short_store_write(addr,val) +# define AO_HAVE_short_store_release_write +#endif + +#if defined(AO_HAVE_short_store_release) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_store_full) +# define AO_short_store_full(addr, val) \ + (AO_short_store_release(addr, val), AO_nop_full()) +# define AO_HAVE_short_store_full +#endif + + +/* short_fetch_and_add */ +#if defined(AO_HAVE_short_compare_and_swap_full) && \ + !defined(AO_HAVE_short_fetch_and_add_full) + AO_INLINE AO_t + AO_short_fetch_and_add_full(volatile unsigned short *addr, + unsigned short incr) + { + unsigned short old; + do + { + old = *addr; + } + while (!AO_short_compare_and_swap_full(addr, old, old+incr)); + return old; + } +# define AO_HAVE_short_fetch_and_add_full +#endif + +#if defined(AO_HAVE_short_compare_and_swap_acquire) && \ + !defined(AO_HAVE_short_fetch_and_add_acquire) + AO_INLINE AO_t + AO_short_fetch_and_add_acquire(volatile unsigned short *addr, + unsigned short incr) + { + unsigned short old; + do + { + old = *addr; + } + while (!AO_short_compare_and_swap_acquire(addr, old, old+incr)); + return old; + } +# define AO_HAVE_short_fetch_and_add_acquire +#endif + +#if defined(AO_HAVE_short_compare_and_swap_release) && \ + !defined(AO_HAVE_short_fetch_and_add_release) + AO_INLINE AO_t + AO_short_fetch_and_add_release(volatile unsigned short *addr, + unsigned short incr) + { + unsigned short old; + do + { + old = *addr; + } + while (!AO_short_compare_and_swap_release(addr, old, old+incr)); + return old; + } +# define AO_HAVE_short_fetch_and_add_release +#endif + +#if defined(AO_HAVE_short_fetch_and_add_full) +# if !defined(AO_HAVE_short_fetch_and_add_release) +# define AO_short_fetch_and_add_release(addr, val) \ + AO_short_fetch_and_add_full(addr, val) +# define AO_HAVE_short_fetch_and_add_release +# endif +# if !defined(AO_HAVE_short_fetch_and_add_acquire) +# define AO_short_fetch_and_add_acquire(addr, val) \ + AO_short_fetch_and_add_full(addr, val) +# define AO_HAVE_short_fetch_and_add_acquire +# endif +# if !defined(AO_HAVE_short_fetch_and_add_write) +# define AO_short_fetch_and_add_write(addr, val) \ + AO_short_fetch_and_add_full(addr, val) +# define AO_HAVE_short_fetch_and_add_write +# endif +# if !defined(AO_HAVE_short_fetch_and_add_read) +# define AO_short_fetch_and_add_read(addr, val) \ + AO_short_fetch_and_add_full(addr, val) +# define AO_HAVE_short_fetch_and_add_read +# endif +#endif /* AO_HAVE_short_fetch_and_add_full */ + +#if !defined(AO_HAVE_short_fetch_and_add) && \ + defined(AO_HAVE_short_fetch_and_add_release) +# define AO_short_fetch_and_add(addr, val) \ + AO_short_fetch_and_add_release(addr, val) +# define AO_HAVE_short_fetch_and_add +#endif +#if !defined(AO_HAVE_short_fetch_and_add) && \ + defined(AO_HAVE_short_fetch_and_add_acquire) +# define AO_short_fetch_and_add(addr, val) \ + AO_short_fetch_and_add_acquire(addr, val) +# define AO_HAVE_short_fetch_and_add +#endif +#if !defined(AO_HAVE_short_fetch_and_add) && \ + defined(AO_HAVE_short_fetch_and_add_write) +# define AO_short_fetch_and_add(addr, val) \ + AO_short_fetch_and_add_write(addr, val) +# define AO_HAVE_short_fetch_and_add +#endif +#if !defined(AO_HAVE_short_fetch_and_add) && \ + defined(AO_HAVE_short_fetch_and_add_read) +# define AO_short_fetch_and_add(addr, val) \ + AO_short_fetch_and_add_read(addr, val) +# define AO_HAVE_short_fetch_and_add +#endif + +#if defined(AO_HAVE_short_fetch_and_add_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_fetch_and_add_full) +# define AO_short_fetch_and_add_full(addr, val) \ + (AO_nop_full(), AO_short_fetch_and_add_acquire(addr, val)) +#endif + +#if !defined(AO_HAVE_short_fetch_and_add_release_write) && \ + defined(AO_HAVE_short_fetch_and_add_write) +# define AO_short_fetch_and_add_release_write(addr, val) \ + AO_short_fetch_and_add_write(addr, val) +# define AO_HAVE_short_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_add_release_write) && \ + defined(AO_HAVE_short_fetch_and_add_release) +# define AO_short_fetch_and_add_release_write(addr, val) \ + AO_short_fetch_and_add_release(addr, val) +# define AO_HAVE_short_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_add_read) +# define AO_short_fetch_and_add_acquire_read(addr, val) \ + AO_short_fetch_and_add_read(addr, val) +# define AO_HAVE_short_fetch_and_add_acquire_read +#endif +#if !defined(AO_HAVE_short_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_add_acquire) +# define AO_short_fetch_and_add_acquire_read(addr, val) \ + AO_short_fetch_and_add_acquire(addr, val) +# define AO_HAVE_short_fetch_and_add_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_short_fetch_and_add_acquire_read) +# define AO_short_fetch_and_add_dd_acquire_read(addr, val) \ + AO_short_fetch_and_add_acquire_read(addr, val) +# define AO_HAVE_short_fetch_and_add_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_short_fetch_and_add) +# define AO_short_fetch_and_add_dd_acquire_read(addr, val) \ + AO_short_fetch_and_add(addr, val) +# define AO_HAVE_short_fetch_and_add_dd_acquire_read +# endif +#endif + +/* short_fetch_and_add1 */ + +#if defined(AO_HAVE_short_fetch_and_add_full) &&\ + !defined(AO_HAVE_short_fetch_and_add1_full) +# define AO_short_fetch_and_add1_full(addr) \ + AO_short_fetch_and_add_full(addr,1) +# define AO_HAVE_short_fetch_and_add1_full +#endif +#if defined(AO_HAVE_short_fetch_and_add_release) &&\ + !defined(AO_HAVE_short_fetch_and_add1_release) +# define AO_short_fetch_and_add1_release(addr) \ + AO_short_fetch_and_add_release(addr,1) +# define AO_HAVE_short_fetch_and_add1_release +#endif +#if defined(AO_HAVE_short_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_short_fetch_and_add1_acquire) +# define AO_short_fetch_and_add1_acquire(addr) \ + AO_short_fetch_and_add_acquire(addr,1) +# define AO_HAVE_short_fetch_and_add1_acquire +#endif +#if defined(AO_HAVE_short_fetch_and_add_write) &&\ + !defined(AO_HAVE_short_fetch_and_add1_write) +# define AO_short_fetch_and_add1_write(addr) \ + AO_short_fetch_and_add_write(addr,1) +# define AO_HAVE_short_fetch_and_add1_write +#endif +#if defined(AO_HAVE_short_fetch_and_add_read) &&\ + !defined(AO_HAVE_short_fetch_and_add1_read) +# define AO_short_fetch_and_add1_read(addr) \ + AO_short_fetch_and_add_read(addr,1) +# define AO_HAVE_short_fetch_and_add1_read +#endif +#if defined(AO_HAVE_short_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_short_fetch_and_add1_release_write) +# define AO_short_fetch_and_add1_release_write(addr) \ + AO_short_fetch_and_add_release_write(addr,1) +# define AO_HAVE_short_fetch_and_add1_release_write +#endif +#if defined(AO_HAVE_short_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_short_fetch_and_add1_acquire_read) +# define AO_short_fetch_and_add1_acquire_read(addr) \ + AO_short_fetch_and_add_acquire_read(addr,1) +# define AO_HAVE_short_fetch_and_add1_acquire_read +#endif +#if defined(AO_HAVE_short_fetch_and_add) &&\ + !defined(AO_HAVE_short_fetch_and_add1) +# define AO_short_fetch_and_add1(addr) \ + AO_short_fetch_and_add(addr,1) +# define AO_HAVE_short_fetch_and_add1 +#endif + +#if defined(AO_HAVE_short_fetch_and_add1_full) +# if !defined(AO_HAVE_short_fetch_and_add1_release) +# define AO_short_fetch_and_add1_release(addr) \ + AO_short_fetch_and_add1_full(addr) +# define AO_HAVE_short_fetch_and_add1_release +# endif +# if !defined(AO_HAVE_short_fetch_and_add1_acquire) +# define AO_short_fetch_and_add1_acquire(addr) \ + AO_short_fetch_and_add1_full(addr) +# define AO_HAVE_short_fetch_and_add1_acquire +# endif +# if !defined(AO_HAVE_short_fetch_and_add1_write) +# define AO_short_fetch_and_add1_write(addr) \ + AO_short_fetch_and_add1_full(addr) +# define AO_HAVE_short_fetch_and_add1_write +# endif +# if !defined(AO_HAVE_short_fetch_and_add1_read) +# define AO_short_fetch_and_add1_read(addr) \ + AO_short_fetch_and_add1_full(addr) +# define AO_HAVE_short_fetch_and_add1_read +# endif +#endif /* AO_HAVE_short_fetch_and_add1_full */ + +#if !defined(AO_HAVE_short_fetch_and_add1) && \ + defined(AO_HAVE_short_fetch_and_add1_release) +# define AO_short_fetch_and_add1(addr) \ + AO_short_fetch_and_add1_release(addr) +# define AO_HAVE_short_fetch_and_add1 +#endif +#if !defined(AO_HAVE_short_fetch_and_add1) && \ + defined(AO_HAVE_short_fetch_and_add1_acquire) +# define AO_short_fetch_and_add1(addr) \ + AO_short_fetch_and_add1_acquire(addr) +# define AO_HAVE_short_fetch_and_add1 +#endif +#if !defined(AO_HAVE_short_fetch_and_add1) && \ + defined(AO_HAVE_short_fetch_and_add1_write) +# define AO_short_fetch_and_add1(addr) \ + AO_short_fetch_and_add1_write(addr) +# define AO_HAVE_short_fetch_and_add1 +#endif +#if !defined(AO_HAVE_short_fetch_and_add1) && \ + defined(AO_HAVE_short_fetch_and_add1_read) +# define AO_short_fetch_and_add1(addr) \ + AO_short_fetch_and_add1_read(addr) +# define AO_HAVE_short_fetch_and_add1 +#endif + +#if defined(AO_HAVE_short_fetch_and_add1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_fetch_and_add1_full) +# define AO_short_fetch_and_add1_full(addr) \ + (AO_nop_full(), AO_short_fetch_and_add1_acquire(addr)) +# define AO_HAVE_short_fetch_and_add1_full +#endif + +#if !defined(AO_HAVE_short_fetch_and_add1_release_write) && \ + defined(AO_HAVE_short_fetch_and_add1_write) +# define AO_short_fetch_and_add1_release_write(addr) \ + AO_short_fetch_and_add1_write(addr) +# define AO_HAVE_short_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_add1_release_write) && \ + defined(AO_HAVE_short_fetch_and_add1_release) +# define AO_short_fetch_and_add1_release_write(addr) \ + AO_short_fetch_and_add1_release(addr) +# define AO_HAVE_short_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_add1_read) +# define AO_short_fetch_and_add1_acquire_read(addr) \ + AO_short_fetch_and_add1_read(addr) +# define AO_HAVE_short_fetch_and_add1_acquire_read +#endif +#if !defined(AO_HAVE_short_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_add1_acquire) +# define AO_short_fetch_and_add1_acquire_read(addr) \ + AO_short_fetch_and_add1_acquire(addr) +# define AO_HAVE_short_fetch_and_add1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_short_fetch_and_add1_acquire_read) +# define AO_short_fetch_and_add1_dd_acquire_read(addr) \ + AO_short_fetch_and_add1_acquire_read(addr) +# define AO_HAVE_short_fetch_and_add1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_short_fetch_and_add1) +# define AO_short_fetch_and_add1_dd_acquire_read(addr) \ + AO_short_fetch_and_add1(addr) +# define AO_HAVE_short_fetch_and_add1_dd_acquire_read +# endif +#endif + +/* short_fetch_and_sub1 */ + +#if defined(AO_HAVE_short_fetch_and_add_full) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_full) +# define AO_short_fetch_and_sub1_full(addr) \ + AO_short_fetch_and_add_full(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_full +#endif +#if defined(AO_HAVE_short_fetch_and_add_release) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_release) +# define AO_short_fetch_and_sub1_release(addr) \ + AO_short_fetch_and_add_release(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_release +#endif +#if defined(AO_HAVE_short_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_acquire) +# define AO_short_fetch_and_sub1_acquire(addr) \ + AO_short_fetch_and_add_acquire(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_acquire +#endif +#if defined(AO_HAVE_short_fetch_and_add_write) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_write) +# define AO_short_fetch_and_sub1_write(addr) \ + AO_short_fetch_and_add_write(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_write +#endif +#if defined(AO_HAVE_short_fetch_and_add_read) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_read) +# define AO_short_fetch_and_sub1_read(addr) \ + AO_short_fetch_and_add_read(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_read +#endif +#if defined(AO_HAVE_short_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_release_write) +# define AO_short_fetch_and_sub1_release_write(addr) \ + AO_short_fetch_and_add_release_write(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_release_write +#endif +#if defined(AO_HAVE_short_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_short_fetch_and_sub1_acquire_read) +# define AO_short_fetch_and_sub1_acquire_read(addr) \ + AO_short_fetch_and_add_acquire_read(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1_acquire_read +#endif +#if defined(AO_HAVE_short_fetch_and_add) &&\ + !defined(AO_HAVE_short_fetch_and_sub1) +# define AO_short_fetch_and_sub1(addr) \ + AO_short_fetch_and_add(addr,(unsigned short)(-1)) +# define AO_HAVE_short_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_short_fetch_and_sub1_full) +# if !defined(AO_HAVE_short_fetch_and_sub1_release) +# define AO_short_fetch_and_sub1_release(addr) \ + AO_short_fetch_and_sub1_full(addr) +# define AO_HAVE_short_fetch_and_sub1_release +# endif +# if !defined(AO_HAVE_short_fetch_and_sub1_acquire) +# define AO_short_fetch_and_sub1_acquire(addr) \ + AO_short_fetch_and_sub1_full(addr) +# define AO_HAVE_short_fetch_and_sub1_acquire +# endif +# if !defined(AO_HAVE_short_fetch_and_sub1_write) +# define AO_short_fetch_and_sub1_write(addr) \ + AO_short_fetch_and_sub1_full(addr) +# define AO_HAVE_short_fetch_and_sub1_write +# endif +# if !defined(AO_HAVE_short_fetch_and_sub1_read) +# define AO_short_fetch_and_sub1_read(addr) \ + AO_short_fetch_and_sub1_full(addr) +# define AO_HAVE_short_fetch_and_sub1_read +# endif +#endif /* AO_HAVE_short_fetch_and_sub1_full */ + +#if !defined(AO_HAVE_short_fetch_and_sub1) && \ + defined(AO_HAVE_short_fetch_and_sub1_release) +# define AO_short_fetch_and_sub1(addr) \ + AO_short_fetch_and_sub1_release(addr) +# define AO_HAVE_short_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1) && \ + defined(AO_HAVE_short_fetch_and_sub1_acquire) +# define AO_short_fetch_and_sub1(addr) \ + AO_short_fetch_and_sub1_acquire(addr) +# define AO_HAVE_short_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1) && \ + defined(AO_HAVE_short_fetch_and_sub1_write) +# define AO_short_fetch_and_sub1(addr) \ + AO_short_fetch_and_sub1_write(addr) +# define AO_HAVE_short_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1) && \ + defined(AO_HAVE_short_fetch_and_sub1_read) +# define AO_short_fetch_and_sub1(addr) \ + AO_short_fetch_and_sub1_read(addr) +# define AO_HAVE_short_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_short_fetch_and_sub1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_short_fetch_and_sub1_full) +# define AO_short_fetch_and_sub1_full(addr) \ + (AO_nop_full(), AO_short_fetch_and_sub1_acquire(addr)) +# define AO_HAVE_short_fetch_and_sub1_full +#endif + +#if !defined(AO_HAVE_short_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_short_fetch_and_sub1_write) +# define AO_short_fetch_and_sub1_release_write(addr) \ + AO_short_fetch_and_sub1_write(addr) +# define AO_HAVE_short_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_short_fetch_and_sub1_release) +# define AO_short_fetch_and_sub1_release_write(addr) \ + AO_short_fetch_and_sub1_release(addr) +# define AO_HAVE_short_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_sub1_read) +# define AO_short_fetch_and_sub1_acquire_read(addr) \ + AO_short_fetch_and_sub1_read(addr) +# define AO_HAVE_short_fetch_and_sub1_acquire_read +#endif +#if !defined(AO_HAVE_short_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_short_fetch_and_sub1_acquire) +# define AO_short_fetch_and_sub1_acquire_read(addr) \ + AO_short_fetch_and_sub1_acquire(addr) +# define AO_HAVE_short_fetch_and_sub1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_short_fetch_and_sub1_acquire_read) +# define AO_short_fetch_and_sub1_dd_acquire_read(addr) \ + AO_short_fetch_and_sub1_acquire_read(addr) +# define AO_HAVE_short_fetch_and_sub1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_short_fetch_and_sub1) +# define AO_short_fetch_and_sub1_dd_acquire_read(addr) \ + AO_short_fetch_and_sub1(addr) +# define AO_HAVE_short_fetch_and_sub1_dd_acquire_read +# endif +#endif + +/* int_load */ +#if defined(AO_HAVE_int_load_acquire) && !defined(AO_HAVE_int_load) +# define AO_int_load(addr) AO_int_load_acquire(addr) +# define AO_HAVE_int_load +#endif + +#if defined(AO_HAVE_int_load_full) && !defined(AO_HAVE_int_load_acquire) +# define AO_int_load_acquire(addr) AO_int_load_full(addr) +# define AO_HAVE_int_load_acquire +#endif + +#if defined(AO_HAVE_int_load_full) && !defined(AO_HAVE_int_load_read) +# define AO_int_load_read(addr) AO_int_load_full(addr) +# define AO_HAVE_int_load_read +#endif + +#if !defined(AO_HAVE_int_load_acquire_read) && defined(AO_HAVE_int_load_acquire) +# define AO_int_load_acquire_read(addr) AO_int_load_acquire(addr) +# define AO_HAVE_int_load_acquire_read +#endif + +#if defined(AO_HAVE_int_load) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_load_acquire) + AO_INLINE unsigned int + AO_int_load_acquire(volatile unsigned int *addr) + { + unsigned int result = AO_int_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_full(); + return result; + } +# define AO_HAVE_int_load_acquire +#endif + +#if defined(AO_HAVE_int_load) && defined(AO_HAVE_nop_read) && \ + !defined(AO_HAVE_int_load_read) + AO_INLINE unsigned int + AO_int_load_read(volatile unsigned int *addr) + { + unsigned int result = AO_int_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_read(); + return result; + } +# define AO_HAVE_int_load_read +#endif + +#if defined(AO_HAVE_int_load_acquire) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_load_full) +# define AO_int_load_full(addr) (AO_nop_full(), AO_int_load_acquire(addr)) +# define AO_HAVE_int_load_full +#endif + +#if !defined(AO_HAVE_int_load_acquire_read) && defined(AO_HAVE_int_load_read) +# define AO_int_load_acquire_read(addr) AO_int_load_read(addr) +# define AO_HAVE_int_load_acquire_read +#endif + +#if defined(AO_HAVE_int_load_acquire_read) && !defined(AO_HAVE_int_load) +# define AO_int_load(addr) AO_int_load_acquire_read(addr) +# define AO_HAVE_int_load +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_int_load_acquire_read) +# define AO_int_load_dd_acquire_read(addr) \ + AO_int_load_acquire_read(addr) +# define AO_HAVE_int_load_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_int_load) +# define AO_int_load_dd_acquire_read(addr) \ + AO_int_load(addr) +# define AO_HAVE_int_load_dd_acquire_read +# endif +#endif + + +/* int_store */ + +#if defined(AO_HAVE_int_store_release) && !defined(AO_HAVE_int_store) +# define AO_int_store(addr, val) AO_int_store_release(addr,val) +# define AO_HAVE_int_store +#endif + +#if defined(AO_HAVE_int_store_full) && !defined(AO_HAVE_int_store_release) +# define AO_int_store_release(addr,val) AO_int_store_full(addr,val) +# define AO_HAVE_int_store_release +#endif + +#if defined(AO_HAVE_int_store_full) && !defined(AO_HAVE_int_store_write) +# define AO_int_store_write(addr,val) AO_int_store_full(addr,val) +# define AO_HAVE_int_store_write +#endif + +#if defined(AO_HAVE_int_store_release) && \ + !defined(AO_HAVE_int_store_release_write) +# define AO_int_store_release_write(addr, val) \ + AO_int_store_release(addr,val) +# define AO_HAVE_int_store_release_write +#endif + +#if defined(AO_HAVE_int_store_write) && !defined(AO_HAVE_int_store) +# define AO_int_store(addr, val) AO_int_store_write(addr,val) +# define AO_HAVE_int_store +#endif + +#if defined(AO_HAVE_int_store) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_store_release) +# define AO_int_store_release(addr,val) \ + (AO_nop_full(), AO_int_store(addr,val)) +# define AO_HAVE_int_store_release +#endif + +#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_int_store) && \ + !defined(AO_HAVE_int_store_write) +# define AO_int_store_write(addr, val) \ + (AO_nop_write(), AO_int_store(addr,val)) +# define AO_HAVE_int_store_write +#endif + +#if defined(AO_HAVE_int_store_write) && \ + !defined(AO_HAVE_int_store_release_write) +# define AO_int_store_release_write(addr, val) AO_int_store_write(addr,val) +# define AO_HAVE_int_store_release_write +#endif + +#if defined(AO_HAVE_int_store_release) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_store_full) +# define AO_int_store_full(addr, val) \ + (AO_int_store_release(addr, val), AO_nop_full()) +# define AO_HAVE_int_store_full +#endif + + +/* int_fetch_and_add */ +#if defined(AO_HAVE_int_compare_and_swap_full) && \ + !defined(AO_HAVE_int_fetch_and_add_full) + AO_INLINE AO_t + AO_int_fetch_and_add_full(volatile unsigned int *addr, + unsigned int incr) + { + unsigned int old; + do + { + old = *addr; + } + while (!AO_int_compare_and_swap_full(addr, old, old+incr)); + return old; + } +# define AO_HAVE_int_fetch_and_add_full +#endif + +#if defined(AO_HAVE_int_compare_and_swap_acquire) && \ + !defined(AO_HAVE_int_fetch_and_add_acquire) + AO_INLINE AO_t + AO_int_fetch_and_add_acquire(volatile unsigned int *addr, + unsigned int incr) + { + unsigned int old; + do + { + old = *addr; + } + while (!AO_int_compare_and_swap_acquire(addr, old, old+incr)); + return old; + } +# define AO_HAVE_int_fetch_and_add_acquire +#endif + +#if defined(AO_HAVE_int_compare_and_swap_release) && \ + !defined(AO_HAVE_int_fetch_and_add_release) + AO_INLINE AO_t + AO_int_fetch_and_add_release(volatile unsigned int *addr, + unsigned int incr) + { + unsigned int old; + do + { + old = *addr; + } + while (!AO_int_compare_and_swap_release(addr, old, old+incr)); + return old; + } +# define AO_HAVE_int_fetch_and_add_release +#endif + +#if defined(AO_HAVE_int_fetch_and_add_full) +# if !defined(AO_HAVE_int_fetch_and_add_release) +# define AO_int_fetch_and_add_release(addr, val) \ + AO_int_fetch_and_add_full(addr, val) +# define AO_HAVE_int_fetch_and_add_release +# endif +# if !defined(AO_HAVE_int_fetch_and_add_acquire) +# define AO_int_fetch_and_add_acquire(addr, val) \ + AO_int_fetch_and_add_full(addr, val) +# define AO_HAVE_int_fetch_and_add_acquire +# endif +# if !defined(AO_HAVE_int_fetch_and_add_write) +# define AO_int_fetch_and_add_write(addr, val) \ + AO_int_fetch_and_add_full(addr, val) +# define AO_HAVE_int_fetch_and_add_write +# endif +# if !defined(AO_HAVE_int_fetch_and_add_read) +# define AO_int_fetch_and_add_read(addr, val) \ + AO_int_fetch_and_add_full(addr, val) +# define AO_HAVE_int_fetch_and_add_read +# endif +#endif /* AO_HAVE_int_fetch_and_add_full */ + +#if !defined(AO_HAVE_int_fetch_and_add) && \ + defined(AO_HAVE_int_fetch_and_add_release) +# define AO_int_fetch_and_add(addr, val) \ + AO_int_fetch_and_add_release(addr, val) +# define AO_HAVE_int_fetch_and_add +#endif +#if !defined(AO_HAVE_int_fetch_and_add) && \ + defined(AO_HAVE_int_fetch_and_add_acquire) +# define AO_int_fetch_and_add(addr, val) \ + AO_int_fetch_and_add_acquire(addr, val) +# define AO_HAVE_int_fetch_and_add +#endif +#if !defined(AO_HAVE_int_fetch_and_add) && \ + defined(AO_HAVE_int_fetch_and_add_write) +# define AO_int_fetch_and_add(addr, val) \ + AO_int_fetch_and_add_write(addr, val) +# define AO_HAVE_int_fetch_and_add +#endif +#if !defined(AO_HAVE_int_fetch_and_add) && \ + defined(AO_HAVE_int_fetch_and_add_read) +# define AO_int_fetch_and_add(addr, val) \ + AO_int_fetch_and_add_read(addr, val) +# define AO_HAVE_int_fetch_and_add +#endif + +#if defined(AO_HAVE_int_fetch_and_add_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_fetch_and_add_full) +# define AO_int_fetch_and_add_full(addr, val) \ + (AO_nop_full(), AO_int_fetch_and_add_acquire(addr, val)) +#endif + +#if !defined(AO_HAVE_int_fetch_and_add_release_write) && \ + defined(AO_HAVE_int_fetch_and_add_write) +# define AO_int_fetch_and_add_release_write(addr, val) \ + AO_int_fetch_and_add_write(addr, val) +# define AO_HAVE_int_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_add_release_write) && \ + defined(AO_HAVE_int_fetch_and_add_release) +# define AO_int_fetch_and_add_release_write(addr, val) \ + AO_int_fetch_and_add_release(addr, val) +# define AO_HAVE_int_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_add_read) +# define AO_int_fetch_and_add_acquire_read(addr, val) \ + AO_int_fetch_and_add_read(addr, val) +# define AO_HAVE_int_fetch_and_add_acquire_read +#endif +#if !defined(AO_HAVE_int_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_add_acquire) +# define AO_int_fetch_and_add_acquire_read(addr, val) \ + AO_int_fetch_and_add_acquire(addr, val) +# define AO_HAVE_int_fetch_and_add_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_int_fetch_and_add_acquire_read) +# define AO_int_fetch_and_add_dd_acquire_read(addr, val) \ + AO_int_fetch_and_add_acquire_read(addr, val) +# define AO_HAVE_int_fetch_and_add_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_int_fetch_and_add) +# define AO_int_fetch_and_add_dd_acquire_read(addr, val) \ + AO_int_fetch_and_add(addr, val) +# define AO_HAVE_int_fetch_and_add_dd_acquire_read +# endif +#endif + +/* int_fetch_and_add1 */ + +#if defined(AO_HAVE_int_fetch_and_add_full) &&\ + !defined(AO_HAVE_int_fetch_and_add1_full) +# define AO_int_fetch_and_add1_full(addr) \ + AO_int_fetch_and_add_full(addr,1) +# define AO_HAVE_int_fetch_and_add1_full +#endif +#if defined(AO_HAVE_int_fetch_and_add_release) &&\ + !defined(AO_HAVE_int_fetch_and_add1_release) +# define AO_int_fetch_and_add1_release(addr) \ + AO_int_fetch_and_add_release(addr,1) +# define AO_HAVE_int_fetch_and_add1_release +#endif +#if defined(AO_HAVE_int_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_int_fetch_and_add1_acquire) +# define AO_int_fetch_and_add1_acquire(addr) \ + AO_int_fetch_and_add_acquire(addr,1) +# define AO_HAVE_int_fetch_and_add1_acquire +#endif +#if defined(AO_HAVE_int_fetch_and_add_write) &&\ + !defined(AO_HAVE_int_fetch_and_add1_write) +# define AO_int_fetch_and_add1_write(addr) \ + AO_int_fetch_and_add_write(addr,1) +# define AO_HAVE_int_fetch_and_add1_write +#endif +#if defined(AO_HAVE_int_fetch_and_add_read) &&\ + !defined(AO_HAVE_int_fetch_and_add1_read) +# define AO_int_fetch_and_add1_read(addr) \ + AO_int_fetch_and_add_read(addr,1) +# define AO_HAVE_int_fetch_and_add1_read +#endif +#if defined(AO_HAVE_int_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_int_fetch_and_add1_release_write) +# define AO_int_fetch_and_add1_release_write(addr) \ + AO_int_fetch_and_add_release_write(addr,1) +# define AO_HAVE_int_fetch_and_add1_release_write +#endif +#if defined(AO_HAVE_int_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_int_fetch_and_add1_acquire_read) +# define AO_int_fetch_and_add1_acquire_read(addr) \ + AO_int_fetch_and_add_acquire_read(addr,1) +# define AO_HAVE_int_fetch_and_add1_acquire_read +#endif +#if defined(AO_HAVE_int_fetch_and_add) &&\ + !defined(AO_HAVE_int_fetch_and_add1) +# define AO_int_fetch_and_add1(addr) \ + AO_int_fetch_and_add(addr,1) +# define AO_HAVE_int_fetch_and_add1 +#endif + +#if defined(AO_HAVE_int_fetch_and_add1_full) +# if !defined(AO_HAVE_int_fetch_and_add1_release) +# define AO_int_fetch_and_add1_release(addr) \ + AO_int_fetch_and_add1_full(addr) +# define AO_HAVE_int_fetch_and_add1_release +# endif +# if !defined(AO_HAVE_int_fetch_and_add1_acquire) +# define AO_int_fetch_and_add1_acquire(addr) \ + AO_int_fetch_and_add1_full(addr) +# define AO_HAVE_int_fetch_and_add1_acquire +# endif +# if !defined(AO_HAVE_int_fetch_and_add1_write) +# define AO_int_fetch_and_add1_write(addr) \ + AO_int_fetch_and_add1_full(addr) +# define AO_HAVE_int_fetch_and_add1_write +# endif +# if !defined(AO_HAVE_int_fetch_and_add1_read) +# define AO_int_fetch_and_add1_read(addr) \ + AO_int_fetch_and_add1_full(addr) +# define AO_HAVE_int_fetch_and_add1_read +# endif +#endif /* AO_HAVE_int_fetch_and_add1_full */ + +#if !defined(AO_HAVE_int_fetch_and_add1) && \ + defined(AO_HAVE_int_fetch_and_add1_release) +# define AO_int_fetch_and_add1(addr) \ + AO_int_fetch_and_add1_release(addr) +# define AO_HAVE_int_fetch_and_add1 +#endif +#if !defined(AO_HAVE_int_fetch_and_add1) && \ + defined(AO_HAVE_int_fetch_and_add1_acquire) +# define AO_int_fetch_and_add1(addr) \ + AO_int_fetch_and_add1_acquire(addr) +# define AO_HAVE_int_fetch_and_add1 +#endif +#if !defined(AO_HAVE_int_fetch_and_add1) && \ + defined(AO_HAVE_int_fetch_and_add1_write) +# define AO_int_fetch_and_add1(addr) \ + AO_int_fetch_and_add1_write(addr) +# define AO_HAVE_int_fetch_and_add1 +#endif +#if !defined(AO_HAVE_int_fetch_and_add1) && \ + defined(AO_HAVE_int_fetch_and_add1_read) +# define AO_int_fetch_and_add1(addr) \ + AO_int_fetch_and_add1_read(addr) +# define AO_HAVE_int_fetch_and_add1 +#endif + +#if defined(AO_HAVE_int_fetch_and_add1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_fetch_and_add1_full) +# define AO_int_fetch_and_add1_full(addr) \ + (AO_nop_full(), AO_int_fetch_and_add1_acquire(addr)) +# define AO_HAVE_int_fetch_and_add1_full +#endif + +#if !defined(AO_HAVE_int_fetch_and_add1_release_write) && \ + defined(AO_HAVE_int_fetch_and_add1_write) +# define AO_int_fetch_and_add1_release_write(addr) \ + AO_int_fetch_and_add1_write(addr) +# define AO_HAVE_int_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_add1_release_write) && \ + defined(AO_HAVE_int_fetch_and_add1_release) +# define AO_int_fetch_and_add1_release_write(addr) \ + AO_int_fetch_and_add1_release(addr) +# define AO_HAVE_int_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_add1_read) +# define AO_int_fetch_and_add1_acquire_read(addr) \ + AO_int_fetch_and_add1_read(addr) +# define AO_HAVE_int_fetch_and_add1_acquire_read +#endif +#if !defined(AO_HAVE_int_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_add1_acquire) +# define AO_int_fetch_and_add1_acquire_read(addr) \ + AO_int_fetch_and_add1_acquire(addr) +# define AO_HAVE_int_fetch_and_add1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_int_fetch_and_add1_acquire_read) +# define AO_int_fetch_and_add1_dd_acquire_read(addr) \ + AO_int_fetch_and_add1_acquire_read(addr) +# define AO_HAVE_int_fetch_and_add1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_int_fetch_and_add1) +# define AO_int_fetch_and_add1_dd_acquire_read(addr) \ + AO_int_fetch_and_add1(addr) +# define AO_HAVE_int_fetch_and_add1_dd_acquire_read +# endif +#endif + +/* int_fetch_and_sub1 */ + +#if defined(AO_HAVE_int_fetch_and_add_full) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_full) +# define AO_int_fetch_and_sub1_full(addr) \ + AO_int_fetch_and_add_full(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_full +#endif +#if defined(AO_HAVE_int_fetch_and_add_release) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_release) +# define AO_int_fetch_and_sub1_release(addr) \ + AO_int_fetch_and_add_release(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_release +#endif +#if defined(AO_HAVE_int_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_acquire) +# define AO_int_fetch_and_sub1_acquire(addr) \ + AO_int_fetch_and_add_acquire(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_acquire +#endif +#if defined(AO_HAVE_int_fetch_and_add_write) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_write) +# define AO_int_fetch_and_sub1_write(addr) \ + AO_int_fetch_and_add_write(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_write +#endif +#if defined(AO_HAVE_int_fetch_and_add_read) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_read) +# define AO_int_fetch_and_sub1_read(addr) \ + AO_int_fetch_and_add_read(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_read +#endif +#if defined(AO_HAVE_int_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_release_write) +# define AO_int_fetch_and_sub1_release_write(addr) \ + AO_int_fetch_and_add_release_write(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_release_write +#endif +#if defined(AO_HAVE_int_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_int_fetch_and_sub1_acquire_read) +# define AO_int_fetch_and_sub1_acquire_read(addr) \ + AO_int_fetch_and_add_acquire_read(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1_acquire_read +#endif +#if defined(AO_HAVE_int_fetch_and_add) &&\ + !defined(AO_HAVE_int_fetch_and_sub1) +# define AO_int_fetch_and_sub1(addr) \ + AO_int_fetch_and_add(addr,(unsigned int)(-1)) +# define AO_HAVE_int_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_int_fetch_and_sub1_full) +# if !defined(AO_HAVE_int_fetch_and_sub1_release) +# define AO_int_fetch_and_sub1_release(addr) \ + AO_int_fetch_and_sub1_full(addr) +# define AO_HAVE_int_fetch_and_sub1_release +# endif +# if !defined(AO_HAVE_int_fetch_and_sub1_acquire) +# define AO_int_fetch_and_sub1_acquire(addr) \ + AO_int_fetch_and_sub1_full(addr) +# define AO_HAVE_int_fetch_and_sub1_acquire +# endif +# if !defined(AO_HAVE_int_fetch_and_sub1_write) +# define AO_int_fetch_and_sub1_write(addr) \ + AO_int_fetch_and_sub1_full(addr) +# define AO_HAVE_int_fetch_and_sub1_write +# endif +# if !defined(AO_HAVE_int_fetch_and_sub1_read) +# define AO_int_fetch_and_sub1_read(addr) \ + AO_int_fetch_and_sub1_full(addr) +# define AO_HAVE_int_fetch_and_sub1_read +# endif +#endif /* AO_HAVE_int_fetch_and_sub1_full */ + +#if !defined(AO_HAVE_int_fetch_and_sub1) && \ + defined(AO_HAVE_int_fetch_and_sub1_release) +# define AO_int_fetch_and_sub1(addr) \ + AO_int_fetch_and_sub1_release(addr) +# define AO_HAVE_int_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1) && \ + defined(AO_HAVE_int_fetch_and_sub1_acquire) +# define AO_int_fetch_and_sub1(addr) \ + AO_int_fetch_and_sub1_acquire(addr) +# define AO_HAVE_int_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1) && \ + defined(AO_HAVE_int_fetch_and_sub1_write) +# define AO_int_fetch_and_sub1(addr) \ + AO_int_fetch_and_sub1_write(addr) +# define AO_HAVE_int_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1) && \ + defined(AO_HAVE_int_fetch_and_sub1_read) +# define AO_int_fetch_and_sub1(addr) \ + AO_int_fetch_and_sub1_read(addr) +# define AO_HAVE_int_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_int_fetch_and_sub1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_int_fetch_and_sub1_full) +# define AO_int_fetch_and_sub1_full(addr) \ + (AO_nop_full(), AO_int_fetch_and_sub1_acquire(addr)) +# define AO_HAVE_int_fetch_and_sub1_full +#endif + +#if !defined(AO_HAVE_int_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_int_fetch_and_sub1_write) +# define AO_int_fetch_and_sub1_release_write(addr) \ + AO_int_fetch_and_sub1_write(addr) +# define AO_HAVE_int_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_int_fetch_and_sub1_release) +# define AO_int_fetch_and_sub1_release_write(addr) \ + AO_int_fetch_and_sub1_release(addr) +# define AO_HAVE_int_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_sub1_read) +# define AO_int_fetch_and_sub1_acquire_read(addr) \ + AO_int_fetch_and_sub1_read(addr) +# define AO_HAVE_int_fetch_and_sub1_acquire_read +#endif +#if !defined(AO_HAVE_int_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_int_fetch_and_sub1_acquire) +# define AO_int_fetch_and_sub1_acquire_read(addr) \ + AO_int_fetch_and_sub1_acquire(addr) +# define AO_HAVE_int_fetch_and_sub1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_int_fetch_and_sub1_acquire_read) +# define AO_int_fetch_and_sub1_dd_acquire_read(addr) \ + AO_int_fetch_and_sub1_acquire_read(addr) +# define AO_HAVE_int_fetch_and_sub1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_int_fetch_and_sub1) +# define AO_int_fetch_and_sub1_dd_acquire_read(addr) \ + AO_int_fetch_and_sub1(addr) +# define AO_HAVE_int_fetch_and_sub1_dd_acquire_read +# endif +#endif + diff --git a/libatomic_ops-1.2/src/atomic_ops/generalize-small.template b/libatomic_ops-1.2/src/atomic_ops/generalize-small.template new file mode 100644 index 0000000..b7e02b0 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/generalize-small.template @@ -0,0 +1,575 @@ +/* XSIZE_load */ +#if defined(AO_HAVE_XSIZE_load_acquire) && !defined(AO_HAVE_XSIZE_load) +# define AO_XSIZE_load(addr) AO_XSIZE_load_acquire(addr) +# define AO_HAVE_XSIZE_load +#endif + +#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_acquire) +# define AO_XSIZE_load_acquire(addr) AO_XSIZE_load_full(addr) +# define AO_HAVE_XSIZE_load_acquire +#endif + +#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_read) +# define AO_XSIZE_load_read(addr) AO_XSIZE_load_full(addr) +# define AO_HAVE_XSIZE_load_read +#endif + +#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_acquire) +# define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_acquire(addr) +# define AO_HAVE_XSIZE_load_acquire_read +#endif + +#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_load_acquire) + AO_INLINE unsigned XCTYPE + AO_XSIZE_load_acquire(volatile unsigned XCTYPE *addr) + { + unsigned XCTYPE result = AO_XSIZE_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_full(); + return result; + } +# define AO_HAVE_XSIZE_load_acquire +#endif + +#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_read) && \ + !defined(AO_HAVE_XSIZE_load_read) + AO_INLINE unsigned XCTYPE + AO_XSIZE_load_read(volatile unsigned XCTYPE *addr) + { + unsigned XCTYPE result = AO_XSIZE_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_read(); + return result; + } +# define AO_HAVE_XSIZE_load_read +#endif + +#if defined(AO_HAVE_XSIZE_load_acquire) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_load_full) +# define AO_XSIZE_load_full(addr) (AO_nop_full(), AO_XSIZE_load_acquire(addr)) +# define AO_HAVE_XSIZE_load_full +#endif + +#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_read) +# define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_read(addr) +# define AO_HAVE_XSIZE_load_acquire_read +#endif + +#if defined(AO_HAVE_XSIZE_load_acquire_read) && !defined(AO_HAVE_XSIZE_load) +# define AO_XSIZE_load(addr) AO_XSIZE_load_acquire_read(addr) +# define AO_HAVE_XSIZE_load +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_XSIZE_load_acquire_read) +# define AO_XSIZE_load_dd_acquire_read(addr) \ + AO_XSIZE_load_acquire_read(addr) +# define AO_HAVE_XSIZE_load_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_XSIZE_load) +# define AO_XSIZE_load_dd_acquire_read(addr) \ + AO_XSIZE_load(addr) +# define AO_HAVE_XSIZE_load_dd_acquire_read +# endif +#endif + + +/* XSIZE_store */ + +#if defined(AO_HAVE_XSIZE_store_release) && !defined(AO_HAVE_XSIZE_store) +# define AO_XSIZE_store(addr, val) AO_XSIZE_store_release(addr,val) +# define AO_HAVE_XSIZE_store +#endif + +#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_release) +# define AO_XSIZE_store_release(addr,val) AO_XSIZE_store_full(addr,val) +# define AO_HAVE_XSIZE_store_release +#endif + +#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_write) +# define AO_XSIZE_store_write(addr,val) AO_XSIZE_store_full(addr,val) +# define AO_HAVE_XSIZE_store_write +#endif + +#if defined(AO_HAVE_XSIZE_store_release) && \ + !defined(AO_HAVE_XSIZE_store_release_write) +# define AO_XSIZE_store_release_write(addr, val) \ + AO_XSIZE_store_release(addr,val) +# define AO_HAVE_XSIZE_store_release_write +#endif + +#if defined(AO_HAVE_XSIZE_store_write) && !defined(AO_HAVE_XSIZE_store) +# define AO_XSIZE_store(addr, val) AO_XSIZE_store_write(addr,val) +# define AO_HAVE_XSIZE_store +#endif + +#if defined(AO_HAVE_XSIZE_store) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_store_release) +# define AO_XSIZE_store_release(addr,val) \ + (AO_nop_full(), AO_XSIZE_store(addr,val)) +# define AO_HAVE_XSIZE_store_release +#endif + +#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_XSIZE_store) && \ + !defined(AO_HAVE_XSIZE_store_write) +# define AO_XSIZE_store_write(addr, val) \ + (AO_nop_write(), AO_XSIZE_store(addr,val)) +# define AO_HAVE_XSIZE_store_write +#endif + +#if defined(AO_HAVE_XSIZE_store_write) && \ + !defined(AO_HAVE_XSIZE_store_release_write) +# define AO_XSIZE_store_release_write(addr, val) AO_XSIZE_store_write(addr,val) +# define AO_HAVE_XSIZE_store_release_write +#endif + +#if defined(AO_HAVE_XSIZE_store_release) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_store_full) +# define AO_XSIZE_store_full(addr, val) \ + (AO_XSIZE_store_release(addr, val), AO_nop_full()) +# define AO_HAVE_XSIZE_store_full +#endif + + +/* XSIZE_fetch_and_add */ +#if defined(AO_HAVE_XSIZE_compare_and_swap_full) && \ + !defined(AO_HAVE_XSIZE_fetch_and_add_full) + AO_INLINE AO_t + AO_XSIZE_fetch_and_add_full(volatile unsigned XCTYPE *addr, + unsigned XCTYPE incr) + { + unsigned XCTYPE old; + do + { + old = *addr; + } + while (!AO_XSIZE_compare_and_swap_full(addr, old, old+incr)); + return old; + } +# define AO_HAVE_XSIZE_fetch_and_add_full +#endif + +#if defined(AO_HAVE_XSIZE_compare_and_swap_acquire) && \ + !defined(AO_HAVE_XSIZE_fetch_and_add_acquire) + AO_INLINE AO_t + AO_XSIZE_fetch_and_add_acquire(volatile unsigned XCTYPE *addr, + unsigned XCTYPE incr) + { + unsigned XCTYPE old; + do + { + old = *addr; + } + while (!AO_XSIZE_compare_and_swap_acquire(addr, old, old+incr)); + return old; + } +# define AO_HAVE_XSIZE_fetch_and_add_acquire +#endif + +#if defined(AO_HAVE_XSIZE_compare_and_swap_release) && \ + !defined(AO_HAVE_XSIZE_fetch_and_add_release) + AO_INLINE AO_t + AO_XSIZE_fetch_and_add_release(volatile unsigned XCTYPE *addr, + unsigned XCTYPE incr) + { + unsigned XCTYPE old; + do + { + old = *addr; + } + while (!AO_XSIZE_compare_and_swap_release(addr, old, old+incr)); + return old; + } +# define AO_HAVE_XSIZE_fetch_and_add_release +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_add_full) +# if !defined(AO_HAVE_XSIZE_fetch_and_add_release) +# define AO_XSIZE_fetch_and_add_release(addr, val) \ + AO_XSIZE_fetch_and_add_full(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_release +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire) +# define AO_XSIZE_fetch_and_add_acquire(addr, val) \ + AO_XSIZE_fetch_and_add_full(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_acquire +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add_write) +# define AO_XSIZE_fetch_and_add_write(addr, val) \ + AO_XSIZE_fetch_and_add_full(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_write +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add_read) +# define AO_XSIZE_fetch_and_add_read(addr, val) \ + AO_XSIZE_fetch_and_add_full(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_read +# endif +#endif /* AO_HAVE_XSIZE_fetch_and_add_full */ + +#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_release) +# define AO_XSIZE_fetch_and_add(addr, val) \ + AO_XSIZE_fetch_and_add_release(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_acquire) +# define AO_XSIZE_fetch_and_add(addr, val) \ + AO_XSIZE_fetch_and_add_acquire(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_write) +# define AO_XSIZE_fetch_and_add(addr, val) \ + AO_XSIZE_fetch_and_add_write(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_read) +# define AO_XSIZE_fetch_and_add(addr, val) \ + AO_XSIZE_fetch_and_add_read(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_fetch_and_add_full) +# define AO_XSIZE_fetch_and_add_full(addr, val) \ + (AO_nop_full(), AO_XSIZE_fetch_and_add_acquire(addr, val)) +#endif + +#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_write) +# define AO_XSIZE_fetch_and_add_release_write(addr, val) \ + AO_XSIZE_fetch_and_add_write(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_release) +# define AO_XSIZE_fetch_and_add_release_write(addr, val) \ + AO_XSIZE_fetch_and_add_release(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_read) +# define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \ + AO_XSIZE_fetch_and_add_read(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_acquire_read +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_add_acquire) +# define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \ + AO_XSIZE_fetch_and_add_acquire(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) +# define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \ + AO_XSIZE_fetch_and_add_acquire_read(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_XSIZE_fetch_and_add) +# define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \ + AO_XSIZE_fetch_and_add(addr, val) +# define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read +# endif +#endif + +/* XSIZE_fetch_and_add1 */ + +#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_full) +# define AO_XSIZE_fetch_and_add1_full(addr) \ + AO_XSIZE_fetch_and_add_full(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_full +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_release) +# define AO_XSIZE_fetch_and_add1_release(addr) \ + AO_XSIZE_fetch_and_add_release(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_release +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) +# define AO_XSIZE_fetch_and_add1_acquire(addr) \ + AO_XSIZE_fetch_and_add_acquire(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_acquire +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_write) +# define AO_XSIZE_fetch_and_add1_write(addr) \ + AO_XSIZE_fetch_and_add_write(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_write +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_read) +# define AO_XSIZE_fetch_and_add1_read(addr) \ + AO_XSIZE_fetch_and_add_read(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_read +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) +# define AO_XSIZE_fetch_and_add1_release_write(addr) \ + AO_XSIZE_fetch_and_add_release_write(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_release_write +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) +# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \ + AO_XSIZE_fetch_and_add_acquire_read(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_add1) +# define AO_XSIZE_fetch_and_add1(addr) \ + AO_XSIZE_fetch_and_add(addr,1) +# define AO_HAVE_XSIZE_fetch_and_add1 +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_add1_full) +# if !defined(AO_HAVE_XSIZE_fetch_and_add1_release) +# define AO_XSIZE_fetch_and_add1_release(addr) \ + AO_XSIZE_fetch_and_add1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_release +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) +# define AO_XSIZE_fetch_and_add1_acquire(addr) \ + AO_XSIZE_fetch_and_add1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_acquire +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add1_write) +# define AO_XSIZE_fetch_and_add1_write(addr) \ + AO_XSIZE_fetch_and_add1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_write +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_add1_read) +# define AO_XSIZE_fetch_and_add1_read(addr) \ + AO_XSIZE_fetch_and_add1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_read +# endif +#endif /* AO_HAVE_XSIZE_fetch_and_add1_full */ + +#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_release) +# define AO_XSIZE_fetch_and_add1(addr) \ + AO_XSIZE_fetch_and_add1_release(addr) +# define AO_HAVE_XSIZE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) +# define AO_XSIZE_fetch_and_add1(addr) \ + AO_XSIZE_fetch_and_add1_acquire(addr) +# define AO_HAVE_XSIZE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_write) +# define AO_XSIZE_fetch_and_add1(addr) \ + AO_XSIZE_fetch_and_add1_write(addr) +# define AO_HAVE_XSIZE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_read) +# define AO_XSIZE_fetch_and_add1(addr) \ + AO_XSIZE_fetch_and_add1_read(addr) +# define AO_HAVE_XSIZE_fetch_and_add1 +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_fetch_and_add1_full) +# define AO_XSIZE_fetch_and_add1_full(addr) \ + (AO_nop_full(), AO_XSIZE_fetch_and_add1_acquire(addr)) +# define AO_HAVE_XSIZE_fetch_and_add1_full +#endif + +#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_write) +# define AO_XSIZE_fetch_and_add1_release_write(addr) \ + AO_XSIZE_fetch_and_add1_write(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_release) +# define AO_XSIZE_fetch_and_add1_release_write(addr) \ + AO_XSIZE_fetch_and_add1_release(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_read) +# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \ + AO_XSIZE_fetch_and_add1_read(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) +# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \ + AO_XSIZE_fetch_and_add1_acquire(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) +# define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \ + AO_XSIZE_fetch_and_add1_acquire_read(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_XSIZE_fetch_and_add1) +# define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \ + AO_XSIZE_fetch_and_add1(addr) +# define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read +# endif +#endif + +/* XSIZE_fetch_and_sub1 */ + +#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_full) +# define AO_XSIZE_fetch_and_sub1_full(addr) \ + AO_XSIZE_fetch_and_add_full(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_full +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_release) +# define AO_XSIZE_fetch_and_sub1_release(addr) \ + AO_XSIZE_fetch_and_add_release(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_release +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) +# define AO_XSIZE_fetch_and_sub1_acquire(addr) \ + AO_XSIZE_fetch_and_add_acquire(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_acquire +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_write) +# define AO_XSIZE_fetch_and_sub1_write(addr) \ + AO_XSIZE_fetch_and_add_write(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_write +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_read) +# define AO_XSIZE_fetch_and_sub1_read(addr) \ + AO_XSIZE_fetch_and_add_read(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_read +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) +# define AO_XSIZE_fetch_and_sub1_release_write(addr) \ + AO_XSIZE_fetch_and_add_release_write(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_release_write +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) +# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \ + AO_XSIZE_fetch_and_add_acquire_read(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read +#endif +#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\ + !defined(AO_HAVE_XSIZE_fetch_and_sub1) +# define AO_XSIZE_fetch_and_sub1(addr) \ + AO_XSIZE_fetch_and_add(addr,(unsigned XCTYPE)(-1)) +# define AO_HAVE_XSIZE_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_sub1_full) +# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release) +# define AO_XSIZE_fetch_and_sub1_release(addr) \ + AO_XSIZE_fetch_and_sub1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_release +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) +# define AO_XSIZE_fetch_and_sub1_acquire(addr) \ + AO_XSIZE_fetch_and_sub1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_acquire +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_write) +# define AO_XSIZE_fetch_and_sub1_write(addr) \ + AO_XSIZE_fetch_and_sub1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_write +# endif +# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_read) +# define AO_XSIZE_fetch_and_sub1_read(addr) \ + AO_XSIZE_fetch_and_sub1_full(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_read +# endif +#endif /* AO_HAVE_XSIZE_fetch_and_sub1_full */ + +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_release) +# define AO_XSIZE_fetch_and_sub1(addr) \ + AO_XSIZE_fetch_and_sub1_release(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) +# define AO_XSIZE_fetch_and_sub1(addr) \ + AO_XSIZE_fetch_and_sub1_acquire(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_write) +# define AO_XSIZE_fetch_and_sub1(addr) \ + AO_XSIZE_fetch_and_sub1_write(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_read) +# define AO_XSIZE_fetch_and_sub1(addr) \ + AO_XSIZE_fetch_and_sub1_read(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_XSIZE_fetch_and_sub1_full) +# define AO_XSIZE_fetch_and_sub1_full(addr) \ + (AO_nop_full(), AO_XSIZE_fetch_and_sub1_acquire(addr)) +# define AO_HAVE_XSIZE_fetch_and_sub1_full +#endif + +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_write) +# define AO_XSIZE_fetch_and_sub1_release_write(addr) \ + AO_XSIZE_fetch_and_sub1_write(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_release) +# define AO_XSIZE_fetch_and_sub1_release_write(addr) \ + AO_XSIZE_fetch_and_sub1_release(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_read) +# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \ + AO_XSIZE_fetch_and_sub1_read(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read +#endif +#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) +# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \ + AO_XSIZE_fetch_and_sub1_acquire(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) +# define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \ + AO_XSIZE_fetch_and_sub1_acquire_read(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_XSIZE_fetch_and_sub1) +# define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \ + AO_XSIZE_fetch_and_sub1(addr) +# define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read +# endif +#endif + diff --git a/libatomic_ops-1.2/src/atomic_ops/generalize.h b/libatomic_ops-1.2/src/atomic_ops/generalize.h new file mode 100644 index 0000000..bfcf2d7 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/generalize.h @@ -0,0 +1,1355 @@ +/* + * Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Generalize atomic operations for atomic_ops.h. + * Should not be included directly. + * + * We make no attempt to define useless operations, such as + * AO_nop_acquire + * AO_nop_release + * + * We have also so far neglected to define some others, which + * do not appear likely to be useful, e.g. stores with acquire + * or read barriers. + * + * This file is sometimes included twice by atomic_ops.h. + * All definitions include explicit checks that we are not replacing + * an earlier definition. In general, more desirable expansions + * appear earlier so that we are more likely to use them. + * + * We only make safe generalizations, except that by default we define + * the ...dd_acquire_read operations to be equivalent to those without + * a barrier. On platforms for which this is unsafe, the platform-specific + * file must define AO_NO_DD_ORDERING. + */ + +#ifndef ATOMIC_OPS_H +# error Atomic_ops_generalize.h should not be included directly. +#endif + +#if AO_CHAR_TS_T +# define AO_TS_COMPARE_AND_SWAP_FULL(a,o,n) \ + AO_char_compare_and_swap_full(a,o,n) +# define AO_TS_COMPARE_AND_SWAP_ACQUIRE(a,o,n) \ + AO_char_compare_and_swap_acquire(a,o,n) +# define AO_TS_COMPARE_AND_SWAP_RELEASE(a,o,n) \ + AO_char_compare_and_swap_release(a,o,n) +# define AO_TS_COMPARE_AND_SWAP(a,o,n) \ + AO_char_compare_and_swap(a,o,n) +#endif + +#if AO_AO_TS_T +# define AO_TS_COMPARE_AND_SWAP_FULL(a,o,n) \ + AO_compare_and_swap_full(a,o,n) +# define AO_TS_COMPARE_AND_SWAP_ACQUIRE(a,o,n) \ + AO_compare_and_swap_acquire(a,o,n) +# define AO_TS_COMPARE_AND_SWAP_RELEASE(a,o,n) \ + AO_compare_and_swap_release(a,o,n) +# define AO_TS_COMPARE_AND_SWAP(a,o,n) \ + AO_compare_and_swap(a,o,n) +#endif + +/* Generate test_and_set_full, if necessary and possible. */ +#if !defined(AO_HAVE_test_and_set) && \ + !defined(AO_HAVE_test_and_set_release) && \ + !defined(AO_HAVE_test_and_set_acquire) && \ + !defined(AO_HAVE_test_and_set_read) && \ + !defined(AO_HAVE_test_and_set_full) +# if AO_AO_TS_T && defined(AO_HAVE_compare_and_swap_full) || \ + AO_CHAR_TS_T && defined(AO_HAVE_char_compare_and_swap_full) + AO_INLINE AO_TS_VAL_t + AO_test_and_set_full(volatile AO_TS_t *addr) + { + if (AO_TS_COMPARE_AND_SWAP_FULL(addr, AO_TS_CLEAR, AO_TS_SET)) + return AO_TS_CLEAR; + else + return AO_TS_SET; + } +# define AO_HAVE_test_and_set_full +# endif /* AO_HAVE_compare_and_swap_full */ + +# if AO_AO_TS_T && defined(AO_HAVE_compare_and_swap_acquire) || \ + AO_CHAR_TS_T && defined(AO_HAVE_char_compare_and_swap_acquire) + AO_INLINE AO_TS_VAL_t + AO_test_and_set_acquire(volatile AO_TS_t *addr) + { + if (AO_TS_COMPARE_AND_SWAP_ACQUIRE(addr, AO_TS_CLEAR, AO_TS_SET)) + return AO_TS_CLEAR; + else + return AO_TS_SET; + } +# define AO_HAVE_test_and_set_acquire +# endif /* AO_HAVE_compare_and_swap_acquire */ + +# if AO_AO_TS_T && defined(AO_HAVE_compare_and_swap_release) || \ + AO_CHAR_TS_T && defined(AO_HAVE_char_compare_and_swap_release) + AO_INLINE AO_TS_VAL_t + AO_test_and_set_release(volatile AO_TS_t *addr) + { + if (AO_TS_COMPARE_AND_SWAP_RELEASE(addr, AO_TS_CLEAR, AO_TS_SET)) + return AO_TS_CLEAR; + else + return AO_TS_SET; + } +# define AO_HAVE_test_and_set_release +# endif /* AO_HAVE_compare_and_swap_release */ + +# if AO_AO_TS_T && defined(AO_HAVE_compare_and_swap) || \ + AO_CHAR_TS_T && defined(AO_HAVE_char_compare_and_swap) + AO_INLINE AO_TS_VAL_t + AO_test_and_set(volatile AO_TS_t *addr) + { + if (AO_TS_COMPARE_AND_SWAP(addr, AO_TS_CLEAR, AO_TS_SET)) + return AO_TS_CLEAR; + else + return AO_TS_SET; + } +# define AO_HAVE_test_and_set +# endif /* AO_HAVE_compare_and_swap */ + +# if defined(AO_HAVE_test_and_set) && defined(AO_HAVE_nop_full) \ + && !defined(AO_HAVE_test_and_set_acquire) + AO_INLINE AO_TS_VAL_t + AO_test_and_set_acquire(volatile AO_TS_t *addr) + { + AO_TS_VAL_t result = AO_test_and_set(addr); + AO_nop_full(); + return result; + } +# define AO_HAVE_test_and_set_acquire +# endif + +#endif /* No prior test and set */ + +/* Nop */ +#if !defined(AO_HAVE_nop) + AO_INLINE void AO_nop(void) {} +# define AO_HAVE_nop +#endif + +#if defined(AO_HAVE_test_and_set_full) && !defined(AO_HAVE_nop_full) + AO_INLINE void + AO_nop_full() + { + AO_TS_t dummy = AO_TS_INITIALIZER; + AO_test_and_set_full(&dummy); + } +# define AO_HAVE_nop_full +#endif + +#if defined(AO_HAVE_nop_acquire) +# error AO_nop_acquire is useless: dont define. +#endif +#if defined(AO_HAVE_nop_release) +# error AO_nop_release is useless: dont define. +#endif + +#if defined(AO_HAVE_nop_full) && !defined(AO_HAVE_nop_read) +# define AO_nop_read() AO_nop_full() +# define AO_HAVE_nop_read +#endif + +#if defined(AO_HAVE_nop_full) && !defined(AO_HAVE_nop_write) +# define AO_nop_write() AO_nop_full() +# define AO_HAVE_nop_write +#endif + +/* Load */ +#if defined(AO_HAVE_load_full) && !defined(AO_HAVE_load_acquire) +# define AO_load_acquire(addr) AO_load_full(addr) +# define AO_HAVE_load_acquire +#endif + +#if defined(AO_HAVE_load_acquire) && !defined(AO_HAVE_load) +# define AO_load(addr) AO_load_acquire(addr) +# define AO_HAVE_load +#endif + +#if defined(AO_HAVE_load_full) && !defined(AO_HAVE_load_read) +# define AO_load_read(addr) AO_load_full(addr) +# define AO_HAVE_load_read +#endif + +#if !defined(AO_HAVE_load_acquire_read) && defined(AO_HAVE_load_acquire) +# define AO_load_acquire_read(addr) AO_load_acquire(addr) +# define AO_HAVE_load_acquire_read +#endif + +#if defined(AO_HAVE_load) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_load_acquire) + AO_INLINE AO_t + AO_load_acquire(volatile AO_t *addr) + { + AO_t result = AO_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_full(); + return result; + } +# define AO_HAVE_load_acquire +#endif + +#if defined(AO_HAVE_load) && defined(AO_HAVE_nop_read) && \ + !defined(AO_HAVE_load_read) + AO_INLINE AO_t + AO_load_read(volatile AO_t *addr) + { + AO_t result = AO_load(addr); + /* Acquire barrier would be useless, since the load could be delayed */ + /* beyond it. */ + AO_nop_read(); + return result; + } +# define AO_HAVE_load_read +#endif + +#if defined(AO_HAVE_load_acquire) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_load_full) +# define AO_load_full(addr) (AO_nop_full(), AO_load_acquire(addr)) +# define AO_HAVE_load_full +#endif + +#if !defined(AO_HAVE_load_acquire_read) && defined(AO_HAVE_load_read) +# define AO_load_acquire_read(addr) AO_load_read(addr) +# define AO_HAVE_load_acquire_read +#endif + +#if defined(AO_HAVE_load_acquire_read) && !defined(AO_HAVE_load) +# define AO_load(addr) AO_load_acquire_read(addr) +# define AO_HAVE_load +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_load_acquire_read) +# define AO_load_dd_acquire_read(addr) AO_load_acquire_read(addr) +# define AO_HAVE_load_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_load) +# define AO_load_dd_acquire_read(addr) AO_load(addr) +# define AO_HAVE_load_dd_acquire_read +# endif +#endif + + +/* Store */ + +#if defined(AO_HAVE_store_full) && !defined(AO_HAVE_store_release) +# define AO_store_release(addr,val) AO_store_full(addr,val) +# define AO_HAVE_store_release +#endif + +#if defined(AO_HAVE_store_release) && !defined(AO_HAVE_store) +# define AO_store(addr, val) AO_store_release(addr,val) +# define AO_HAVE_store +#endif + +#if defined(AO_HAVE_store_full) && !defined(AO_HAVE_store_write) +# define AO_store_write(addr,val) AO_store_full(addr,val) +# define AO_HAVE_store_write +#endif + +#if defined(AO_HAVE_store_release) && !defined(AO_HAVE_store_release_write) +# define AO_store_release_write(addr, val) AO_store_release(addr,val) +# define AO_HAVE_store_release_write +#endif + +#if defined(AO_HAVE_store_write) && !defined(AO_HAVE_store) +# define AO_store(addr, val) AO_store_write(addr,val) +# define AO_HAVE_store +#endif + +#if defined(AO_HAVE_store) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_store_release) +# define AO_store_release(addr,val) (AO_nop_full(), AO_store(addr,val)) +# define AO_HAVE_store_release +#endif + +#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_store) && \ + !defined(AO_HAVE_store_write) +# define AO_store_write(addr, val) (AO_nop_write(), AO_store(addr,val)) +# define AO_HAVE_store_write +#endif + +#if defined(AO_HAVE_store_write) && !defined(AO_HAVE_store_release_write) +# define AO_store_release_write(addr, val) AO_store_write(addr,val) +# define AO_HAVE_store_release_write +#endif + +#if defined(AO_HAVE_store_release) && defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_store_full) +# define AO_store_full(addr, val) (AO_store_release(addr, val), AO_nop_full()) +# define AO_HAVE_store_full +#endif + +/* NEC LE-IT: Test and set */ +#if defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_test_and_set_release) +# define AO_test_and_set_release(addr) \ + (AO_nop_full(), AO_test_and_set(addr)) +# define AO_HAVE_test_and_set_release +#endif + +#if defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_test_and_set_acquire) +AO_INLINE AO_TS_t +AO_test_and_set_acquire(volatile AO_TS_t *addr) +{ + AO_TS_t res = AO_test_and_set(addr); + AO_nop_full(); + return res; +} +# define AO_HAVE_test_and_set_acquire +#endif + + +/* Fetch_and_add */ +/* We first try to implement fetch_and_add variants in terms */ +/* of the corresponding compare_and_swap variants to minimize */ +/* adding barriers. */ +#if defined(AO_HAVE_compare_and_swap_full) && \ + !defined(AO_HAVE_fetch_and_add_full) + AO_INLINE AO_t + AO_fetch_and_add_full(volatile AO_t *addr, AO_t incr) + { + AO_t old; + do + { + old = *addr; + } + while (!AO_compare_and_swap_full(addr, old, old+incr)); + return old; + } +# define AO_HAVE_fetch_and_add_full +#endif + +#if defined(AO_HAVE_compare_and_swap_acquire) && \ + !defined(AO_HAVE_fetch_and_add_acquire) + AO_INLINE AO_t + AO_fetch_and_add_acquire(volatile AO_t *addr, AO_t incr) + { + AO_t old; + do + { + old = *addr; + } + while (!AO_compare_and_swap_acquire(addr, old, old+incr)); + return old; + } +# define AO_HAVE_fetch_and_add_acquire +#endif + +#if defined(AO_HAVE_compare_and_swap_release) && \ + !defined(AO_HAVE_fetch_and_add_release) + AO_INLINE AO_t + AO_fetch_and_add_release(volatile AO_t *addr, AO_t incr) + { + AO_t old; + do + { + old = *addr; + } + while (!AO_compare_and_swap_release(addr, old, old+incr)); + return old; + } +# define AO_HAVE_fetch_and_add_release +#endif + +#if defined(AO_HAVE_compare_and_swap) && \ + !defined(AO_HAVE_fetch_and_add) + AO_INLINE AO_t + AO_fetch_and_add(volatile AO_t *addr, AO_t incr) + { + AO_t old; + do + { + old = *addr; + } + while (!AO_compare_and_swap(addr, old, old+incr)); + return old; + } +# define AO_HAVE_fetch_and_add +#endif + +#if defined(AO_HAVE_fetch_and_add_full) +# if !defined(AO_HAVE_fetch_and_add_release) +# define AO_fetch_and_add_release(addr, val) \ + AO_fetch_and_add_full(addr, val) +# define AO_HAVE_fetch_and_add_release +# endif +# if !defined(AO_HAVE_fetch_and_add_acquire) +# define AO_fetch_and_add_acquire(addr, val) \ + AO_fetch_and_add_full(addr, val) +# define AO_HAVE_fetch_and_add_acquire +# endif +# if !defined(AO_HAVE_fetch_and_add_write) +# define AO_fetch_and_add_write(addr, val) \ + AO_fetch_and_add_full(addr, val) +# define AO_HAVE_fetch_and_add_write +# endif +# if !defined(AO_HAVE_fetch_and_add_read) +# define AO_fetch_and_add_read(addr, val) \ + AO_fetch_and_add_full(addr, val) +# define AO_HAVE_fetch_and_add_read +# endif +#endif /* AO_HAVE_fetch_and_add_full */ + +#if !defined(AO_HAVE_fetch_and_add) && \ + defined(AO_HAVE_fetch_and_add_release) +# define AO_fetch_and_add(addr, val) \ + AO_fetch_and_add_release(addr, val) +# define AO_HAVE_fetch_and_add +#endif +#if !defined(AO_HAVE_fetch_and_add) && \ + defined(AO_HAVE_fetch_and_add_acquire) +# define AO_fetch_and_add(addr, val) \ + AO_fetch_and_add_acquire(addr, val) +# define AO_HAVE_fetch_and_add +#endif +#if !defined(AO_HAVE_fetch_and_add) && \ + defined(AO_HAVE_fetch_and_add_write) +# define AO_fetch_and_add(addr, val) \ + AO_fetch_and_add_write(addr, val) +# define AO_HAVE_fetch_and_add +#endif +#if !defined(AO_HAVE_fetch_and_add) && \ + defined(AO_HAVE_fetch_and_add_read) +# define AO_fetch_and_add(addr, val) \ + AO_fetch_and_add_read(addr, val) +# define AO_HAVE_fetch_and_add +#endif + +#if defined(AO_HAVE_fetch_and_add_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_fetch_and_add_full) +# define AO_fetch_and_add_full(addr, val) \ + (AO_nop_full(), AO_fetch_and_add_acquire(addr, val)) +# define AO_HAVE_fetch_and_add_full +#endif + +#if !defined(AO_HAVE_fetch_and_add_release_write) && \ + defined(AO_HAVE_fetch_and_add_write) +# define AO_fetch_and_add_release_write(addr, val) \ + AO_fetch_and_add_write(addr, val) +# define AO_HAVE_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_fetch_and_add_release_write) && \ + defined(AO_HAVE_fetch_and_add_release) +# define AO_fetch_and_add_release_write(addr, val) \ + AO_fetch_and_add_release(addr, val) +# define AO_HAVE_fetch_and_add_release_write +#endif +#if !defined(AO_HAVE_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_fetch_and_add_read) +# define AO_fetch_and_add_acquire_read(addr, val) \ + AO_fetch_and_add_read(addr, val) +# define AO_HAVE_fetch_and_add_acquire_read +#endif +#if !defined(AO_HAVE_fetch_and_add_acquire_read) && \ + defined(AO_HAVE_fetch_and_add_acquire) +# define AO_fetch_and_add_acquire_read(addr, val) \ + AO_fetch_and_add_acquire(addr, val) +# define AO_HAVE_fetch_and_add_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_fetch_and_add_acquire_read) +# define AO_fetch_and_add_dd_acquire_read(addr, val) \ + AO_fetch_and_add_acquire_read(addr, val) +# define AO_HAVE_fetch_and_add_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_fetch_and_add) +# define AO_fetch_and_add_dd_acquire_read(addr, val) \ + AO_fetch_and_add(addr, val) +# define AO_HAVE_fetch_and_add_dd_acquire_read +# endif +#endif + +/* Fetch_and_add1 */ + +#if defined(AO_HAVE_fetch_and_add_full) &&\ + !defined(AO_HAVE_fetch_and_add1_full) +# define AO_fetch_and_add1_full(addr) AO_fetch_and_add_full(addr,1) +# define AO_HAVE_fetch_and_add1_full +#endif +#if defined(AO_HAVE_fetch_and_add_release) &&\ + !defined(AO_HAVE_fetch_and_add1_release) +# define AO_fetch_and_add1_release(addr) AO_fetch_and_add_release(addr,1) +# define AO_HAVE_fetch_and_add1_release +#endif +#if defined(AO_HAVE_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_fetch_and_add1_acquire) +# define AO_fetch_and_add1_acquire(addr) AO_fetch_and_add_acquire(addr,1) +# define AO_HAVE_fetch_and_add1_acquire +#endif +#if defined(AO_HAVE_fetch_and_add_write) &&\ + !defined(AO_HAVE_fetch_and_add1_write) +# define AO_fetch_and_add1_write(addr) AO_fetch_and_add_write(addr,1) +# define AO_HAVE_fetch_and_add1_write +#endif +#if defined(AO_HAVE_fetch_and_add_read) &&\ + !defined(AO_HAVE_fetch_and_add1_read) +# define AO_fetch_and_add1_read(addr) AO_fetch_and_add_read(addr,1) +# define AO_HAVE_fetch_and_add1_read +#endif +#if defined(AO_HAVE_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_fetch_and_add1_release_write) +# define AO_fetch_and_add1_release_write(addr) \ + AO_fetch_and_add_release_write(addr,1) +# define AO_HAVE_fetch_and_add1_release_write +#endif +#if defined(AO_HAVE_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_fetch_and_add1_acquire_read) +# define AO_fetch_and_add1_acquire_read(addr) \ + AO_fetch_and_add_acquire_read(addr,1) +# define AO_HAVE_fetch_and_add1_acquire_read +#endif +#if defined(AO_HAVE_fetch_and_add) &&\ + !defined(AO_HAVE_fetch_and_add1) +# define AO_fetch_and_add1(addr) \ + AO_fetch_and_add(addr,1) +# define AO_HAVE_fetch_and_add1 +#endif + +#if defined(AO_HAVE_fetch_and_add1_full) +# if !defined(AO_HAVE_fetch_and_add1_release) +# define AO_fetch_and_add1_release(addr) \ + AO_fetch_and_add1_full(addr) +# define AO_HAVE_fetch_and_add1_release +# endif +# if !defined(AO_HAVE_fetch_and_add1_acquire) +# define AO_fetch_and_add1_acquire(addr) \ + AO_fetch_and_add1_full(addr) +# define AO_HAVE_fetch_and_add1_acquire +# endif +# if !defined(AO_HAVE_fetch_and_add1_write) +# define AO_fetch_and_add1_write(addr) \ + AO_fetch_and_add1_full(addr) +# define AO_HAVE_fetch_and_add1_write +# endif +# if !defined(AO_HAVE_fetch_and_add1_read) +# define AO_fetch_and_add1_read(addr) \ + AO_fetch_and_add1_full(addr) +# define AO_HAVE_fetch_and_add1_read +# endif +#endif /* AO_HAVE_fetch_and_add1_full */ + +#if !defined(AO_HAVE_fetch_and_add1) && \ + defined(AO_HAVE_fetch_and_add1_release) +# define AO_fetch_and_add1(addr) \ + AO_fetch_and_add1_release(addr) +# define AO_HAVE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_fetch_and_add1) && \ + defined(AO_HAVE_fetch_and_add1_acquire) +# define AO_fetch_and_add1(addr) \ + AO_fetch_and_add1_acquire(addr) +# define AO_HAVE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_fetch_and_add1) && \ + defined(AO_HAVE_fetch_and_add1_write) +# define AO_fetch_and_add1(addr) \ + AO_fetch_and_add1_write(addr) +# define AO_HAVE_fetch_and_add1 +#endif +#if !defined(AO_HAVE_fetch_and_add1) && \ + defined(AO_HAVE_fetch_and_add1_read) +# define AO_fetch_and_add1(addr) \ + AO_fetch_and_add1_read(addr) +# define AO_HAVE_fetch_and_add1 +#endif + +#if defined(AO_HAVE_fetch_and_add1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_fetch_and_add1_full) +# define AO_fetch_and_add1_full(addr) \ + (AO_nop_full(), AO_fetch_and_add1_acquire(addr)) +# define AO_HAVE_fetch_and_add1_full +#endif + +#if !defined(AO_HAVE_fetch_and_add1_release_write) && \ + defined(AO_HAVE_fetch_and_add1_write) +# define AO_fetch_and_add1_release_write(addr) \ + AO_fetch_and_add1_write(addr) +# define AO_HAVE_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_fetch_and_add1_release_write) && \ + defined(AO_HAVE_fetch_and_add1_release) +# define AO_fetch_and_add1_release_write(addr) \ + AO_fetch_and_add1_release(addr) +# define AO_HAVE_fetch_and_add1_release_write +#endif +#if !defined(AO_HAVE_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_fetch_and_add1_read) +# define AO_fetch_and_add1_acquire_read(addr) \ + AO_fetch_and_add1_read(addr) +# define AO_HAVE_fetch_and_add1_acquire_read +#endif +#if !defined(AO_HAVE_fetch_and_add1_acquire_read) && \ + defined(AO_HAVE_fetch_and_add1_acquire) +# define AO_fetch_and_add1_acquire_read(addr) \ + AO_fetch_and_add1_acquire(addr) +# define AO_HAVE_fetch_and_add1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_fetch_and_add1_acquire_read) +# define AO_fetch_and_add1_dd_acquire_read(addr) \ + AO_fetch_and_add1_acquire_read(addr) +# define AO_HAVE_fetch_and_add1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_fetch_and_add1) +# define AO_fetch_and_add1_dd_acquire_read(addr) AO_fetch_and_add1(addr) +# define AO_HAVE_fetch_and_add1_dd_acquire_read +# endif +#endif + +/* Fetch_and_sub1 */ + +#if defined(AO_HAVE_fetch_and_add_full) &&\ + !defined(AO_HAVE_fetch_and_sub1_full) +# define AO_fetch_and_sub1_full(addr) AO_fetch_and_add_full(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_full +#endif +#if defined(AO_HAVE_fetch_and_add_release) &&\ + !defined(AO_HAVE_fetch_and_sub1_release) +# define AO_fetch_and_sub1_release(addr) \ + AO_fetch_and_add_release(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_release +#endif +#if defined(AO_HAVE_fetch_and_add_acquire) &&\ + !defined(AO_HAVE_fetch_and_sub1_acquire) +# define AO_fetch_and_sub1_acquire(addr) \ + AO_fetch_and_add_acquire(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_acquire +#endif +#if defined(AO_HAVE_fetch_and_add_write) &&\ + !defined(AO_HAVE_fetch_and_sub1_write) +# define AO_fetch_and_sub1_write(addr) \ + AO_fetch_and_add_write(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_write +#endif +#if defined(AO_HAVE_fetch_and_add_read) &&\ + !defined(AO_HAVE_fetch_and_sub1_read) +# define AO_fetch_and_sub1_read(addr) \ + AO_fetch_and_add_read(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_read +#endif +#if defined(AO_HAVE_fetch_and_add_release_write) &&\ + !defined(AO_HAVE_fetch_and_sub1_release_write) +# define AO_fetch_and_sub1_release_write(addr) \ + AO_fetch_and_add_release_write(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_release_write +#endif +#if defined(AO_HAVE_fetch_and_add_acquire_read) &&\ + !defined(AO_HAVE_fetch_and_sub1_acquire_read) +# define AO_fetch_and_sub1_acquire_read(addr) \ + AO_fetch_and_add_acquire_read(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1_acquire_read +#endif +#if defined(AO_HAVE_fetch_and_add) &&\ + !defined(AO_HAVE_fetch_and_sub1) +# define AO_fetch_and_sub1(addr) \ + AO_fetch_and_add(addr,(AO_t)(-1)) +# define AO_HAVE_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_fetch_and_sub1_full) +# if !defined(AO_HAVE_fetch_and_sub1_release) +# define AO_fetch_and_sub1_release(addr) \ + AO_fetch_and_sub1_full(addr) +# define AO_HAVE_fetch_and_sub1_release +# endif +# if !defined(AO_HAVE_fetch_and_sub1_acquire) +# define AO_fetch_and_sub1_acquire(addr) \ + AO_fetch_and_sub1_full(addr) +# define AO_HAVE_fetch_and_sub1_acquire +# endif +# if !defined(AO_HAVE_fetch_and_sub1_write) +# define AO_fetch_and_sub1_write(addr) \ + AO_fetch_and_sub1_full(addr) +# define AO_HAVE_fetch_and_sub1_write +# endif +# if !defined(AO_HAVE_fetch_and_sub1_read) +# define AO_fetch_and_sub1_read(addr) \ + AO_fetch_and_sub1_full(addr) +# define AO_HAVE_fetch_and_sub1_read +# endif +#endif /* AO_HAVE_fetch_and_sub1_full */ + +#if !defined(AO_HAVE_fetch_and_sub1) && \ + defined(AO_HAVE_fetch_and_sub1_release) +# define AO_fetch_and_sub1(addr) \ + AO_fetch_and_sub1_release(addr) +# define AO_HAVE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_fetch_and_sub1) && \ + defined(AO_HAVE_fetch_and_sub1_acquire) +# define AO_fetch_and_sub1(addr) \ + AO_fetch_and_sub1_acquire(addr) +# define AO_HAVE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_fetch_and_sub1) && \ + defined(AO_HAVE_fetch_and_sub1_write) +# define AO_fetch_and_sub1(addr) \ + AO_fetch_and_sub1_write(addr) +# define AO_HAVE_fetch_and_sub1 +#endif +#if !defined(AO_HAVE_fetch_and_sub1) && \ + defined(AO_HAVE_fetch_and_sub1_read) +# define AO_fetch_and_sub1(addr) \ + AO_fetch_and_sub1_read(addr) +# define AO_HAVE_fetch_and_sub1 +#endif + +#if defined(AO_HAVE_fetch_and_sub1_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_fetch_and_sub1_full) +# define AO_fetch_and_sub1_full(addr) \ + (AO_nop_full(), AO_fetch_and_sub1_acquire(addr)) +# define AO_HAVE_fetch_and_sub1_full +#endif + +#if !defined(AO_HAVE_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_fetch_and_sub1_write) +# define AO_fetch_and_sub1_release_write(addr) \ + AO_fetch_and_sub1_write(addr) +# define AO_HAVE_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_fetch_and_sub1_release_write) && \ + defined(AO_HAVE_fetch_and_sub1_release) +# define AO_fetch_and_sub1_release_write(addr) \ + AO_fetch_and_sub1_release(addr) +# define AO_HAVE_fetch_and_sub1_release_write +#endif +#if !defined(AO_HAVE_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_fetch_and_sub1_read) +# define AO_fetch_and_sub1_acquire_read(addr) \ + AO_fetch_and_sub1_read(addr) +# define AO_HAVE_fetch_and_sub1_acquire_read +#endif +#if !defined(AO_HAVE_fetch_and_sub1_acquire_read) && \ + defined(AO_HAVE_fetch_and_sub1_acquire) +# define AO_fetch_and_sub1_acquire_read(addr) \ + AO_fetch_and_sub1_acquire(addr) +# define AO_HAVE_fetch_and_sub1_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_fetch_and_sub1_acquire_read) +# define AO_fetch_and_sub1_dd_acquire_read(addr) \ + AO_fetch_and_sub1_acquire_read(addr) +# define AO_HAVE_fetch_and_sub1_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_fetch_and_sub1) +# define AO_fetch_and_sub1_dd_acquire_read(addr) AO_fetch_and_sub1(addr) +# define AO_HAVE_fetch_and_sub1_dd_acquire_read +# endif +#endif + +/* Atomic or */ +#if defined(AO_HAVE_compare_and_swap_full) && \ + !defined(AO_HAVE_or_full) + AO_INLINE void + AO_or_full(volatile AO_t *addr, AO_t incr) + { + AO_t old; + do + { + old = *addr; + } + while (!AO_compare_and_swap_full(addr, old, (old | incr))); + } +# define AO_HAVE_or_full +#endif + +#if defined(AO_HAVE_or_full) +# if !defined(AO_HAVE_or_release) +# define AO_or_release(addr, val) \ + AO_or_full(addr, val) +# define AO_HAVE_or_release +# endif +# if !defined(AO_HAVE_or_acquire) +# define AO_or_acquire(addr, val) \ + AO_or_full(addr, val) +# define AO_HAVE_or_acquire +# endif +# if !defined(AO_HAVE_or_write) +# define AO_or_write(addr, val) \ + AO_or_full(addr, val) +# define AO_HAVE_or_write +# endif +# if !defined(AO_HAVE_or_read) +# define AO_or_read(addr, val) \ + AO_or_full(addr, val) +# define AO_HAVE_or_read +# endif +#endif /* AO_HAVE_or_full */ + +#if !defined(AO_HAVE_or) && \ + defined(AO_HAVE_or_release) +# define AO_or(addr, val) \ + AO_or_release(addr, val) +# define AO_HAVE_or +#endif +#if !defined(AO_HAVE_or) && \ + defined(AO_HAVE_or_acquire) +# define AO_or(addr, val) \ + AO_or_acquire(addr, val) +# define AO_HAVE_or +#endif +#if !defined(AO_HAVE_or) && \ + defined(AO_HAVE_or_write) +# define AO_or(addr, val) \ + AO_or_write(addr, val) +# define AO_HAVE_or +#endif +#if !defined(AO_HAVE_or) && \ + defined(AO_HAVE_or_read) +# define AO_or(addr, val) \ + AO_or_read(addr, val) +# define AO_HAVE_or +#endif + +#if defined(AO_HAVE_or_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_or_full) +# define AO_or_full(addr, val) \ + (AO_nop_full(), AO_or_acquire(addr, val)) +#endif + +#if !defined(AO_HAVE_or_release_write) && \ + defined(AO_HAVE_or_write) +# define AO_or_release_write(addr, val) \ + AO_or_write(addr, val) +# define AO_HAVE_or_release_write +#endif +#if !defined(AO_HAVE_or_release_write) && \ + defined(AO_HAVE_or_release) +# define AO_or_release_write(addr, val) \ + AO_or_release(addr, val) +# define AO_HAVE_or_release_write +#endif +#if !defined(AO_HAVE_or_acquire_read) && \ + defined(AO_HAVE_or_read) +# define AO_or_acquire_read(addr, val) \ + AO_or_read(addr, val) +# define AO_HAVE_or_acquire_read +#endif +#if !defined(AO_HAVE_or_acquire_read) && \ + defined(AO_HAVE_or_acquire) +# define AO_or_acquire_read(addr, val) \ + AO_or_acquire(addr, val) +# define AO_HAVE_or_acquire_read +#endif + +/* dd_aquire_read is meaningless. */ + +/* Test_and_set */ + +#if defined(AO_HAVE_test_and_set_full) +# if !defined(AO_HAVE_test_and_set_release) +# define AO_test_and_set_release(addr) \ + AO_test_and_set_full(addr) +# define AO_HAVE_test_and_set_release +# endif +# if !defined(AO_HAVE_test_and_set_acquire) +# define AO_test_and_set_acquire(addr) \ + AO_test_and_set_full(addr) +# define AO_HAVE_test_and_set_acquire +# endif +# if !defined(AO_HAVE_test_and_set_write) +# define AO_test_and_set_write(addr) \ + AO_test_and_set_full(addr) +# define AO_HAVE_test_and_set_write +# endif +# if !defined(AO_HAVE_test_and_set_read) +# define AO_test_and_set_read(addr) \ + AO_test_and_set_full(addr) +# define AO_HAVE_test_and_set_read +# endif +#endif /* AO_HAVE_test_and_set_full */ + +#if !defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_test_and_set_release) +# define AO_test_and_set(addr) \ + AO_test_and_set_release(addr) +# define AO_HAVE_test_and_set +#endif +#if !defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_test_and_set_acquire) +# define AO_test_and_set(addr) \ + AO_test_and_set_acquire(addr) +# define AO_HAVE_test_and_set +#endif +#if !defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_test_and_set_write) +# define AO_test_and_set(addr) \ + AO_test_and_set_write(addr) +# define AO_HAVE_test_and_set +#endif +#if !defined(AO_HAVE_test_and_set) && \ + defined(AO_HAVE_test_and_set_read) +# define AO_test_and_set(addr) \ + AO_test_and_set_read(addr) +# define AO_HAVE_test_and_set +#endif + +#if defined(AO_HAVE_test_and_set_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_test_and_set_full) +# define AO_test_and_set_full(addr) \ + (AO_nop_full(), AO_test_and_set_acquire(addr)) +# define AO_HAVE_test_and_set_full +#endif + +#if !defined(AO_HAVE_test_and_set_release_write) && \ + defined(AO_HAVE_test_and_set_write) +# define AO_test_and_set_release_write(addr) \ + AO_test_and_set_write(addr) +# define AO_HAVE_test_and_set_release_write +#endif +#if !defined(AO_HAVE_test_and_set_release_write) && \ + defined(AO_HAVE_test_and_set_release) +# define AO_test_and_set_release_write(addr) \ + AO_test_and_set_release(addr) +# define AO_HAVE_test_and_set_release_write +#endif +#if !defined(AO_HAVE_test_and_set_acquire_read) && \ + defined(AO_HAVE_test_and_set_read) +# define AO_test_and_set_acquire_read(addr) \ + AO_test_and_set_read(addr) +# define AO_HAVE_test_and_set_acquire_read +#endif +#if !defined(AO_HAVE_test_and_set_acquire_read) && \ + defined(AO_HAVE_test_and_set_acquire) +# define AO_test_and_set_acquire_read(addr) \ + AO_test_and_set_acquire(addr) +# define AO_HAVE_test_and_set_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_test_and_set_acquire_read) +# define AO_test_and_set_dd_acquire_read(addr) \ + AO_test_and_set_acquire_read(addr) +# define AO_HAVE_test_and_set_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_test_and_set) +# define AO_test_and_set_dd_acquire_read(addr) AO_test_and_set(addr) +# define AO_HAVE_test_and_set_dd_acquire_read +# endif +#endif + +/* Compare_and_swap */ +#if defined(AO_HAVE_compare_and_swap) && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_and_swap_acquire) + AO_INLINE int + AO_compare_and_swap_acquire(volatile AO_t *addr, AO_t old, AO_t new_val) + { + int result = AO_compare_and_swap(addr, old, new_val); + AO_nop_full(); + return result; + } +# define AO_HAVE_compare_and_swap_acquire +#endif +#if defined(AO_HAVE_compare_and_swap) && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_and_swap_release) +# define AO_compare_and_swap_release(addr, old, new_val) \ + (AO_nop_full(), AO_compare_and_swap(addr, old, new_val)) +# define AO_HAVE_compare_and_swap_release +#endif +#if defined(AO_HAVE_compare_and_swap_full) +# if !defined(AO_HAVE_compare_and_swap_release) +# define AO_compare_and_swap_release(addr, old, new_val) \ + AO_compare_and_swap_full(addr, old, new_val) +# define AO_HAVE_compare_and_swap_release +# endif +# if !defined(AO_HAVE_compare_and_swap_acquire) +# define AO_compare_and_swap_acquire(addr, old, new_val) \ + AO_compare_and_swap_full(addr, old, new_val) +# define AO_HAVE_compare_and_swap_acquire +# endif +# if !defined(AO_HAVE_compare_and_swap_write) +# define AO_compare_and_swap_write(addr, old, new_val) \ + AO_compare_and_swap_full(addr, old, new_val) +# define AO_HAVE_compare_and_swap_write +# endif +# if !defined(AO_HAVE_compare_and_swap_read) +# define AO_compare_and_swap_read(addr, old, new_val) \ + AO_compare_and_swap_full(addr, old, new_val) +# define AO_HAVE_compare_and_swap_read +# endif +#endif /* AO_HAVE_compare_and_swap_full */ + +#if !defined(AO_HAVE_compare_and_swap) && \ + defined(AO_HAVE_compare_and_swap_release) +# define AO_compare_and_swap(addr, old, new_val) \ + AO_compare_and_swap_release(addr, old, new_val) +# define AO_HAVE_compare_and_swap +#endif +#if !defined(AO_HAVE_compare_and_swap) && \ + defined(AO_HAVE_compare_and_swap_acquire) +# define AO_compare_and_swap(addr, old, new_val) \ + AO_compare_and_swap_acquire(addr, old, new_val) +# define AO_HAVE_compare_and_swap +#endif +#if !defined(AO_HAVE_compare_and_swap) && \ + defined(AO_HAVE_compare_and_swap_write) +# define AO_compare_and_swap(addr, old, new_val) \ + AO_compare_and_swap_write(addr, old, new_val) +# define AO_HAVE_compare_and_swap +#endif +#if !defined(AO_HAVE_compare_and_swap) && \ + defined(AO_HAVE_compare_and_swap_read) +# define AO_compare_and_swap(addr, old, new_val) \ + AO_compare_and_swap_read(addr, old, new_val) +# define AO_HAVE_compare_and_swap +#endif + +#if defined(AO_HAVE_compare_and_swap_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_compare_and_swap_full) +# define AO_compare_and_swap_full(addr, old, new_val) \ + (AO_nop_full(), AO_compare_and_swap_acquire(addr, old, new_val)) +# define AO_HAVE_compare_and_swap_full +#endif + +#if !defined(AO_HAVE_compare_and_swap_release_write) && \ + defined(AO_HAVE_compare_and_swap_write) +# define AO_compare_and_swap_release_write(addr, old, new_val) \ + AO_compare_and_swap_write(addr, old, new_val) +# define AO_HAVE_compare_and_swap_release_write +#endif +#if !defined(AO_HAVE_compare_and_swap_release_write) && \ + defined(AO_HAVE_compare_and_swap_release) +# define AO_compare_and_swap_release_write(addr, old, new_val) \ + AO_compare_and_swap_release(addr, old, new_val) +# define AO_HAVE_compare_and_swap_release_write +#endif +#if !defined(AO_HAVE_compare_and_swap_acquire_read) && \ + defined(AO_HAVE_compare_and_swap_read) +# define AO_compare_and_swap_acquire_read(addr, old, new_val) \ + AO_compare_and_swap_read(addr, old, new_val) +# define AO_HAVE_compare_and_swap_acquire_read +#endif +#if !defined(AO_HAVE_compare_and_swap_acquire_read) && \ + defined(AO_HAVE_compare_and_swap_acquire) +# define AO_compare_and_swap_acquire_read(addr, old, new_val) \ + AO_compare_and_swap_acquire(addr, old, new_val) +# define AO_HAVE_compare_and_swap_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_compare_and_swap_acquire_read) +# define AO_compare_and_swap_dd_acquire_read(addr, old, new_val) \ + AO_compare_and_swap_acquire_read(addr, old, new_val) +# define AO_HAVE_compare_and_swap_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_compare_and_swap) +# define AO_compare_and_swap_dd_acquire_read(addr, old, new_val) \ + AO_compare_and_swap(addr, old, new_val) +# define AO_HAVE_compare_and_swap_dd_acquire_read +# endif +#endif + +#include "generalize-small.h" + +/* Compare_double_and_swap_double */ +#if defined(AO_HAVE_compare_double_and_swap_double) && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_double_and_swap_double_acquire) + AO_INLINE int + AO_compare_double_and_swap_double_acquire(volatile AO_double_t *addr, + AO_t o1, AO_t o2, + AO_t n1, AO_t n2) + { + int result = AO_compare_double_and_swap_double(addr, o1, o2, n1, n2); + AO_nop_full(); + return result; + } +# define AO_HAVE_compare_double_and_swap_double_acquire +#endif +#if defined(AO_HAVE_compare_double_and_swap_double) \ + && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_double_and_swap_double_release) +# define AO_compare_double_and_swap_double_release(addr, o1, o2, n1, n2) \ + (AO_nop_full(), AO_compare_double_and_swap_double(addr, o1, o2, n1, n2)) +# define AO_HAVE_compare_double_and_swap_double_release +#endif +#if defined(AO_HAVE_compare_double_and_swap_double_full) +# if !defined(AO_HAVE_compare_double_and_swap_double_release) +# define AO_compare_double_and_swap_double_release(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_full(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_release +# endif +# if !defined(AO_HAVE_compare_double_and_swap_double_acquire) +# define AO_compare_double_and_swap_double_acquire(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_full(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_acquire +# endif +# if !defined(AO_HAVE_compare_double_and_swap_double_write) +# define AO_compare_double_and_swap_double_write(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_full(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_write +# endif +# if !defined(AO_HAVE_compare_double_and_swap_double_read) +# define AO_compare_double_and_swap_double_read(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_full(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_read +# endif +#endif /* AO_HAVE_compare_double_and_swap_double_full */ + +#if !defined(AO_HAVE_compare_double_and_swap_double) && \ + defined(AO_HAVE_compare_double_and_swap_double_release) +# define AO_compare_double_and_swap_double(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_release(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double) && \ + defined(AO_HAVE_compare_double_and_swap_double_acquire) +# define AO_compare_double_and_swap_double(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_acquire(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double) && \ + defined(AO_HAVE_compare_double_and_swap_double_write) +# define AO_compare_double_and_swap_double(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_write(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double) && \ + defined(AO_HAVE_compare_double_and_swap_double_read) +# define AO_compare_double_and_swap_double(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_read(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double +#endif + +#if defined(AO_HAVE_compare_double_and_swap_double_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_compare_double_and_swap_double_full) +# define AO_compare_double_and_swap_double_full(addr, o1, o2, n1, n2) \ + (AO_nop_full(), AO_compare_double_and_swap_double_acquire(addr, o1, o2, n1, n2)) +# define AO_HAVE_compare_double_and_swap_double_full +#endif + +#if !defined(AO_HAVE_compare_double_and_swap_double_release_write) && \ + defined(AO_HAVE_compare_double_and_swap_double_write) +# define AO_compare_double_and_swap_double_release_write(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_write(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_release_write +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double_release_write) && \ + defined(AO_HAVE_compare_double_and_swap_double_release) +# define AO_compare_double_and_swap_double_release_write(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_release(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_release_write +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double_acquire_read) && \ + defined(AO_HAVE_compare_double_and_swap_double_read) +# define AO_compare_double_and_swap_double_acquire_read(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_read(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_acquire_read +#endif +#if !defined(AO_HAVE_compare_double_and_swap_double_acquire_read) && \ + defined(AO_HAVE_compare_double_and_swap_double_acquire) +# define AO_compare_double_and_swap_double_acquire_read(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_acquire(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_compare_double_and_swap_double_acquire_read) +# define AO_compare_double_and_swap_double_dd_acquire_read(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double_acquire_read(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_compare_double_and_swap_double) +# define AO_compare_double_and_swap_double_dd_acquire_read(addr, o1, o2, n1, n2) \ + AO_compare_double_and_swap_double(addr, o1, o2, n1, n2) +# define AO_HAVE_compare_double_and_swap_double_dd_acquire_read +# endif +#endif + +/* Compare_and_swap_double */ +#if defined(AO_HAVE_compare_and_swap_double) && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_and_swap_double_acquire) + AO_INLINE int + AO_compare_and_swap_double_acquire(volatile AO_double_t *addr, + AO_t o1, AO_t o2, + AO_t n1, AO_t n2) + { + int result = AO_compare_and_swap_double(addr, o1, n1, n2); + AO_nop_full(); + return result; + } +# define AO_HAVE_compare_and_swap_double_acquire +#endif +#if defined(AO_HAVE_compare_and_swap_double) \ + && defined(AO_HAVE_nop_full)\ + && !defined(AO_HAVE_compare_and_swap_double_release) +# define AO_compare_and_swap_double_release(addr, o1, n1, n2) \ + (AO_nop_full(), AO_compare_and_swap_double(addr, o1, n1, n2)) +# define AO_HAVE_compare_and_swap_double_release +#endif +#if defined(AO_HAVE_compare_and_swap_double_full) +# if !defined(AO_HAVE_compare_and_swap_double_release) +# define AO_compare_and_swap_double_release(addr, o1, n1, n2) \ + AO_compare_and_swap_double_full(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_release +# endif +# if !defined(AO_HAVE_compare_and_swap_double_acquire) +# define AO_compare_and_swap_double_acquire(addr, o1, n1, n2) \ + AO_compare_and_swap_double_full(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_acquire +# endif +# if !defined(AO_HAVE_compare_and_swap_double_write) +# define AO_compare_and_swap_double_write(addr, o1, n1, n2) \ + AO_compare_and_swap_double_full(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_write +# endif +# if !defined(AO_HAVE_compare_and_swap_double_read) +# define AO_compare_and_swap_double_read(addr, o1, n1, n2) \ + AO_compare_and_swap_double_full(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_read +# endif +#endif /* AO_HAVE_compare_and_swap_double_full */ + +#if !defined(AO_HAVE_compare_and_swap_double) && \ + defined(AO_HAVE_compare_and_swap_double_release) +# define AO_compare_and_swap_double(addr, o1, n1, n2) \ + AO_compare_and_swap_double_release(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double +#endif +#if !defined(AO_HAVE_compare_and_swap_double) && \ + defined(AO_HAVE_compare_and_swap_double_acquire) +# define AO_compare_and_swap_double(addr, o1, n1, n2) \ + AO_compare_and_swap_double_acquire(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double +#endif +#if !defined(AO_HAVE_compare_and_swap_double) && \ + defined(AO_HAVE_compare_and_swap_double_write) +# define AO_compare_and_swap_double(addr, o1, n1, n2) \ + AO_compare_and_swap_double_write(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double +#endif +#if !defined(AO_HAVE_compare_and_swap_double) && \ + defined(AO_HAVE_compare_and_swap_double_read) +# define AO_compare_and_swap_double(addr, o1, n1, n2) \ + AO_compare_and_swap_double_read(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double +#endif + +#if defined(AO_HAVE_compare_and_swap_double_acquire) &&\ + defined(AO_HAVE_nop_full) && \ + !defined(AO_HAVE_compare_and_swap_double_full) +# define AO_compare_and_swap_double_full(addr, o1, n1, n2) \ + (AO_nop_full(), AO_compare_and_swap_double_acquire(addr, o1, n1, n2)) +# define AO_HAVE_compare_and_swap_double_full +#endif + +#if !defined(AO_HAVE_compare_and_swap_double_release_write) && \ + defined(AO_HAVE_compare_and_swap_double_write) +# define AO_compare_and_swap_double_release_write(addr, o1, n1, n2) \ + AO_compare_and_swap_double_write(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_release_write +#endif +#if !defined(AO_HAVE_compare_and_swap_double_release_write) && \ + defined(AO_HAVE_compare_and_swap_double_release) +# define AO_compare_and_swap_double_release_write(addr, o1, n1, n2) \ + AO_compare_and_swap_double_release(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_release_write +#endif +#if !defined(AO_HAVE_compare_and_swap_double_acquire_read) && \ + defined(AO_HAVE_compare_and_swap_double_read) +# define AO_compare_and_swap_double_acquire_read(addr, o1, n1, n2) \ + AO_compare_and_swap_double_read(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_acquire_read +#endif +#if !defined(AO_HAVE_compare_and_swap_double_acquire_read) && \ + defined(AO_HAVE_compare_and_swap_double_acquire) +# define AO_compare_and_swap_double_acquire_read(addr, o1, n1, n2) \ + AO_compare_and_swap_double_acquire(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_acquire_read +#endif + +#ifdef AO_NO_DD_ORDERING +# if defined(AO_HAVE_compare_and_swap_double_acquire_read) +# define AO_compare_and_swap_double_dd_acquire_read(addr, o1, n1, n2) \ + AO_compare_and_swap_double_acquire_read(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_dd_acquire_read +# endif +#else +# if defined(AO_HAVE_compare_and_swap_double) +# define AO_compare_and_swap_double_dd_acquire_read(addr, o1, n1, n2) \ + AO_compare_and_swap_double(addr, o1, n1, n2) +# define AO_HAVE_compare_and_swap_double_dd_acquire_read +# endif +#endif + +/* NEC LE-IT: Convenience functions for AO_double compare and swap which */ +/* types and reads easier in code */ +#if defined(AO_HAVE_compare_double_and_swap_double_release) && \ + !defined(AO_HAVE_double_compare_and_swap_release) +AO_INLINE int +AO_double_compare_and_swap_release(volatile AO_double_t *addr, + AO_double_t old_val, AO_double_t new_val) +{ + return AO_compare_double_and_swap_double_release(addr, + old_val.AO_val1, old_val.AO_val2, + new_val.AO_val1, new_val.AO_val2); +} +#define AO_HAVE_double_compare_and_swap_release +#endif + +#if defined(AO_HAVE_compare_double_and_swap_double_acquire) && \ + !defined(AO_HAVE_double_compare_and_swap_acquire) +AO_INLINE int +AO_double_compare_and_swap_acquire(volatile AO_double_t *addr, + AO_double_t old_val, AO_double_t new_val) +{ + return AO_compare_double_and_swap_double_acquire(addr, + old_val.AO_val1, old_val.AO_val2, + new_val.AO_val1, new_val.AO_val2); +} +#define AO_HAVE_double_compare_and_swap_acquire +#endif + +#if defined(AO_HAVE_compare_double_and_swap_double_full) && \ + !defined(AO_HAVE_double_compare_and_swap_full) +AO_INLINE int +AO_double_compare_and_swap_full(volatile AO_double_t *addr, + AO_double_t old_val, AO_double_t new_val) +{ + return AO_compare_double_and_swap_double_full(addr, + old_val.AO_val1, old_val.AO_val2, + new_val.AO_val1, new_val.AO_val2); +} +#define AO_HAVE_double_compare_and_swap_full +#endif diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Entries new file mode 100644 index 0000000..cef403d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Entries @@ -0,0 +1,33 @@ +D/gcc//// +D/hpc//// +D/ibmc//// +D/icc//// +D/msftc//// +D/sunc//// +/README/1.1/Tue Jul 11 22:55:09 2006// +/acquire_release_volatile.h/1.1/Tue Jul 11 22:55:09 2006// +/all_acquire_release_volatile.h/1.1/Tue Jul 11 22:55:09 2006// +/all_atomic_load_store.h/1.1/Tue Jul 11 22:55:09 2006// +/ao_t_is_int.h/1.1/Tue Jul 11 22:55:09 2006// +/atomic_load_store.h/1.1/Tue Jul 11 22:55:09 2006// +/char_acquire_release_volatile.h/1.1/Tue Jul 11 22:55:09 2006// +/char_atomic_load_store.h/1.1/Tue Jul 11 22:55:09 2006// +/emul_cas.h/1.1/Tue Jul 11 22:55:09 2006// +/generic_pthread.h/1.1/Tue Jul 11 22:55:09 2006// +/int_acquire_release_volatile.h/1.1/Tue Jul 11 22:55:09 2006// +/int_atomic_load_store.h/1.1/Tue Jul 11 22:55:09 2006// +/ordered.h/1.1/Tue Jul 11 22:55:09 2006// +/ordered_except_wr.h/1.1/Tue Jul 11 22:55:09 2006// +/read_ordered.h/1.1/Tue Jul 11 22:55:09 2006// +/short_acquire_release_volatile.h/1.1/Tue Jul 11 22:55:09 2006// +/short_atomic_load_store.h/1.1/Tue Jul 11 22:55:09 2006// +/test_and_set_t_is_ao_t.h/1.1/Tue Jul 11 22:55:09 2006// +/test_and_set_t_is_char.h/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.am/1.2/Tue Jun 5 22:06:20 2007// +/Makefile.in/1.2/Tue Jun 5 22:06:20 2007// +/aligned_atomic_load_store.h/1.2/Tue Jun 5 23:23:07 2007// +/int_aligned_atomic_load_store.h/1.2/Tue Jun 5 23:23:07 2007// +/short_aligned_atomic_load_store.h/1.2/Tue Jun 5 23:23:07 2007// +/all_aligned_atomic_load_store.h/1.1/Tue Jun 5 23:23:07 2007// +D/armcc//// +/standard_ao_double_t.h/1.3/Tue Jan 8 23:47:06 2008// diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Repository new file mode 100644 index 0000000..2b4ddb1 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.am b/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.am new file mode 100644 index 0000000..8204d8d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.am @@ -0,0 +1,47 @@ +#General sysdep utility headers, followed by the arch-specific ones +nobase_sysdep_HEADERS= generic_pthread.h \ + atomic_load_store.h \ + aligned_atomic_load_store.h \ + acquire_release_volatile.h \ + char_acquire_release_volatile.h \ + char_atomic_load_store.h \ + short_acquire_release_volatile.h \ + short_aligned_atomic_load_store.h \ + short_atomic_load_store.h \ + int_acquire_release_volatile.h \ + int_aligned_atomic_load_store.h \ + int_atomic_load_store.h \ + all_acquire_release_volatile.h \ + all_aligned_atomic_load_store.h \ + all_atomic_load_store.h \ + read_ordered.h \ + ordered_except_wr.h \ + ordered.h \ + ao_t_is_int.h \ + test_and_set_t_is_ao_t.h \ + test_and_set_t_is_char.h \ + emul_cas.h \ + standard_ao_double_t.h \ + README \ + \ + gcc/alpha.h gcc/arm.h gcc/x86.h \ + gcc/hppa.h gcc/ia64.h \ + gcc/powerpc.h gcc/sparc.h \ + gcc/hppa.h gcc/m68k.h gcc/s390.h \ + gcc/ia64.h gcc/x86_64.h gcc/cris.h \ + \ + icc/ia64.h \ + \ + msftc/x86.h \ + msftc/x86_64.h \ + \ + hpc/ia64.h hpc/hppa.h \ + \ + sunc/sparc.h \ + \ + ibmc/powerpc.h + +sysdepdir= ${includedir}/atomic_ops/sysdeps + +# A few architectures require special .S files +EXTRA_DIST = sunc/sparc.S diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.in b/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.in new file mode 100644 index 0000000..e7daa7d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/Makefile.in @@ -0,0 +1,427 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + address@hidden@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = src/atomic_ops/sysdeps +DIST_COMMON = README $(nobase_sysdep_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(sysdepdir)" +nobase_sysdepHEADERS_INSTALL = $(install_sh_DATA) +HEADERS = $(nobase_sysdep_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ + +#General sysdep utility headers, followed by the arch-specific ones +nobase_sysdep_HEADERS = generic_pthread.h \ + atomic_load_store.h \ + aligned_atomic_load_store.h \ + acquire_release_volatile.h \ + char_acquire_release_volatile.h \ + char_atomic_load_store.h \ + short_acquire_release_volatile.h \ + short_aligned_atomic_load_store.h \ + short_atomic_load_store.h \ + int_acquire_release_volatile.h \ + int_aligned_atomic_load_store.h \ + int_atomic_load_store.h \ + all_acquire_release_volatile.h \ + all_aligned_atomic_load_store.h \ + all_atomic_load_store.h \ + read_ordered.h \ + ordered_except_wr.h \ + ordered.h \ + ao_t_is_int.h \ + test_and_set_t_is_ao_t.h \ + test_and_set_t_is_char.h \ + emul_cas.h \ + standard_ao_double_t.h \ + README \ + \ + gcc/alpha.h gcc/arm.h gcc/x86.h \ + gcc/hppa.h gcc/ia64.h \ + gcc/powerpc.h gcc/sparc.h \ + gcc/hppa.h gcc/m68k.h gcc/s390.h \ + gcc/ia64.h gcc/x86_64.h gcc/cris.h \ + \ + icc/ia64.h \ + \ + msftc/x86.h \ + msftc/x86_64.h \ + \ + hpc/ia64.h hpc/hppa.h \ + \ + sunc/sparc.h \ + \ + ibmc/powerpc.h + +sysdepdir = ${includedir}/atomic_ops/sysdeps + +# A few architectures require special .S files +EXTRA_DIST = sunc/sparc.S +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/atomic_ops/sysdeps/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/atomic_ops/sysdeps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-nobase_sysdepHEADERS: $(nobase_sysdep_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(sysdepdir)" || $(mkdir_p) "$(DESTDIR)$(sysdepdir)" + @$(am__vpath_adj_setup) \ + list='$(nobase_sysdep_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__vpath_adj) \ + echo " $(nobase_sysdepHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(sysdepdir)/$$f'"; \ + $(nobase_sysdepHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(sysdepdir)/$$f"; \ + done + +uninstall-nobase_sysdepHEADERS: + @$(NORMAL_UNINSTALL) + @$(am__vpath_adj_setup) \ + list='$(nobase_sysdep_HEADERS)'; for p in $$list; do \ + $(am__vpath_adj) \ + echo " rm -f '$(DESTDIR)$(sysdepdir)/$$f'"; \ + rm -f "$(DESTDIR)$(sysdepdir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/gcc $(distdir)/hpc $(distdir)/ibmc $(distdir)/icc $(distdir)/msftc $(distdir)/sunc + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(sysdepdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-nobase_sysdepHEADERS + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-nobase_sysdepHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + ctags distclean distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man \ + install-nobase_sysdepHEADERS install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am \ + uninstall-nobase_sysdepHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/README b/libatomic_ops-1.2/src/atomic_ops/sysdeps/README new file mode 100644 index 0000000..605699f --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/README @@ -0,0 +1,7 @@ +There are two kinds of entities in this directory: + +- Subdirectories corresponding to specific compilers (or compiler/OS combinations). + Each of these includes one or more architecture-specific headers. + +- More generic header files corresponding to a particular ordering and/or + atomicity property that might be shared by multiple hardware platforms. diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/acquire_release_volatile.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/acquire_release_volatile.h new file mode 100644 index 0000000..1a387d3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/acquire_release_volatile.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file adds definitions appropriate for environments in which an AO_t + * volatile load has acquire semantics, and an AO_t volatile store has release + * semantics. This is arguably supposed to be true with the standard Itanium + * software conventions. + */ + +/* + * Empirically gcc/ia64 does some reordering of ordinary operations around volatiles + * even when we think it shouldn't. Gcc 3.3 and earlier could reorder a volatile store + * with another store. As of March 2005, gcc pre-4 reused previously computed + * common subexpressions across a volatile load. + * Hence we now add compiler barriers for gcc. + */ +#if !defined(AO_GCC_BARRIER) +# if defined(__GNUC__) +# define AO_GCC_BARRIER() AO_compiler_barrier() +# else +# define AO_GCC_BARRIER() +# endif +#endif + +AO_INLINE AO_t +AO_load_acquire(volatile AO_t *p) +{ + AO_t result = *p; + /* A normal volatile load generates an ld.acq */ + AO_GCC_BARRIER(); + return result; +} +#define AO_HAVE_load_acquire + +AO_INLINE void +AO_store_release(volatile AO_t *p, AO_t val) +{ + AO_GCC_BARRIER(); + /* A normal volatile store generates an st.rel */ + *p = val; +} +#define AO_HAVE_store_release + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/aligned_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/aligned_atomic_load_store.h new file mode 100644 index 0000000..485b7f4 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/aligned_atomic_load_store.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of AO_t are + * atomic fo all legal alignments. + */ + +AO_INLINE AO_t +AO_load(volatile AO_t *addr) +{ + assert(((size_t)addr & (sizeof(AO_t) - 1)) == 0); + /* Cast away the volatile for architectures where */ + /* volatile adds barrier semantics. */ + return *(AO_t *)addr; +} + +#define AO_HAVE_load + +AO_INLINE void +AO_store(volatile AO_t *addr, AO_t new_val) +{ + assert(((size_t)addr & (sizeof(AO_t) - 1)) == 0); + (*(AO_t *)addr) = new_val; +} + +#define AO_HAVE_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_acquire_release_volatile.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_acquire_release_volatile.h new file mode 100644 index 0000000..6787387 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_acquire_release_volatile.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Describes architectures on which volatile AO_t, unsigned char, unsigned + * short, and unsigned int loads and stores have acquire/release semantics for + * all normally legal alignments. + */ +#include "acquire_release_volatile.h" +#include "char_acquire_release_volatile.h" +#include "short_acquire_release_volatile.h" +#include "int_acquire_release_volatile.h" diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h new file mode 100644 index 0000000..b9f7247 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Describes architectures on which AO_t, unsigned char, unsigned short, + * and unsigned int loads and strores are atomic for all normally legal alignments. + */ +#include "aligned_atomic_load_store.h" +#include "char_atomic_load_store.h" +#include "short_aligned_atomic_load_store.h" +#include "int_aligned_atomic_load_store.h" diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_atomic_load_store.h new file mode 100644 index 0000000..d0ebe08 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/all_atomic_load_store.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Describes architectures on which AO_t, unsigned char, unsigned short, + * and unsigned int loads and strores are atomic for all normally legal + * alignments. + */ +#include "atomic_load_store.h" +#include "char_atomic_load_store.h" +#include "short_atomic_load_store.h" +#include "int_atomic_load_store.h" diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ao_t_is_int.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ao_t_is_int.h new file mode 100644 index 0000000..18156c8 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ao_t_is_int.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Inclusion of this file signifies that AO_t is in fact int. Hence + * any AO_... operations can also server as AO_int_... operations. + * We currently define only the more important ones here, and allow for + * the normal generalization process to define the others. + * We should probably add others in the future. + */ + +#if defined(AO_HAVE_compare_and_swap_full) && \ + !defined(AO_HAVE_int_compare_and_swap_full) +# define AO_int_compare_and_swap_full(addr, old, new_val) \ + AO_compare_and_swap_full((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap_full +# endif + +#if defined(AO_HAVE_compare_and_swap_acquire) && \ + !defined(AO_HAVE_int_compare_and_swap_acquire) +# define AO_int_compare_and_swap_acquire(addr, old, new_val) \ + AO_compare_and_swap_acquire((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap_acquire +# endif + +#if defined(AO_HAVE_compare_and_swap_release) && \ + !defined(AO_HAVE_int_compare_and_swap_release) +# define AO_int_compare_and_swap_release(addr, old, new_val) \ + AO_compare_and_swap_release((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap_release +# endif + +#if defined(AO_HAVE_compare_and_swap_write) && \ + !defined(AO_HAVE_int_compare_and_swap_write) +# define AO_int_compare_and_swap_write(addr, old, new_val) \ + AO_compare_and_swap_write((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap_write +# endif + +#if defined(AO_HAVE_compare_and_swap_read) && \ + !defined(AO_HAVE_int_compare_and_swap_read) +# define AO_int_compare_and_swap_read(addr, old, new_val) \ + AO_compare_and_swap_read((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap_read +# endif + +#if defined(AO_HAVE_compare_and_swap) && \ + !defined(AO_HAVE_int_compare_and_swap) +# define AO_int_compare_and_swap(addr, old, new_val) \ + AO_compare_and_swap((volatile AO_t *)addr, \ + (AO_t) old, (AO_t)new_val) +# define AO_HAVE_int_compare_and_swap +# endif + +#if defined(AO_HAVE_load_acquire) && \ + !defined(AO_HAVE_int_load_acquire) +# define AO_int_load_acquire(addr) (int)AO_load_acquire((volatile AO_t *)addr) +# define AO_HAVE_int_load_acquire +# endif + +#if defined(AO_HAVE_store_release) && \ + !defined(AO_HAVE_int_store_release) +# define AO_int_store_release(addr, val) \ + AO_store_release((volatile AO_t *)addr, (AO_t)val) +# define AO_HAVE_int_store_release +# endif + +#if defined(AO_HAVE_fetch_and_add_full) && \ + !defined(AO_HAVE_int_fetch_and_add_full) +# define AO_int_fetch_and_add_full(addr, incr) \ + (int)AO_fetch_and_add_full((volatile AO_t *)addr, (AO_t)incr) +# define AO_HAVE_int_fetch_and_add_full +# endif + +#if defined(AO_HAVE_fetch_and_add1_acquire) && \ + !defined(AO_HAVE_int_fetch_and_add1_acquire) +# define AO_int_fetch_and_add1_acquire(addr) \ + (int)AO_fetch_and_add1_acquire((volatile AO_t *)addr) +# define AO_HAVE_int_fetch_and_add1_acquire +# endif + +#if defined(AO_HAVE_fetch_and_add1_release) && \ + !defined(AO_HAVE_int_fetch_and_add1_release) +# define AO_int_fetch_and_add1_release(addr) \ + (int)AO_fetch_and_add1_release((volatile AO_t *)addr) +# define AO_HAVE_int_fetch_and_add1_release +# endif + +#if defined(AO_HAVE_fetch_and_sub1_acquire) && \ + !defined(AO_HAVE_int_fetch_and_sub1_acquire) +# define AO_int_fetch_and_sub1_acquire(addr) \ + (int)AO_fetch_and_sub1_acquire((volatile AO_t *)addr) +# define AO_HAVE_int_fetch_and_sub1_acquire +# endif + +#if defined(AO_HAVE_fetch_and_sub1_release) && \ + !defined(AO_HAVE_int_fetch_and_sub1_release) +# define AO_int_fetch_and_sub1_release(addr) \ + (int)AO_fetch_and_sub1_release((volatile AO_t *)addr) +# define AO_HAVE_int_fetch_and_sub1_release +# endif + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Entries new file mode 100644 index 0000000..2895323 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Entries @@ -0,0 +1,2 @@ +/arm_v6.h/1.1/Fri Jan 4 01:28:35 2008// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Repository new file mode 100644 index 0000000..c9540f3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/arm_v6.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/arm_v6.h new file mode 100644 index 0000000..3e2318b --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc/arm_v6.h @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2007 by NEC LE-IT: All rights reserved. + * A transcription of ARMv6 atomic operations for the ARM Realview Toolchain. + * This code works with armcc from RVDS 3.1 + * This is based on work in gcc/arm.h by + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ +#include "../read_ordered.h" +#include "../test_and_set_t_is_ao_t.h" /* Probably suboptimal */ + +#if __TARGET_ARCH_ARM < 6 +Dont use with ARM instruction sets lower than v6 +#endif + +/* NEC LE-IT: ARMv6 is the first architecture providing support for simple LL/SC + * A data memory barrier must be raised via CP15 command (see documentation). + * + * ARMv7 is compatible to ARMv6 but has a simpler command for issuing a + * memory barrier (DMB). Raising it via CP15 should still work as told me by the + * support engineers. If it turns out to be much quicker than we should implement + * custom code for ARMv7 using the asm { dmb } command. + * + * If only a single processor is used, we can define AO_UNIPROCESSOR + * and do not need to access CP15 for ensuring a DMB at all. +*/ + +AO_INLINE void +AO_nop_full() +{ +# ifndef AO_UNIPROCESSOR + unsigned int dest=0; + /* issue an data memory barrier (keeps ordering of memory transactions */ + /* before and after this operation) */ + __asm { mcr p15,0,dest,c7,c10,5 } ; +# endif +} + +#define AO_HAVE_nop_full + +AO_INLINE AO_t +AO_load(volatile AO_t *addr) +{ + /* Cast away the volatile in case it adds fence semantics. */ + return (*(AO_t *)addr); +} +#define AO_HAVE_load + +/* NEC LE-IT: atomic "store" - according to ARM documentation this is + * the only safe way to set variables also used in LL/SC environment. + * A direct write won't be recognized by the LL/SC construct in other CPUs. + * + * HB: Based on subsequent discussion, I think it would be OK to use an + * ordinary store here if we knew that interrupt handlers always cleared + * the reservation. They should, but there is some doubt that this is + * currently always the case for e.g. Linux. +*/ +AO_INLINE void AO_store(volatile AO_t *addr, AO_t value) +{ + unsigned long tmp; + +retry: +__asm { + ldrex tmp, [addr] + strex tmp, value, [addr] + teq tmp, #0 + bne retry + }; +} +#define AO_HAVE_store + +/* NEC LE-IT: replace the SWAP as recommended by ARM: + + "Applies to: ARM11 Cores + Though the SWP instruction will still work with ARM V6 cores, it is recommended + to use the new V6 synchronization instructions. The SWP instruction produces + locked read and write accesses which are atomic, i.e. another operation cannot + be done between these locked accesses which ties up external bus (AHB,AXI) + bandwidth and can increase worst case interrupt latencies. LDREX,STREX are + more flexible, other instructions can be done between the LDREX and STREX accesses. + " +*/ +AO_INLINE AO_TS_t +AO_test_and_set(volatile AO_TS_t *addr) { + + AO_TS_t oldval; + unsigned long tmp; + unsigned long one = 1; +retry: +__asm { + ldrex oldval, [addr] + strex tmp, one, [addr] + teq tmp, #0 + bne retry + } + + return oldval; +} + +#define AO_HAVE_test_and_set + +/* NEC LE-IT: fetch and add for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_add(volatile AO_t *p, AO_t incr) +{ + unsigned long tmp,tmp2; + AO_t result; + +retry: +__asm { + ldrex result, [p] + add tmp, incr, result + strex tmp2, tmp, [p] + teq tmp2, #0 + bne retry } + + return result; +} + +#define AO_HAVE_fetch_and_add + +/* NEC LE-IT: fetch and add1 for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_add1(volatile AO_t *p) +{ + unsigned long tmp,tmp2; + AO_t result; + +retry: +__asm { + ldrex result, [p] + add tmp, result, #1 + strex tmp2, tmp, [p] + teq tmp2, #0 + bne retry + } + + return result; +} + +#define AO_HAVE_fetch_and_add1 + +/* NEC LE-IT: fetch and sub for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_sub1(volatile AO_t *p) +{ + unsigned long tmp,tmp2; + AO_t result; + +retry: +__asm { + ldrex result, [p] + sub tmp, result, #1 + strex tmp2, tmp, [p] + teq tmp2, #0 + bne retry + } + + return result; +} + +#define AO_HAVE_fetch_and_sub1 + +/* NEC LE-IT: compare and swap */ +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_and_swap(volatile AO_t *addr, + AO_t old_val, AO_t new_val) +{ + AO_t result,tmp; + +retry: +__asm__ { + ldrex tmp, [addr] + mov result, #2 + teq tmp, old_val + strexeq result, new_val, [addr] + teq result, #1 + beq retry + } + + return (result^2)>>1; +} +#define AO_HAVE_compare_and_swap + +#endif // __TARGET_ARCH_ARM diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/atomic_load_store.h new file mode 100644 index 0000000..68c5179 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/atomic_load_store.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of AO_t are + * atomic fo all legal alignments. + */ + +AO_INLINE AO_t +AO_load(volatile AO_t *addr) +{ + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(AO_t *)addr); +} + +#define AO_HAVE_load + +AO_INLINE void +AO_store(volatile AO_t *addr, AO_t new_val) +{ + (*(AO_t *)addr) = new_val; +} + +#define AO_HAVE_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_acquire_release_volatile.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_acquire_release_volatile.h new file mode 100644 index 0000000..37aa021 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_acquire_release_volatile.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file adds definitions appropriate for environments in which an unsigned char + * volatile load has acquire semantics, and an unsigned char volatile store has release + * semantics. This is true with the standard Itanium ABI. + */ +#if !defined(AO_GCC_BARRIER) +# if defined(__GNUC__) +# define AO_GCC_BARRIER() AO_compiler_barrier() +# else +# define AO_GCC_BARRIER() +# endif +#endif + +AO_INLINE unsigned char +AO_char_load_acquire(volatile unsigned char *p) +{ + unsigned char result = *p; + /* A normal volatile load generates an ld.acq */ + AO_GCC_BARRIER(); + return result; +} +#define AO_HAVE_char_load_acquire + +AO_INLINE void +AO_char_store_release(volatile unsigned char *p, unsigned char val) +{ + AO_GCC_BARRIER(); + /* A normal volatile store generates an st.rel */ + *p = val; +} +#define AO_HAVE_char_store_release + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_atomic_load_store.h new file mode 100644 index 0000000..6eb0978 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/char_atomic_load_store.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of unsigned char are + * atomic for all legal alignments. + */ + +AO_INLINE unsigned char +AO_char_load(volatile unsigned char *addr) +{ + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(unsigned char *)addr); +} + +#define AO_HAVE_char_load + +AO_INLINE void +AO_char_store(volatile unsigned char *addr, unsigned char new_val) +{ + (*(unsigned char *)addr) = new_val; +} + +#define AO_HAVE_char_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/emul_cas.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/emul_cas.h new file mode 100644 index 0000000..4187f9f --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/emul_cas.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Ensure, if at all possible, that AO_compare_and_swap_full() is + * available. The emulation should be brute-force signal-safe, even + * though it actually blocks. + * Including this file will generate an error if AO_compare_and_swap_full() + * cannot be made available. + * This will be included from platform-specific atomic_ops files + * id appropriate, and if AO_FORCE_CAS is defined. It should not be + * included directly, especially since it affects the implementation + * of other atomic update primitives. + * The implementation assumes that only AO_store_XXX and AO_test_and_set_XXX + * variants are defined, and that AO_test_and_set_XXX is not used to + * operate on compare_and_swap locations. + */ + +#if !defined(ATOMIC_OPS_H) +# error This file should not be included directly. +#endif + +#ifndef AO_HAVE_double_t +# include "standard_ao_double_t.h" +#endif + +int AO_compare_and_swap_emulation(volatile AO_t *addr, AO_t old, + AO_t new_val); + +int AO_compare_double_and_swap_double_emulation(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2); + +void AO_store_full_emulation(volatile AO_t *addr, AO_t val); + +#define AO_compare_and_swap_full(addr, old, newval) \ + AO_compare_and_swap_emulation(addr, old, newval) +#define AO_HAVE_compare_and_swap_full + +#ifndef AO_HAVE_compare_double_and_swap_double +# define AO_compare_double_and_swap_double_full(addr, old1, old2, \ + newval1, newval2) \ + AO_compare_double_and_swap_double_emulation(addr, old1, old2, \ + newval1, newval2) +# define AO_HAVE_compare_double_and_swap_double_full +#endif + +#undef AO_store +#undef AO_HAVE_store +#undef AO_store_write +#undef AO_HAVE_store_write +#undef AO_store_release +#undef AO_HAVE_store_release +#undef AO_store_full +#undef AO_HAVE_store_full +#define AO_store_full(addr, val) AO_store_full_emulation(addr, val) +#define AO_HAVE_store_full diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Entries new file mode 100644 index 0000000..ddc7e93 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Entries @@ -0,0 +1,12 @@ +/alpha.h/1.1/Tue Jul 11 22:55:09 2006// +/cris.h/1.1/Tue Jul 11 22:55:09 2006// +/ia64.h/1.1/Tue Jul 11 22:55:09 2006// +/m68k.h/1.1/Tue Jul 11 22:55:09 2006// +/s390.h/1.1/Tue Jul 11 22:55:09 2006// +/sparc.h/1.1/Tue Jul 11 22:55:09 2006// +/hppa.h/1.2/Fri May 18 04:31:52 2007// +/powerpc.h/1.4/Wed Aug 29 16:42:33 2007// +/arm.h/1.3/Fri Jan 4 01:40:54 2008// +/x86_64.h/1.2/Sun Jan 6 03:34:51 2008// +/x86.h/1.3/Fri Feb 1 19:57:17 2008// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Repository new file mode 100644 index 0000000..fabfd1d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/alpha.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/alpha.h new file mode 100644 index 0000000..90c060c --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/alpha.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +#include "../atomic_load_store.h" + +#include "../test_and_set_t_is_ao_t.h" + +#define AO_NO_DD_ORDERING + /* Data dependence does not imply read ordering. */ + +AO_INLINE void +AO_nop_full() +{ + __asm__ __volatile__("mb" : : : "memory"); +} + +#define AO_HAVE_nop_full + +AO_INLINE void +AO_nop_write() +{ + __asm__ __volatile__("wmb" : : : "memory"); +} + +#define AO_HAVE_nop_write + +/* mb should be used for AO_nop_read(). That's the default. */ + +/* We believe that ldq_l ... stq_c does not imply any memory barrier. */ +/* We should add an explicit fetch_and_add definition. */ +AO_INLINE int +AO_compare_and_swap(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + unsigned long was_equal; + unsigned long temp; + + __asm__ __volatile__( + "1: ldq_l %0,%1\n" + " cmpeq %0,%4,%2\n" + " mov %3,%0\n" + " beq %2,2f\n" + " stq_c %0,%1\n" + " beq %0,1b\n" + "2:\n" + :"=&r" (temp), "=m" (*addr), "=&r" (was_equal) + : "r" (new_val), "Ir" (old) + :"memory"); + return was_equal; +} + +#define AO_HAVE_compare_and_swap + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/arm.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/arm.h new file mode 100644 index 0000000..c502d4d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/arm.h @@ -0,0 +1,250 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +#include "../read_ordered.h" + +#include "../test_and_set_t_is_ao_t.h" /* Probably suboptimal */ + +/* NEC LE-IT: ARMv6 is the first architecture providing support for simple LL/SC + * A data memory barrier must be raised via CP15 command (see documentation). + * + * ARMv7 is compatible to ARMv6 but has a simpler command for issuing a + * memory barrier (DMB). Raising it via CP15 should still work as told me by the + * support engineers. If it turns out to be much quicker than we should implement + * custom code for ARMv7 using the asm { dmb } command. + * + * If only a single processor is used, we can define AO_UNIPROCESSOR + * and do not need to access CP15 for ensuring a DMB +*/ + +/* NEC LE-IT: gcc has no way to easily check the arm architecture + * but defines only one of __ARM_ARCH_x__ to be true */ +#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_7__) +AO_INLINE void +AO_nop_full() +{ +#ifndef AO_UNIPROCESSOR + /* issue an data memory barrier (keeps ordering of memory transactions */ + /* before and after this operation) */ + unsigned int dest=0; + __asm__ __volatile__("mcr p15,0,%0,c7,c10,5" :"=&r"(dest) : : "memory"); +#endif +} + +#define AO_HAVE_nop_full + +/* NEC LE-IT: AO_t load is simple reading */ +AO_INLINE AO_t +AO_load(volatile AO_t *addr) +{ + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(AO_t *)addr); +} +#define AO_HAVE_load + +/* NEC LE-IT: atomic "store" - according to ARM documentation this is + * the only safe way to set variables also used in LL/SC environment. + * A direct write won't be recognized by the LL/SC construct on the _same_ CPU. + * Support engineers response for behaviour of ARMv6: + * + Core1 Core2 SUCCESS + =================================== + LDREX(x) + STREX(x) Yes + ----------------------------------- + LDREX(x) + STR(x) + STREX(x) No + ----------------------------------- + LDREX(x) + STR(x) + STREX(x) Yes + ----------------------------------- + + * ARMv7 behaves similar, see documentation CortexA8 TRM, point 8.5 + * + * HB: I think this is only a problem if interrupt handlers do not clear + * the reservation, as they almost certainly should. Probably change this back + * in a while? +*/ +AO_INLINE void AO_store(volatile AO_t *addr, AO_t value) +{ + unsigned long tmp; + + __asm__ __volatile__("@AO_store\n" +"1: ldrex %0, [%1]\n" +" strex %0, %2, [%1]\n" +" teq %0, #0\n" +" bne 1b" + : "=&r"(tmp) + : "r" (addr), "r"(value) + : "cc","memory"); +} +#define AO_HAVE_store + +/* NEC LE-IT: replace the SWAP as recommended by ARM: + + "Applies to: ARM11 Cores + Though the SWP instruction will still work with ARM V6 cores, it is + recommended to use the new V6 synchronization instructions. The SWP + instruction produces ‘locked’ read and write accesses which are atomic, + i.e. another operation cannot be done between these locked accesses which + ties up external bus (AHB,AXI) bandwidth and can increase worst case + interrupt latencies. LDREX,STREX are more flexible, other instructions can + be done between the LDREX and STREX accesses. + " +*/ +AO_INLINE AO_TS_t +AO_test_and_set(volatile AO_TS_t *addr) { + + AO_TS_t oldval; + unsigned long tmp; + + __asm__ __volatile__("@AO_test_and_set\n" +"1: ldrex %0, [%2]\n" +" strex %1, %3, [%2]\n" +" teq %1, #0\n" +" bne 1b\n" + : "=&r"(oldval),"=&r"(tmp) + : "r"(addr), "r"(1) + : "memory","cc"); + + return oldval; +} + +#define AO_HAVE_test_and_set + +/* NEC LE-IT: fetch and add for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_add(volatile AO_t *p, AO_t incr) +{ + unsigned long tmp,tmp2; + AO_t result; + + __asm__ __volatile__("@AO_fetch_and_add\n" +"1: ldrex %0, [%4]\n" /* get original */ +" add %2, %3, %0\n" /* sum up */ +" strex %1, %2, [%4]\n" /* store them */ +" teq %1, #0\n" +" bne 1b\n" + : "=&r"(result),"=&r"(tmp),"=&r"(tmp2) + : "r"(incr), "r"(p) + : "cc","memory"); + + return result; +} + +#define AO_HAVE_fetch_and_add + +/* NEC LE-IT: fetch and add1 for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_add1(volatile AO_t *p) +{ + unsigned long tmp,tmp2; + AO_t result; + + __asm__ __volatile__("@AO_fetch_and_add1\n" +"1: ldrex %0, [%3]\n" /* get original */ +" add %1, %0, #1\n" /* increment */ +" strex %2, %1, [%3]\n" /* store them */ +" teq %2, #0\n" +" bne 1b\n" + : "=&r"(result), "=&r"(tmp), "=&r"(tmp2) + : "r"(p) + : "cc","memory"); + + return result; +} + +#define AO_HAVE_fetch_and_add1 + +/* NEC LE-IT: fetch and sub for ARMv6 */ +AO_INLINE AO_t +AO_fetch_and_sub1(volatile AO_t *p) +{ + unsigned long tmp,tmp2; + AO_t result; + + __asm__ __volatile__("@ AO_fetch_and_sub1\n" +"1: ldrex %0, [%3]\n" /* get original */ +" sub %1, %0, #1\n" /* increment */ +" strex %2, %1, [%3]\n" /* store them */ +" teq %2, #0\n" +" bne 1b\n" + : "=&r"(result), "=&r"(tmp), "=&r"(tmp2) + : "r"(p) + : "cc","memory"); + + return result; +} + +#define AO_HAVE_fetch_and_sub1 + +/* NEC LE-IT: compare and swap */ +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_and_swap(volatile AO_t *addr, + AO_t old_val, AO_t new_val) +{ + AO_t result,tmp; + + __asm__ __volatile__("@ AO_compare_and_swap\n" +"1: ldrex %1, [%2]\n" /* get original */ +" mov %0, #2\n" /* store a flag */ +" teq %1, %3\n" /* see if match */ +" strexeq %0, %4, [%2]\n" /* store new one if matched */ +" teq %0, #1\n" +" beq 1b\n" /* if update failed, repeat */ +" eor %0, %0, #2\n" /* if succeded, return 2, else 0 */ + : "=&r"(result), "=&r"(tmp) + : "r"(addr), "r"(old_val), "r"(new_val) + : "cc","memory"); + + return (result>>1); +} +#define AO_HAVE_compare_and_swap + +#else +/* pre ARMv6 architecures ... */ + +/* I found a slide set that, if I read it correctly, claims that */ +/* Loads followed by either a Load or Store are ordered, but nothing */ +/* else is. */ +/* It appears that SWP is the only simple memory barrier. */ +#include "../all_atomic_load_store.h" + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + AO_TS_VAL_t oldval; + /* SWP on ARM is very similar to XCHG on x86. */ + /* The first operand is the result, the second the value */ + /* to be stored. Both registers must be different from addr. */ + /* Make the address operand an early clobber output so it */ + /* doesn't overlap with the other operands. The early clobber*/ + /* on oldval is neccessary to prevent the compiler allocating */ + /* them to the same register if they are both unused. */ + __asm__ __volatile__("swp %0, %2, [%3]" + : "=&r"(oldval), "=&r"(addr) + : "r"(1), "1"(addr) + : "memory"); + return oldval; +} + +#define AO_HAVE_test_and_set_full + +#endif // __ARM_ARCH_x diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h new file mode 100644 index 0000000..7f8620a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/avr32.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2009 Bradley Smith + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "../all_atomic_load_store.h" + +#include "../ordered.h" /* There are no multiprocessor implementations. */ + +#include "../test_and_set_t_is_ao_t.h" + +AO_INLINE AO_TS_VAL_t +AO_test_and_set(volatile AO_TS_t *addr) { + int ret; + + __asm__ __volatile__( + "xchg %[old], %[mem], %[newv]" + : [old] "=&r"(ret) + : [mem] "r"(addr), [newv] "r"(1) + : "memory"); + + return ret; +} + +#define AO_HAVE_test_and_set diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/cris.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/cris.h new file mode 100644 index 0000000..3864905 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/cris.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Most of this code originally comes from Hans-Peter Nilsson. It is included + * here with his permission. + * + * This version has not been tested. It was coped here from a GC + * patch so that we wouldn't lose the code in the upgrade to gc7. + */ + +#include "../all_atomic_load_store.h" + +#include "../ordered.h" /* There are no multiprocessor implementations. */ + +#include "../test_and_set_t_is_ao_t.h" + +/* + * The architecture apparently supports an "f" flag which is + * set on preemption. This essentially gives us load-locked, + * store-conditional primitives, though I'm not quite sure how + * this would work on a hypothetical multiprocessor. -HB + * + * For details, see + * http://developer.axis.com/doc/hardware/etrax100lx/prog_man/ + * 1_architectural_description.pdf + * + * Presumably many other primitives (notably CAS, including the double- + * width versions) could be implemented in this manner, if someone got + * around to it. + */ + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + /* Ripped from linuxthreads/sysdeps/cris/pt-machine.h */ + 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 AO_HAVE_test_and_set_full + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/hppa.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/hppa.h new file mode 100644 index 0000000..f303d7f --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/hppa.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Modified by Carlos O'Donell , 2003 + * - Added self-aligning lock. + * + */ + +#include "../all_atomic_load_store.h" + +/* Some architecture set descriptions include special "ordered" memory */ +/* operations. As far as we can tell, no existing processors actually */ +/* require those. Nor does it appear likely that future processors */ +/* will. */ +#include "../ordered.h" + +/* GCC will not guarantee the alignment we need, use four lock words */ +/* and select the correctly aligned datum. See the glibc 2.3.2 */ +/* linuxthread port for the original implementation. */ +struct AO_pa_clearable_loc { + int data[4]; +}; + +#undef AO_TS_INITIALIZER +#define AO_TS_t struct AO_pa_clearable_loc +#define AO_TS_INITIALIZER {1,1,1,1} +/* Switch meaning of set and clear, since we only have an atomic clear */ +/* instruction. */ +typedef enum {AO_PA_TS_set = 0, AO_PA_TS_clear = 1} AO_PA_TS_val; +#define AO_TS_VAL_t AO_PA_TS_val +#define AO_TS_CLEAR AO_PA_TS_clear +#define AO_TS_SET AO_PA_TS_set + +/* The hppa only has one atomic read and modify memory operation, */ +/* load and clear, so hppa spinlocks must use zero to signify that */ +/* someone is holding the lock. The address used for the ldcw */ +/* semaphore must be 16-byte aligned. */ + +#define __ldcw(a) ({ \ + volatile unsigned int __ret; \ + __asm__ __volatile__("ldcw 0(%2),%0" \ + : "=r" (__ret), "=m" (*(a)) : "r" (a)); \ + __ret; \ +}) + +/* Because malloc only guarantees 8-byte alignment for malloc'd data, */ +/* and GCC only guarantees 8-byte alignment for stack locals, we can't */ +/* be assured of 16-byte alignment for atomic lock data even if we */ +/* specify "__attribute ((aligned(16)))" in the type declaration. So, */ +/* we use a struct containing an array of four ints for the atomic lock */ +/* type and dynamically select the 16-byte aligned int from the array */ +/* for the semaphore. */ +#define __PA_LDCW_ALIGNMENT 16 +#define __ldcw_align(a) ({ \ + unsigned long __ret = (unsigned long) a; \ + __ret += __PA_LDCW_ALIGNMENT - 1; \ + __ret &= ~(__PA_LDCW_ALIGNMENT - 1); \ + (volatile unsigned int *) __ret; \ +}) + +/* Works on PA 1.1 and PA 2.0 systems */ +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t * addr) +{ + volatile unsigned int *a = __ldcw_align (addr); + return (AO_TS_VAL_t) __ldcw (a); +} + +AO_INLINE void +AO_pa_clear(volatile AO_TS_t * addr) +{ + volatile unsigned int *a = __ldcw_align (addr); + AO_compiler_barrier(); + *a = 1; +} +#define AO_CLEAR(addr) AO_pa_clear(addr) + +#define AO_HAVE_test_and_set_full + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/ia64.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/ia64.h new file mode 100644 index 0000000..119b9ed --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/ia64.h @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "../all_atomic_load_store.h" + +#include "../all_acquire_release_volatile.h" + +#include "../test_and_set_t_is_char.h" + +#ifdef _ILP32 + /* 32-bit HP/UX code. */ + /* This requires pointer "swizzling". Pointers need to be expanded */ + /* to 64 bits using the addp4 instruction before use. This makes it */ + /* hard to share code, but we try anyway. */ +# define AO_LEN "4" + /* We assume that addr always appears in argument position 1 in asm */ + /* code. If it is clobbered due to swizzling, we also need it in */ + /* second position. Any later arguments are referenced symbolically, */ + /* so that we don't have to worry about their position. This requires*/ + /* gcc 3.1, but you shouldn't be using anything older than that on */ + /* IA64 anyway. */ + /* The AO_MASK macro is a workaround for the fact that HP/UX gcc */ + /* appears to otherwise store 64-bit pointers in ar.ccv, i.e. it */ + /* doesn't appear to clear high bits in a pointer value we pass into */ + /* assembly code, even if it is supposedly of type AO_t. */ +# define AO_IN_ADDR "1"(addr) +# define AO_OUT_ADDR , "=r"(addr) +# define AO_SWIZZLE "addp4 %1=0,%1;;\n" +# define AO_MASK(ptr) __asm__("zxt4 %1=%1": "=r"(ptr) : "0"(ptr)); +#else +# define AO_LEN "8" +# define AO_IN_ADDR "r"(addr) +# define AO_OUT_ADDR +# define AO_SWIZZLE +# define AO_MASK(ptr) +#endif + +AO_INLINE void +AO_nop_full() +{ + __asm__ __volatile__("mf" : : : "memory"); +} +#define AO_HAVE_nop_full + +AO_INLINE AO_t +AO_fetch_and_add1_acquire (volatile AO_t *addr) +{ + AO_t result; + + __asm__ __volatile__ (AO_SWIZZLE + "fetchadd" AO_LEN ".acq %0=[%1],1": + "=r" (result) AO_OUT_ADDR: AO_IN_ADDR :"memory"); + return result; +} +#define AO_HAVE_fetch_and_add1_acquire + +AO_INLINE AO_t +AO_fetch_and_add1_release (volatile AO_t *addr) +{ + AO_t result; + + __asm__ __volatile__ (AO_SWIZZLE + "fetchadd" AO_LEN ".rel %0=[%1],1": + "=r" (result) AO_OUT_ADDR: AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_fetch_and_add1_release + +AO_INLINE AO_t +AO_fetch_and_sub1_acquire (volatile AO_t *addr) +{ + AO_t result; + + __asm__ __volatile__ (AO_SWIZZLE + "fetchadd" AO_LEN ".acq %0=[%1],-1": + "=r" (result) AO_OUT_ADDR: AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_fetch_and_sub1_acquire + +AO_INLINE AO_t +AO_fetch_and_sub1_release (volatile AO_t *addr) +{ + AO_t result; + + __asm__ __volatile__ (AO_SWIZZLE + "fetchadd" AO_LEN ".rel %0=[%1],-1": + "=r" (result) AO_OUT_ADDR: AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_fetch_and_sub1_release + +#ifndef _ILP32 + +AO_INLINE unsigned int +AO_int_fetch_and_add1_acquire (volatile unsigned int *addr) +{ + unsigned int result; + + __asm__ __volatile__ ("fetchadd4.acq %0=[%1],1": + "=r" (result): AO_IN_ADDR :"memory"); + return result; +} +#define AO_HAVE_int_fetch_and_add1_acquire + +AO_INLINE unsigned int +AO_int_fetch_and_add1_release (volatile unsigned int *addr) +{ + unsigned int result; + + __asm__ __volatile__ ("fetchadd4.rel %0=[%1],1": + "=r" (result): AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_int_fetch_and_add1_release + +AO_INLINE unsigned int +AO_int_fetch_and_sub1_acquire (volatile unsigned int *addr) +{ + unsigned int result; + + __asm__ __volatile__ ("fetchadd4.acq %0=[%1],-1": + "=r" (result): AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_int_fetch_and_sub1_acquire + +AO_INLINE unsigned int +AO_int_fetch_and_sub1_release (volatile unsigned int *addr) +{ + unsigned int result; + + __asm__ __volatile__ ("fetchadd4.rel %0=[%1],-1": + "=r" (result): AO_IN_ADDR :"memory"); + return result; +} + +#define AO_HAVE_int_fetch_and_sub1_release + +#endif /* !_ILP32 */ + +AO_INLINE int +AO_compare_and_swap_acquire(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + AO_MASK(old); + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg" AO_LEN + ".acq %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"(old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_acquire + +AO_INLINE int +AO_compare_and_swap_release(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + AO_MASK(old); + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg" AO_LEN + ".rel %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"(old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_release + +AO_INLINE int +AO_char_compare_and_swap_acquire(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg1.acq %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"((AO_t)old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_acquire + +AO_INLINE int +AO_char_compare_and_swap_release(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg1.rel %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"((AO_t)old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_release + +AO_INLINE int +AO_short_compare_and_swap_acquire(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg2.acq %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"((AO_t)old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_acquire + +AO_INLINE int +AO_short_compare_and_swap_release(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + __asm__ __volatile__(AO_SWIZZLE + "mov ar.ccv=%[old] ;; cmpxchg2.rel %0=[%1],%[new_val],ar.ccv" + : "=r"(oldval) AO_OUT_ADDR + : AO_IN_ADDR, [new_val]"r"(new_val), [old]"r"((AO_t)old) + : "memory"); + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_release + +#ifndef _ILP32 + +AO_INLINE int +AO_int_compare_and_swap_acquire(volatile unsigned int *addr, + unsigned int old, unsigned int new_val) +{ + unsigned int oldval; + __asm__ __volatile__("mov ar.ccv=%3 ;; cmpxchg4.acq %0=[%1],%2,ar.ccv" + : "=r"(oldval) + : AO_IN_ADDR, "r"(new_val), "r"((AO_t)old) : "memory"); + return (oldval == old); +} + +#define AO_HAVE_int_compare_and_swap_acquire + +AO_INLINE int +AO_int_compare_and_swap_release(volatile unsigned int *addr, + unsigned int old, unsigned int new_val) +{ + unsigned int oldval; + __asm__ __volatile__("mov ar.ccv=%3 ;; cmpxchg4.rel %0=[%1],%2,ar.ccv" + : "=r"(oldval) + : AO_IN_ADDR, "r"(new_val), "r"((AO_t)old) : "memory"); + return (oldval == old); +} + +#define AO_HAVE_int_compare_and_swap_release + +#endif /* !_ILP32 */ + +/* FIXME: Add compare_and_swap_double as soon as there is widely */ +/* available hardware that implements it. */ + +/* FIXME: Add compare_double_and_swap_double for the _ILP32 case. */ + +#ifdef _ILP32 +# include "../ao_t_is_int.h" +#endif diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/m68k.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/m68k.h new file mode 100644 index 0000000..9e7f70a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/m68k.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +/* FIXME. Very incomplete. */ +#include "../all_aligned_atomic_load_store.h" + +/* Are there any m68k multiprocessors still around? */ +/* AFAIK, Alliants were sequentially consistent. */ +#include "../ordered.h" + +#include "../test_and_set_t_is_ao_t.h" + +/* Contributed by Tony Mantler or new. Should be changed to MIT license? */ +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + int oldval; + + /* The return value is semi-phony. */ + /* 'tas' sets bit 7 while the return */ + /* value pretends bit 0 was set */ + __asm__ __volatile__( + "tas %1@; sne %0; negb %0" + : "=d" (oldval) + : "a" (addr) : "memory"); + return oldval; +} + +#define AO_HAVE_test_and_set_full + + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/powerpc.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/powerpc.h new file mode 100644 index 0000000..799722a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/powerpc.h @@ -0,0 +1,270 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P. + * + * + * 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. + * + */ + +/* FIXME. Incomplete. No support for 64 bits. */ +/* Memory model documented at http://www-106.ibm.com/developerworks/ */ +/* eserver/articles/archguide.html and (clearer) */ +/* http://www-106.ibm.com/developerworks/eserver/articles/powerpc.html. */ +/* There appears to be no implicit ordering between any kind of */ +/* independent memory references. */ +/* Architecture enforces some ordering based on control dependence. */ +/* I don't know if that could help. */ +/* Data-dependent loads are always ordered. */ +/* Based on the above references, eieio is intended for use on */ +/* uncached memory, which we don't support. It does not order loads */ +/* from cached memory. */ +/* Thanks to Maged Michael, Doug Lea, and Roger Hoover for helping to */ +/* track some of this down and correcting my misunderstandings. -HB */ + +#include "../all_aligned_atomic_load_store.h" + +#include "../test_and_set_t_is_ao_t.h" + /* There seems to be no byte equivalent of lwarx, so this */ + /* may really be what we want, at least in the 32-bit case. */ + +AO_INLINE void +AO_nop_full() +{ + __asm__ __volatile__("sync" : : : "memory"); +} + +#define AO_HAVE_nop_full + +/* lwsync apparently works for everything but a StoreLoad barrier. */ +AO_INLINE void +AO_lwsync() +{ + __asm__ __volatile__("lwsync" : : : "memory"); +} + +#define AO_nop_write() AO_lwsync() +#define AO_HAVE_nop_write + +#define AO_nop_read() AO_lwsync() +#define AO_HAVE_nop_read + +/* We explicitly specify load_acquire, since it is important, and can */ +/* be implemented relatively cheaply. It could be implemented */ +/* with an ordinary load followed by a lwsync. But the general wisdom */ +/* seems to be that a data dependent branch followed by an isync is */ +/* cheaper. And the documentation is fairly explicit that this also */ +/* has acquire semantics. */ +/* ppc64 uses ld not lwz */ +#if defined(__powerpc64__) || defined(__ppc64__) || defined(__64BIT__) +AO_INLINE AO_t +AO_load_acquire(volatile AO_t *addr) +{ + AO_t result; + + /* FIXME: We should get gcc to allocate one of the condition */ + /* registers. I always got "impossible constraint" when I */ + /* tried the "y" constraint. */ + __asm__ __volatile__ ( + "ld %0,%1\n" + "cmpw cr7,%0,%0\n" + "bne- cr7,1f\n" + "1: isync\n" + : "=r" (result) + : "m"(*addr) : "memory", "cc"); + return result; +} +#else +AO_INLINE AO_t +AO_load_acquire(volatile AO_t *addr) +{ + AO_t result; + + /* FIXME: We should get gcc to allocate one of the condition */ + /* registers. I always got "impossible constraint" when I */ + /* tried the "y" constraint. */ + __asm__ __volatile__ ( + "lwz%X1 %0,%1\n" + "cmpw cr7,%0,%0\n" + "bne- cr7,1f\n" + "1: isync\n" + : "=r" (result) + : "m"(*addr) : "memory", "cc"); + return result; +} +#endif +#define AO_HAVE_load_acquire + +/* We explicitly specify store_release, since it relies */ +/* on the fact that lwsync is also a LoadStore barrier. */ +AO_INLINE void +AO_store_release(volatile AO_t *addr, AO_t value) +{ + AO_lwsync(); + *addr = value; +} + +#define AO_HAVE_load_acquire + +/* This is similar to the code in the garbage collector. Deleting */ +/* this and having it synthesized from compare_and_swap would probably */ +/* only cost us a load immediate instruction. */ +#if defined(__powerpc64__) || defined(__ppc64__) || defined(__64BIT__) +/* Completely untested. And we should be using smaller objects anyway. */ +AO_INLINE AO_TS_VAL_t +AO_test_and_set(volatile AO_TS_t *addr) { + unsigned long oldval; + unsigned long temp = 1; /* locked value */ + + __asm__ __volatile__( + "1:ldarx %0,0,%1\n" /* load and reserve */ + "cmpdi %0, 0\n" /* if load is */ + "bne 2f\n" /* non-zero, return already set */ + "stdcx. %2,0,%1\n" /* else store conditional */ + "bne- 1b\n" /* retry if lost reservation */ + "2:\n" /* oldval is zero if we set */ + : "=&r"(oldval) + : "r"(addr), "r"(temp) + : "memory", "cc"); + + return (AO_TS_VAL_t)oldval; +} + +#else + +AO_INLINE AO_TS_VAL_t +AO_test_and_set(volatile AO_TS_t *addr) { + int oldval; + int temp = 1; /* locked value */ + + __asm__ __volatile__( + "1:lwarx %0,0,%1\n" /* load and reserve */ + "cmpwi %0, 0\n" /* if load is */ + "bne 2f\n" /* non-zero, return already set */ + "stwcx. %2,0,%1\n" /* else store conditional */ + "bne- 1b\n" /* retry if lost reservation */ + "2:\n" /* oldval is zero if we set */ + : "=&r"(oldval) + : "r"(addr), "r"(temp) + : "memory", "cc"); + + return (AO_TS_VAL_t)oldval; +} + +#endif + +#define AO_have_test_and_set + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_acquire(volatile AO_TS_t *addr) { + AO_TS_VAL_t result = AO_test_and_set(addr); + AO_lwsync(); + return result; +} + +#define AO_HAVE_test_and_set_acquire + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_release(volatile AO_TS_t *addr) { + AO_lwsync(); + return AO_test_and_set(addr); +} + +#define AO_HAVE_test_and_set_release + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + AO_TS_VAL_t result; + AO_lwsync(); + result = AO_test_and_set(addr); + AO_lwsync(); + return result; +} + +#define AO_HAVE_test_and_set_full + +#if defined(__powerpc64__) || defined(__ppc64__) || defined(__64BIT__) +/* FIXME: Completely untested. */ +AO_INLINE int +AO_compare_and_swap(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_t oldval; + int result = 0; + + __asm__ __volatile__( + "1:ldarx %0,0,%2\n" /* load and reserve */ + "cmpd %0, %4\n" /* if load is not equal to */ + "bne 2f\n" /* old, fail */ + "stdcx. %3,0,%2\n" /* else store conditional */ + "bne- 1b\n" /* retry if lost reservation */ + "li %1,1\n" /* result = 1; */ + "2:\n" + : "=&r"(oldval), "=&r"(result) + : "r"(addr), "r"(new_val), "r"(old), "1"(result) + : "memory", "cc"); + + return result; +} + +#else + +AO_INLINE int +AO_compare_and_swap(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_t oldval; + int result = 0; + + __asm__ __volatile__( + "1:lwarx %0,0,%2\n" /* load and reserve */ + "cmpw %0, %4\n" /* if load is not equal to */ + "bne 2f\n" /* old, fail */ + "stwcx. %3,0,%2\n" /* else store conditional */ + "bne- 1b\n" /* retry if lost reservation */ + "li %1,1\n" /* result = 1; */ + "2:\n" + : "=&r"(oldval), "=&r"(result) + : "r"(addr), "r"(new_val), "r"(old), "1"(result) + : "memory", "cc"); + + return result; +} +#endif + +#define AO_HAVE_compare_and_swap + +AO_INLINE int +AO_compare_and_swap_acquire(volatile AO_t *addr, AO_t old, AO_t new_val) { + int result = AO_compare_and_swap(addr, old, new_val); + AO_lwsync(); + return result; +} + +#define AO_HAVE_compare_and_swap_acquire + +AO_INLINE int +AO_compare_and_swap_release(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_lwsync(); + return AO_compare_and_swap(addr, old, new_val); +} + +#define AO_HAVE_compare_and_swap_release + +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_t result; + AO_lwsync(); + result = AO_compare_and_swap(addr, old, new_val); + AO_lwsync(); + return result; +} + +#define AO_HAVE_compare_and_swap_full + +/* FIXME: We should also implement fetch_and_add and or primitives */ +/* directly. */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h new file mode 100644 index 0000000..7cb9986 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/s390.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +/* FIXME: untested. */ +/* The relevant documentation appears to be at */ +/* http://publibz.boulder.ibm.com/epubs/pdf/dz9zr003.pdf */ +/* around page 5-96. Apparently: */ +/* - Memory references in general are atomic only for a single */ +/* byte. But it appears that the most common load/store */ +/* instructions also guarantee atomicity for aligned */ +/* operands of standard types. WE FOOLISHLY ASSUME that */ +/* compilers only generate those. If that turns out to be */ +/* wrong, we need inline assembly code for AO_load and */ +/* AO_store. */ +/* - A store followed by a load is unordered since the store */ +/* may be delayed. Otherwise everything is ordered. */ +/* - There is a hardware compare-and-swap (CS) instruction. */ + +#include "ordered_except_wr.h" +#include "all_aligned_atomic_load_store.h" + +#include "../test_and_set_t_is_ao_t.h" +/* FIXME: Is there a way to do byte-sized test-and-set? */ + +/* FIXME: AO_nop_full should probably be implemented directly. */ +/* It appears that certain BCR instructions have that effect. */ +/* Presumably they're cheaper than CS? */ + +AO_INLINE AO_t AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + int retval; + __asm__ __volatile__ ( +# ifndef __s390x__ + " cs %1,%2,0(%3)\n" +# else + " csg %1,%2,0(%3)\n" +# endif + " ipm %0\n" + " srl %0,28\n" + : "=&d" (retval), "+d" (old) + : "d" (new_val), "a" (addr) + : "cc", "memory"); + return retval == 0; +} + +#define AO_HAVE_compare_and_swap_full + +/* FIXME: Add double-wide compare-and-swap for 32-bit executables. */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/sparc.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/sparc.h new file mode 100644 index 0000000..4850855 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/sparc.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +/* FIXME. Very incomplete. No support for sparc64. */ +/* Non-ancient SPARCs provide compare-and-swap (casa). */ +/* We should make that available. */ + +#include "../all_atomic_load_store.h" + +/* Real SPARC code uses TSO: */ +#include "../ordered_except_wr.h" + +/* Test_and_set location is just a byte. */ +#include "../test_and_set_t_is_char.h" + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + int oldval; + + __asm__ __volatile__("ldstub %1,%0" + : "=r"(oldval), "=m"(*addr) + : "m"(*addr) : "memory"); + return oldval; +} + +#define AO_HAVE_test_and_set_full + +/* FIXME: This needs to be extended for SPARC v8 and v9. */ +/* SPARC V8 also has swap. V9 has CAS. */ +/* There are barriers like membar #LoadStore. */ +/* CASA (32-bit) and CASXA(64-bit) instructions were */ +/* added in V9. */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86.h new file mode 100644 index 0000000..96fd2cb --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + * Some of the machine specific code was borrowed from our GC distribution. + */ + +/* The following really assume we have a 486 or better. Unfortunately */ +/* gcc doesn't define a suitable feature test macro based on command */ +/* line options. */ +/* We should perhaps test dynamically. */ + +#include "../all_aligned_atomic_load_store.h" + +/* Real X86 implementations, except for some old WinChips, appear */ +/* to enforce ordering between memory operations, EXCEPT that a later */ +/* read can pass earlier writes, presumably due to the visible */ +/* presence of store buffers. */ +/* We ignore both the WinChips, and the fact that the official specs */ +/* seem to be much weaker (and arguably too weak to be usable). */ + +#include "../ordered_except_wr.h" + +#include "../test_and_set_t_is_char.h" + +#include "../standard_ao_double_t.h" + +#if defined(AO_USE_PENTIUM4_INSTRS) +AO_INLINE void +AO_nop_full() +{ + __asm__ __volatile__("mfence" : : : "memory"); +} + +#define AO_HAVE_nop_full + +#else + +/* We could use the cpuid instruction. But that seems to be slower */ +/* than the default implementation based on test_and_set_full. Thus */ +/* we omit that bit of misinformation here. */ + +#endif + +/* As far as we can tell, the lfence and sfence instructions are not */ +/* currently needed or useful for cached memory accesses. */ + +/* Really only works for 486 and later */ +AO_INLINE AO_t +AO_fetch_and_add_full (volatile AO_t *p, AO_t incr) +{ + AO_t result; + + __asm__ __volatile__ ("lock; xaddl %0, %1" : + "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_fetch_and_add_full + +AO_INLINE unsigned char +AO_char_fetch_and_add_full (volatile unsigned char *p, unsigned char incr) +{ + unsigned char result; + + __asm__ __volatile__ ("lock; xaddb %0, %1" : + "=q" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_char_fetch_and_add_full + +AO_INLINE unsigned short +AO_short_fetch_and_add_full (volatile unsigned short *p, unsigned short incr) +{ + unsigned short result; + + __asm__ __volatile__ ("lock; xaddw %0, %1" : + "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_short_fetch_and_add_full + +/* Really only works for 486 and later */ +AO_INLINE void +AO_or_full (volatile AO_t *p, AO_t incr) +{ + __asm__ __volatile__ ("lock; orl %1, %0" : + "=m" (*p) : "r" (incr), "m" (*p) : "memory"); +} + +#define AO_HAVE_or_full + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) +{ + unsigned char oldval; + /* Note: the "xchg" instruction does not need a "lock" prefix */ + __asm__ __volatile__("xchgb %0, %1" + : "=q"(oldval), "=m"(*addr) + : "0"(0xff), "m"(*addr) : "memory"); + return (AO_TS_VAL_t)oldval; +} + +#define AO_HAVE_test_and_set_full + +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + char result; + __asm__ __volatile__("lock; cmpxchgl %3, %0; setz %1" + : "=m"(*addr), "=q"(result) + : "m"(*addr), "r" (new_val), "a"(old) : "memory"); + return (int) result; +} + +#define AO_HAVE_compare_and_swap_full + +/* Returns nonzero if the comparison succeeded. */ +/* Really requires at least a Pentium. */ +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + char result; + #if __PIC__ + /* If PIC is turned on, we can't use %ebx as it is reserved for the + GOT poiner. We can save and restore %ebx because GCC won't be + using it for anything else (such as any of the m operands) */ + __asm__ __volatile__("pushl %%ebx;" /* save ebx used for PIC GOT ptr */ + "movl %6,%%ebx;" /* move new_val2 to %ebx */ + "lock; cmpxchg8b %0; setz %1;" + "pop %%ebx;" /* restore %ebx */ + : "=m"(*addr), "=q"(result) + : "m"(*addr), "d" (old_val2), "a" (old_val1), + "c" (new_val2), "m" (new_val1) : "memory"); + #else + /* We can't just do the same thing in non-PIC mode, because GCC + * might be using %ebx as the memory operand. We could have ifdef'd + * in a clobber, but there's no point doing the push/pop if we don't + * have to. */ + __asm__ __volatile__("lock; cmpxchg8b %0; setz %1;" + : "=m"(*addr), "=q"(result) + : "m"(*addr), "d" (old_val2), "a" (old_val1), + "c" (new_val2), "b" (new_val1) : "memory"); + #endif + return (int) result; +} + +#define AO_HAVE_compare_double_and_swap_double_full + +#include "../ao_t_is_int.h" diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h new file mode 100644 index 0000000..91e99e6 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc/x86_64.h @@ -0,0 +1,195 @@ +/* + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + * Some of the machine specific code was borrowed from our GC distribution. + */ + +/* The following really assume we have a 486 or better. Unfortunately */ +/* gcc doesn't define a suitable feature test macro based on command */ +/* line options. */ +/* We should perhaps test dynamically. */ + +#include "../all_aligned_atomic_load_store.h" + +/* Real X86 implementations, except for some old WinChips, appear */ +/* to enforce ordering between memory operations, EXCEPT that a later */ +/* read can pass earlier writes, presumably due to the visible */ +/* presence of store buffers. */ +/* We ignore both the WinChips, and the fact that the official specs */ +/* seem to be much weaker (and arguably too weak to be usable). */ + +#include "../ordered_except_wr.h" + +#include "../test_and_set_t_is_char.h" + +#include "../standard_ao_double_t.h" + +#if defined(AO_USE_PENTIUM4_INSTRS) +AO_INLINE void +AO_nop_full() +{ + __asm__ __volatile__("mfence" : : : "memory"); +} + +#define AO_HAVE_nop_full + +#else + +/* We could use the cpuid instruction. But that seems to be slower */ +/* than the default implementation based on test_and_set_full. Thus */ +/* we omit that bit of misinformation here. */ + +#endif + +/* As far as we can tell, the lfence and sfence instructions are not */ +/* currently needed or useful for cached memory accesses. */ + +/* Really only works for 486 and later */ +AO_INLINE AO_t +AO_fetch_and_add_full (volatile AO_t *p, AO_t incr) +{ + AO_t result; + + __asm__ __volatile__ ("lock; xaddq %0, %1" : + "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_fetch_and_add_full + +AO_INLINE unsigned char +AO_char_fetch_and_add_full (volatile unsigned char *p, unsigned char incr) +{ + unsigned char result; + + __asm__ __volatile__ ("lock; xaddb %0, %1" : + "=q" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_char_fetch_and_add_full + +AO_INLINE unsigned short +AO_short_fetch_and_add_full (volatile unsigned short *p, unsigned short incr) +{ + unsigned short result; + + __asm__ __volatile__ ("lock; xaddw %0, %1" : + "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_short_fetch_and_add_full + +AO_INLINE unsigned short +AO_int_fetch_and_add_full (volatile unsigned int *p, unsigned int incr) +{ + unsigned int result; + + __asm__ __volatile__ ("lock; xaddl %0, %1" : + "=r" (result), "=m" (*p) : "0" (incr), "m" (*p) + : "memory"); + return result; +} + +#define AO_HAVE_int_fetch_and_add_full + +/* Really only works for 486 and later */ +AO_INLINE void +AO_or_full (volatile AO_t *p, AO_t incr) +{ + __asm__ __volatile__ ("lock; orq %1, %0" : + "=m" (*p) : "r" (incr), "m" (*p) : "memory"); +} + +#define AO_HAVE_or_full + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) +{ + unsigned char oldval; + /* Note: the "xchg" instruction does not need a "lock" prefix */ + __asm__ __volatile__("xchgb %0, %1" + : "=q"(oldval), "=m"(*addr) + : "0"(0xff), "m"(*addr) : "memory"); + return (AO_TS_VAL_t)oldval; +} + +#define AO_HAVE_test_and_set_full + +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + char result; + __asm__ __volatile__("lock; cmpxchgq %3, %0; setz %1" + : "=m"(*addr), "=q"(result) + : "m"(*addr), "r" (new_val), "a"(old) : "memory"); + return (int) result; +} + +#define AO_HAVE_compare_and_swap_full + +#ifdef AO_CMPXCHG16B_AVAILABLE +/* NEC LE-IT: older AMD Opterons are missing this instruction. + * On these machines SIGILL will be thrown. Define AO_CASDOUBLE_MISSING + * to have an emulated (lock based) version available */ +/* HB: Changed this to not define either by default. There are + * enough machines and tool chains around on which cmpxchg16b + * doesn't work. And the emulation is unsafe by our usual rules. + * Hoewever both are clearly useful in certain cases. + */ +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + char result; + __asm__ __volatile__("lock; cmpxchg16b %0; setz %1" + : "=m"(*addr), "=q"(result) + : "m"(*addr), + "d" (old_val1), + "a" (old_val2), + "c" (new_val1), + "b" (new_val2) : "memory"); + return (int) result; +} +#define AO_HAVE_compare_double_and_swap_double_full +#else +/* this one provides spinlock based emulation of CAS implemented in */ +/* atomic_ops.c. We probably do not want to do this here, since it is */ +/* not attomic with respect to other kinds of updates of *addr. On the */ +/* other hand, this may be a useful facility on occasion. */ +#ifdef AO_WEAK_DOUBLE_CAS_EMULATION +int AO_compare_double_and_swap_double_emulation(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2); + +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + return AO_compare_double_and_swap_double_emulation(addr, + old_val1, old_val2, + new_val1, new_val2); +} +#define AO_HAVE_compare_double_and_swap_double_full +#endif /* AO_WEAK_DOUBLE_CAS_EMULATION */ +#endif /* AO_CMPXCHG16B_AVAILABLE */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/generic_pthread.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/generic_pthread.h new file mode 100644 index 0000000..8d17c0a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/generic_pthread.h @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* The following is useful primarily for debugging and documentation. */ +/* We define various atomic operations by acquiring a global pthread */ +/* lock. The resulting implementation will perform poorly, but should */ +/* be correct unless it is used from signal handlers. */ +/* We assume that all pthread operations act like full memory barriers. */ +/* (We believe that is the intent of the specification.) */ + +#include + +#include "test_and_set_t_is_ao_t.h" + /* This is not necessarily compatible with the native */ + /* implementation. But those can't be safely mixed anyway. */ + +/* We define only the full barrier variants, and count on the */ +/* generalization section below to fill in the rest. */ +extern pthread_mutex_t AO_pt_lock; + +AO_INLINE void +AO_nop_full() +{ + pthread_mutex_lock(&AO_pt_lock); + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_nop_full + +AO_INLINE AO_t +AO_load_full(volatile AO_t *addr) +{ + AO_t result; + pthread_mutex_lock(&AO_pt_lock); + result = *addr; + pthread_mutex_unlock(&AO_pt_lock); + return result; +} + +#define AO_HAVE_load_full + +AO_INLINE void +AO_store_full(volatile AO_t *addr, AO_t val) +{ + pthread_mutex_lock(&AO_pt_lock); + *addr = val; + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_store_full + +AO_INLINE unsigned char +AO_char_load_full(volatile unsigned char *addr) +{ + unsigned char result; + pthread_mutex_lock(&AO_pt_lock); + result = *addr; + pthread_mutex_unlock(&AO_pt_lock); + return result; +} + +#define AO_HAVE_char_load_full + +AO_INLINE void +AO_char_store_full(volatile unsigned char *addr, unsigned char val) +{ + pthread_mutex_lock(&AO_pt_lock); + *addr = val; + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_char_store_full + +AO_INLINE unsigned short +AO_short_load_full(volatile unsigned short *addr) +{ + unsigned short result; + pthread_mutex_lock(&AO_pt_lock); + result = *addr; + pthread_mutex_unlock(&AO_pt_lock); + return result; +} + +#define AO_HAVE_short_load_full + +AO_INLINE void +AO_short_store_full(volatile unsigned short *addr, unsigned short val) +{ + pthread_mutex_lock(&AO_pt_lock); + *addr = val; + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_short_store_full + +AO_INLINE unsigned int +AO_int_load_full(volatile unsigned int *addr) +{ + unsigned int result; + pthread_mutex_lock(&AO_pt_lock); + result = *addr; + pthread_mutex_unlock(&AO_pt_lock); + return result; +} + +#define AO_HAVE_int_load_full + +AO_INLINE void +AO_int_store_full(volatile unsigned int *addr, unsigned int val) +{ + pthread_mutex_lock(&AO_pt_lock); + *addr = val; + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_int_store_full + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) +{ + AO_TS_VAL_t result; + pthread_mutex_lock(&AO_pt_lock); + result = (AO_TS_VAL_t)(*addr); + *addr = AO_TS_SET; + pthread_mutex_unlock(&AO_pt_lock); + assert(result == AO_TS_SET || result == AO_TS_CLEAR); + return result; +} + +#define AO_HAVE_test_and_set_full + +AO_INLINE AO_t +AO_fetch_and_add_full(volatile AO_t *p, AO_t incr) +{ + AO_t tmp; + + pthread_mutex_lock(&AO_pt_lock); + tmp = *p; + *p = tmp + incr; + pthread_mutex_unlock(&AO_pt_lock); + return tmp; +} + +#define AO_HAVE_fetch_and_add_full + +AO_INLINE unsigned char +AO_char_fetch_and_add_full(volatile unsigned char *p, unsigned char incr) +{ + unsigned char tmp; + + pthread_mutex_lock(&AO_pt_lock); + tmp = *p; + *p = tmp + incr; + pthread_mutex_unlock(&AO_pt_lock); + return tmp; +} + +#define AO_HAVE_char_fetch_and_add_full + +AO_INLINE unsigned short +AO_short_fetch_and_add_full(volatile unsigned short *p, unsigned short incr) +{ + unsigned short tmp; + + pthread_mutex_lock(&AO_pt_lock); + tmp = *p; + *p = tmp + incr; + pthread_mutex_unlock(&AO_pt_lock); + return tmp; +} + +#define AO_HAVE_short_fetch_and_add_full + +AO_INLINE unsigned int +AO_int_fetch_and_add_full(volatile unsigned int *p, unsigned int incr) +{ + unsigned int tmp; + + pthread_mutex_lock(&AO_pt_lock); + tmp = *p; + *p = tmp + incr; + pthread_mutex_unlock(&AO_pt_lock); + return tmp; +} + +#define AO_HAVE_int_fetch_and_add_full + +AO_INLINE void +AO_or_full(volatile AO_t *p, AO_t incr) +{ + AO_t tmp; + + pthread_mutex_lock(&AO_pt_lock); + tmp = *p; + *p = (tmp | incr); + pthread_mutex_unlock(&AO_pt_lock); +} + +#define AO_HAVE_or_full + +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + pthread_mutex_lock(&AO_pt_lock); + if (*addr == old) + { + *addr = new_val; + pthread_mutex_unlock(&AO_pt_lock); + return 1; + } + else + pthread_mutex_unlock(&AO_pt_lock); + return 0; +} + +#define AO_HAVE_compare_and_swap_full + +/* Unlike real architectures, we define both double-width CAS variants. */ + +typedef struct { + AO_t AO_val1; + AO_t AO_val2; +} AO_double_t; + +#define AO_HAVE_double_t + +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old1, AO_t old2, + AO_t new1, AO_t new2) +{ + pthread_mutex_lock(&AO_pt_lock); + if (addr -> AO_val1 == old1 && addr -> AO_val2 == old2) + { + addr -> AO_val1 = new1; + addr -> AO_val2 = new2; + pthread_mutex_unlock(&AO_pt_lock); + return 1; + } + else + pthread_mutex_unlock(&AO_pt_lock); + return 0; +} + +#define AO_HAVE_compare_double_and_swap_double_full + +AO_INLINE int +AO_compare_and_swap_double_full(volatile AO_double_t *addr, + AO_t old1, + AO_t new1, AO_t new2) +{ + pthread_mutex_lock(&AO_pt_lock); + if (addr -> AO_val1 == old1) + { + addr -> AO_val1 = new1; + addr -> AO_val2 = new2; + pthread_mutex_unlock(&AO_pt_lock); + return 1; + } + else + pthread_mutex_unlock(&AO_pt_lock); + return 0; +} + +#define AO_HAVE_compare_and_swap_double_full + +/* We can't use hardware loads and stores, since they don't */ +/* interact correctly with atomic updates. */ + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Entries new file mode 100644 index 0000000..713384a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Entries @@ -0,0 +1,3 @@ +/hppa.h/1.1/Tue Jul 11 22:55:09 2006// +/ia64.h/1.1/Tue Jul 11 22:55:09 2006// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Repository new file mode 100644 index 0000000..d5750ca --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/hppa.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/hppa.h new file mode 100644 index 0000000..80bd94c --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/hppa.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Derived from the corresponsing header file for gcc. + * + */ + +#include "../atomic_load_store.h" + +/* Some architecture set descriptions include special "ordered" memory */ +/* operations. As far as we can tell, no existing processors actually */ +/* require those. Nor does it appear likely that future processors */ +/* will. */ +/* FIXME: */ +/* The PA emulator on Itanium may obey weaker restrictions. */ +/* There should be a mode in which we don't assume sequential */ +/* consistency here. */ +#include "../ordered.h" + +#include + +/* GCC will not guarantee the alignment we need, use four lock words */ +/* and select the correctly aligned datum. See the glibc 2.3.2 */ +/* linuxthread port for the original implementation. */ +struct AO_pa_clearable_loc { + int data[4]; +}; + +#undef AO_TS_INITIALIZER +#define AO_TS_t struct AO_pa_clearable_loc +#define AO_TS_INITIALIZER {1,1,1,1} +/* Switch meaning of set and clear, since we only have an atomic clear */ +/* instruction. */ +typedef enum {AO_PA_TS_set = 0, AO_PA_TS_clear = 1} AO_PA_TS_val; +#define AO_TS_VAL_t AO_PA_TS_val +#define AO_TS_CLEAR AO_PA_TS_clear +#define AO_TS_SET AO_PA_TS_set + +/* The hppa only has one atomic read and modify memory operation, */ +/* load and clear, so hppa spinlocks must use zero to signify that */ +/* someone is holding the lock. The address used for the ldcw */ +/* semaphore must be 16-byte aligned. */ + +#define __ldcw(a, ret) \ + _LDCWX(0 /* index */, 0 /* s */, a /* base */, ret); + +/* Because malloc only guarantees 8-byte alignment for malloc'd data, */ +/* and GCC only guarantees 8-byte alignment for stack locals, we can't */ +/* be assured of 16-byte alignment for atomic lock data even if we */ +/* specify "__attribute ((aligned(16)))" in the type declaration. So, */ +/* we use a struct containing an array of four ints for the atomic lock */ +/* type and dynamically select the 16-byte aligned int from the array */ +/* for the semaphore. */ +#define __PA_LDCW_ALIGNMENT 16 + +#define __ldcw_align(a, ret) { \ + ret = (unsigned long) a; \ + ret += __PA_LDCW_ALIGNMENT - 1; \ + ret &= ~(__PA_LDCW_ALIGNMENT - 1); \ +} + +/* Works on PA 1.1 and PA 2.0 systems */ +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t * addr) +{ + register unsigned int ret; + register unsigned long a; + __ldcw_align (addr, a); + __ldcw (a, ret); + return ret; +} + +AO_INLINE void +AO_pa_clear(volatile AO_TS_t * addr) +{ + unsigned long a; + __ldcw_align (addr,a); + AO_compiler_barrier(); + *(volatile unsigned int *)a = 1; +} +#define AO_CLEAR(addr) AO_pa_clear(addr) + +#define AO_HAVE_test_and_set_full + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/ia64.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/ia64.h new file mode 100644 index 0000000..99fdbb2 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc/ia64.h @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file specifies Itanimum primitives for use with the HP compiler + * unde HP/UX. We use intrinsics instead of the inline assembly code in the + * gcc file. + */ + +#include "../all_atomic_load_store.h" + +#include "../all_acquire_release_volatile.h" + +#include "../test_and_set_t_is_char.h" + +#include + +#ifdef __LP64__ +# define AO_T_FASIZE _FASZ_D +# define AO_T_SIZE _SZ_D +#else +# define AO_T_FASIZE _FASZ_W +# define AO_T_SIZE _SZ_W +#endif + +AO_INLINE void +AO_nop_full() +{ + _Asm_mf(); +} +#define AO_HAVE_nop_full + +AO_INLINE AO_t +AO_fetch_and_add1_acquire (volatile AO_t *p) +{ + return _Asm_fetchadd(AO_T_FASIZE, _SEM_ACQ, p, 1, + _LDHINT_NONE, _DOWN_MEM_FENCE); +} +#define AO_HAVE_fetch_and_add1_acquire + +AO_INLINE AO_t +AO_fetch_and_add1_release (volatile AO_t *p) +{ + return _Asm_fetchadd(AO_T_FASIZE, _SEM_REL, p, 1, + _LDHINT_NONE, _UP_MEM_FENCE); +} + +#define AO_HAVE_fetch_and_add1_release + +AO_INLINE AO_t +AO_fetch_and_sub1_acquire (volatile AO_t *p) +{ + return _Asm_fetchadd(AO_T_FASIZE, _SEM_ACQ, p, -1, + _LDHINT_NONE, _DOWN_MEM_FENCE); +} + +#define AO_HAVE_fetch_and_sub1_acquire + +AO_INLINE AO_t +AO_fetch_and_sub1_release (volatile AO_t *p) +{ + return _Asm_fetchadd(AO_T_FASIZE, _SEM_REL, p, -1, + _LDHINT_NONE, _UP_MEM_FENCE); +} + +#define AO_HAVE_fetch_and_sub1_release + +AO_INLINE int +AO_compare_and_swap_acquire(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + + _Asm_mov_to_ar(_AREG_CCV, old, _DOWN_MEM_FENCE); + oldval = _Asm_cmpxchg(AO_T_SIZE, _SEM_ACQ, addr, + new_val, _LDHINT_NONE, _DOWN_MEM_FENCE); + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_acquire + +AO_INLINE int +AO_compare_and_swap_release(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + _Asm_mov_to_ar(_AREG_CCV, old, _UP_MEM_FENCE); + oldval = _Asm_cmpxchg(AO_T_SIZE, _SEM_REL, addr, + new_val, _LDHINT_NONE, _UP_MEM_FENCE); + /* Hopefully the compiler knows not to reorder the above two? */ + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_release + +AO_INLINE int +AO_char_compare_and_swap_acquire(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + + _Asm_mov_to_ar(_AREG_CCV, old, _DOWN_MEM_FENCE); + oldval = _Asm_cmpxchg(_SZ_B, _SEM_ACQ, addr, + new_val, _LDHINT_NONE, _DOWN_MEM_FENCE); + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_acquire + +AO_INLINE int +AO_char_compare_and_swap_release(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + _Asm_mov_to_ar(_AREG_CCV, old, _UP_MEM_FENCE); + oldval = _Asm_cmpxchg(_SZ_B, _SEM_REL, addr, + new_val, _LDHINT_NONE, _UP_MEM_FENCE); + /* Hopefully the compiler knows not to reorder the above two? */ + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_release + +AO_INLINE int +AO_short_compare_and_swap_acquire(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + + _Asm_mov_to_ar(_AREG_CCV, old, _DOWN_MEM_FENCE); + oldval = _Asm_cmpxchg(_SZ_B, _SEM_ACQ, addr, + new_val, _LDHINT_NONE, _DOWN_MEM_FENCE); + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_acquire + +AO_INLINE int +AO_short_compare_and_swap_release(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + _Asm_mov_to_ar(_AREG_CCV, old, _UP_MEM_FENCE); + oldval = _Asm_cmpxchg(_SZ_B, _SEM_REL, addr, + new_val, _LDHINT_NONE, _UP_MEM_FENCE); + /* Hopefully the compiler knows not to reorder the above two? */ + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_release + +#ifndef __LP64__ +# include "../ao_t_is_int.h" +#endif + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Entries new file mode 100644 index 0000000..2d002e7 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Entries @@ -0,0 +1,2 @@ +/powerpc.h/1.1/Tue Jul 11 22:55:09 2006// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Repository new file mode 100644 index 0000000..9dc7cad --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/powerpc.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/powerpc.h new file mode 100644 index 0000000..d1f9c50 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc/powerpc.h @@ -0,0 +1,126 @@ +/* FIXME. This is only a placeholder for the AIX compiler. */ +/* It doesn't work. Please send a patch. */ +/* Memory model documented at http://www-106.ibm.com/developerworks/ */ +/* eserver/articles/archguide.html and (clearer) */ +/* http://www-106.ibm.com/developerworks/eserver/articles/powerpc.html. */ +/* There appears to be no implicit ordering between any kind of */ +/* independent memory references. */ +/* Architecture enforces some ordering based on control dependence. */ +/* I don't know if that could help. */ +/* Data-dependent loads are always ordered. */ +/* Based on the above references, eieio is intended for use on */ +/* uncached memory, which we don't support. It does not order loads */ +/* from cached memory. */ +/* Thanks to Maged Michael, Doug Lea, and Roger Hoover for helping to */ +/* track some of this down and correcting my misunderstandings. -HB */ + +#include "../all_aligned_atomic_load_store.h" + +void AO_sync(void); +#pragma mc_func AO_sync { "7c0004ac" } + +void AO_lwsync(void); +#pragma mc_func AO_lwsync { "7c2004ac" } + +#define AO_nop_write() AO_lwsync() +#define AO_HAVE_nop_write + +#define AO_nop_read() AO_lwsync() +#define AO_HAVE_nop_read + +/* We explicitly specify load_acquire and store_release, since these */ +/* rely on the fact that lwsync is also a LoadStore barrier. */ +AO_INLINE AO_t +AO_load_acquire(volatile AO_t *addr) +{ + AO_t result = *addr; + AO_lwsync(); + return result; +} + +#define AO_HAVE_load_acquire + +AO_INLINE void +AO_store_release(volatile AO_t *addr, AO_t value) +{ + AO_lwsync(); + *addr = value; +} + +#define AO_HAVE_load_acquire + +/* This is similar to the code in the garbage collector. Deleting */ +/* this and having it synthesized from compare_and_swap would probably */ +/* only cost us a load immediate instruction. */ +AO_INLINE AO_TS_VAL_t +AO_test_and_set(volatile AO_TS_t *addr) { +# error Implement me +} + +#define AO_have_test_and_set + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_acquire(volatile AO_TS_t *addr) { + AO_TS_VAL_t result = AO_test_and_set(addr); + AO_lwsync(); + return result; +} + +#define AO_HAVE_test_and_set_acquire + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_release(volatile AO_TS_t *addr) { + AO_lwsync(); + return AO_test_and_set(addr); +} + +#define AO_HAVE_test_and_set_release + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) { + AO_TS_VAL_t result; + AO_lwsync(); + result = AO_test_and_set(addr); + AO_lwsync(); + return result; +} + +#define AO_HAVE_test_and_set_full + +AO_INLINE AO_t +AO_compare_and_swap(volatile AO_t *addr, AO_t old, AO_t new_val) { +# error Implement me +} + +#define AO_HAVE_compare_and_swap + +AO_INLINE AO_t +AO_compare_and_swap_acquire(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_t result = AO_compare_and_swap(addr, old, new_val); + AO_lwsync(); + return result; +} + +#define AO_HAVE_compare_and_swap_acquire + +AO_INLINE AO_t +AO_compare_and_swap_release(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_lwsync(); + return AO_compare_and_swap(addr, old, new_val); +} + +#define AO_HAVE_compare_and_swap_release + +AO_INLINE AO_t +AO_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val) { + AO_t result; + AO_lwsync(); + result = AO_compare_and_swap(addr, old, new_val); + AO_lwsync(); + return result; +} + +#define AO_HAVE_compare_and_swap_full + +/* FIXME: We should also implement fetch_and_add and or primitives */ +/* directly. */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Entries new file mode 100644 index 0000000..3bc850d --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Entries @@ -0,0 +1,2 @@ +/ia64.h/1.1/Tue Jul 11 22:55:09 2006// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Repository new file mode 100644 index 0000000..005e592 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/ia64.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/ia64.h new file mode 100644 index 0000000..358ddda --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc/ia64.h @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file specifies Itanimum primitives for use with the Intel (ecc) + * compiler. We use intrinsics instead of the inline assembly code in the + * gcc file. + */ + +#include "../all_atomic_load_store.h" + +#include "../test_and_set_t_is_char.h" + +#include + +/* The acquire release semantics of volatile can be turned off. And volatile */ +/* operations in icc9 don't imply ordering with respect to other nonvolatile */ +/* operations. */ + +#define AO_INTEL_PTR_t void * + +AO_INLINE AO_t +AO_load_acquire(volatile AO_t *p) +{ + return (AO_t)(__ld8_acq((AO_INTEL_PTR_t)p)); +} +#define AO_HAVE_load_acquire + +AO_INLINE void +AO_store_release(volatile AO_t *p, AO_t val) +{ + __st8_rel((AO_INTEL_PTR_t)p, (__int64)val); +} +#define AO_HAVE_store_release + +AO_INLINE unsigned char +AO_char_load_acquire(volatile unsigned char *p) +{ + /* A normal volatile load generates an ld.acq */ + return (__ld1_acq((AO_INTEL_PTR_t)p)); +} +#define AO_HAVE_char_load_acquire + +AO_INLINE void +AO_char_store_release(volatile unsigned char *p, unsigned char val) +{ + __st1_rel((AO_INTEL_PTR_t)p, val); +} +#define AO_HAVE_char_store_release + +AO_INLINE unsigned short +AO_short_load_acquire(volatile unsigned short *p) +{ + /* A normal volatile load generates an ld.acq */ + return (__ld2_acq((AO_INTEL_PTR_t)p)); +} +#define AO_HAVE_short_load_acquire + +AO_INLINE void +AO_short_store_release(volatile unsigned short *p, unsigned short val) +{ + __st2_rel((AO_INTEL_PTR_t)p, val); +} +#define AO_HAVE_short_store_release + +AO_INLINE unsigned int +AO_int_load_acquire(volatile unsigned int *p) +{ + /* A normal volatile load generates an ld.acq */ + return (__ld4_acq((AO_INTEL_PTR_t)p)); +} +#define AO_HAVE_int_load_acquire + +AO_INLINE void +AO_int_store_release(volatile unsigned int *p, unsigned int val) +{ + __st4_rel((AO_INTEL_PTR_t)p, val); +} +#define AO_HAVE_int_store_release + +AO_INLINE void +AO_nop_full() +{ + __mf(); +} +#define AO_HAVE_nop_full + +AO_INLINE AO_t +AO_fetch_and_add1_acquire (volatile AO_t *p) +{ + return __fetchadd8_acq((unsigned __int64 *)p, 1); +} +#define AO_HAVE_fetch_and_add1_acquire + +AO_INLINE AO_t +AO_fetch_and_add1_release (volatile AO_t *p) +{ + return __fetchadd8_rel((unsigned __int64 *)p, 1); +} + +#define AO_HAVE_fetch_and_add1_release + +AO_INLINE AO_t +AO_fetch_and_sub1_acquire (volatile AO_t *p) +{ + return __fetchadd8_acq((unsigned __int64 *)p, -1); +} + +#define AO_HAVE_fetch_and_sub1_acquire + +AO_INLINE AO_t +AO_fetch_and_sub1_release (volatile AO_t *p) +{ + return __fetchadd8_rel((unsigned __int64 *)p, -1); +} + +#define AO_HAVE_fetch_and_sub1_release + +AO_INLINE int +AO_compare_and_swap_acquire(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + oldval = _InterlockedCompareExchange64_acq(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_acquire + +AO_INLINE int +AO_compare_and_swap_release(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + AO_t oldval; + oldval = _InterlockedCompareExchange64_rel(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_compare_and_swap_release + +AO_INLINE int +AO_char_compare_and_swap_acquire(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + oldval = _InterlockedCompareExchange8_acq(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_acquire + +AO_INLINE int +AO_char_compare_and_swap_release(volatile unsigned char *addr, + unsigned char old, unsigned char new_val) +{ + unsigned char oldval; + oldval = _InterlockedCompareExchange8_rel(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_char_compare_and_swap_release + +AO_INLINE int +AO_short_compare_and_swap_acquire(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + oldval = _InterlockedCompareExchange16_acq(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_acquire + +AO_INLINE int +AO_short_compare_and_swap_release(volatile unsigned short *addr, + unsigned short old, unsigned short new_val) +{ + unsigned short oldval; + oldval = _InterlockedCompareExchange16_rel(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_short_compare_and_swap_release + +AO_INLINE int +AO_int_compare_and_swap_acquire(volatile unsigned int *addr, + unsigned int old, unsigned int new_val) +{ + unsigned int oldval; + oldval = _InterlockedCompareExchange_acq(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_int_compare_and_swap_acquire + +AO_INLINE int +AO_int_compare_and_swap_release(volatile unsigned int *addr, + unsigned int old, unsigned int new_val) +{ + unsigned int oldval; + oldval = _InterlockedCompareExchange_rel(addr, new_val, old); + return (oldval == old); +} + +#define AO_HAVE_int_compare_and_swap_release + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_acquire_release_volatile.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_acquire_release_volatile.h new file mode 100644 index 0000000..e0a6ed0 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_acquire_release_volatile.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file adds definitions appropriate for environments in which an unsigned + * int volatile load has acquire semantics, and an unsigned short volatile + * store has release semantics. This is true with the standard Itanium ABI. + */ +#if !defined(AO_GCC_BARRIER) +# if defined(__GNUC__) +# define AO_GCC_BARRIER() AO_compiler_barrier() +# else +# define AO_GCC_BARRIER() +# endif +#endif + +AO_INLINE unsigned int +AO_int_load_acquire(volatile unsigned int *p) +{ + unsigned int result = *p; + /* A normal volatile load generates an ld.acq */ + AO_GCC_BARRIER(); + return result; +} +#define AO_HAVE_int_load_acquire + +AO_INLINE void +AO_int_store_release(volatile unsigned int *p, unsigned int val) +{ + AO_GCC_BARRIER(); + /* A normal volatile store generates an st.rel */ + *p = val; +} +#define AO_HAVE_int_store_release + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h new file mode 100644 index 0000000..62927d2 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of unsigned int are + * atomic fo all legal alignments. + */ + +AO_INLINE unsigned int +AO_int_load(volatile unsigned int *addr) +{ + assert(((size_t)addr & (sizeof(unsigned int) - 1)) == 0); + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(unsigned int *)addr); +} + +#define AO_HAVE_int_load + +AO_INLINE void +AO_int_store(volatile unsigned int *addr, unsigned int new_val) +{ + assert(((size_t)addr & (sizeof(unsigned int) - 1)) == 0); + (*(unsigned int *)addr) = new_val; +} + +#define AO_HAVE_int_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_atomic_load_store.h new file mode 100644 index 0000000..b2a4813 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/int_atomic_load_store.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of unsigned int are + * atomic for all legal alignments. + */ + +AO_INLINE unsigned int +AO_int_load(volatile unsigned int *addr) +{ + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(unsigned int *)addr); +} + +#define AO_HAVE_int_load + +AO_INLINE void +AO_int_store(volatile unsigned int *addr, unsigned int new_val) +{ + (*(unsigned int *)addr) = new_val; +} + +#define AO_HAVE_int_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Entries new file mode 100644 index 0000000..139c764 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Entries @@ -0,0 +1,3 @@ +/x86_64.h/1.2/Fri Jan 4 01:05:59 2008// +/x86.h/1.5/Tue Jan 8 01:34:38 2008// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Repository new file mode 100644 index 0000000..27ed54a --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86.h new file mode 100644 index 0000000..81c67a1 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* The following really assume we have a 486 or better. */ +/* If ASSUME_WINDOWS98 is defined, we assume Windows 98 or newer. */ +/* If ASSUME_VISTA is defined, we assume Windows Server 2003, Vista */ +/* or later. */ + +#include "../all_aligned_atomic_load_store.h" + +/* Real X86 implementations, except for some old WinChips, appear */ +/* to enforce ordering between memory operations, EXCEPT that a later */ +/* read can pass earlier writes, presumably due to the visible */ +/* presence of store buffers. */ +/* We ignore both the WinChips, and the fact that the official specs */ +/* seem to be much weaker (and arguably too weak to be usable). */ + +#include "../ordered_except_wr.h" + +#include "../test_and_set_t_is_char.h" + +#include + /* Seems like over-kill, but that's what MSDN recommends. */ + /* And apparently winbase.h is not always self-contained. */ + +#if _MSC_VER < 1310 + +#define _InterlockedIncrement InterlockedIncrement +#define _InterlockedDecrement InterlockedDecrement +#define _InterlockedExchange InterlockedExchange +#define _InterlockedExchangeAdd InterlockedExchangeAdd +#define _InterlockedCompareExchange InterlockedCompareExchange + +#else + +#if _MSC_VER >= 1400 +#include + +#pragma intrinsic (_ReadWriteBarrier) + +#else +#ifdef __cplusplus +extern "C" { +#endif + +LONG __cdecl _InterlockedIncrement(LONG volatile *Addend); +LONG __cdecl _InterlockedDecrement(LONG volatile *Addend); +LONG __cdecl _InterlockedExchangeAdd(LONG volatile* Target, LONG Addend); +LONG __cdecl _InterlockedExchange(LONG volatile* Target, LONG Value); +LONG __cdecl _InterlockedCompareExchange(LONG volatile* Dest, + LONG Exchange, LONG Comp); + +#ifdef __cplusplus +} +#endif +#endif /* _MSC_VER >= 1400 */ + +#pragma intrinsic (_InterlockedIncrement) +#pragma intrinsic (_InterlockedDecrement) +#pragma intrinsic (_InterlockedExchange) +#pragma intrinsic (_InterlockedExchangeAdd) +#pragma intrinsic (_InterlockedCompareExchange) + +#endif /* _MSC_VER < 1310 */ + +/* As far as we can tell, the lfence and sfence instructions are not */ +/* currently needed or useful for cached memory accesses. */ + +/* Unfortunately mfence doesn't exist everywhere. */ +/* IsProcessorFeaturePresent(PF_COMPARE_EXCHANGE128) is */ +/* probably a conservative test for it? */ + +#if defined(AO_USE_PENTIUM4_INSTRS) + +AO_INLINE void +AO_nop_full() +{ + __asm { mfence } +} + +#define AO_HAVE_nop_full + +#else + +/* We could use the cpuid instruction. But that seems to be slower */ +/* than the default implementation based on test_and_set_full. Thus */ +/* we omit that bit of misinformation here. */ + +#endif + +AO_INLINE AO_t +AO_fetch_and_add_full (volatile AO_t *p, AO_t incr) +{ + return _InterlockedExchangeAdd((LONG volatile*)p, (LONG)incr); +} + +#define AO_HAVE_fetch_and_add_full + +AO_INLINE AO_t +AO_fetch_and_add1_full (volatile AO_t *p) +{ + return _InterlockedIncrement((LONG volatile *)p) - 1; +} + +#define AO_HAVE_fetch_and_add1_full + +AO_INLINE AO_t +AO_fetch_and_sub1_full (volatile AO_t *p) +{ + return _InterlockedDecrement((LONG volatile *)p) + 1; +} + +#define AO_HAVE_fetch_and_sub1_full + +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) +{ + __asm + { + mov eax,AO_TS_SET ; + mov ebx,addr ; + xchg byte ptr [ebx],al ; + } +} + +#define AO_HAVE_test_and_set_full + +#ifdef AO_ASSUME_WINDOWS98 +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + return _InterlockedCompareExchange((LONG volatile *)addr, + (LONG)new_val, (LONG)old) + == (LONG)old; +} + +#define AO_HAVE_compare_and_swap_full +#endif /* ASSUME_WINDOWS98 */ + +#ifdef _WIN64 +# error wrong architecture +#endif + +#ifdef ASSUME_VISTA +/* NEC LE-IT: whenever we run on a pentium class machine we have that + * certain function */ + +#include "../standard_ao_double_t.h" +#pragma intrinsic (_InterlockedCompareExchange64) +/* Returns nonzero if the comparison succeeded. */ +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + __int64 oldv = (__int64)old_val2 | ((__int64)old_val1 << 32); + __int64 newv = (__int64)new_val2 | ((__int64)new_val1 << 32); + return _InterlockedCompareExchange64((__int64 volatile *)addr, + newv, oldv) == oldv; +} +#define AO_HAVE_compare_double_and_swap_double_full + +#ifdef __cplusplus +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_double_t old_val, + AO_double_t new_val) +{ + return _InterlockedCompareExchange64((__int64 volatile *)addr, + new_val.AO_whole, old_val.AO_whole) == old_val.AO_whole; +} +#define AO_HAVE_double_compare_and_swap_full +#endif // __cplusplus +#endif /* ASSUME_VISTA */ + +#include "../ao_t_is_int.h" diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86_64.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86_64.h new file mode 100644 index 0000000..ca1a682 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc/x86_64.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* The following really assume we have a 486 or better. */ +/* If ASSUME_WINDOWS98 is defined, we assume Windows 98 or newer. */ + +#include "../all_aligned_atomic_load_store.h" + +/* Real X86 implementations, except for some old WinChips, appear */ +/* to enforce ordering between memory operations, EXCEPT that a later */ +/* read can pass earlier writes, presumably due to the visible */ +/* presence of store buffers. */ +/* We ignore both the WinChips, and the fact that the official specs */ +/* seem to be much weaker (and arguably too weak to be usable). */ + +#include "../ordered_except_wr.h" + +#if 0 +FIXME: Need to reimplement testandset + +#include "../test_and_set_t_is_char.h" + +#else + +#include "../test_and_set_t_is_ao_t.h" + +#endif + +#include + /* Seems like over-kill, but that's what MSDN recommends. */ + /* And apparently winbase.h is not always self-contained. */ + + +#include + +#pragma intrinsic (_ReadWriteBarrier) + +#ifdef __cplusplus +extern "C" { +#endif + +LONGLONG __cdecl _InterlockedIncrement64(LONGLONG volatile *Addend); +LONGLONG __cdecl _InterlockedDecrement64(LONGLONG volatile *Addend); +LONGLONG __cdecl _InterlockedExchangeAdd64(LONGLONG volatile* Target, + LONGLONG Addend); +LONGLONG __cdecl _InterlockedExchange64(LONGLONG volatile* Target, + LONGLONG Value); +LONGLONG __cdecl _InterlockedCompareExchange64(LONGLONG volatile* Dest, + LONGLONG Exchange, + LONGLONG Comp); + +#ifdef __cplusplus +} +#endif + +#pragma intrinsic (_InterlockedIncrement64) +#pragma intrinsic (_InterlockedDecrement64) +#pragma intrinsic (_InterlockedExchange64) +#pragma intrinsic (_InterlockedExchangeAdd64) +#pragma intrinsic (_InterlockedCompareExchange64) + +/* As far as we can tell, the lfence and sfence instructions are not */ +/* currently needed or useful for cached memory accesses. */ + +/* Unfortunately mfence doesn't exist everywhere. */ +/* IsProcessorFeaturePresent(PF_COMPARE_EXCHANGE128) is */ +/* probably a conservative test for it? */ + +#if defined(AO_USE_PENTIUM4_INSTRS) + +AO_INLINE void +AO_nop_full() +{ + __asm { mfence } +} + +#define AO_HAVE_nop_full + +#else + +/* We could use the cpuid instruction. But that seems to be slower */ +/* than the default implementation based on test_and_set_full. Thus */ +/* we omit that bit of misinformation here. */ + +#endif + +AO_INLINE AO_t +AO_fetch_and_add_full (volatile AO_t *p, AO_t incr) +{ + return _InterlockedExchangeAdd64((LONGLONG volatile *)p, (LONGLONG)incr); +} + +#define AO_HAVE_fetch_and_add_full + +AO_INLINE AO_t +AO_fetch_and_add1_full (volatile AO_t *p) +{ + return _InterlockedIncrement64((LONGLONG volatile *)p) - 1; +} + +#define AO_HAVE_fetch_and_add1_full + +AO_INLINE AO_t +AO_fetch_and_sub1_full (volatile AO_t *p) +{ + return _InterlockedDecrement64((LONGLONG volatile *)p) + 1; +} + +#define AO_HAVE_fetch_and_sub1_full + +AO_INLINE int +AO_compare_and_swap_full(volatile AO_t *addr, + AO_t old, AO_t new_val) +{ + return _InterlockedCompareExchange64((LONGLONG volatile *)addr, + (LONGLONG)new_val, (LONGLONG)old) + == (LONGLONG)old; +} + +#define AO_HAVE_compare_and_swap_full + +#if 0 +FIXME: (__asm not supported) +AO_INLINE AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr) +{ + __asm + { + mov eax,AO_TS_SET ; + mov ebx,addr ; + xchg byte ptr [ebx],al ; + } +} + +#define AO_HAVE_test_and_set_full + +FIXME: (__asm not supported) +NEC LE-IT: Don't have a working Win64 environment here at the moment. +AO_compare_double_and_swap_double_full needs implementation for Win64 +But there is no _InterlockedCompareExchange128 in the WinAPI, so we +need basically whats given below. +Also see gcc/x86_64.h for partial old opteron workaround: + +#ifndef AO_CASDOUBLE_MISSING + +AO_INLINE int +AO_compare_double_and_swap_double_full(volatile AO_double_t *addr, + AO_t old_val1, AO_t old_val2, + AO_t new_val1, AO_t new_val2) +{ + char result; + __asm + { + mov rdx,QWORD PTR [old_val] + mov rax,QWORD PTR [old_val + 8] + mov rcx,QWORD PTR [new_val] + mov rbx,QWORD PTR [new_val + 8] + lock cmpxchg16b [addr] + setz result; + } + return result; +} +#endif // AO_CASDOUBLE_MISSING +#define AO_HAVE_compare_double_and_swap_double_full + +#endif /* 0 */ + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered.h new file mode 100644 index 0000000..2bcd8d8 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2003 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * These are common definitions for architectures that provide processor + * ordered memory operations. + */ + +#include "ordered_except_wr.h" + +AO_INLINE void +AO_nop_full() +{ + AO_compiler_barrier(); +} + +#define AO_HAVE_nop_full + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered_except_wr.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered_except_wr.h new file mode 100644 index 0000000..4f29303 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/ordered_except_wr.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * These are common definitions for architectures that provide processor + * ordered memory operations except that a later read may pass an + * earlier write. Real x86 implementations seem to be in this category, + * except apparently for some IDT WinChips, which we ignore. + */ + +#include "read_ordered.h" + +AO_INLINE void +AO_nop_write() +{ + AO_compiler_barrier(); + /* sfence according to Intel docs. Pentium 3 and up. */ + /* Unnecessary for cached accesses? */ +} + +#define AO_HAVE_NOP_WRITE + +#if defined(AO_HAVE_store) + +AO_INLINE void +AO_store_write(volatile AO_t *addr, AO_t val) +{ + AO_compiler_barrier(); + AO_store(addr, val); +} +# define AO_HAVE_store_write + +# define AO_store_release(addr, val) AO_store_write(addr, val) +# define AO_HAVE_store_release + +#endif /* AO_HAVE_store */ + +#if defined(AO_HAVE_char_store) + +AO_INLINE void +AO_char_store_write(volatile unsigned char *addr, unsigned char val) +{ + AO_compiler_barrier(); + AO_char_store(addr, val); +} +# define AO_HAVE_char_store_write + +# define AO_char_store_release(addr, val) AO_char_store_write(addr, val) +# define AO_HAVE_char_store_release + +#endif /* AO_HAVE_char_store */ + +#if defined(AO_HAVE_short_store) + +AO_INLINE void +AO_short_store_write(volatile unsigned short *addr, unsigned short val) +{ + AO_compiler_barrier(); + AO_short_store(addr, val); +} +# define AO_HAVE_short_store_write + +# define AO_short_store_release(addr, val) AO_short_store_write(addr, val) +# define AO_HAVE_short_store_release + +#endif /* AO_HAVE_short_store */ + +#if defined(AO_HAVE_int_store) + +AO_INLINE void +AO_int_store_write(volatile unsigned int *addr, unsigned int val) +{ + AO_compiler_barrier(); + AO_int_store(addr, val); +} +# define AO_HAVE_int_store_write + +# define AO_int_store_release(addr, val) AO_int_store_write(addr, val) +# define AO_HAVE_int_store_release + +#endif /* AO_HAVE_int_store */ + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/read_ordered.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/read_ordered.h new file mode 100644 index 0000000..e928881 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/read_ordered.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * These are common definitions for architectures that provide processor + * ordered memory operations except that a later read may pass an + * earlier write. Real x86 implementations seem to be in this category, + * except apparently for some IDT WinChips, which we ignore. + */ + +AO_INLINE void +AO_nop_read() +{ + AO_compiler_barrier(); +} + +#define AO_HAVE_NOP_READ + +#ifdef AO_HAVE_load + +AO_INLINE AO_t +AO_load_read(volatile AO_t *addr) +{ + AO_t result = AO_load(addr); + AO_compiler_barrier(); + return result; +} +#define AO_HAVE_load_read + +#define AO_load_acquire(addr) AO_load_read(addr) +#define AO_HAVE_load_acquire + +#endif /* AO_HAVE_load */ + +#ifdef AO_HAVE_char_load + +AO_INLINE AO_t +AO_char_load_read(volatile unsigned char *addr) +{ + AO_t result = AO_char_load(addr); + AO_compiler_barrier(); + return result; +} +#define AO_HAVE_char_load_read + +#define AO_char_load_acquire(addr) AO_char_load_read(addr) +#define AO_HAVE_char_load_acquire + +#endif /* AO_HAVE_char_load */ + +#ifdef AO_HAVE_short_load + +AO_INLINE AO_t +AO_short_load_read(volatile unsigned short *addr) +{ + AO_t result = AO_short_load(addr); + AO_compiler_barrier(); + return result; +} +#define AO_HAVE_short_load_read + +#define AO_short_load_acquire(addr) AO_short_load_read(addr) +#define AO_HAVE_short_load_acquire + +#endif /* AO_HAVE_short_load */ + +#ifdef AO_HAVE_int_load + +AO_INLINE AO_t +AO_int_load_read(volatile unsigned int *addr) +{ + AO_t result = AO_int_load(addr); + AO_compiler_barrier(); + return result; +} +#define AO_HAVE_int_load_read + +#define AO_int_load_acquire(addr) AO_int_load_read(addr) +#define AO_HAVE_int_load_acquire + +#endif /* AO_HAVE_int_load */ + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_acquire_release_volatile.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_acquire_release_volatile.h new file mode 100644 index 0000000..035ada7 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_acquire_release_volatile.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This file adds definitions appropriate for environments in which an unsigned short + * volatile load has acquire semantics, and an unsigned short volatile store has release + * semantics. This is true with the standard Itanium ABI. + */ +#if !defined(AO_GCC_BARRIER) +# if defined(__GNUC__) +# define AO_GCC_BARRIER() AO_compiler_barrier() +# else +# define AO_GCC_BARRIER() +# endif +#endif + +AO_INLINE unsigned short +AO_short_load_acquire(volatile unsigned short *p) +{ + unsigned short result = *p; + /* A normal volatile load generates an ld.acq */ + AO_GCC_BARRIER(); + return result; +} +#define AO_HAVE_short_load_acquire + +AO_INLINE void +AO_short_store_release(volatile unsigned short *p, unsigned short val) +{ + AO_GCC_BARRIER(); + /* A normal volatile store generates an st.rel */ + *p = val; +} +#define AO_HAVE_short_store_release + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h new file mode 100644 index 0000000..3b285b8 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of unsigned short are + * atomic fo all legal alignments. + */ + +AO_INLINE unsigned short +AO_short_load(volatile unsigned short *addr) +{ + assert(((size_t)addr & (sizeof(unsigned short) - 1)) == 0); + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(unsigned short *)addr); +} + +#define AO_HAVE_short_load + +AO_INLINE void +AO_short_store(volatile unsigned short *addr, unsigned short new_val) +{ + assert(((size_t)addr & (sizeof(unsigned short) - 1)) == 0); + (*(unsigned short *)addr) = new_val; +} + +#define AO_HAVE_short_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_atomic_load_store.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_atomic_load_store.h new file mode 100644 index 0000000..f1b5281 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/short_atomic_load_store.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Definitions for architecturs on which loads and stores of unsigned short are + * atomic for all legal alignments. + */ + +AO_INLINE unsigned short +AO_short_load(volatile unsigned short *addr) +{ + /* Cast away the volatile for architectures like IA64 where */ + /* volatile adds barrier semantics. */ + return (*(unsigned short *)addr); +} + +#define AO_HAVE_short_load + +AO_INLINE void +AO_short_store(volatile unsigned short *addr, unsigned short new_val) +{ + (*(unsigned short *)addr) = new_val; +} + +#define AO_HAVE_short_store + + diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/standard_ao_double_t.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/standard_ao_double_t.h new file mode 100644 index 0000000..22e8160 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/standard_ao_double_t.h @@ -0,0 +1,36 @@ +/* NEC LE-IT: For 64Bit OS we extend the double type to hold two int64's +* +* x86-64: __m128 serves as placeholder which also requires the compiler +* to align it on 16 byte boundary (as required by cmpxchg16. +* Similar things could be done for PowerPC 64bit using a VMX data type... */ + +#if defined(__GNUC__) +# if defined(__x86_64__) +# include + typedef __m128 double_ptr_storage; +# define AO_HAVE_DOUBLE_PTR_STORAGE +# endif /* __x86_64__ */ +#endif + +#ifdef _MSC_VER +# ifdef _WIN64 + typedef __m128 double_ptr_storage; +# define AO_HAVE_DOUBLE_PTR_STORAGE +# elif _WIN32 + typedef unsigned __int64 double_ptr_storage; +# define AO_HAVE_DOUBLE_PTR_STORAGE +# endif +#endif + +#ifndef AO_HAVE_DOUBLE_PTR_STORAGE + typedef unsigned long long double_ptr_storage; +#endif + +typedef union { + double_ptr_storage AO_whole; + struct {AO_t AO_v1; AO_t AO_v2;} AO_parts; +} AO_double_t; + +#define AO_HAVE_double_t +#define AO_val1 AO_parts.AO_v1 +#define AO_val2 AO_parts.AO_v2 diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Entries b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Entries new file mode 100644 index 0000000..50a2371 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Entries @@ -0,0 +1,3 @@ +/sparc.S/1.1/Tue Jul 11 22:55:09 2006// +/sparc.h/1.1/Tue Jul 11 22:55:09 2006// +D diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Repository b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Repository new file mode 100644 index 0000000..7d409cd --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Root b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.S b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.S new file mode 100644 index 0000000..81f0ef0 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.S @@ -0,0 +1,5 @@ + .seg "text" + .globl AO_test_and_set_full +AO_test_and_set_full: + retl + ldstub [%o0],%o0 diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.h new file mode 100644 index 0000000..3578722 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc/sparc.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "../all_atomic_load_store.h" + +/* Real SPARC code uses TSO: */ +#include "../ordered_except_wr.h" + +/* Test_and_set location is just a byte. */ +#include "../test_and_set_t_is_char.h" + +extern AO_TS_VAL_t +AO_test_and_set_full(volatile AO_TS_t *addr); +/* Implemented in separate .S file, for now. */ + +#define AO_HAVE_test_and_set_full + +/* FIXME: Like the gcc version, this needs to be extended for V8 */ +/* and V9. */ diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h new file mode 100644 index 0000000..663bccf --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * These are common definitions for architectures on which test_and_set + * operates on pointer-sized quantities, the "clear" value contains + * all zeroes, and the "set" value contains all ones. + * This can be used if test_and_set is synthesized from compare_and_swap. + */ +typedef enum {AO_TS_clear = 0, AO_TS_set = 1} AO_TS_val; +#define AO_TS_VAL_t AO_TS_val +#define AO_TS_CLEAR AO_TS_clear +#define AO_TS_SET AO_TS_set + +#define AO_TS_t AO_t + +#define AO_AO_TS_T 1 diff --git a/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_char.h b/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_char.h new file mode 100644 index 0000000..bde0f21 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops/sysdeps/test_and_set_t_is_char.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2004 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * These are common definitions for architectures on which test_and_set + * operates on byte sized quantities, the "clear" value contains + * all zeroes, and the "set" value contains all ones. + */ + +#define AO_TS_t unsigned char +typedef enum {AO_BYTE_TS_clear = 0, AO_BYTE_TS_set = 0xff} AO_BYTE_TS_val; +#define AO_TS_VAL_t AO_BYTE_TS_val +#define AO_TS_CLEAR AO_BYTE_TS_clear +#define AO_TS_SET AO_BYTE_TS_set + +#define AO_CHAR_TS_T 1 + + + diff --git a/libatomic_ops-1.2/src/atomic_ops_malloc.c b/libatomic_ops-1.2/src/atomic_ops_malloc.c new file mode 100644 index 0000000..dff4908 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops_malloc.c @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * Original Author: Hans Boehm + * + * This file may be redistributed and/or modified under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2, or (at your option) any later version. + * + * It is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License in the + * file doc/COPYING for more details. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + +#define AO_REQUIRE_CAS +#include "atomic_ops_stack.h" +#include /* for ffs, which is assumed reentrant. */ +#include +#ifdef AO_TRACE_MALLOC +# include +# include +#endif + +/* + * We round up each allocation request to the next power of two + * minus one word. + * We keep one stack of free objects for each size. Each object + * has an initial word (offset -sizeof(AO_t) from the visible pointer) + * which contains either + * The binary log of the object size in bytes (small objects) + * The object size (a multiple of CHUNK_SIZE) for large objects. + * The second case only arises if mmap-based allocation is supported. + * We align the user-visible part of each object on a GRANULARITY + * byte boundary. That means that the actual (hidden) start of + * the object starts a word before this boundary. + */ + +#ifndef LOG_MAX_SIZE +# define LOG_MAX_SIZE 16 + /* We assume that 2**LOG_MAX_SIZE is a multiple of page size. */ +#endif + +#ifndef ALIGNMENT +# define ALIGNMENT 16 + /* Assumed to be at least sizeof(AO_t). */ +#endif + +#define CHUNK_SIZE (1 << LOG_MAX_SIZE) + +#ifndef AO_INITIAL_HEAP_SIZE +# define AO_INITIAL_HEAP_SIZE (2*(LOG_MAX_SIZE+1)*CHUNK_SIZE) +#endif + +char AO_initial_heap[AO_INITIAL_HEAP_SIZE]; + +static volatile AO_t initial_heap_ptr = (AO_t)AO_initial_heap; +static volatile char *initial_heap_lim = AO_initial_heap + AO_INITIAL_HEAP_SIZE; + +#if defined(HAVE_MMAP) + +#include +#include +#include +#include + +static volatile AO_t mmap_enabled = 0; + +void +AO_malloc_enable_mmap(void) +{ + AO_store(&mmap_enabled, 1); +} + +static char *get_mmaped(size_t sz) +{ + char * result; + + assert(!(sz & (CHUNK_SIZE - 1))); + if (!mmap_enabled) return 0; +# if defined(MAP_ANONYMOUS) + result = mmap(0, sz, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); +# elif defined(MAP_ANON) + result = mmap(0, sz, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, -1, 0); +# else + { + int zero_fd = open("/dev/zero", O_RDONLY); + result = mmap(0, sz, PROT_READ | PROT_WRITE, + MAP_PRIVATE, zero_fd, 0); + close(zero_fd); + } +# endif + if (result == MAP_FAILED) result = 0; + return result; +} + +/* Allocate an object of size (incl. header) of size > CHUNK_SIZE. */ +/* sz includes space for an AO_t-sized header. */ +static char * +AO_malloc_large(size_t sz) +{ + char * result; + /* The header will force us to waste ALIGNMENT bytes, incl. header. */ + sz += ALIGNMENT; + /* Round to multiple of CHUNK_SIZE. */ + sz = (sz + CHUNK_SIZE - 1) & ~(CHUNK_SIZE - 1); + result = get_mmaped(sz); + if (result == 0) return 0; + result += ALIGNMENT; + ((AO_t *)result)[-1] = (AO_t)sz; + return result; +} + +static void +AO_free_large(char * p) +{ + AO_t sz = ((AO_t *)p)[-1]; + if (munmap(p - ALIGNMENT, (size_t)sz) != 0) + abort(); /* Programmer error. Not really async-signal-safe, but ... */ +} + + +#else /* No MMAP */ + +void +AO_malloc_enable_mmap(void) +{ +} + +static char *get_mmaped(size_t sz) +{ + return 0; +} + +static char * +AO_malloc_large(size_t sz) +{ + return 0; +} + +static void +AO_free_large(char * p) +{ + abort(); /* Programmer error. Not really async-signal-safe, but ... */ +} + +#endif /* No MMAP */ + +static char * +get_chunk(void) +{ + char *initial_ptr; + char *my_chunk_ptr; + char * my_lim; + +retry: + initial_ptr = (char *)AO_load(&initial_heap_ptr); + my_chunk_ptr = (char *)(((AO_t)initial_ptr + (ALIGNMENT - 1)) + & ~(ALIGNMENT - 1)); + if (initial_ptr != my_chunk_ptr) + { + /* Align correctly. If this fails, someone else did it for us. */ + AO_compare_and_swap_acquire(&initial_heap_ptr, (AO_t)initial_ptr, + (AO_t)my_chunk_ptr); + } + my_lim = my_chunk_ptr + CHUNK_SIZE; + if (my_lim <= initial_heap_lim) + { + if (!AO_compare_and_swap(&initial_heap_ptr, (AO_t)my_chunk_ptr, + (AO_t)my_lim)) + goto retry; + return my_chunk_ptr; + } + /* We failed. The initial heap is used up. */ + my_chunk_ptr = get_mmaped(CHUNK_SIZE); + assert (!((AO_t)my_chunk_ptr & (ALIGNMENT-1))); + return my_chunk_ptr; +} + +/* Object free lists. Ith entry corresponds to objects */ +/* of total size 2**i bytes. */ +AO_stack_t AO_free_list[LOG_MAX_SIZE+1]; + +/* Chunk free list, linked through first word in chunks. */ +/* All entries of size CHUNK_SIZE. */ +AO_stack_t AO_chunk_free_list; + +/* Break up the chunk, and add it to the object free list for */ +/* the given size. Sz must be a power of two. */ +/* We have exclusive access to chunk. */ +static void +add_chunk_as(void * chunk, size_t sz, unsigned log_sz) +{ + char *first = (char *)chunk + ALIGNMENT - sizeof(AO_t); + char *limit = (char *)chunk + CHUNK_SIZE - sz; + char *next, *p; + + for (p = first; p <= limit; p = next) { + next = p + sz; + AO_stack_push(AO_free_list+log_sz, (AO_t *)p); + } +} + +static int msbs[16] = {0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4}; + +/* Return the position of the most significant set bit in the */ +/* argument. */ +/* We follow the conventions of ffs(), i.e. the least */ +/* significant bit is number one. */ +int msb(size_t s) +{ + int result = 0; + if ((s & 0xff) != s) { + /* The following shift often generates warnings on 32-bit arch's */ + /* That's OK, because it will never be executed there. */ + if (sizeof(size_t) > 4 && (s >> 32) != 0) + { + s >>= 32; + result += 32; + } + if ((s >> 16) != 0) + { + s >>= 16; + result += 16; + } + if ((s >> 8) != 0) + { + s >>= 8; + result += 8; + } + } + if (s > 15) + { + s >>= 4; + result += 4; + } + result += msbs[s]; + return result; +} + +void * +AO_malloc(size_t sz) +{ + AO_t *result; + size_t adj_sz = sz + sizeof(AO_t); + int log_sz; + if (sz > CHUNK_SIZE) + return AO_malloc_large(sz); + log_sz = msb(adj_sz-1); + result = AO_stack_pop(AO_free_list+log_sz); + while (0 == result) { + void * chunk = get_chunk(); + if (0 == chunk) return 0; + adj_sz = 1 << log_sz; + add_chunk_as(chunk, adj_sz, log_sz); + result = AO_stack_pop(AO_free_list+log_sz); + } + *result = log_sz; +# ifdef AO_TRACE_MALLOC + fprintf(stderr, "%x: AO_malloc(%lu) = %p\n", + (int)pthread_self(), (unsigned long)sz, result+1); +# endif + return result + 1; +} + +void +AO_free(void *p) +{ + char *base = (char *)p - sizeof(AO_t); + int log_sz; + + if (0 == p) return; + log_sz = *(AO_t *)base; +# ifdef AO_TRACE_MALLOC + fprintf(stderr, "%x: AO_free(%p sz:%lu)\n", (int)pthread_self(), p, + (unsigned long) + (log_sz > LOG_MAX_SIZE? log_sz : (1 << log_sz))); +# endif + if (log_sz > LOG_MAX_SIZE) + AO_free_large(p); + else + AO_stack_push(AO_free_list+log_sz, (AO_t *)base); +} diff --git a/libatomic_ops-1.2/src/atomic_ops_malloc.h b/libatomic_ops-1.2/src/atomic_ops_malloc.h new file mode 100644 index 0000000..c55d27c --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops_malloc.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* Almost lock-free malloc implementation based on stack implementation. */ +/* See README.malloc file for detailed usage rules. */ + +#ifndef AO_ATOMIC_H +#define AO_ATOMIC_H + +#include /* For size_t */ + +#include "atomic_ops_stack.h" + +#ifdef AO_STACK_IS_LOCK_FREE +# define AO_MALLOC_IS_LOCK_FREE +#endif + +void AO_free(void *); + +void * AO_malloc(size_t); + +/* Allow use of mmpa to grow the heap. No-op on some platforms. */ +void AO_malloc_enable_mmap(void); + +#endif /* !AO_ATOMIC_H */ diff --git a/libatomic_ops-1.2/src/atomic_ops_stack.c b/libatomic_ops-1.2/src/atomic_ops_stack.c new file mode 100644 index 0000000..c3df101 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops_stack.c @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * Original Author: Hans Boehm + * + * This file may be redistributed and/or modified under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2, or (at your option) any later version. + * + * It is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License in the + * file doc/COPYING for more details. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + +#include +#include +#include +#define AO_REQUIRE_CAS +#include "atomic_ops_stack.h" + +#if defined(_MSC_VER) \ + || defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) + /* AO_pause not defined elsewhere */ + /* FIXME: At least AO_spin should be factored out. */ +#include + +AO_t dummy; + +/* Spin for 2**n units. */ +static void AO_spin(int n) +{ + int i; + AO_T j = AO_load(&dummy); + + for (i = 0; i < (2 << n); ++i) + { + j *= 5; + j -= 4; + } + AO_store(&dummy, j); +} + +void AO_pause(int n) +{ + if (n < 12) + AO_spin(n); + else + { + DWORD msecs; + + /* Short async-signal-safe sleep. */ + msecs = (n > 18? 100 : (1 << (n - 12))); + Sleep(msecs); + } +} + +#else + +/* AO_pause is available elsewhere */ + +extern void AO_pause(int); + +#endif + +#ifdef AO_USE_ALMOST_LOCK_FREE + +/* LIFO linked lists based on compare-and-swap. We need to avoid */ +/* the case of a node deleton and reinsertion while I'm deleting */ +/* it, since that may cause my CAS to succeed eventhough the next */ +/* pointer is now wrong. Our solution is not fully lock-free, but it */ +/* is good enough for signal handlers, provided we have a suitably low */ +/* bound on the number of recursive signal handler reentries. */ +/* A list consists of a first pointer and a blacklist */ +/* of pointer values that are currently being removed. No list element */ +/* on the blacklist may be inserted. If we would otherwise do so, we */ +/* are allowed to insert a variant that differs only in the least */ +/* significant, ignored, bits. If the list is full, we wait. */ + +/* Crucial observation: A particular padded pointer x (i.e. pointer */ +/* plus arbitrary low order bits) can never be newly inserted into */ +/* a list while it's in the corresponding auxiliary data structure. */ + +/* The second argument is a pointer to the link field of the element */ +/* to be inserted. */ +/* Both list headers and link fields contain "perturbed" pointers, i.e. */ +/* pointers with extra bits "or"ed into the low order bits. */ +void +AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x, + AO_stack_aux *a) +{ + int i; + AO_t x_bits = (AO_t)x; + AO_t next; + + /* No deletions of x can start here, since x is not currently in the */ + /* list. */ + retry: +# if AO_BL_SIZE == 2 + { + /* Start all loads as close to concurrently as possible. */ + AO_t entry1 = AO_load(a -> AO_stack_bl); + AO_t entry2 = AO_load(a -> AO_stack_bl + 1); + if (entry1 == x_bits || entry2 == x_bits) + { + /* Entry is currently being removed. Change it a little. */ + ++x_bits; + if ((x_bits & AO_BIT_MASK) == 0) + /* Version count overflowed; */ + /* EXTREMELY unlikely, but possible. */ + x_bits = (AO_t)x; + goto retry; + } + } +# else + for (i = 0; i < AO_BL_SIZE; ++i) + { + if (AO_load(a -> AO_stack_bl + i) == x_bits) + { + /* Entry is currently being removed. Change it a little. */ + ++x_bits; + if ((x_bits & AO_BIT_MASK) == 0) + /* Version count overflowed; */ + /* EXTREMELY unlikely, but possible. */ + x_bits = (AO_t)x; + goto retry; + } + } +# endif + /* x_bits is not currently being deleted */ + do + { + next = AO_load(list); + *x = next; + } + while(!AO_compare_and_swap_release(list, next, x_bits)); +} + +/* + * I concluded experimentally that checking a value first before + * performing a compare-and-swap is usually beneficial on X86, but + * slows things down appreciably with contention on Itanium. + * ince the Itanium behavior makes more sense to me (more cache line + * movement unless we're mostly reading, but back-off should guard + * against that), we take Itanium as the default. Measurements on + * other multiprocessor architectures would be useful. (On a uniprocessor, + * the initial check is almost certainly a very small loss.) - HB + */ +#ifdef __i386__ +# define PRECHECK(a) (a) == 0 && +#else +# define PRECHECK(a) +#endif + +AO_t * +AO_stack_pop_explicit_aux_acquire(volatile AO_t *list, AO_stack_aux * a) +{ + unsigned i; + int j = 0; + AO_t first; + AO_t * first_ptr; + AO_t next; + + retry: + first = AO_load(list); + if (0 == first) return 0; + /* Insert first into aux black list. */ + /* This may spin if more than AO_BL_SIZE removals using auxiliary */ + /* structure a are currently in progress. */ + for (i = 0; ; ) + { + if (PRECHECK(a -> AO_stack_bl[i]) + AO_compare_and_swap_acquire(a->AO_stack_bl+i, 0, first)) + break; + ++i; + if ( i >= AO_BL_SIZE ) + { + i = 0; + AO_pause(++j); + } + } + assert(i >= 0 && i < AO_BL_SIZE); + assert(a -> AO_stack_bl[i] == first); + /* First is on the auxiliary black list. It may be removed by */ + /* another thread before we get to it, but a new insertion of x */ + /* cannot be started here. */ + /* Only we can remove it from the black list. */ + /* We need to make sure that first is still the first entry on the */ + /* list. Otherwise it's possible that a reinsertion of it was */ + /* already started before we added the black list entry. */ + if (first != AO_load(list)) { + AO_store_release(a->AO_stack_bl+i, 0); + goto retry; + } + first_ptr = AO_REAL_NEXT_PTR(first); + next = AO_load(first_ptr); + if (!AO_compare_and_swap_release(list, first, next)) { + AO_store_release(a->AO_stack_bl+i, 0); + goto retry; + } + assert(*list != first); + /* Since we never insert an entry on the black list, this cannot have */ + /* succeeded unless first remained on the list while we were running. */ + /* Thus its next link cannot have changed out from under us, and we */ + /* removed exactly one entry and preserved the rest of the list. */ + /* Note that it is quite possible that an additional entry was */ + /* inserted and removed while we were running; this is OK since the */ + /* part of the list following first must have remained unchanged, and */ + /* first must again have been at the head of the list when the */ + /* compare_and_swap succeeded. */ + AO_store_release(a->AO_stack_bl+i, 0); + return first_ptr; +} + +#else /* ! USE_ALMOST_LOCK_FREE */ + +/* Better names for fields in AO_stack_t */ +#define ptr AO_val2 +#define version AO_val1 + +#if defined(AO_HAVE_compare_double_and_swap_double) + +void AO_stack_push_release(AO_stack_t *list, AO_t *element) +{ + AO_t next; + + do { + next = AO_load(&(list -> ptr)); + *element = next; + } while (!AO_compare_and_swap_release + ( &(list -> ptr), next, (AO_t) element)); + /* This uses a narrow CAS here, an old optimization suggested */ + /* by Treiber. Pop is still safe, since we run into the ABA */ + /* problem only if there were both interveining "pop"s and "push"es.*/ + /* Inthat case we still see a change inthe version number. */ +} + +AO_t *AO_stack_pop_acquire(AO_stack_t *list) +{ + AO_t *cptr; + AO_t next; + AO_t cversion; + + do { + /* Version must be loaded first. */ + cversion = AO_load_acquire(&(list -> version)); + cptr = (AO_t *)AO_load(&(list -> ptr)); + if (cptr == 0) return 0; + next = *cptr; + } while (!AO_compare_double_and_swap_double_release + (list, cversion, (AO_t) cptr, cversion+1, (AO_t) next)); + return cptr; +} + + +#elif defined(AO_HAVE_compare_and_swap_double) + +/* Needed for future IA64 processors. No current clients? */ + +#error Untested! Probably doesnt work. + +/* We have a wide CAS, but only does an AO_t-wide comparison. */ +/* We can't use the Treiber optimization, since we only check */ +/* for an unchanged version number, not an unchanged pointer. */ +void AO_stack_push_release(AO_stack_t *list, AO_t *element) +{ + AO_t version; + AO_t next_ptr; + + do { + /* Again version must be loaded first, for different reason. */ + version = AO_load_acquire(&(list -> version)); + next_ptr = AO_load(&(list -> ptr)); + *element = next_ptr; + } while (!AO_compare_and_swap_double_release( + list, version, + version+1, (AO_t) element)); +} + +AO_t *AO_stack_pop_acquire(AO_stack_t *list) +{ + AO_t *cptr; + AO_t next; + AO_t cversion; + + do { + cversion = AO_load_acquire(&(list -> version)); + cptr = (AO_t *)AO_load(&(list -> ptr)); + if (cptr == 0) return 0; + next = *cptr; + } while (!AO_compare_double_and_swap_double_release + (list, cversion, (AO_t) cptr, cversion+1, next)); + return cptr; +} + + +#endif /* AO_HAVE_compare_and_swap_double */ + +#endif /* ! USE_ALMOST_LOCK_FREE */ diff --git a/libatomic_ops-1.2/src/atomic_ops_stack.h b/libatomic_ops-1.2/src/atomic_ops_stack.h new file mode 100644 index 0000000..f0c789b --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops_stack.h @@ -0,0 +1,188 @@ +/* + * The implementation of the routines described here is covered by the GPL. + * This header file is covered by the following license: + */ + +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* Almost lock-free LIFO linked lists (linked stacks). */ +#ifndef AO_STACK_H +#define AO_STACK_H + +#include "atomic_ops.h" + +#if !defined(AO_HAVE_compare_double_and_swap_double) \ + && !defined(AO_HAVE_compare_double_and_swap) \ + && defined(AO_HAVE_compare_and_swap) +# define AO_USE_ALMOST_LOCK_FREE +#else + /* If we have no compare-and-swap operation defined, we assume */ + /* that we will actually be using CAS emulation. If we do that, */ + /* it's cheaper to use the version-based implementation. */ +# define AO_STACK_IS_LOCK_FREE +#endif + +/* + * These are not guaranteed to be completely lock-free. + * List insertion may spin under extremely unlikely conditions. + * It cannot deadlock due to recursive reentry unless AO_list_remove + * is called while at least AO_BL_SIZE activations of + * AO_list_remove are currently active in the same thread, i.e. + * we must have at least AO_BL_SIZE recursive signal handler + * invocations. + * + * All operations take an AO_list_aux argument. It is safe to + * share a single AO_list_aux structure among all lists, but that + * may increase contention. Any given list must always be accessed + * with the same AO_list_aux structure. + * + * We make some machine-dependent assumptions: + * - We have a compare-and-swap operation. + * - At least _AO_N_BITS low order bits in pointers are + * zero and normally unused. + * - size_t and pointers have the same size. + * + * We do use a fully lock-free implementation if double-width + * compare-and-swap operations are available. + */ + +#ifdef AO_USE_ALMOST_LOCK_FREE +/* The number of low order pointer bits we can use for a small */ +/* version number. */ +# if defined(__LP64__) || defined(_LP64) || defined(_WIN64) + /* WIN64 isn't really supported yet. */ +# define AO_N_BITS 3 +# else +# define AO_N_BITS 2 +# endif + +# define AO_BIT_MASK ((1 << AO_N_BITS) - 1) +/* + * AO_stack_aux should be treated as opaque. + * It is fully defined here, so it can be allocated, and to facilitate + * debugging. + */ +#ifndef AO_BL_SIZE +# define AO_BL_SIZE 2 +#endif + +#if AO_BL_SIZE > (1 << AO_N_BITS) +# error AO_BL_SIZE too big +#endif + +typedef struct AO__stack_aux { + volatile AO_t AO_stack_bl[AO_BL_SIZE]; +} AO_stack_aux; + +/* The stack implementation knows only about the lecation of */ +/* link fields in nodes, and nothing about the rest of the */ +/* stack elements. Link fields hold an AO_t, which is not */ +/* necessarily a real pointer. This converts the AO_t to a */ +/* real (AO_t *) which is either o, or points at the link */ +/* field in the next node. */ +#define AO_REAL_NEXT_PTR(x) (AO_t *)((x) & ~AO_BIT_MASK) + +/* The following two routines should not normally be used directly. */ +/* We make them visible here for the rare cases in which it makes sense */ +/* to share the an AO_stack_aux between stacks. */ +void +AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x, + AO_stack_aux *); + +AO_t * +AO_stack_pop_explicit_aux_acquire(volatile AO_t *list, AO_stack_aux *); + +/* And now AO_stack_t for the real interface: */ + +typedef struct AO__stack { + volatile AO_t AO_ptr; + AO_stack_aux AO_aux; +} AO_stack_t; + +#define AO_STACK_INITIALIZER {0} + +AO_INLINE void AO_stack_init(AO_stack_t *list) +{ +# if AO_BL_SIZE == 2 + list -> AO_aux.AO_stack_bl[0] = 0; + list -> AO_aux.AO_stack_bl[1] = 0; +# else + int i; + for (i = 0; i < AO_BL_SIZE; ++i) + list -> AO_aux.AO_stack_bl[i] = 0; +# endif + list -> AO_ptr = 0; +} + +/* Convert an AO_stack_t to a pointer to the link field in */ +/* the first element. */ +#define AO_REAL_HEAD_PTR(x) AO_REAL_NEXT_PTR((x).AO_ptr) + +#define AO_stack_push_release(l, e) \ + AO_stack_push_explicit_aux_release(&((l)->AO_ptr), e, &((l)->AO_aux)) +#define AO_HAVE_stack_push_release + +#define AO_stack_pop_acquire(l) \ + AO_stack_pop_explicit_aux_acquire(&((l)->AO_ptr), &((l)->AO_aux)) +#define AO_HAVE_stack_pop_acquire + +# else /* Use fully non-blocking data structure, wide CAS */ + +#ifndef AO_HAVE_double_t + /* Can happen if we're using CAS emulation, since we don't want to */ + /* force that here, in case other atomic_ops clients don't want it. */ +# include "atomic_ops/sysdeps/standard_ao_double_t.h" +#endif + +typedef volatile AO_double_t AO_stack_t; +/* AO_val1 is version, AO_val2 is pointer. */ + +#define AO_STACK_INITIALIZER {0} + +AO_INLINE void AO_stack_init(AO_stack_t *list) +{ + list -> AO_val1 = 0; + list -> AO_val2 = 0; +} + +#define AO_REAL_HEAD_PTR(x) (AO_t *)((x).AO_val2) +#define AO_REAL_NEXT_PTR(x) (AO_t *)(x) + +void AO_stack_push_release(AO_stack_t *list, AO_t *new_element); +#define AO_HAVE_stack_push_release +AO_t * AO_stack_pop_acquire(AO_stack_t *list); +#define AO_HAVE_stack_pop_acquire + +#endif /* Wide CAS case */ + +#if defined(AO_HAVE_stack_push_release) && !defined(AO_HAVE_stack_push) +# define AO_stack_push(l, e) AO_stack_push_release(l, e) +# define AO_HAVE_stack_push +#endif + +#if defined(AO_HAVE_stack_pop_acquire) && !defined(AO_HAVE_stack_pop) +# define AO_stack_pop(l) AO_stack_pop_acquire(l) +# define AO_HAVE_stack_pop +#endif + +#endif /* !AO_STACK_H */ diff --git a/libatomic_ops-1.2/src/atomic_ops_sysdeps.S b/libatomic_ops-1.2/src/atomic_ops_sysdeps.S new file mode 100644 index 0000000..f586f23 --- /dev/null +++ b/libatomic_ops-1.2/src/atomic_ops_sysdeps.S @@ -0,0 +1,9 @@ +/* + * Include the appropriate system-dependent assembly file, if any. + * This is used only if the platform supports neither inline assembly + * code, nor appropriate compiler intrinsics. + */ + +#if !defined(__GNUC__) && (defined(sparc) || defined(__sparc)) +# include "atomic_ops/sysdeps/sunc/sparc.S" +#endif diff --git a/libatomic_ops-1.2/src/config.h.in b/libatomic_ops-1.2/src/config.h.in new file mode 100644 index 0000000..5b61fbd --- /dev/null +++ b/libatomic_ops-1.2/src/config.h.in @@ -0,0 +1,58 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/libatomic_ops-1.2/tests/CVS/Entries b/libatomic_ops-1.2/tests/CVS/Entries new file mode 100644 index 0000000..b0b56e6 --- /dev/null +++ b/libatomic_ops-1.2/tests/CVS/Entries @@ -0,0 +1,11 @@ +/Makefile.am/1.1/Tue Jul 11 22:55:09 2006// +/Makefile.in/1.1/Tue Jul 11 22:55:09 2006// +/list_atomic.template/1.1/Tue Jul 11 22:55:09 2006// +/run_parallel.inc/1.1/Tue Jul 11 22:55:09 2006// +/test_atomic.c/1.1/Tue Jul 11 22:55:09 2006// +/test_atomic.template/1.1/Tue Jul 11 22:55:09 2006// +/test_atomic_include.h/1.1/Tue Jul 11 22:55:09 2006// +/test_malloc.c/1.1/Tue Jul 11 22:55:09 2006// +/test_stack.c/1.1/Tue Jul 11 22:55:09 2006// +/list_atomic.c/1.1/Tue Jul 11 22:55:09 2006// +D diff --git a/libatomic_ops-1.2/tests/CVS/Repository b/libatomic_ops-1.2/tests/CVS/Repository new file mode 100644 index 0000000..b954e29 --- /dev/null +++ b/libatomic_ops-1.2/tests/CVS/Repository @@ -0,0 +1 @@ +bdwgc/libatomic_ops-1.2/tests diff --git a/libatomic_ops-1.2/tests/CVS/Root b/libatomic_ops-1.2/tests/CVS/Root new file mode 100644 index 0000000..2b506b3 --- /dev/null +++ b/libatomic_ops-1.2/tests/CVS/Root @@ -0,0 +1 @@ +:ext:address@hidden:/cvsroot/bdwgc diff --git a/libatomic_ops-1.2/tests/Makefile.am b/libatomic_ops-1.2/tests/Makefile.am new file mode 100644 index 0000000..0f186cc --- /dev/null +++ b/libatomic_ops-1.2/tests/Makefile.am @@ -0,0 +1,51 @@ +EXTRA_DIST=test_atomic.template list_atomic.template run_parallel.inc \ + test_atomic_include.h +# We distribute test_atomic_include.h, since it's hard to regenerate +# on Windows without sed. + +BUILT_SOURCES = test_atomic_include.h list_atomic.i +CLEANFILES = test_atomic_include.h list_atomic.c list_atomic.i + +AM_CPPFLAGS=-I$(srcdir)/../src + +TESTS=test_atomic test_atomic_pthreads test_stack test_malloc + +#create the test_atomic test program +check_PROGRAMS=test_atomic test_atomic_pthreads test_stack test_malloc + +test_atomic_SOURCES=test_atomic.c +test_atomic_LDADD=-lpthread ../src/libatomic_ops.a + +test_atomic_pthreads_SOURCES=test_atomic.c +test_atomic_pthreads_CPPFLAGS=-DAO_USE_PTHREAD_DEFS $(AM_CPPFLAGS) +test_atomic_pthreads_LDADD=-lpthread ../src/libatomic_ops.a + +test_stack_SOURCES=test_stack.c +test_stack_LDADD=-lpthread ../src/libatomic_ops_gpl.a ../src/libatomic_ops.a + +test_malloc_SOURCES=test_malloc.c +test_malloc_LDADD=-lpthread ../src/libatomic_ops_gpl.a ../src/libatomic_ops.a + +test_atomic_include.h: test_atomic.template + sed -e s/XX// $? > $@ + sed -e s/XX/_release/ $? >> $@ + sed -e s/XX/_acquire/ $? >> $@ + sed -e s/XX/_read/ $? >> $@ + sed -e s/XX/_write/ $? >> $@ + sed -e s/XX/_full/ $? >> $@ + sed -e s/XX/_release_write/ $? >> $@ + sed -e s/XX/_acquire_read/ $? >> $@ + +list_atomic.c: list_atomic.template + echo "#include \"atomic_ops.h\" " > $@ + sed -e s/XX// $? >> $@ + sed -e s/XX/_release/ $? >> $@ + sed -e s/XX/_acquire/ $? >> $@ + sed -e s/XX/_read/ $? >> $@ + sed -e s/XX/_write/ $? >> $@ + sed -e s/XX/_full/ $? >> $@ + sed -e s/XX/_release_write/ $? >> $@ + sed -e s/XX/_acquire_read/ $? >> $@ + +list_atomic.i: list_atomic.c + $(COMPILE) $? -E > list_atomic.i diff --git a/libatomic_ops-1.2/tests/Makefile.in b/libatomic_ops-1.2/tests/Makefile.in new file mode 100644 index 0000000..6823633 --- /dev/null +++ b/libatomic_ops-1.2/tests/Makefile.in @@ -0,0 +1,547 @@ +# Makefile.in generated by automake 1.9.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 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. + address@hidden@ +SOURCES = $(test_atomic_SOURCES) $(test_atomic_pthreads_SOURCES) $(test_malloc_SOURCES) $(test_stack_SOURCES) + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +check_PROGRAMS = test_atomic$(EXEEXT) test_atomic_pthreads$(EXEEXT) \ + test_stack$(EXEEXT) test_malloc$(EXEEXT) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +am_test_atomic_OBJECTS = test_atomic.$(OBJEXT) +test_atomic_OBJECTS = $(am_test_atomic_OBJECTS) +test_atomic_DEPENDENCIES = ../src/libatomic_ops.a +am_test_atomic_pthreads_OBJECTS = \ + test_atomic_pthreads-test_atomic.$(OBJEXT) +test_atomic_pthreads_OBJECTS = $(am_test_atomic_pthreads_OBJECTS) +test_atomic_pthreads_DEPENDENCIES = ../src/libatomic_ops.a +am_test_malloc_OBJECTS = test_malloc.$(OBJEXT) +test_malloc_OBJECTS = $(am_test_malloc_OBJECTS) +test_malloc_DEPENDENCIES = ../src/libatomic_ops_gpl.a \ + ../src/libatomic_ops.a +am_test_stack_OBJECTS = test_stack.$(OBJEXT) +test_stack_OBJECTS = $(am_test_stack_OBJECTS) +test_stack_DEPENDENCIES = ../src/libatomic_ops_gpl.a \ + ../src/libatomic_ops.a +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(test_atomic_SOURCES) $(test_atomic_pthreads_SOURCES) \ + $(test_malloc_SOURCES) $(test_stack_SOURCES) +DIST_SOURCES = $(test_atomic_SOURCES) $(test_atomic_pthreads_SOURCES) \ + $(test_malloc_SOURCES) $(test_stack_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NEED_ASM_FALSE = @NEED_ASM_FALSE@ +NEED_ASM_TRUE = @NEED_ASM_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PICFLAG = @PICFLAG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +EXTRA_DIST = test_atomic.template list_atomic.template run_parallel.inc \ + test_atomic_include.h + +# We distribute test_atomic_include.h, since it's hard to regenerate +# on Windows without sed. +BUILT_SOURCES = test_atomic_include.h list_atomic.i +CLEANFILES = test_atomic_include.h list_atomic.c list_atomic.i +AM_CPPFLAGS = -I$(srcdir)/../src +TESTS = test_atomic test_atomic_pthreads test_stack test_malloc +test_atomic_SOURCES = test_atomic.c +test_atomic_LDADD = -lpthread ../src/libatomic_ops.a +test_atomic_pthreads_SOURCES = test_atomic.c +test_atomic_pthreads_CPPFLAGS = -DAO_USE_PTHREAD_DEFS $(AM_CPPFLAGS) +test_atomic_pthreads_LDADD = -lpthread ../src/libatomic_ops.a +test_stack_SOURCES = test_stack.c +test_stack_LDADD = -lpthread ../src/libatomic_ops_gpl.a ../src/libatomic_ops.a +test_malloc_SOURCES = test_malloc.c +test_malloc_LDADD = -lpthread ../src/libatomic_ops_gpl.a ../src/libatomic_ops.a +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) +test_atomic$(EXEEXT): $(test_atomic_OBJECTS) $(test_atomic_DEPENDENCIES) + @rm -f test_atomic$(EXEEXT) + $(LINK) $(test_atomic_LDFLAGS) $(test_atomic_OBJECTS) $(test_atomic_LDADD) $(LIBS) +test_atomic_pthreads$(EXEEXT): $(test_atomic_pthreads_OBJECTS) $(test_atomic_pthreads_DEPENDENCIES) + @rm -f test_atomic_pthreads$(EXEEXT) + $(LINK) $(test_atomic_pthreads_LDFLAGS) $(test_atomic_pthreads_OBJECTS) $(test_atomic_pthreads_LDADD) $(LIBS) +test_malloc$(EXEEXT): $(test_malloc_OBJECTS) $(test_malloc_DEPENDENCIES) + @rm -f test_malloc$(EXEEXT) + $(LINK) $(test_malloc_LDFLAGS) $(test_malloc_OBJECTS) $(test_malloc_LDADD) $(LIBS) +test_stack$(EXEEXT): $(test_stack_OBJECTS) $(test_stack_DEPENDENCIES) + @rm -f test_stack$(EXEEXT) + $(LINK) $(test_stack_LDFLAGS) $(test_stack_OBJECTS) $(test_stack_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@ + +.c.o: address@hidden@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ address@hidden@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(COMPILE) -c $< + +.c.obj: address@hidden@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ address@hidden@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +test_atomic_pthreads-test_atomic.o: test_atomic.c address@hidden@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_atomic_pthreads_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_atomic_pthreads-test_atomic.o -MD -MP -MF "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo" -c -o test_atomic_pthreads-test_atomic.o `test -f 'test_atomic.c' || echo '$(srcdir)/'`test_atomic.c; \ address@hidden@ then mv -f "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo" "$(DEPDIR)/test_atomic_pthreads-test_atomic.Po"; else rm -f "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='test_atomic.c' object='test_atomic_pthreads-test_atomic.o' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_atomic_pthreads_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_atomic_pthreads-test_atomic.o `test -f 'test_atomic.c' || echo '$(srcdir)/'`test_atomic.c + +test_atomic_pthreads-test_atomic.obj: test_atomic.c address@hidden@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_atomic_pthreads_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_atomic_pthreads-test_atomic.obj -MD -MP -MF "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo" -c -o test_atomic_pthreads-test_atomic.obj `if test -f 'test_atomic.c'; then $(CYGPATH_W) 'test_atomic.c'; else $(CYGPATH_W) '$(srcdir)/test_atomic.c'; fi`; \ address@hidden@ then mv -f "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo" "$(DEPDIR)/test_atomic_pthreads-test_atomic.Po"; else rm -f "$(DEPDIR)/test_atomic_pthreads-test_atomic.Tpo"; exit 1; fi address@hidden@@am__fastdepCC_FALSE@ source='test_atomic.c' object='test_atomic_pthreads-test_atomic.obj' libtool=no @AMDEPBACKSLASH@ address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ address@hidden@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_atomic_pthreads_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_atomic_pthreads-test_atomic.obj `if test -f 'test_atomic.c'; then $(CYGPATH_W) 'test_atomic.c'; else $(CYGPATH_W) '$(srcdir)/test_atomic.c'; fi` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic ctags distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am + + +test_atomic_include.h: test_atomic.template + sed -e s/XX// $? > $@ + sed -e s/XX/_release/ $? >> $@ + sed -e s/XX/_acquire/ $? >> $@ + sed -e s/XX/_read/ $? >> $@ + sed -e s/XX/_write/ $? >> $@ + sed -e s/XX/_full/ $? >> $@ + sed -e s/XX/_release_write/ $? >> $@ + sed -e s/XX/_acquire_read/ $? >> $@ + +list_atomic.c: list_atomic.template + echo "#include \"atomic_ops.h\" " > $@ + sed -e s/XX// $? >> $@ + sed -e s/XX/_release/ $? >> $@ + sed -e s/XX/_acquire/ $? >> $@ + sed -e s/XX/_read/ $? >> $@ + sed -e s/XX/_write/ $? >> $@ + sed -e s/XX/_full/ $? >> $@ + sed -e s/XX/_release_write/ $? >> $@ + sed -e s/XX/_acquire_read/ $? >> $@ + +list_atomic.i: list_atomic.c + $(COMPILE) $? -E > list_atomic.i +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libatomic_ops-1.2/tests/list_atomic.c b/libatomic_ops-1.2/tests/list_atomic.c new file mode 100644 index 0000000..1faf5c4 --- /dev/null +++ b/libatomic_ops-1.2/tests/list_atomic.c @@ -0,0 +1,569 @@ +#include "atomic_ops.h" +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop) + "AO_nop(): "; + AO_nop(); +# else + "No AO_nop"; +# endif +# if defined(AO_HAVE_load) + "AO_load(addr):"; + AO_load(addr); +# else + "No AO_load"; +# endif +# if defined(AO_HAVE_store) + "AO_store(addr, val):"; + AO_store(addr, val); +# else + "No AO_store"; +# endif +# if defined(AO_HAVE_test_and_set) + "AO_test_and_set(tsaddr):"; + AO_test_and_set(tsaddr); +# else + "No AO_test_and_set"; +# endif +# if defined(AO_HAVE_fetch_and_add1) + "AO_fetch_and_add1(addr):"; + AO_fetch_and_add1(addr); +# else + "No AO_fetch_and_add1"; +# endif +# if defined(AO_HAVE_fetch_and_sub1) + "AO_fetch_and_sub1(addr):"; + AO_fetch_and_sub1(addr); +# else + "No AO_fetch_and_sub1"; +# endif +# if defined(AO_HAVE_fetch_and_add) + "AO_fetch_and_add(addr, incr):"; + AO_fetch_and_add(addr, incr); +# else + "No AO_fetch_and_add"; +# endif +# if defined(AO_HAVE_compare_and_swap) + "AO_compare_and_swap(addr, oldval, newval):"; + AO_compare_and_swap(addr, oldval, newval); +# else + "No AO_compare_and_swap"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_release(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_release) + "AO_nop_release(): "; + AO_nop_release(); +# else + "No AO_nop_release"; +# endif +# if defined(AO_HAVE_load_release) + "AO_load_release(addr):"; + AO_load_release(addr); +# else + "No AO_load_release"; +# endif +# if defined(AO_HAVE_store_release) + "AO_store_release(addr, val):"; + AO_store_release(addr, val); +# else + "No AO_store_release"; +# endif +# if defined(AO_HAVE_test_and_set_release) + "AO_test_and_set_release(tsaddr):"; + AO_test_and_set_release(tsaddr); +# else + "No AO_test_and_set_release"; +# endif +# if defined(AO_HAVE_fetch_and_add1_release) + "AO_fetch_and_add1_release(addr):"; + AO_fetch_and_add1_release(addr); +# else + "No AO_fetch_and_add1_release"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_release) + "AO_fetch_and_sub1_release(addr):"; + AO_fetch_and_sub1_release(addr); +# else + "No AO_fetch_and_sub1_release"; +# endif +# if defined(AO_HAVE_fetch_and_add_release) + "AO_fetch_and_add_release(addr, incr):"; + AO_fetch_and_add_release(addr, incr); +# else + "No AO_fetch_and_add_release"; +# endif +# if defined(AO_HAVE_compare_and_swap_release) + "AO_compare_and_swap_release(addr, oldval, newval):"; + AO_compare_and_swap_release(addr, oldval, newval); +# else + "No AO_compare_and_swap_release"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_acquire(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_acquire) + "AO_nop_acquire(): "; + AO_nop_acquire(); +# else + "No AO_nop_acquire"; +# endif +# if defined(AO_HAVE_load_acquire) + "AO_load_acquire(addr):"; + AO_load_acquire(addr); +# else + "No AO_load_acquire"; +# endif +# if defined(AO_HAVE_store_acquire) + "AO_store_acquire(addr, val):"; + AO_store_acquire(addr, val); +# else + "No AO_store_acquire"; +# endif +# if defined(AO_HAVE_test_and_set_acquire) + "AO_test_and_set_acquire(tsaddr):"; + AO_test_and_set_acquire(tsaddr); +# else + "No AO_test_and_set_acquire"; +# endif +# if defined(AO_HAVE_fetch_and_add1_acquire) + "AO_fetch_and_add1_acquire(addr):"; + AO_fetch_and_add1_acquire(addr); +# else + "No AO_fetch_and_add1_acquire"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_acquire) + "AO_fetch_and_sub1_acquire(addr):"; + AO_fetch_and_sub1_acquire(addr); +# else + "No AO_fetch_and_sub1_acquire"; +# endif +# if defined(AO_HAVE_fetch_and_add_acquire) + "AO_fetch_and_add_acquire(addr, incr):"; + AO_fetch_and_add_acquire(addr, incr); +# else + "No AO_fetch_and_add_acquire"; +# endif +# if defined(AO_HAVE_compare_and_swap_acquire) + "AO_compare_and_swap_acquire(addr, oldval, newval):"; + AO_compare_and_swap_acquire(addr, oldval, newval); +# else + "No AO_compare_and_swap_acquire"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_read(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_read) + "AO_nop_read(): "; + AO_nop_read(); +# else + "No AO_nop_read"; +# endif +# if defined(AO_HAVE_load_read) + "AO_load_read(addr):"; + AO_load_read(addr); +# else + "No AO_load_read"; +# endif +# if defined(AO_HAVE_store_read) + "AO_store_read(addr, val):"; + AO_store_read(addr, val); +# else + "No AO_store_read"; +# endif +# if defined(AO_HAVE_test_and_set_read) + "AO_test_and_set_read(tsaddr):"; + AO_test_and_set_read(tsaddr); +# else + "No AO_test_and_set_read"; +# endif +# if defined(AO_HAVE_fetch_and_add1_read) + "AO_fetch_and_add1_read(addr):"; + AO_fetch_and_add1_read(addr); +# else + "No AO_fetch_and_add1_read"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_read) + "AO_fetch_and_sub1_read(addr):"; + AO_fetch_and_sub1_read(addr); +# else + "No AO_fetch_and_sub1_read"; +# endif +# if defined(AO_HAVE_fetch_and_add_read) + "AO_fetch_and_add_read(addr, incr):"; + AO_fetch_and_add_read(addr, incr); +# else + "No AO_fetch_and_add_read"; +# endif +# if defined(AO_HAVE_compare_and_swap_read) + "AO_compare_and_swap_read(addr, oldval, newval):"; + AO_compare_and_swap_read(addr, oldval, newval); +# else + "No AO_compare_and_swap_read"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_write(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_write) + "AO_nop_write(): "; + AO_nop_write(); +# else + "No AO_nop_write"; +# endif +# if defined(AO_HAVE_load_write) + "AO_load_write(addr):"; + AO_load_write(addr); +# else + "No AO_load_write"; +# endif +# if defined(AO_HAVE_store_write) + "AO_store_write(addr, val):"; + AO_store_write(addr, val); +# else + "No AO_store_write"; +# endif +# if defined(AO_HAVE_test_and_set_write) + "AO_test_and_set_write(tsaddr):"; + AO_test_and_set_write(tsaddr); +# else + "No AO_test_and_set_write"; +# endif +# if defined(AO_HAVE_fetch_and_add1_write) + "AO_fetch_and_add1_write(addr):"; + AO_fetch_and_add1_write(addr); +# else + "No AO_fetch_and_add1_write"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_write) + "AO_fetch_and_sub1_write(addr):"; + AO_fetch_and_sub1_write(addr); +# else + "No AO_fetch_and_sub1_write"; +# endif +# if defined(AO_HAVE_fetch_and_add_write) + "AO_fetch_and_add_write(addr, incr):"; + AO_fetch_and_add_write(addr, incr); +# else + "No AO_fetch_and_add_write"; +# endif +# if defined(AO_HAVE_compare_and_swap_write) + "AO_compare_and_swap_write(addr, oldval, newval):"; + AO_compare_and_swap_write(addr, oldval, newval); +# else + "No AO_compare_and_swap_write"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_full(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_full) + "AO_nop_full(): "; + AO_nop_full(); +# else + "No AO_nop_full"; +# endif +# if defined(AO_HAVE_load_full) + "AO_load_full(addr):"; + AO_load_full(addr); +# else + "No AO_load_full"; +# endif +# if defined(AO_HAVE_store_full) + "AO_store_full(addr, val):"; + AO_store_full(addr, val); +# else + "No AO_store_full"; +# endif +# if defined(AO_HAVE_test_and_set_full) + "AO_test_and_set_full(tsaddr):"; + AO_test_and_set_full(tsaddr); +# else + "No AO_test_and_set_full"; +# endif +# if defined(AO_HAVE_fetch_and_add1_full) + "AO_fetch_and_add1_full(addr):"; + AO_fetch_and_add1_full(addr); +# else + "No AO_fetch_and_add1_full"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_full) + "AO_fetch_and_sub1_full(addr):"; + AO_fetch_and_sub1_full(addr); +# else + "No AO_fetch_and_sub1_full"; +# endif +# if defined(AO_HAVE_fetch_and_add_full) + "AO_fetch_and_add_full(addr, incr):"; + AO_fetch_and_add_full(addr, incr); +# else + "No AO_fetch_and_add_full"; +# endif +# if defined(AO_HAVE_compare_and_swap_full) + "AO_compare_and_swap_full(addr, oldval, newval):"; + AO_compare_and_swap_full(addr, oldval, newval); +# else + "No AO_compare_and_swap_full"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_release_write(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_release_write) + "AO_nop_release_write(): "; + AO_nop_release_write(); +# else + "No AO_nop_release_write"; +# endif +# if defined(AO_HAVE_load_release_write) + "AO_load_release_write(addr):"; + AO_load_release_write(addr); +# else + "No AO_load_release_write"; +# endif +# if defined(AO_HAVE_store_release_write) + "AO_store_release_write(addr, val):"; + AO_store_release_write(addr, val); +# else + "No AO_store_release_write"; +# endif +# if defined(AO_HAVE_test_and_set_release_write) + "AO_test_and_set_release_write(tsaddr):"; + AO_test_and_set_release_write(tsaddr); +# else + "No AO_test_and_set_release_write"; +# endif +# if defined(AO_HAVE_fetch_and_add1_release_write) + "AO_fetch_and_add1_release_write(addr):"; + AO_fetch_and_add1_release_write(addr); +# else + "No AO_fetch_and_add1_release_write"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_release_write) + "AO_fetch_and_sub1_release_write(addr):"; + AO_fetch_and_sub1_release_write(addr); +# else + "No AO_fetch_and_sub1_release_write"; +# endif +# if defined(AO_HAVE_fetch_and_add_release_write) + "AO_fetch_and_add_release_write(addr, incr):"; + AO_fetch_and_add_release_write(addr, incr); +# else + "No AO_fetch_and_add_release_write"; +# endif +# if defined(AO_HAVE_compare_and_swap_release_write) + "AO_compare_and_swap_release_write(addr, oldval, newval):"; + AO_compare_and_swap_release_write(addr, oldval, newval); +# else + "No AO_compare_and_swap_release_write"; +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomic_acquire_read(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nop_acquire_read) + "AO_nop_acquire_read(): "; + AO_nop_acquire_read(); +# else + "No AO_nop_acquire_read"; +# endif +# if defined(AO_HAVE_load_acquire_read) + "AO_load_acquire_read(addr):"; + AO_load_acquire_read(addr); +# else + "No AO_load_acquire_read"; +# endif +# if defined(AO_HAVE_store_acquire_read) + "AO_store_acquire_read(addr, val):"; + AO_store_acquire_read(addr, val); +# else + "No AO_store_acquire_read"; +# endif +# if defined(AO_HAVE_test_and_set_acquire_read) + "AO_test_and_set_acquire_read(tsaddr):"; + AO_test_and_set_acquire_read(tsaddr); +# else + "No AO_test_and_set_acquire_read"; +# endif +# if defined(AO_HAVE_fetch_and_add1_acquire_read) + "AO_fetch_and_add1_acquire_read(addr):"; + AO_fetch_and_add1_acquire_read(addr); +# else + "No AO_fetch_and_add1_acquire_read"; +# endif +# if defined(AO_HAVE_fetch_and_sub1_acquire_read) + "AO_fetch_and_sub1_acquire_read(addr):"; + AO_fetch_and_sub1_acquire_read(addr); +# else + "No AO_fetch_and_sub1_acquire_read"; +# endif +# if defined(AO_HAVE_fetch_and_add_acquire_read) + "AO_fetch_and_add_acquire_read(addr, incr):"; + AO_fetch_and_add_acquire_read(addr, incr); +# else + "No AO_fetch_and_add_acquire_read"; +# endif +# if defined(AO_HAVE_compare_and_swap_acquire_read) + "AO_compare_and_swap_acquire_read(addr, oldval, newval):"; + AO_compare_and_swap_acquire_read(addr, oldval, newval); +# else + "No AO_compare_and_swap_acquire_read"; +# endif +} + + + diff --git a/libatomic_ops-1.2/tests/list_atomic.template b/libatomic_ops-1.2/tests/list_atomic.template new file mode 100644 index 0000000..a3d36e3 --- /dev/null +++ b/libatomic_ops-1.2/tests/list_atomic.template @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* This generates a compilable program. But it is really meant to be */ +/* be used only with cc -E, to inspect the expensions generated by */ +/* primitives. */ + +/* The result will not link or run. */ + +void list_atomicXX(void) +{ + AO_T *addr, val, newval, oldval; + AO_TS_T tsaddr; + long incr; + +# if defined(AO_HAVE_nopXX) + "AO_nopXX(): "; + AO_nopXX(); +# else + "No AO_nopXX"; +# endif +# if defined(AO_HAVE_loadXX) + "AO_loadXX(addr):"; + AO_loadXX(addr); +# else + "No AO_loadXX"; +# endif +# if defined(AO_HAVE_storeXX) + "AO_storeXX(addr, val):"; + AO_storeXX(addr, val); +# else + "No AO_storeXX"; +# endif +# if defined(AO_HAVE_test_and_setXX) + "AO_test_and_setXX(tsaddr):"; + AO_test_and_setXX(tsaddr); +# else + "No AO_test_and_setXX"; +# endif +# if defined(AO_HAVE_fetch_and_add1XX) + "AO_fetch_and_add1XX(addr):"; + AO_fetch_and_add1XX(addr); +# else + "No AO_fetch_and_add1XX"; +# endif +# if defined(AO_HAVE_fetch_and_sub1XX) + "AO_fetch_and_sub1XX(addr):"; + AO_fetch_and_sub1XX(addr); +# else + "No AO_fetch_and_sub1XX"; +# endif +# if defined(AO_HAVE_fetch_and_addXX) + "AO_fetch_and_addXX(addr, incr):"; + AO_fetch_and_addXX(addr, incr); +# else + "No AO_fetch_and_addXX"; +# endif +# if defined(AO_HAVE_compare_and_swapXX) + "AO_compare_and_swapXX(addr, oldval, newval):"; + AO_compare_and_swapXX(addr, oldval, newval); +# else + "No AO_compare_and_swapXX"; +# endif +} + + + diff --git a/libatomic_ops-1.2/tests/run_parallel.inc b/libatomic_ops-1.2/tests/run_parallel.inc new file mode 100644 index 0000000..1a87c8b --- /dev/null +++ b/libatomic_ops-1.2/tests/run_parallel.inc @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +#if defined(_MSC_VER) || \ + defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) || \ + defined(_WIN32_WINCE) +# define USE_WINTHREADS +#elif defined(__vxworks) +# define USE_VXTHREADS +#else +# define USE_PTHREADS +#endif + +#include +#include + +#ifdef USE_PTHREADS +# include +#endif + +#ifdef USE_VXTHREADS +# include +# include +#endif + +#ifdef USE_WINTHREADS +# include +#endif + +#include "atomic_ops.h" + +typedef void * (* thr_func)(void *); + +typedef int (* test_func)(void); /* Returns != 0 on success */ + +void * run_parallel(int nthreads, thr_func f1, test_func t, const char *name); + +#ifdef USE_PTHREADS +void * run_parallel(int nthreads, thr_func f1, test_func t, const char *name) +{ + pthread_attr_t attr; + pthread_t thr[100]; + int i; + int code; + + fprintf(stderr, "Testing %s\n", name); + if (nthreads > 100) + { + fprintf(stderr, "run_parallel: requested too many threads\n"); + abort(); + } + +# ifdef _HPUX_SOURCE + /* Default stack size is too small, especially with the 64 bit ABI */ + /* Increase it. */ + if (pthread_default_stacksize_np(1024*1024, 0) != 0) { + fprintf(stderr, "pthread_default_stacksize_np failed. " + "OK after first call.\n"); + } +# endif + + pthread_attr_init(&attr); + + for (i = 0; i < nthreads; ++i) + { + if ((code = pthread_create(thr + i, &attr, f1, (void *)(long)i)) != 0) + { + perror("Thread creation failed"); + fprintf(stderr, "Pthread_create returned %d, thread %d\n", code, i); + abort(); + } + } + for (i = 0; i < nthreads; ++i) + { + if ((code = pthread_join(thr[i], NULL)) != 0) + { + perror("Thread join failed"); + fprintf(stderr, "Pthread_join returned %d, thread %d\n", code, i); + abort(); + } + } + if (t()) + { + fprintf(stderr, "Succeeded\n"); + } + else + { + fprintf(stderr, "Failed\n"); + abort(); + } + return 0; +} +#endif /* USE_PTHREADS */ + +#ifdef USE_VXTHREADS +void * run_parallel(int nthreads, thr_func f1, test_func t, const char *name) +{ + int thr[100]; + int i; + + fprintf(stderr, "Testing %s\n", name); + if (nthreads > 100) + { + fprintf(stderr, "run_parallel: requested too many threads\n"); + taskSuspend(0); + } + + for (i = 0; i < nthreads; ++i) + { + thr[i] = taskSpawn((char*) name, 180, 0, 32768, (FUNCPTR) f1, i, + 1, 2, 3, 4, 5, 6, 7, 8, 9); + if (thr[i] == ERROR) + { + fprintf(stderr, "taskSpawn failed with %d, thread %d\n", + errno, i); + taskSuspend(0); + } + } + for (i = 0; i < nthreads; ++i) + { + while (taskIdVerify(thr[i]) == OK) + taskDelay(60); + } + if (t()) + { + fprintf(stderr, "Succeeded\n"); + } + else + { + fprintf(stderr, "Failed\n"); + taskSuspend(0); + } + return 0; +} +#endif /* USE_VXTHREADS */ + +#ifdef USE_WINTHREADS + +struct tramp_args { + thr_func fn; + long arg; +}; + +DWORD WINAPI tramp(LPVOID param) +{ + struct tramp_args *args = (struct tramp_args *)param; + + return (DWORD)(args -> fn)((LPVOID)(args -> arg)); +} + +void * run_parallel(int nthreads, thr_func f1, test_func t, const char *name) +{ + HANDLE thr[100]; + struct tramp_args args[100]; + int i; + DWORD code; + + fprintf(stderr, "Testing %s\n", name); + if (nthreads > 100) + { + fprintf(stderr, "run_parallel: requested too many threads\n"); + abort(); + } + + for (i = 0; i < nthreads; ++i) + { + args[i].fn = f1; + args[i].arg = i; + if ((thr[i] = CreateThread(NULL, 0, tramp, (LPVOID)(args+i), 0, NULL)) + == NULL) + { + perror("Thread creation failed"); + fprintf(stderr, "CreateThread failed with %d, thread %d\n", + GetLastError(), i); + abort(); + } + } + for (i = 0; i < nthreads; ++i) + { + if ((code = WaitForSingleObject(thr[i], INFINITE)) != WAIT_OBJECT_0) + { + perror("Thread join failed"); + fprintf(stderr, "WaitForSingleObject returned %d, thread %d\n", + code, i); + abort(); + } + } + if (t()) + { + fprintf(stderr, "Succeeded\n"); + } + else + { + fprintf(stderr, "Failed\n"); + abort(); + } + return 0; +} +#endif /* USE_WINTHREADS */ + diff --git a/libatomic_ops-1.2/tests/test_atomic.c b/libatomic_ops-1.2/tests/test_atomic.c new file mode 100644 index 0000000..d31297d --- /dev/null +++ b/libatomic_ops-1.2/tests/test_atomic.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. + * Original Author: Hans Boehm + * + * This file may be redistributed and/or modified under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2, or (at your option) any later version. + * + * It is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License in the + * file doc/COPYING for more details. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + + +#include "run_parallel.inc" + +#include "test_atomic_include.h" + +#ifdef AO_USE_PTHREAD_DEFS +# define NITERS 100000 +#else +# define NITERS 10000000 +#endif + +void * add1sub1_thr(void * id); +int add1sub1_test(void); +void * acqrel_thr(void *id); +int acqrel_test(void); +void * test_and_set_thr(void * id); +int test_and_set_test(void); + +#if defined(AO_HAVE_fetch_and_add1) && defined(AO_HAVE_fetch_and_sub1) + +AO_t counter = 0; + +void * add1sub1_thr(void * id) +{ + int me = (int)(long)id; + + int i; + + for (i = 0; i < NITERS; ++i) + if (me & 1) + AO_fetch_and_sub1(&counter); + else + AO_fetch_and_add1(&counter); + + return 0; +} + +int add1sub1_test(void) +{ + return counter == 0; +} + +#endif /* defined(AO_HAVE_fetch_and_add1) && defined(AO_HAVE_fetch_and_sub1) */ + +#if defined(AO_HAVE_store_release_write) && defined(AO_HAVE_load_acquire_read) + +/* Invariant: counter1 >= counter2 */ +AO_t counter1 = 0; +AO_t counter2 = 0; + +void * acqrel_thr(void *id) +{ + int me = (int)(long)id; + + int i; + + for (i = 0; i < NITERS; ++i) + if (me & 1) + { + AO_t my_counter1; + if (me != 1) + fprintf(stderr, "acqrel test: too many threads\n"); + my_counter1 = AO_load(&counter1); + AO_store(&counter1, my_counter1 + 1); + AO_store_release_write(&counter2, my_counter1 + 1); + } + else + { + AO_t my_counter1a, my_counter2a; + AO_t my_counter1b, my_counter2b; + + my_counter2a = AO_load_acquire_read(&counter2); + my_counter1a = AO_load(&counter1); + /* Redo this, to make sure that the second load of counter1 */ + /* is not viewed as a common subexpression. */ + my_counter2b = AO_load_acquire_read(&counter2); + my_counter1b = AO_load(&counter1); + if (my_counter1a < my_counter2a) + { + fprintf(stderr, "Saw release store out of order: %lu < %lu\n", + (unsigned long)my_counter1a, (unsigned long)my_counter2a); + abort(); + } + if (my_counter1b < my_counter2b) + { + fprintf(stderr, + "Saw release store out of order (bad CSE?): %lu < %lu\n", + (unsigned long)my_counter1b, (unsigned long)my_counter2b); + abort(); + } + } + + return 0; +} + +int acqrel_test(void) +{ + return counter1 == NITERS && counter2 == NITERS; +} + +#endif /* AO_HAVE_store_release_write && AO_HAVE_load_acquire_read */ + +#if defined(AO_HAVE_test_and_set_acquire) + +AO_TS_T lock = AO_TS_INITIALIZER; + +unsigned long locked_counter; +volatile unsigned long junk = 13; + +void * test_and_set_thr(void * id) +{ + unsigned long i; + + for (i = 0; i < NITERS/10; ++i) + { + while (AO_test_and_set_acquire(&lock) != AO_TS_CLEAR); + ++locked_counter; + if (locked_counter != 1) + { + fprintf(stderr, "Test and set failure 1, counter = %ld\n", + locked_counter); + abort(); + } + locked_counter *= 2; + locked_counter -= 1; + locked_counter *= 5; + locked_counter -= 4; + if (locked_counter != 1) + { + fprintf(stderr, "Test and set failure 2, counter = %ld\n", + locked_counter); + abort(); + } + --locked_counter; + AO_CLEAR(&lock); + /* Spend a bit of time outside the lock. */ + junk *= 17; + junk *= 17; + } + return 0; +} + +int test_and_set_test(void) +{ + return locked_counter == 0; +} + +#endif /* defined(AO_HAVE_test_and_set_acquire) */ + +int main() +{ + test_atomic(); + test_atomic_acquire(); + test_atomic_release(); + test_atomic_read(); + test_atomic_write(); + test_atomic_full(); + test_atomic_release_write(); + test_atomic_acquire_read(); +# if defined(AO_HAVE_fetch_and_add1) && defined(AO_HAVE_fetch_and_sub1) + run_parallel(4, add1sub1_thr, add1sub1_test, "add1/sub1"); +# endif +# if defined(AO_HAVE_store_release_write) && defined(AO_HAVE_load_acquire_read) + run_parallel(3, acqrel_thr, acqrel_test, + "store_release_write/load_acquire_read"); +# endif +# if defined(AO_HAVE_test_and_set_acquire) + run_parallel(5, test_and_set_thr, test_and_set_test, + "test_and_set"); +# endif + return 0; +} diff --git a/libatomic_ops-1.2/tests/test_atomic.template b/libatomic_ops-1.2/tests/test_atomic.template new file mode 100644 index 0000000..f80eac8 --- /dev/null +++ b/libatomic_ops-1.2/tests/test_atomic.template @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: XX)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "XX") + +void test_atomicXX(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_setXX) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nopXX) + AO_nopXX(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_storeXX) + AO_storeXX(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_loadXX) + TA_assert(AO_loadXX(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_setXX) + assert(AO_test_and_setXX(&z) == AO_TS_CLEAR); + assert(AO_test_and_setXX(&z) == AO_TS_SET); + assert(AO_test_and_setXX(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_addXX) + TA_assert(AO_fetch_and_addXX(&x, 42) == 13); + TA_assert(AO_fetch_and_addXX(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1XX) + TA_assert(AO_fetch_and_add1XX(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1XX) + TA_assert(AO_fetch_and_sub1XX(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_storeXX) + AO_short_storeXX(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_loadXX) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_addXX) + TA_assert(AO_short_fetch_and_addXX(&s, 42) == 13); + TA_assert(AO_short_fetch_and_addXX(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1XX) + TA_assert(AO_short_fetch_and_add1XX(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1XX) + TA_assert(AO_short_fetch_and_sub1XX(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_storeXX) + AO_char_storeXX(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_loadXX) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_addXX) + TA_assert(AO_char_fetch_and_addXX(&b, 42) == 13); + TA_assert(AO_char_fetch_and_addXX(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1XX) + TA_assert(AO_char_fetch_and_add1XX(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1XX) + TA_assert(AO_char_fetch_and_sub1XX(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_storeXX) + AO_int_storeXX(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_loadXX) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_addXX) + TA_assert(AO_int_fetch_and_addXX(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_addXX(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1XX) + TA_assert(AO_int_fetch_and_add1XX(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1XX) + TA_assert(AO_int_fetch_and_sub1XX(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swapXX) + TA_assert(!AO_compare_and_swapXX(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swapXX(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_orXX) + AO_orXX(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_doubleXX) + TA_assert(!AO_compare_double_and_swap_doubleXX(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_doubleXX(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_doubleXX(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_doubleXX) + TA_assert(!AO_compare_and_swap_doubleXX(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_doubleXX(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_doubleXX(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + diff --git a/libatomic_ops-1.2/tests/test_atomic_include.h b/libatomic_ops-1.2/tests/test_atomic_include.h new file mode 100644 index 0000000..bc280eb --- /dev/null +++ b/libatomic_ops-1.2/tests/test_atomic_include.h @@ -0,0 +1,1633 @@ +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +void test_atomic(void); +void test_atomic_release(void); +void test_atomic_acquire(void); +void test_atomic_read(void); +void test_atomic_write(void); +void test_atomic_full(void); +void test_atomic_release_write(void); +void test_atomic_acquire_read(void); + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: )\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "") + +void test_atomic(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop) + AO_nop(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store) + AO_store(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load) + TA_assert(AO_load(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set) + assert(AO_test_and_set(&z) == AO_TS_CLEAR); + assert(AO_test_and_set(&z) == AO_TS_SET); + assert(AO_test_and_set(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add) + TA_assert(AO_fetch_and_add(&x, 42) == 13); + TA_assert(AO_fetch_and_add(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1) + TA_assert(AO_fetch_and_add1(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1) + TA_assert(AO_fetch_and_sub1(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store) + AO_short_store(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add) + TA_assert(AO_short_fetch_and_add(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1) + TA_assert(AO_short_fetch_and_add1(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1) + TA_assert(AO_short_fetch_and_sub1(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store) + AO_char_store(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add) + TA_assert(AO_char_fetch_and_add(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1) + TA_assert(AO_char_fetch_and_add1(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1) + TA_assert(AO_char_fetch_and_sub1(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store) + AO_int_store(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add) + TA_assert(AO_int_fetch_and_add(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1) + TA_assert(AO_int_fetch_and_add1(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1) + TA_assert(AO_int_fetch_and_sub1(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap) + TA_assert(!AO_compare_and_swap(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or) + AO_or(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double) + TA_assert(!AO_compare_double_and_swap_double(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double) + TA_assert(!AO_compare_and_swap_double(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _release)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_release") + +void test_atomic_release(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_release) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_release) + AO_nop_release(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_release) + AO_store_release(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_release) + TA_assert(AO_load_release(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_release) + assert(AO_test_and_set_release(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_release(&z) == AO_TS_SET); + assert(AO_test_and_set_release(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_release) + TA_assert(AO_fetch_and_add_release(&x, 42) == 13); + TA_assert(AO_fetch_and_add_release(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_release) + TA_assert(AO_fetch_and_add1_release(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_release) + TA_assert(AO_fetch_and_sub1_release(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_release) + AO_short_store_release(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_release) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_release) + TA_assert(AO_short_fetch_and_add_release(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_release(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_release) + TA_assert(AO_short_fetch_and_add1_release(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_release) + TA_assert(AO_short_fetch_and_sub1_release(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_release) + AO_char_store_release(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_release) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_release) + TA_assert(AO_char_fetch_and_add_release(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_release(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_release) + TA_assert(AO_char_fetch_and_add1_release(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_release) + TA_assert(AO_char_fetch_and_sub1_release(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_release) + AO_int_store_release(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_release) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_release) + TA_assert(AO_int_fetch_and_add_release(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_release(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_release) + TA_assert(AO_int_fetch_and_add1_release(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_release) + TA_assert(AO_int_fetch_and_sub1_release(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_release) + TA_assert(!AO_compare_and_swap_release(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_release(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_release) + AO_or_release(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_release) + TA_assert(!AO_compare_double_and_swap_double_release(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_release(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_release(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_release) + TA_assert(!AO_compare_and_swap_double_release(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_release(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_release(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _acquire)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_acquire") + +void test_atomic_acquire(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_acquire) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_acquire) + AO_nop_acquire(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_acquire) + AO_store_acquire(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_acquire) + TA_assert(AO_load_acquire(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_acquire) + assert(AO_test_and_set_acquire(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_acquire(&z) == AO_TS_SET); + assert(AO_test_and_set_acquire(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_acquire) + TA_assert(AO_fetch_and_add_acquire(&x, 42) == 13); + TA_assert(AO_fetch_and_add_acquire(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_acquire) + TA_assert(AO_fetch_and_add1_acquire(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_acquire) + TA_assert(AO_fetch_and_sub1_acquire(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_acquire) + AO_short_store_acquire(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_acquire) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_acquire) + TA_assert(AO_short_fetch_and_add_acquire(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_acquire(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_acquire) + TA_assert(AO_short_fetch_and_add1_acquire(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_acquire) + TA_assert(AO_short_fetch_and_sub1_acquire(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_acquire) + AO_char_store_acquire(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_acquire) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_acquire) + TA_assert(AO_char_fetch_and_add_acquire(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_acquire(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_acquire) + TA_assert(AO_char_fetch_and_add1_acquire(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_acquire) + TA_assert(AO_char_fetch_and_sub1_acquire(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_acquire) + AO_int_store_acquire(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_acquire) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_acquire) + TA_assert(AO_int_fetch_and_add_acquire(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_acquire(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_acquire) + TA_assert(AO_int_fetch_and_add1_acquire(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_acquire) + TA_assert(AO_int_fetch_and_sub1_acquire(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_acquire) + TA_assert(!AO_compare_and_swap_acquire(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_acquire(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_acquire) + AO_or_acquire(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_acquire) + TA_assert(!AO_compare_double_and_swap_double_acquire(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_acquire(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_acquire(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_acquire) + TA_assert(!AO_compare_and_swap_double_acquire(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_acquire(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_acquire(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _read)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_read") + +void test_atomic_read(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_read) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_read) + AO_nop_read(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_read) + AO_store_read(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_read) + TA_assert(AO_load_read(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_read) + assert(AO_test_and_set_read(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_read(&z) == AO_TS_SET); + assert(AO_test_and_set_read(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_read) + TA_assert(AO_fetch_and_add_read(&x, 42) == 13); + TA_assert(AO_fetch_and_add_read(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_read) + TA_assert(AO_fetch_and_add1_read(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_read) + TA_assert(AO_fetch_and_sub1_read(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_read) + AO_short_store_read(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_read) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_read) + TA_assert(AO_short_fetch_and_add_read(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_read(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_read) + TA_assert(AO_short_fetch_and_add1_read(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_read) + TA_assert(AO_short_fetch_and_sub1_read(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_read) + AO_char_store_read(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_read) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_read) + TA_assert(AO_char_fetch_and_add_read(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_read(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_read) + TA_assert(AO_char_fetch_and_add1_read(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_read) + TA_assert(AO_char_fetch_and_sub1_read(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_read) + AO_int_store_read(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_read) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_read) + TA_assert(AO_int_fetch_and_add_read(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_read(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_read) + TA_assert(AO_int_fetch_and_add1_read(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_read) + TA_assert(AO_int_fetch_and_sub1_read(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_read) + TA_assert(!AO_compare_and_swap_read(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_read(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_read) + AO_or_read(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_read) + TA_assert(!AO_compare_double_and_swap_double_read(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_read(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_read(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_read) + TA_assert(!AO_compare_and_swap_double_read(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_read(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_read(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _write)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_write") + +void test_atomic_write(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_write) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_write) + AO_nop_write(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_write) + AO_store_write(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_write) + TA_assert(AO_load_write(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_write) + assert(AO_test_and_set_write(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_write(&z) == AO_TS_SET); + assert(AO_test_and_set_write(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_write) + TA_assert(AO_fetch_and_add_write(&x, 42) == 13); + TA_assert(AO_fetch_and_add_write(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_write) + TA_assert(AO_fetch_and_add1_write(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_write) + TA_assert(AO_fetch_and_sub1_write(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_write) + AO_short_store_write(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_write) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_write) + TA_assert(AO_short_fetch_and_add_write(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_write(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_write) + TA_assert(AO_short_fetch_and_add1_write(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_write) + TA_assert(AO_short_fetch_and_sub1_write(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_write) + AO_char_store_write(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_write) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_write) + TA_assert(AO_char_fetch_and_add_write(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_write(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_write) + TA_assert(AO_char_fetch_and_add1_write(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_write) + TA_assert(AO_char_fetch_and_sub1_write(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_write) + AO_int_store_write(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_write) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_write) + TA_assert(AO_int_fetch_and_add_write(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_write(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_write) + TA_assert(AO_int_fetch_and_add1_write(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_write) + TA_assert(AO_int_fetch_and_sub1_write(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_write) + TA_assert(!AO_compare_and_swap_write(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_write(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_write) + AO_or_write(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_write) + TA_assert(!AO_compare_double_and_swap_double_write(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_write(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_write(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_write) + TA_assert(!AO_compare_and_swap_double_write(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_write(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_write(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _full)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_full") + +void test_atomic_full(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_full) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_full) + AO_nop_full(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_full) + AO_store_full(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_full) + TA_assert(AO_load_full(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_full) + assert(AO_test_and_set_full(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_full(&z) == AO_TS_SET); + assert(AO_test_and_set_full(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_full) + TA_assert(AO_fetch_and_add_full(&x, 42) == 13); + TA_assert(AO_fetch_and_add_full(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_full) + TA_assert(AO_fetch_and_add1_full(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_full) + TA_assert(AO_fetch_and_sub1_full(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_full) + AO_short_store_full(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_full) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_full) + TA_assert(AO_short_fetch_and_add_full(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_full(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_full) + TA_assert(AO_short_fetch_and_add1_full(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_full) + TA_assert(AO_short_fetch_and_sub1_full(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_full) + AO_char_store_full(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_full) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_full) + TA_assert(AO_char_fetch_and_add_full(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_full(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_full) + TA_assert(AO_char_fetch_and_add1_full(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_full) + TA_assert(AO_char_fetch_and_sub1_full(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_full) + AO_int_store_full(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_full) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_full) + TA_assert(AO_int_fetch_and_add_full(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_full(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_full) + TA_assert(AO_int_fetch_and_add1_full(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_full) + TA_assert(AO_int_fetch_and_sub1_full(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_full) + TA_assert(!AO_compare_and_swap_full(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_full(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_full) + AO_or_full(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_full) + TA_assert(!AO_compare_double_and_swap_double_full(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_full(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_full(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_full) + TA_assert(!AO_compare_and_swap_double_full(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_full(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_full(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _release_write)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_release_write") + +void test_atomic_release_write(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_release_write) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_release_write) + AO_nop_release_write(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_release_write) + AO_store_release_write(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_release_write) + TA_assert(AO_load_release_write(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_release_write) + assert(AO_test_and_set_release_write(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_release_write(&z) == AO_TS_SET); + assert(AO_test_and_set_release_write(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_release_write) + TA_assert(AO_fetch_and_add_release_write(&x, 42) == 13); + TA_assert(AO_fetch_and_add_release_write(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_release_write) + TA_assert(AO_fetch_and_add1_release_write(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_release_write) + TA_assert(AO_fetch_and_sub1_release_write(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_release_write) + AO_short_store_release_write(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_release_write) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_release_write) + TA_assert(AO_short_fetch_and_add_release_write(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_release_write(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_release_write) + TA_assert(AO_short_fetch_and_add1_release_write(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_release_write) + TA_assert(AO_short_fetch_and_sub1_release_write(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_release_write) + AO_char_store_release_write(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_release_write) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_release_write) + TA_assert(AO_char_fetch_and_add_release_write(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_release_write(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_release_write) + TA_assert(AO_char_fetch_and_add1_release_write(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_release_write) + TA_assert(AO_char_fetch_and_sub1_release_write(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_release_write) + AO_int_store_release_write(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_release_write) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_release_write) + TA_assert(AO_int_fetch_and_add_release_write(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_release_write(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_release_write) + TA_assert(AO_int_fetch_and_add1_release_write(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_release_write) + TA_assert(AO_int_fetch_and_sub1_release_write(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_release_write) + TA_assert(!AO_compare_and_swap_release_write(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_release_write(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_release_write) + AO_or_release_write(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_release_write) + TA_assert(!AO_compare_double_and_swap_double_release_write(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_release_write(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_release_write(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_release_write) + TA_assert(!AO_compare_and_swap_double_release_write(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_release_write(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_release_write(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + +/* + * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. + * + * This file is covered by the GNU general public license, version 2. + * see doc/COPYING for details. + */ + +/* Some basic sanity tests. These do not test the barrier semantics. */ + +#undef TA_assert +#define TA_assert(e) \ + if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: _acquire_read)\n", \ + __FILE__, __LINE__), exit(1); } + +#undef MISSING +#define MISSING(name) \ + fprintf(stderr, "Missing: %s\n", #name "_acquire_read") + +void test_atomic_acquire_read(void) +{ + AO_t x; + unsigned char b; + unsigned short s; + unsigned int zz; +# if defined(AO_HAVE_test_and_set_acquire_read) + AO_TS_t z = AO_TS_INITIALIZER; +# endif +# if defined(AO_HAVE_double_t) + AO_double_t w; + w.AO_val1 = 0; + w.AO_val2 = 0; +# endif + +# if defined(AO_HAVE_nop_acquire_read) + AO_nop_acquire_read(); +# else + MISSING(AO_nop); +# endif +# if defined(AO_HAVE_store_acquire_read) + AO_store_acquire_read(&x, 13); + TA_assert (x == 13); +# else + MISSING(AO_store); + x = 13; +# endif +# if defined(AO_HAVE_load_acquire_read) + TA_assert(AO_load_acquire_read(&x) == 13); +# else + MISSING(AO_load); +# endif +# if defined(AO_HAVE_test_and_set_acquire_read) + assert(AO_test_and_set_acquire_read(&z) == AO_TS_CLEAR); + assert(AO_test_and_set_acquire_read(&z) == AO_TS_SET); + assert(AO_test_and_set_acquire_read(&z) == AO_TS_SET); + AO_CLEAR(&z); +# else + MISSING(AO_test_and_set); +# endif +# if defined(AO_HAVE_fetch_and_add_acquire_read) + TA_assert(AO_fetch_and_add_acquire_read(&x, 42) == 13); + TA_assert(AO_fetch_and_add_acquire_read(&x, -42) == 55); +# else + MISSING(AO_fetch_and_add); +# endif +# if defined(AO_HAVE_fetch_and_add1_acquire_read) + TA_assert(AO_fetch_and_add1_acquire_read(&x) == 13); +# else + MISSING(AO_fetch_and_add1); + ++x; +# endif +# if defined(AO_HAVE_fetch_and_sub1_acquire_read) + TA_assert(AO_fetch_and_sub1_acquire_read(&x) == 14); +# else + MISSING(AO_fetch_and_sub1); + --x; +# endif +# if defined(AO_HAVE_short_store_acquire_read) + AO_short_store_acquire_read(&s, 13); +# else + MISSING(AO_short_store); + s = 13; +# endif +# if defined(AO_HAVE_short_load_acquire_read) + TA_assert(AO_short_load(&s) == 13); +# else + MISSING(AO_short_load); +# endif +# if defined(AO_HAVE_short_fetch_and_add_acquire_read) + TA_assert(AO_short_fetch_and_add_acquire_read(&s, 42) == 13); + TA_assert(AO_short_fetch_and_add_acquire_read(&s, -42) == 55); +# else + MISSING(AO_short_fetch_and_add); +# endif +# if defined(AO_HAVE_short_fetch_and_add1_acquire_read) + TA_assert(AO_short_fetch_and_add1_acquire_read(&s) == 13); +# else + MISSING(AO_short_fetch_and_add1); + ++s; +# endif +# if defined(AO_HAVE_short_fetch_and_sub1_acquire_read) + TA_assert(AO_short_fetch_and_sub1_acquire_read(&s) == 14); +# else + MISSING(AO_short_fetch_and_sub1); + --s; +# endif +# if defined(AO_HAVE_char_store_acquire_read) + AO_char_store_acquire_read(&b, 13); +# else + MISSING(AO_char_store); + b = 13; +# endif +# if defined(AO_HAVE_char_load_acquire_read) + TA_assert(AO_char_load(&b) == 13); +# else + MISSING(AO_char_load); +# endif +# if defined(AO_HAVE_char_fetch_and_add_acquire_read) + TA_assert(AO_char_fetch_and_add_acquire_read(&b, 42) == 13); + TA_assert(AO_char_fetch_and_add_acquire_read(&b, -42) == 55); +# else + MISSING(AO_char_fetch_and_add); +# endif +# if defined(AO_HAVE_char_fetch_and_add1_acquire_read) + TA_assert(AO_char_fetch_and_add1_acquire_read(&b) == 13); +# else + MISSING(AO_char_fetch_and_add1); + ++b; +# endif +# if defined(AO_HAVE_char_fetch_and_sub1_acquire_read) + TA_assert(AO_char_fetch_and_sub1_acquire_read(&b) == 14); +# else + MISSING(AO_char_fetch_and_sub1); + --b; +# endif +# if defined(AO_HAVE_int_store_acquire_read) + AO_int_store_acquire_read(&zz, 13); +# else + MISSING(AO_int_store); + zz = 13; +# endif +# if defined(AO_HAVE_int_load_acquire_read) + TA_assert(AO_int_load(&zz) == 13); +# else + MISSING(AO_int_load); +# endif +# if defined(AO_HAVE_int_fetch_and_add_acquire_read) + TA_assert(AO_int_fetch_and_add_acquire_read(&zz, 42) == 13); + TA_assert(AO_int_fetch_and_add_acquire_read(&zz, -42) == 55); +# else + MISSING(AO_int_fetch_and_add); +# endif +# if defined(AO_HAVE_int_fetch_and_add1_acquire_read) + TA_assert(AO_int_fetch_and_add1_acquire_read(&zz) == 13); +# else + MISSING(AO_int_fetch_and_add1); + ++zz; +# endif +# if defined(AO_HAVE_int_fetch_and_sub1_acquire_read) + TA_assert(AO_int_fetch_and_sub1_acquire_read(&zz) == 14); +# else + MISSING(AO_int_fetch_and_sub1); + --zz; +# endif +# if defined(AO_HAVE_compare_and_swap_acquire_read) + TA_assert(!AO_compare_and_swap_acquire_read(&x, 14, 42)); + TA_assert(x == 13); + TA_assert(AO_compare_and_swap_acquire_read(&x, 13, 42)); + TA_assert(x == 42); +# else + MISSING(AO_compare_and_swap); +# endif +# if defined(AO_HAVE_or_acquire_read) + AO_or_acquire_read(&x, 66); + TA_assert(x == 106); +# else + MISSING(AO_or); + x |= 34; +# endif +# if defined(AO_HAVE_compare_double_and_swap_double_acquire_read) + TA_assert(!AO_compare_double_and_swap_double_acquire_read(&w, 17, 42, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_double_and_swap_double_acquire_read(&w, 0, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_double_and_swap_double_acquire_read(&w, 12, 13, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); + w.AO_val1 = 0; w.AO_val2 = 0; +# else + MISSING(AO_compare_double_and_swap_double); +# endif +# if defined(AO_HAVE_compare_and_swap_double_acquire_read) + TA_assert(!AO_compare_and_swap_double_acquire_read(&w, 17, 12, 13)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_compare_and_swap_double_acquire_read(&w, 0, 12, 13)); + TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13); + TA_assert(AO_compare_and_swap_double_acquire_read(&w, 12, 17, 42)); + TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42); +# else + MISSING(AO_compare_and_swap_double); +# endif +} + + + diff --git a/libatomic_ops-1.2/tests/test_malloc.c b/libatomic_ops-1.2/tests/test_malloc.c new file mode 100644 index 0000000..4026e62 --- /dev/null +++ b/libatomic_ops-1.2/tests/test_malloc.c @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * Original Author: Hans Boehm + * + * This file may be redistributed and/or modified under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2, or (at your option) any later version. + * + * It is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License in the + * file doc/COPYING for more details. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + +#include "run_parallel.inc" + +#include +#include +#include "atomic_ops_malloc.h" +#define MAX_NTHREADS 100 +#define N_REVERSALS 1000 /* must be even */ +#define LENGTH 1000 + +#ifdef USE_STANDARD_MALLOC +# define AO_malloc(n) malloc(n) +# define AO_free(p) free(p) +# define AO_malloc_enable_mmap() +#endif + +typedef struct list_node { + struct list_node *next; + int data; +} ln; + +ln *cons(int d, ln *tail) +{ + static size_t extra = 0; + size_t my_extra = extra; + ln *result; + int * extras; + int i; + + if (my_extra > 100) + extra = my_extra = 0; + else + ++extra; + result = AO_malloc(sizeof(ln) + sizeof(int)*my_extra); + if (result == 0) + { + fprintf(stderr, "Out of memory\n"); + /* Normal for more than about 10 threads without mmap? */ + abort(); + } + + result -> data = d; + result -> next = tail; + extras = (int *)(result+1); + for (i = 0; i < my_extra; ++i) extras[i] = 42; + return result; +} + +void print_list(ln *l) +{ + ln *p; + + for (p = l; p != 0; p = p -> next) + { + fprintf(stderr, "%d, ", p -> data); + } + fprintf(stderr, "\n"); +} + +/* Check that l contains numbers from m to n inclusive in ascending order */ +void check_list(ln *l, int m, int n) +{ + ln *p; + int i; + + for (p = l, i = m; p != 0; p = p -> next, ++i) + { + if (i != p -> data) + { + fprintf(stderr, "Found %d, expected %d\n", p -> data, i); + abort(); + } + } +} + +/* Create a list of integers from m to n */ +ln * +make_list(int m, int n) +{ + if (m > n) return 0; + return cons(m, make_list(m+1, n)); +} + +/* Reverse list x, and concatenate it to y, deallocating no longer needed */ +/* nodes in x. */ +ln * +reverse(ln *x, ln *y) +{ + ln * result; + + if (x == 0) return y; + result = reverse(x -> next, cons(x -> data, y)); + AO_free(x); + return result; +} + +int dummy_test(void) { return 1; } + +#define LARGE 200000 + +void * run_one_test(void * arg) { + ln * x = make_list(1, LENGTH); + int i; + char *p = AO_malloc(LARGE); + char *q; + + if (0 == p) { + fprintf(stderr, "AO_malloc(%d) failed: This is normal without mmap\n", + LARGE); + AO_free(p); + } else { + p[0] = p[LARGE/2] = p[LARGE-1] = 'a'; + q = AO_malloc(LARGE); + q[0] = q[LARGE/2] = q[LARGE-1] = 'b'; + if (p[0] != 'a' || p[LARGE/2] != 'a' || p[LARGE-1] != 'a') { + fprintf(stderr, "First large allocation smashed\n"); + abort(); + } + AO_free(p); + if (q[0] != 'b' || q[LARGE/2] != 'b' || q[LARGE-1] != 'b') { + fprintf(stderr, "Second large allocation smashed\n"); + abort(); + } + AO_free(q); + } +# if 0 /* enable for debugging */ + x = reverse(x, 0); + print_list(x); + x = reverse(x, 0); + print_list(x); +# endif + for (i = 0; i < N_REVERSALS; ++i) { + x = reverse(x, 0); + } + check_list(x, 1, LENGTH); + return 0; +} + +int main(int argc, char **argv) { + int nthreads; + int exper_n; + + if (1 == argc) { +# if !defined(HAVE_MMAP) + nthreads = 3; +# else + nthreads = 10; +# endif + } else if (2 == argc) { + nthreads = atoi(argv[1]); + if (nthreads < 1 || nthreads > MAX_NTHREADS) { + fprintf(stderr, "Invalid # of threads argument\n"); + exit(1); + } + } else { + fprintf(stderr, "Usage: %s [# of threads]\n", argv[0]); + exit(1); + } + printf("Performing %d reversals of %d element lists in %d threads\n", + N_REVERSALS, LENGTH, nthreads); + AO_malloc_enable_mmap(); + run_parallel(nthreads, run_one_test, dummy_test, "AO_malloc/AO_free"); + return 0; +} + diff --git a/libatomic_ops-1.2/tests/test_stack.c b/libatomic_ops-1.2/tests/test_stack.c new file mode 100644 index 0000000..8a8ba50 --- /dev/null +++ b/libatomic_ops-1.2/tests/test_stack.c @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + * Original Author: Hans Boehm + * + * This file may be redistributed and/or modified under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2, or (at your option) any later version. + * + * It is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License in the + * file doc/COPYING for more details. + */ + +#if defined(HAVE_CONFIG_H) +# include "config.h" +#endif + +#include +#include +#include +#include "atomic_ops.h" +#include "atomic_ops_stack.h" +#define MAX_NTHREADS 100 + +#ifndef NO_TIMES +#include +#include +/* Need 64-bit long long support */ +long long +get_msecs(void) +{ + struct timeval tv; + + gettimeofday(&tv, 0); + return (long long)tv.tv_sec * 1000 + tv.tv_usec/1000; +} +#else +# define get_msecs() 0 +#endif + +typedef struct le { + AO_t next; + int data; +} list_element; + +AO_stack_t the_list = AO_STACK_INITIALIZER; + +void add_elements(int n) +{ + list_element * le; + if (n == 0) return; + add_elements(n-1); + le = malloc(sizeof(list_element)); + le -> data = n; + AO_stack_push(&the_list, (AO_t *)le); +} + +void print_list() +{ + list_element *p; + + for (p = (list_element *)AO_REAL_HEAD_PTR(the_list); + p != 0; + p = (list_element *)AO_REAL_NEXT_PTR(p -> next)) + printf("%d\n", p -> data); +} + +static char marks[MAX_NTHREADS * MAX_NTHREADS]; + +void check_list(int n) +{ + list_element *p; + int i; + + for (i = 1; i <= n; ++i) marks[i] = 0; + for (p = (list_element *)AO_REAL_HEAD_PTR(the_list); + p != 0; + p = (list_element *)AO_REAL_NEXT_PTR(p -> next)) + { + if (p -> data > n || p -> data <= 0) + fprintf(stderr, "Found erroneous list element %d\n", p -> data); + if (marks[p -> data] != 0) + fprintf(stderr, "Found duplicate list element %d\n", p -> data); + marks[p -> data] = 1; + } + for (i = 1; i <= n; ++i) + if (marks[i] != 1) + fprintf(stderr, "Missing list element %d\n", i); +} + +volatile AO_t ops_performed = 0; + +#define LIMIT 1000000 + /* Total number of push/pop ops in all threads per test. */ + +#ifdef AO_HAVE_fetch_and_add +# define fetch_and_add(addr, val) AO_fetch_and_add(addr, val) +#else + /* Fake it. This is really quite unacceptable for timing */ + /* purposes. But as a correctness test, it should be OK. */ + AO_INLINE AO_t fetch_and_add(volatile AO_t * addr, AO_t val) + { + AO_t result = AO_load(addr); + AO_store(addr, result + val); + return result; + } +#endif + +void * run_one_test(void * arg) +{ + list_element * t[MAX_NTHREADS + 1]; + list_element * aux; + long index = (long)arg; + int i; + int j = 0; + +# ifdef VERBOSE + printf("starting thread %d\n", index); +# endif + while (fetch_and_add(&ops_performed, index + 1) + index + 1 < LIMIT) + { + for (i = 0; i < index + 1; ++i) + { + t[i] = (list_element *)AO_stack_pop(&the_list); + if (0 == t[i]) + { + fprintf(stderr, "FAILED\n"); + abort(); + } + } + for (i = 0; i < index + 1; ++i) + { + AO_stack_push(&the_list, (AO_t *)t[i]); + } + j += (index + 1); + } +# ifdef VERBOSE + printf("finished thread %d: %d total ops\n", index, j); +# endif + return 0; +} + +#define N_EXPERIMENTS 1 + +unsigned long times[MAX_NTHREADS + 1][N_EXPERIMENTS]; + +int main(int argc, char **argv) +{ + int nthreads; + int max_nthreads; + int exper_n; + + if (1 == argc) + max_nthreads = 4; + else if (2 == argc) + { + max_nthreads = atoi(argv[1]); + if (max_nthreads < 1 || max_nthreads > MAX_NTHREADS) + { + fprintf(stderr, "Invalid max # of threads argument\n"); + exit(1); + } + } + else + { + fprintf(stderr, "Usage: %s [max # of threads]\n", argv[0]); + exit(1); + } + for (exper_n = 0; exper_n < N_EXPERIMENTS; ++ exper_n) + for (nthreads = 1; nthreads <= max_nthreads; ++nthreads) + { + int i; + pthread_t thread[MAX_NTHREADS]; + int list_length = nthreads*(nthreads+1)/2; + long long start_time; + + add_elements(list_length); + # ifdef VERBOSE + printf("Initial list (nthreads = %d):\n", nthreads); + print_list(); + # endif + ops_performed = 0; + start_time = get_msecs(); + for (i = 1; i < nthreads; ++i) { + int code; + + if ((code = pthread_create(thread+i, 0, run_one_test, + (void *)(long)i)) != 0) { + fprintf(stderr, "Thread creation failed %u\n", code); + exit(1); + } + } + /* We use the main thread to run one test. This allows gprof */ + /* profiling to work, for example. */ + run_one_test(0); + for (i = 1; i < nthreads; ++i) { + int code; + if ((code = pthread_join(thread[i], 0)) != 0) { + fprintf(stderr, "Thread join failed %u\n", code); + } + } + times[nthreads][exper_n] = (unsigned long)(get_msecs() - start_time); + # ifdef VERBOSE + printf("%d %lu\n", nthreads, + (unsigned long)(get_msecs() - start_time)); + printf("final list (should be reordered initial list):\n"); + print_list(); + # endif + check_list(list_length); + while ((list_element *)AO_stack_pop(&the_list)); + } +# ifndef NO_TIMES + for (nthreads = 1; nthreads <= max_nthreads; ++nthreads) + { + unsigned long sum = 0; + + printf("About %d pushes + %d pops in %d threads:", + LIMIT, LIMIT, nthreads); + for (exper_n = 0; exper_n < N_EXPERIMENTS; ++exper_n) + { +# if defined(VERBOSE) + printf("[%lu] ", times[nthreads][exper_n]); +# endif + sum += times[nthreads][exper_n]; + } + printf(" %lu msecs\n", (sum + N_EXPERIMENTS/2)/N_EXPERIMENTS); + } +# endif /* NO_TIMES */ + return 0; +} + diff --git a/misc.c b/misc.c old mode 100644 new mode 100755 diff --git a/tests/trace_test.c b/tests/trace_test.c deleted file mode 100644 index 923e0f8..0000000 --- a/tests/trace_test.c +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -#ifndef GC_DEBUG -# define GC_DEBUG -#endif - -#include "gc.h" -#include "gc_backptr.h" - -struct treenode { - struct treenode *x; - struct treenode *y; -} * root[10]; - -struct treenode * mktree(int i) { - struct treenode * r = GC_MALLOC(sizeof(struct treenode)); - if (0 == i) return 0; - if (1 == i) r = GC_MALLOC_ATOMIC(sizeof(struct treenode)); - if (r == NULL) { - printf("Out of memory\n"); - exit(1); - } - r -> x = mktree(i-1); - r -> y = mktree(i-1); - return r; -} - -int main(void) -{ - int i; - GC_INIT(); - for (i = 0; i < 10; ++i) { - root[i] = mktree(12); - } - GC_generate_random_backtrace(); - GC_generate_random_backtrace(); - GC_generate_random_backtrace(); - GC_generate_random_backtrace(); - return 0; -} diff --git a/win32_threads.c b/win32_threads.c old mode 100644 new mode 100755 diff --git a/windows-untested/README b/windows-untested/README deleted file mode 100644 index 0de3ce7..0000000 --- a/windows-untested/README +++ /dev/null @@ -1,4 +0,0 @@ -gc.def should probably be removed completely. - -I removed an apparently erroneous line for GC_CreateThread. Unfortunately -gc.def is referenced in various other places I cannot easily edit. -HB diff --git a/windows-untested/gc.def b/windows-untested/gc.def deleted file mode 100644 index 2853518..0000000 --- a/windows-untested/gc.def +++ /dev/null @@ -1,2 +0,0 @@ -EXPORTS - GC_version DATA diff --git a/windows-untested/gc.rc b/windows-untested/gc.rc deleted file mode 100644 index 7de7af4..0000000 --- a/windows-untested/gc.rc +++ /dev/null @@ -1 +0,0 @@ -#include "gc.ver" diff --git a/windows-untested/gc.ver b/windows-untested/gc.ver deleted file mode 100644 index e91c7b6..0000000 --- a/windows-untested/gc.ver +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include - -#include "../include/../version.h" - -#if GC_ALPHA_VERSION != GC_NOT_ALPHA -#define _BETA 1 -#endif - -#define GC_VERSION_MICRO GC_ALPHA_VERSION -#define GC_VERSION_REVISION 0 - -#define GC_VERSION ((GC_VERSION_MAJOR) * 100 + GC_VERSION_MINOR) -#define GC_FULL_VERSION ((GC_VERSION) * 10000 + GC_VERSION_MICRO) - -#ifndef __T -# ifdef UNICODE -# define __T(x) L ## x -# else -# define __T(x) x -# endif -#endif - -#define PP_TSTR(x) __T(#x) -#define PP_EVAL_TSTR(x) PP_TSTR(x) - -#define GC_VERSION_STR PP_EVAL_TSTR(GC_VERSION_MAJOR) __T(".") PP_EVAL_TSTR(GC_VERSION_MINOR) -#define GC_FULL_VERSION_STR PP_EVAL_TSTR(GC_VERSION_MAJOR) __T(".") PP_EVAL_TSTR(GC_VERSION_MINOR) __T(".") PP_EVAL_TSTR(GC_VERSION_MICRO) __T(".") PP_EVAL_TSTR(GC_VERSION_REVISION) -#define GC_FULL_VERSION_CSV GC_VERSION_MAJOR, GC_VERSION_MINOR, GC_VERSION_MICRO, GC_VERSION_REVISION - -#ifdef _DEBUG -#define VER_DEBUG VS_FF_DEBUG -#else -#define VER_DEBUG 0 -#endif - -#ifdef _BETA -#define VER_PRERELEASE VS_FF_PRERELEASE -#else -#define VER_PRERELEASE 0 -#endif - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -VS_VERSION_INFO VERSIONINFO - FILEVERSION GC_FULL_VERSION_CSV - PRODUCTVERSION GC_FULL_VERSION_CSV - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS VER_DEBUG | VER_PRERELEASE - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904B0" - BEGIN - VALUE "CompanyName", "\ -Hans-J. Boehm, \ -Alan J. Demers, \ -Xerox Corporation, \ -Silicon Graphics, \ -and Hewlett-Packard Company. \ -\0" - VALUE "LegalCopyright", "\ -Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers. \ -Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. \ -Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. \ -Copyright (c) 1999-2004 by Hewlett-Packard. All rights reserved. \ -\0" - - VALUE "OriginalFilename", "GC.DLL\0" - VALUE "InternalName", "GC\0" - VALUE "FileDescription", "Conservative Garbage Collector for C and C++\0" - VALUE "FileVersion", GC_FULL_VERSION_STR - - VALUE "ProductName", "Conservative Garbage Collector for C and C++\0" - VALUE "ProductVersion", GC_FULL_VERSION_STR - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/windows-untested/stdafx.c b/windows-untested/stdafx.c deleted file mode 100644 index fd4f341..0000000 --- a/windows-untested/stdafx.c +++ /dev/null @@ -1 +0,0 @@ -#include "stdafx.h" diff --git a/windows-untested/stdafx.h b/windows-untested/stdafx.h deleted file mode 100644 index 1006107..0000000 --- a/windows-untested/stdafx.h +++ /dev/null @@ -1,20 +0,0 @@ -#define WIN32_LEAN_AND_MEAN -#include - -#pragma warning(error: 4013) // function undefined; assuming extern returning int - -#ifdef _MT -# define GC_THREADS 1 -#endif - -#ifdef _DEBUG -# define GC_DEBUG -#endif - -#define SILENT 1 - -#define __STDC__ 1 - -#define SAVE_CALL_CHAIN - -#define SAVE_CALL_COUNT 8 diff --git a/windows-untested/vc60/all.dsp b/windows-untested/vc60/all.dsp deleted file mode 100644 index b195df6..0000000 --- a/windows-untested/vc60/all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=all - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "all.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "all.mak" CFG="all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "all - Win32 Release" -# Name "all - Win32 Debug" -# End Target -# End Project diff --git a/windows-untested/vc60/gc.dsp b/windows-untested/vc60/gc.dsp deleted file mode 100644 index b3169eb..0000000 --- a/windows-untested/vc60/gc.dsp +++ /dev/null @@ -1,332 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=gc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gc.mak" CFG="gc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "gc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GC_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\include" /FI"stdafx.h" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "GC_BUILD" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /Yu"stdafx.h" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "..\..\include" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x37C30000" /subsystem:console /dll /debug /machine:I386 /out:"..\..\..\bin/gc60.dll" /implib:"..\..\..\lib/gc.lib" /opt:ref /release -# SUBTRACT LINK32 /pdb:none -# Begin Special Build Tool -OutDir=.\..\..\..\bin -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\..\lib\gc.exp -# End Special Build Tool - -!ELSEIF "$(CFG)" == "gc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GC_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /FI"stdafx.h" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "GC_BUILD" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /Yu"stdafx.h" /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "..\..\include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/gcd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x37C30000" /subsystem:console /dll /incremental:no /debug /machine:I386 /out:"..\..\..\bin/gc60d.dll" /implib:"..\..\..\lib/gcd.lib" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none -# Begin Special Build Tool -OutDir=.\..\..\..\bin -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\..\lib\gcd.exp -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "gc - Win32 Release" -# Name "gc - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c;cpp;cc;cxx;tcc;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\allchblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\alloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\backgraph.c -# End Source File -# Begin Source File - -SOURCE=..\..\blacklst.c -# End Source File -# Begin Source File - -SOURCE=..\..\checksums.c -# End Source File -# Begin Source File - -SOURCE=..\..\dbg_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\gcj_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\fnlz_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\dyn_load.c -# End Source File -# Begin Source File - -SOURCE=..\..\finalize.c -# End Source File -# Begin Source File - -SOURCE=..\..\headers.c -# End Source File -# Begin Source File - -SOURCE=..\..\mach_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\malloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\mallocx.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark_rts.c -# End Source File -# Begin Source File - -SOURCE=..\..\misc.c -# End Source File -# Begin Source File - -SOURCE=..\..\msvc_dbg.c -# End Source File -# Begin Source File - -SOURCE=..\..\new_hblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\obj_map.c -# End Source File -# Begin Source File - -SOURCE=..\..\os_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\ptr_chck.c -# End Source File -# Begin Source File - -SOURCE=..\..\reclaim.c -# End Source File -# Begin Source File - -SOURCE=..\stdafx.c -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=..\..\stubborn.c -# End Source File -# Begin Source File - -SOURCE=..\..\typd_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\win32_threads.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hh;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\gc.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_allocator.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_backptr.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_config_macros.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_cpp.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_gcj.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\private\gc_hdrs.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_inl.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_inline.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\private\gc_locks.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_mark.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_disclaim.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\private\gc_pmark.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\private\gc_priv.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_pthread_redirects.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_typed.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\private\gcconfig.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\javaxfc.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\leak_detector.h -# End Source File -# Begin Source File - -SOURCE=..\..\msvc_dbg.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\new_gc_alloc.h -# End Source File -# Begin Source File - -SOURCE=..\stdafx.h -# End Source File -# Begin Source File - -SOURCE=..\..\version.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\weakpointer.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=..\gc.def -# End Source File -# Begin Source File - -SOURCE=..\gc.rc -# End Source File -# Begin Source File - -SOURCE=..\gc.ver -# End Source File -# End Group -# End Target -# End Project diff --git a/windows-untested/vc60/gc.dsw b/windows-untested/vc60/gc.dsw deleted file mode 100644 index c0f2618..0000000 --- a/windows-untested/vc60/gc.dsw +++ /dev/null @@ -1,194 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "all"=".\all.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gc - End Project Dependency - Begin Project Dependency - Project_Dep_Name libgc - End Project Dependency - Begin Project Dependency - Project_Dep_Name libgcmt - End Project Dependency -}}} - -############################################################################### - -Project: "gc"=".\gc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "libgc"=".\libgc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "libgcmt"=".\libgcmt.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "test"=".\test.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name test_gc - End Project Dependency - Begin Project Dependency - Project_Dep_Name test_libgc - End Project Dependency - Begin Project Dependency - Project_Dep_Name test_libgcmt - End Project Dependency - Begin Project Dependency - Project_Dep_Name test_leak_gc - End Project Dependency - Begin Project Dependency - Project_Dep_Name test_leak_libgc - End Project Dependency - Begin Project Dependency - Project_Dep_Name test_leak_libgcmt - End Project Dependency -}}} - -############################################################################### - -Project: "test_gc"=".\test_gc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gc - End Project Dependency -}}} - -############################################################################### - -Project: "test_leak_gc"=".\test_leak_gc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name gc - End Project Dependency -}}} - -############################################################################### - -Project: "test_leak_libgc"=".\test_leak_libgc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libgc - End Project Dependency -}}} - -############################################################################### - -Project: "test_leak_libgcmt"=".\test_leak_libgcmt.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libgcmt - End Project Dependency -}}} - -############################################################################### - -Project: "test_libgc"=".\test_libgc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libgc - End Project Dependency -}}} - -############################################################################### - -Project: "test_libgcmt"=".\test_libgcmt.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libgcmt - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/windows-untested/vc60/libgc.dsp b/windows-untested/vc60/libgc.dsp deleted file mode 100644 index 40cb4d6..0000000 --- a/windows-untested/vc60/libgc.dsp +++ /dev/null @@ -1,269 +0,0 @@ -# Microsoft Developer Studio Project File - Name="libgc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=libgc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "libgc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "libgc.mak" CFG="libgc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "libgc - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "libgc - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "libgc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "..\..\..\obj\Release\libgc" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /I "..\..\include" /FI"stdafx.h" /D "NDEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "GC_BUILD" /Yu"stdafx.h" /Fd"..\..\..\lib\libgc.pdb" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo -# Begin Special Build Tool -OutDir=.\..\..\..\lib -TargetName=libgc -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\$(TargetName).idb -# End Special Build Tool - -!ELSEIF "$(CFG)" == "libgc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "..\..\..\obj\Debug\libgc" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /GX /Zi /Od /I "..\..\include" /FI"stdafx.h" /D "_DEBUG" /D "_LIB" /D "WIN32" /D "_MBCS" /D "GC_BUILD" /Yu"stdafx.h" /Fd"..\..\..\lib\libgcd.pdb" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\lib/libgcd.bsc" -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\lib\libgcd.lib" -# Begin Special Build Tool -OutDir=.\..\..\..\lib -TargetName=libgcd -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\$(TargetName).idb -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "libgc - Win32 Release" -# Name "libgc - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c;cpp;cc;cxx;tcc;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\allchblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\alloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\backgraph.c -# End Source File -# Begin Source File - -SOURCE=..\..\blacklst.c -# End Source File -# Begin Source File - -SOURCE=..\..\checksums.c -# End Source File -# Begin Source File - -SOURCE=..\..\dbg_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\gcj_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\fnlz_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\dyn_load.c -# End Source File -# Begin Source File - -SOURCE=..\..\finalize.c -# End Source File -# Begin Source File - -SOURCE=..\..\headers.c -# End Source File -# Begin Source File - -SOURCE=..\..\mach_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\malloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\mallocx.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark_rts.c -# End Source File -# Begin Source File - -SOURCE=..\..\misc.c -# End Source File -# Begin Source File - -SOURCE=..\..\msvc_dbg.c -# End Source File -# Begin Source File - -SOURCE=..\..\new_hblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\obj_map.c -# End Source File -# Begin Source File - -SOURCE=..\..\os_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\ptr_chck.c -# End Source File -# Begin Source File - -SOURCE=..\..\reclaim.c -# End Source File -# Begin Source File - -SOURCE=..\stdafx.c -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=..\..\stubborn.c -# End Source File -# Begin Source File - -SOURCE=..\..\typd_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\win32_threads.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hh;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\gc_allocator.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_backptr.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_cpp.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_gcj.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_inl.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_inline.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\gc_pthread_redirects.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\javaxfc.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\leak_detector.h -# End Source File -# Begin Source File - -SOURCE=..\..\msvc_dbg.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\new_gc_alloc.h -# End Source File -# Begin Source File - -SOURCE=..\stdafx.h -# End Source File -# Begin Source File - -SOURCE=..\..\version.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\weakpointer.h -# End Source File -# End Group -# End Target -# End Project diff --git a/windows-untested/vc60/libgcmt.dsp b/windows-untested/vc60/libgcmt.dsp deleted file mode 100644 index 14b6fbe..0000000 --- a/windows-untested/vc60/libgcmt.dsp +++ /dev/null @@ -1,225 +0,0 @@ -# Microsoft Developer Studio Project File - Name="libgcmt" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=libgcmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "libgcmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "libgcmt.mak" CFG="libgcmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "libgcmt - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "libgcmt - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "libgcmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "..\..\..\obj\Release\libgcmt" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "..\..\include" /FI"stdafx.h" /D "NDEBUG" /D "_LIB" /D "GC_BUILD" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /Yu"stdafx.h" /Fd"..\..\..\lib\libgcmt.pdb" /Zl /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo -# Begin Special Build Tool -OutDir=.\..\..\..\lib -TargetName=libgcmt -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\$(TargetName).idb -# End Special Build Tool - -!ELSEIF "$(CFG)" == "libgcmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "..\..\..\obj\Debug\libgcmt" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /GX /Zi /Od /I "..\..\include" /FI"stdafx.h" /D "_DEBUG" /D "_LIB" /D "GC_BUILD" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /Yu"stdafx.h" /Fd"..\..\..\lib\libgcmtd.pdb" /Zl /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\lib/libgcmtd.bsc" -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\lib\libgcmtd.lib" -# Begin Special Build Tool -OutDir=.\..\..\..\lib -TargetName=libgcmtd -SOURCE="$(InputPath)" -PostBuild_Cmds=del $(OutDir)\$(TargetName).idb -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "libgcmt - Win32 Release" -# Name "libgcmt - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c;cpp;cc;cxx;tcc;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\allchblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\alloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\backgraph.c -# End Source File -# Begin Source File - -SOURCE=..\..\blacklst.c -# End Source File -# Begin Source File - -SOURCE=..\..\checksums.c -# End Source File -# Begin Source File - -SOURCE=..\..\dbg_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\gcj_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\fnlz_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\dyn_load.c -# End Source File -# Begin Source File - -SOURCE=..\..\finalize.c -# End Source File -# Begin Source File - -SOURCE=..\..\headers.c -# End Source File -# Begin Source File - -SOURCE=..\..\mach_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\malloc.c -# End Source File -# Begin Source File - -SOURCE=..\..\mallocx.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark.c -# End Source File -# Begin Source File - -SOURCE=..\..\mark_rts.c -# End Source File -# Begin Source File - -SOURCE=..\..\misc.c -# End Source File -# Begin Source File - -SOURCE=..\..\msvc_dbg.c -# End Source File -# Begin Source File - -SOURCE=..\..\new_hblk.c -# End Source File -# Begin Source File - -SOURCE=..\..\obj_map.c -# End Source File -# Begin Source File - -SOURCE=..\..\os_dep.c -# End Source File -# Begin Source File - -SOURCE=..\..\ptr_chck.c -# End Source File -# Begin Source File - -SOURCE=..\..\reclaim.c -# End Source File -# Begin Source File - -SOURCE=..\stdafx.c -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=..\..\stubborn.c -# End Source File -# Begin Source File - -SOURCE=..\..\typd_mlc.c -# End Source File -# Begin Source File - -SOURCE=..\..\win32_threads.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hh;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\msvc_dbg.h -# End Source File -# Begin Source File - -SOURCE=..\stdafx.h -# End Source File -# Begin Source File - -SOURCE=..\..\version.h -# End Source File -# End Group -# End Target -# End Project diff --git a/windows-untested/vc60/test.dsp b/windows-untested/vc60/test.dsp deleted file mode 100644 index 3648da4..0000000 --- a/windows-untested/vc60/test.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=test - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP testowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "test - Win32 Release" -# Name "test - Win32 Debug" -# End Target -# End Project diff --git a/windows-untested/vc60/test_gc.dsp b/windows-untested/vc60/test_gc.dsp deleted file mode 100644 index a922563..0000000 --- a/windows-untested/vc60/test_gc.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_gc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_gc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_gc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_gc.mak" CFG="test_gc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_gc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_gc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_gc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_gc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_gcd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_gcd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_gc - Win32 Release" -# Name "test_gc - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/test_leak_gc.dsp b/windows-untested/vc60/test_leak_gc.dsp deleted file mode 100644 index 273c27d..0000000 --- a/windows-untested/vc60/test_leak_gc.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_leak_gc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_leak_gc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_leak_gc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_leak_gc.mak" CFG="test_leak_gc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_leak_gc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_leak_gc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_leak_gc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_leak_gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_leak_gc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_leak_gc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "GC_DLL" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_leak_gcd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_leak_gcd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_leak_gc - Win32 Release" -# Name "test_leak_gc - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\leak_test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/test_leak_libgc.dsp b/windows-untested/vc60/test_leak_libgc.dsp deleted file mode 100644 index 2d92257..0000000 --- a/windows-untested/vc60/test_leak_libgc.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_leak_libgc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_leak_libgc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_leak_libgc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_leak_libgc.mak" CFG="test_leak_libgc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_leak_libgc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_leak_libgc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_leak_libgc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_leak_libgc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_leak_libgc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_leak_libgc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_leak_libgcd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_leak_libgcd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_leak_libgc - Win32 Release" -# Name "test_leak_libgc - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\leak_test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/test_leak_libgcmt.dsp b/windows-untested/vc60/test_leak_libgcmt.dsp deleted file mode 100644 index 42f9789..0000000 --- a/windows-untested/vc60/test_leak_libgcmt.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_leak_libgcmt" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_leak_libgcmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_leak_libgcmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_leak_libgcmt.mak" CFG="test_leak_libgcmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_leak_libgcmt - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_leak_libgcmt - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_leak_libgcmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_leak_libgcmt" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_leak_libgcmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_leak_libgcmt" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_leak_libgcmtd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_leak_libgcmtd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_leak_libgcmt - Win32 Release" -# Name "test_leak_libgcmt - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\leak_test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/test_libgc.dsp b/windows-untested/vc60/test_libgc.dsp deleted file mode 100644 index d7fa50a..0000000 --- a/windows-untested/vc60/test_libgc.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_libgc" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_libgc - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_libgc.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_libgc.mak" CFG="test_libgc - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_libgc - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_libgc - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_libgc - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_libgc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_libgc - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_libgc" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_libgcd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_libgcd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_libgc - Win32 Release" -# Name "test_libgc - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/test_libgcmt.dsp b/windows-untested/vc60/test_libgcmt.dsp deleted file mode 100644 index 6f81a34..0000000 --- a/windows-untested/vc60/test_libgcmt.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test_libgcmt" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test_libgcmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test_libgcmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test_libgcmt.mak" CFG="test_libgcmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test_libgcmt - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test_libgcmt - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test_libgcmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Release\test_libgcmt" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "..\..\include" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /FD /c -# SUBTRACT CPP /Fr /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /debug /machine:I386 /release /opt:ref -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "test_libgcmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\bin" -# PROP Intermediate_Dir "..\..\..\obj\Debug\test_libgcmt" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\include" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D "GC_THREADS" /YX /FD /GZ /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /o"..\..\..\bin/test_libgcmtd.bsc" -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /incremental:no /debug /machine:I386 /out:"..\..\..\bin/test_libgcmtd.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test_libgcmt - Win32 Release" -# Name "test_libgcmt - Win32 Debug" -# Begin Source File - -SOURCE=..\..\tests\test.c -# End Source File -# End Target -# End Project diff --git a/windows-untested/vc60/vc60crlf.cmd b/windows-untested/vc60/vc60crlf.cmd deleted file mode 100755 index 28ec536..0000000 --- a/windows-untested/vc60/vc60crlf.cmd +++ /dev/null @@ -1,15 +0,0 @@ address@hidden off -rem This script will convert Unix-style line endings into Windows format. - -for %%P in (*.ds?) do call :fixline %%P -goto :eof - -:fixline address@hidden on -if exist "%~1.new" del "%~1.new" -for /f %%S in (%1) do ( - echo %%S>>"%~1.new" -) -ren %1 "%~1.bak" -ren "%~1.new" %1 -goto :eof diff --git a/windows-untested/vc70/all.vcproj b/windows-untested/vc70/all.vcproj deleted file mode 100644 index 512e9a0..0000000 --- a/windows-untested/vc70/all.vcproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/gc.sln b/windows-untested/vc70/gc.sln deleted file mode 100644 index aaa1be6..0000000 --- a/windows-untested/vc70/gc.sln +++ /dev/null @@ -1,96 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "all", "all.vcproj", "{CED9D953-AC1A-4795-9853-6D60857509EE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gc", "gc.vcproj", "{D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcproj", "{F80C47A7-2B2D-4BA9-BEED-AAFA7541650D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgcmt", "libgcmt.vcproj", "{39802D97-BEF7-499D-8570-294AEA39ED7D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{997208FE-7A7D-435A-945A-C61C57D8070C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_gc", "test_gc.vcproj", "{D1F56655-8C27-4320-9436-2A11729A337B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_gc", "test_leak_gc.vcproj", "{6E545988-1AE7-41FB-A981-D256A84F4C3A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_libgc", "test_leak_libgc.vcproj", "{A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_libgcmt", "test_leak_libgcmt.vcproj", "{92046CBF-2EF9-408D-B997-8445E945D687}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_libgc", "test_libgc.vcproj", "{8CFE55AA-676C-4B5A-B133-390B4BF02AB8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_libgcmt", "test_libgcmt.vcproj", "{8C63DB39-DBF4-49D3-A908-172ADA21753B}" -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - {CED9D953-AC1A-4795-9853-6D60857509EE}.0 = {39802D97-BEF7-499D-8570-294AEA39ED7D} - {CED9D953-AC1A-4795-9853-6D60857509EE}.1 = {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D} - {CED9D953-AC1A-4795-9853-6D60857509EE}.2 = {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA} - {997208FE-7A7D-435A-945A-C61C57D8070C}.0 = {92046CBF-2EF9-408D-B997-8445E945D687} - {997208FE-7A7D-435A-945A-C61C57D8070C}.1 = {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F} - {997208FE-7A7D-435A-945A-C61C57D8070C}.2 = {6E545988-1AE7-41FB-A981-D256A84F4C3A} - {997208FE-7A7D-435A-945A-C61C57D8070C}.3 = {8C63DB39-DBF4-49D3-A908-172ADA21753B} - {997208FE-7A7D-435A-945A-C61C57D8070C}.4 = {8CFE55AA-676C-4B5A-B133-390B4BF02AB8} - {997208FE-7A7D-435A-945A-C61C57D8070C}.5 = {D1F56655-8C27-4320-9436-2A11729A337B} - {D1F56655-8C27-4320-9436-2A11729A337B}.0 = {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA} - {6E545988-1AE7-41FB-A981-D256A84F4C3A}.0 = {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA} - {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}.0 = {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D} - {92046CBF-2EF9-408D-B997-8445E945D687}.0 = {39802D97-BEF7-499D-8570-294AEA39ED7D} - {8CFE55AA-676C-4B5A-B133-390B4BF02AB8}.0 = {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D} - {8C63DB39-DBF4-49D3-A908-172ADA21753B}.0 = {39802D97-BEF7-499D-8570-294AEA39ED7D} - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {CED9D953-AC1A-4795-9853-6D60857509EE}.Debug.ActiveCfg = Debug|Win32 - {CED9D953-AC1A-4795-9853-6D60857509EE}.Debug.Build.0 = Debug|Win32 - {CED9D953-AC1A-4795-9853-6D60857509EE}.Release.ActiveCfg = Release|Win32 - {CED9D953-AC1A-4795-9853-6D60857509EE}.Release.Build.0 = Release|Win32 - {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA}.Debug.ActiveCfg = Debug|Win32 - {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA}.Debug.Build.0 = Debug|Win32 - {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA}.Release.ActiveCfg = Release|Win32 - {D7ADAD9A-14FF-4C93-9BF1-ACD03FB6A2FA}.Release.Build.0 = Release|Win32 - {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D}.Debug.ActiveCfg = Debug|Win32 - {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D}.Debug.Build.0 = Debug|Win32 - {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D}.Release.ActiveCfg = Release|Win32 - {F80C47A7-2B2D-4BA9-BEED-AAFA7541650D}.Release.Build.0 = Release|Win32 - {39802D97-BEF7-499D-8570-294AEA39ED7D}.Debug.ActiveCfg = Debug|Win32 - {39802D97-BEF7-499D-8570-294AEA39ED7D}.Debug.Build.0 = Debug|Win32 - {39802D97-BEF7-499D-8570-294AEA39ED7D}.Release.ActiveCfg = Release|Win32 - {39802D97-BEF7-499D-8570-294AEA39ED7D}.Release.Build.0 = Release|Win32 - {997208FE-7A7D-435A-945A-C61C57D8070C}.Debug.ActiveCfg = Debug|Win32 - {997208FE-7A7D-435A-945A-C61C57D8070C}.Debug.Build.0 = Debug|Win32 - {997208FE-7A7D-435A-945A-C61C57D8070C}.Release.ActiveCfg = Release|Win32 - {997208FE-7A7D-435A-945A-C61C57D8070C}.Release.Build.0 = Release|Win32 - {D1F56655-8C27-4320-9436-2A11729A337B}.Debug.ActiveCfg = Debug|Win32 - {D1F56655-8C27-4320-9436-2A11729A337B}.Debug.Build.0 = Debug|Win32 - {D1F56655-8C27-4320-9436-2A11729A337B}.Release.ActiveCfg = Release|Win32 - {D1F56655-8C27-4320-9436-2A11729A337B}.Release.Build.0 = Release|Win32 - {6E545988-1AE7-41FB-A981-D256A84F4C3A}.Debug.ActiveCfg = Debug|Win32 - {6E545988-1AE7-41FB-A981-D256A84F4C3A}.Debug.Build.0 = Debug|Win32 - {6E545988-1AE7-41FB-A981-D256A84F4C3A}.Release.ActiveCfg = Release|Win32 - {6E545988-1AE7-41FB-A981-D256A84F4C3A}.Release.Build.0 = Release|Win32 - {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}.Debug.ActiveCfg = Debug|Win32 - {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}.Debug.Build.0 = Debug|Win32 - {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}.Release.ActiveCfg = Release|Win32 - {A561AE5C-33FE-4DBC-A4D4-52B7F196D20F}.Release.Build.0 = Release|Win32 - {92046CBF-2EF9-408D-B997-8445E945D687}.Debug.ActiveCfg = Debug|Win32 - {92046CBF-2EF9-408D-B997-8445E945D687}.Debug.Build.0 = Debug|Win32 - {92046CBF-2EF9-408D-B997-8445E945D687}.Release.ActiveCfg = Release|Win32 - {92046CBF-2EF9-408D-B997-8445E945D687}.Release.Build.0 = Release|Win32 - {8CFE55AA-676C-4B5A-B133-390B4BF02AB8}.Debug.ActiveCfg = Debug|Win32 - {8CFE55AA-676C-4B5A-B133-390B4BF02AB8}.Debug.Build.0 = Debug|Win32 - {8CFE55AA-676C-4B5A-B133-390B4BF02AB8}.Release.ActiveCfg = Release|Win32 - {8CFE55AA-676C-4B5A-B133-390B4BF02AB8}.Release.Build.0 = Release|Win32 - {8C63DB39-DBF4-49D3-A908-172ADA21753B}.Debug.ActiveCfg = Debug|Win32 - {8C63DB39-DBF4-49D3-A908-172ADA21753B}.Debug.Build.0 = Debug|Win32 - {8C63DB39-DBF4-49D3-A908-172ADA21753B}.Release.ActiveCfg = Release|Win32 - {8C63DB39-DBF4-49D3-A908-172ADA21753B}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/windows-untested/vc70/gc.vcproj b/windows-untested/vc70/gc.vcproj deleted file mode 100644 index c143e76..0000000 --- a/windows-untested/vc70/gc.vcproj +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/libgc.vcproj b/windows-untested/vc70/libgc.vcproj deleted file mode 100644 index 10deed7..0000000 --- a/windows-untested/vc70/libgc.vcproj +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/libgcmt.vcproj b/windows-untested/vc70/libgcmt.vcproj deleted file mode 100644 index 446180d..0000000 --- a/windows-untested/vc70/libgcmt.vcproj +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test.vcproj b/windows-untested/vc70/test.vcproj deleted file mode 100644 index 4b6170d..0000000 --- a/windows-untested/vc70/test.vcproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_gc.vcproj b/windows-untested/vc70/test_gc.vcproj deleted file mode 100644 index 8802cf6..0000000 --- a/windows-untested/vc70/test_gc.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_leak_gc.vcproj b/windows-untested/vc70/test_leak_gc.vcproj deleted file mode 100644 index 4b12168..0000000 --- a/windows-untested/vc70/test_leak_gc.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_leak_libgc.vcproj b/windows-untested/vc70/test_leak_libgc.vcproj deleted file mode 100644 index 05a1be4..0000000 --- a/windows-untested/vc70/test_leak_libgc.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_leak_libgcmt.vcproj b/windows-untested/vc70/test_leak_libgcmt.vcproj deleted file mode 100644 index 8f4f8bd..0000000 --- a/windows-untested/vc70/test_leak_libgcmt.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_libgc.vcproj b/windows-untested/vc70/test_libgc.vcproj deleted file mode 100644 index 110c396..0000000 --- a/windows-untested/vc70/test_libgc.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc70/test_libgcmt.vcproj b/windows-untested/vc70/test_libgcmt.vcproj deleted file mode 100644 index 1353cdf..0000000 --- a/windows-untested/vc70/test_libgcmt.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/all.vcproj b/windows-untested/vc71/all.vcproj deleted file mode 100644 index 2f4d7ae..0000000 --- a/windows-untested/vc71/all.vcproj +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/gc.sln b/windows-untested/vc71/gc.sln deleted file mode 100644 index fa1acc8..0000000 --- a/windows-untested/vc71/gc.sln +++ /dev/null @@ -1,116 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "all", "all.vcproj", "{684E465A-3944-4BA0-BA8D-52A064B43A5D}" - ProjectSection(ProjectDependencies) = postProject - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} = {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} = {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} - {93622AAF-633A-4D02-B023-674D4CDA266B} = {93622AAF-633A-4D02-B023-674D4CDA266B} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gc", "gc.vcproj", "{93622AAF-633A-4D02-B023-674D4CDA266B}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgc", "libgc.vcproj", "{1C32FB8B-6F91-4190-9F05-CE1E772BB5E0}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgcmt", "libgcmt.vcproj", "{EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{1891ADD8-C39B-494B-B69D-D64F76729E5A}" - ProjectSection(ProjectDependencies) = postProject - {8A595901-33E6-4959-A8E9-6DACC2D57330} = {8A595901-33E6-4959-A8E9-6DACC2D57330} - {EB1D2ECA-926D-4B6E-BF65-B429C713381C} = {EB1D2ECA-926D-4B6E-BF65-B429C713381C} - {500B7CE2-FD16-42C5-B738-1406C13A68B4} = {500B7CE2-FD16-42C5-B738-1406C13A68B4} - {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA} = {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA} - {B0F6C137-5153-48E3-ABED-6C02D3912EDA} = {B0F6C137-5153-48E3-ABED-6C02D3912EDA} - {1911057C-30C3-41CE-AF9E-232AEB37BCD3} = {1911057C-30C3-41CE-AF9E-232AEB37BCD3} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_gc", "test_gc.vcproj", "{1911057C-30C3-41CE-AF9E-232AEB37BCD3}" - ProjectSection(ProjectDependencies) = postProject - {93622AAF-633A-4D02-B023-674D4CDA266B} = {93622AAF-633A-4D02-B023-674D4CDA266B} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_gc", "test_leak_gc.vcproj", "{500B7CE2-FD16-42C5-B738-1406C13A68B4}" - ProjectSection(ProjectDependencies) = postProject - {93622AAF-633A-4D02-B023-674D4CDA266B} = {93622AAF-633A-4D02-B023-674D4CDA266B} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_libgc", "test_leak_libgc.vcproj", "{EB1D2ECA-926D-4B6E-BF65-B429C713381C}" - ProjectSection(ProjectDependencies) = postProject - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} = {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_leak_libgcmt", "test_leak_libgcmt.vcproj", "{8A595901-33E6-4959-A8E9-6DACC2D57330}" - ProjectSection(ProjectDependencies) = postProject - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} = {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_libgc", "test_libgc.vcproj", "{B0F6C137-5153-48E3-ABED-6C02D3912EDA}" - ProjectSection(ProjectDependencies) = postProject - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} = {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_libgcmt", "test_libgcmt.vcproj", "{9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA}" - ProjectSection(ProjectDependencies) = postProject - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} = {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {684E465A-3944-4BA0-BA8D-52A064B43A5D}.Debug.ActiveCfg = Debug|Win32 - {684E465A-3944-4BA0-BA8D-52A064B43A5D}.Debug.Build.0 = Debug|Win32 - {684E465A-3944-4BA0-BA8D-52A064B43A5D}.Release.ActiveCfg = Release|Win32 - {684E465A-3944-4BA0-BA8D-52A064B43A5D}.Release.Build.0 = Release|Win32 - {93622AAF-633A-4D02-B023-674D4CDA266B}.Debug.ActiveCfg = Debug|Win32 - {93622AAF-633A-4D02-B023-674D4CDA266B}.Debug.Build.0 = Debug|Win32 - {93622AAF-633A-4D02-B023-674D4CDA266B}.Release.ActiveCfg = Release|Win32 - {93622AAF-633A-4D02-B023-674D4CDA266B}.Release.Build.0 = Release|Win32 - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0}.Debug.ActiveCfg = Debug|Win32 - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0}.Debug.Build.0 = Debug|Win32 - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0}.Release.ActiveCfg = Release|Win32 - {1C32FB8B-6F91-4190-9F05-CE1E772BB5E0}.Release.Build.0 = Release|Win32 - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16}.Debug.ActiveCfg = Debug|Win32 - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16}.Debug.Build.0 = Debug|Win32 - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16}.Release.ActiveCfg = Release|Win32 - {EDA8C8B6-2538-4F1E-9C9A-F5C4FAF1EC16}.Release.Build.0 = Release|Win32 - {1891ADD8-C39B-494B-B69D-D64F76729E5A}.Debug.ActiveCfg = Debug|Win32 - {1891ADD8-C39B-494B-B69D-D64F76729E5A}.Debug.Build.0 = Debug|Win32 - {1891ADD8-C39B-494B-B69D-D64F76729E5A}.Release.ActiveCfg = Release|Win32 - {1891ADD8-C39B-494B-B69D-D64F76729E5A}.Release.Build.0 = Release|Win32 - {1911057C-30C3-41CE-AF9E-232AEB37BCD3}.Debug.ActiveCfg = Debug|Win32 - {1911057C-30C3-41CE-AF9E-232AEB37BCD3}.Debug.Build.0 = Debug|Win32 - {1911057C-30C3-41CE-AF9E-232AEB37BCD3}.Release.ActiveCfg = Release|Win32 - {1911057C-30C3-41CE-AF9E-232AEB37BCD3}.Release.Build.0 = Release|Win32 - {500B7CE2-FD16-42C5-B738-1406C13A68B4}.Debug.ActiveCfg = Debug|Win32 - {500B7CE2-FD16-42C5-B738-1406C13A68B4}.Debug.Build.0 = Debug|Win32 - {500B7CE2-FD16-42C5-B738-1406C13A68B4}.Release.ActiveCfg = Release|Win32 - {500B7CE2-FD16-42C5-B738-1406C13A68B4}.Release.Build.0 = Release|Win32 - {EB1D2ECA-926D-4B6E-BF65-B429C713381C}.Debug.ActiveCfg = Debug|Win32 - {EB1D2ECA-926D-4B6E-BF65-B429C713381C}.Debug.Build.0 = Debug|Win32 - {EB1D2ECA-926D-4B6E-BF65-B429C713381C}.Release.ActiveCfg = Release|Win32 - {EB1D2ECA-926D-4B6E-BF65-B429C713381C}.Release.Build.0 = Release|Win32 - {8A595901-33E6-4959-A8E9-6DACC2D57330}.Debug.ActiveCfg = Debug|Win32 - {8A595901-33E6-4959-A8E9-6DACC2D57330}.Debug.Build.0 = Debug|Win32 - {8A595901-33E6-4959-A8E9-6DACC2D57330}.Release.ActiveCfg = Release|Win32 - {8A595901-33E6-4959-A8E9-6DACC2D57330}.Release.Build.0 = Release|Win32 - {B0F6C137-5153-48E3-ABED-6C02D3912EDA}.Debug.ActiveCfg = Debug|Win32 - {B0F6C137-5153-48E3-ABED-6C02D3912EDA}.Debug.Build.0 = Debug|Win32 - {B0F6C137-5153-48E3-ABED-6C02D3912EDA}.Release.ActiveCfg = Release|Win32 - {B0F6C137-5153-48E3-ABED-6C02D3912EDA}.Release.Build.0 = Release|Win32 - {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA}.Debug.ActiveCfg = Debug|Win32 - {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA}.Debug.Build.0 = Debug|Win32 - {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA}.Release.ActiveCfg = Release|Win32 - {9551B5E4-94A5-4B04-ACA1-9FB28DFD28AA}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/windows-untested/vc71/gc.vcproj b/windows-untested/vc71/gc.vcproj deleted file mode 100644 index d33e9a3..0000000 --- a/windows-untested/vc71/gc.vcproj +++ /dev/null @@ -1,869 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/libgc.vcproj b/windows-untested/vc71/libgc.vcproj deleted file mode 100644 index 6c5bfdc..0000000 --- a/windows-untested/vc71/libgc.vcproj +++ /dev/null @@ -1,776 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/libgcmt.vcproj b/windows-untested/vc71/libgcmt.vcproj deleted file mode 100644 index 96c526b..0000000 --- a/windows-untested/vc71/libgcmt.vcproj +++ /dev/null @@ -1,743 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test.vcproj b/windows-untested/vc71/test.vcproj deleted file mode 100644 index 4168197..0000000 --- a/windows-untested/vc71/test.vcproj +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_gc.vcproj b/windows-untested/vc71/test_gc.vcproj deleted file mode 100644 index d477d70..0000000 --- a/windows-untested/vc71/test_gc.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_leak_gc.vcproj b/windows-untested/vc71/test_leak_gc.vcproj deleted file mode 100644 index b6c980c..0000000 --- a/windows-untested/vc71/test_leak_gc.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_leak_libgc.vcproj b/windows-untested/vc71/test_leak_libgc.vcproj deleted file mode 100644 index 0486f1e..0000000 --- a/windows-untested/vc71/test_leak_libgc.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_leak_libgcmt.vcproj b/windows-untested/vc71/test_leak_libgcmt.vcproj deleted file mode 100644 index 297464d..0000000 --- a/windows-untested/vc71/test_leak_libgcmt.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_libgc.vcproj b/windows-untested/vc71/test_libgc.vcproj deleted file mode 100644 index 93d35f4..0000000 --- a/windows-untested/vc71/test_libgc.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows-untested/vc71/test_libgcmt.vcproj b/windows-untested/vc71/test_libgcmt.vcproj deleted file mode 100644 index 276aed5..0000000 --- a/windows-untested/vc71/test_libgcmt.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 1.7.7.3