diff --git a/mps/Makefile.in b/mps/Makefile.in index b31d1fa4092..17191e574ea 100644 --- a/mps/Makefile.in +++ b/mps/Makefile.in @@ -1,7 +1,7 @@ # Makefile.in -- source for autoconf Makefile # # $Id$ -# Copyright (C) 2012 Ravenbrook Limited. See end of file for license. +# Copyright (C) 2012-2013 Ravenbrook Limited. See end of file for license. # # YOU DON'T NEED AUTOCONF TO BUILD THE MPS # This is just here for people who want or expect a configure script. @@ -32,7 +32,7 @@ install-make-build: make-install-dirs build-via-make $(INSTALL_DATA) code/mps*.h $(prefix)/include/ $(INSTALL_DATA) code/$(MPS_TARGET_NAME)/cool/mps.a $(prefix)/lib/libmps-debug.a $(INSTALL_DATA) code/$(MPS_TARGET_NAME)/hot/mps.a $(prefix)/lib/libmps.a - for PROGRAM in $(EXTRA_TARGETS); do $(INSTALL_PROGRAM) code/$(MPS_TARGET_NAME)/hot/$$PROGRAM $(prefix)/bin/$$PROGRAM; done + $(INSTALL_PROGRAM) $(addprefix code/$(MPS_TARGET_NAME)/hot/Release/,$(EXTRA_TARGETS)) $(prefix)/bin build-via-xcode: $(XCODEBUILD) -config Release @@ -46,7 +46,7 @@ install-xcode-build: make-install-dirs build-via-xcode $(INSTALL_DATA) code/mps*.h $(prefix)/include/ $(INSTALL_DATA) code/xc/Debug/libmps.a $(prefix)/lib/libmps-debug.a $(INSTALL_DATA) code/xc/Release/libmps.a $(prefix)/lib/libmps.a - for PROGRAM in $(EXTRA_TARGETS); do $(INSTALL_PROGRAM) code/xc/Release/$$PROGRAM $(prefix)/bin/$$PROGRAM; done + $(INSTALL_PROGRAM) $(addprefix code/xc/Release/,$(EXTRA_TARGETS)) $(prefix)/bin Makefile: Makefile.in config.status ./config.status Makefile diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c index f05ce46117b..bd6ac70ed9a 100644 --- a/mps/code/arenavm.c +++ b/mps/code/arenavm.c @@ -1,7 +1,7 @@ /* arenavm.c: VIRTUAL MEMORY ARENA CLASS * * $Id$ - * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. + * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license. * * * DESIGN @@ -90,8 +90,8 @@ typedef struct VMArenaStruct { /* VM arena structure */ /* Forward declarations */ static void sparePagesPurge(VMArena vmArena); -static ArenaClass VMArenaClassGet(void); -static ArenaClass VMNZArenaClassGet(void); +extern ArenaClass VMArenaClassGet(void); +extern ArenaClass VMNZArenaClassGet(void); static void VMCompact(Arena arena, Trace trace); @@ -1849,7 +1849,7 @@ mps_arena_class_t mps_arena_class_vmnz(void) /* C. COPYRIGHT AND LICENSE * - * Copyright (C) 2001-2002 Ravenbrook Limited . + * Copyright (C) 2001-2013 Ravenbrook Limited . * All rights reserved. This is an open source license. Contact * Ravenbrook for commercial licensing options. * diff --git a/mps/code/clock.h b/mps/code/clock.h index b9205f2e9be..eb28de96612 100644 --- a/mps/code/clock.h +++ b/mps/code/clock.h @@ -1,6 +1,6 @@ /* clock.h -- Fast clocks and timers * - * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. + * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license. * $Id$ */ @@ -21,17 +21,6 @@ * RB 2012-09-11 */ -/* Clang provides a cross-platform builtin for a fast timer, but it - was not available on Mac OS X 10.8 until the release of XCode 4.6. - */ -#if defined(MPS_BUILD_LL) - -#if __has_builtin(__builtin_readcyclecounter) -/* TODO: use this for EVENT_CLOCK. See job003411. */ -#endif /* __has_builtin(__builtin_readcyclecounter) */ - -#endif - /* Microsoft C provides an intrinsic for the Intel rdtsc instruction. */ #if (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && defined(MPS_BUILD_MV) @@ -104,9 +93,28 @@ typedef union EventClockUnion { (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && \ (defined(MPS_BUILD_GC) || defined(MPS_BUILD_LL)) -/* Use __extension__ to enable use of a 64-bit type on 32-bit pedantic GCC */ +/* Use __extension__ to enable use of a 64-bit type on 32-bit pedantic + GCC or Clang. */ __extension__ typedef unsigned long long EventClock; +/* Clang provides a cross-platform builtin for a fast timer, but it + was not available on Mac OS X 10.8 until the release of XCode 4.6. + */ +#if defined(MPS_BUILD_LL) + +#if __has_builtin(__builtin_readcyclecounter) + +#define EVENT_CLOCK(lvalue) \ + BEGIN \ + (lvalue) = __builtin_readcyclecounter(); \ + END + +#endif /* __has_builtin(__builtin_readcyclecounter) */ + +#endif /* Clang */ + +#ifndef EVENT_CLOCK + #define EVENT_CLOCK(lvalue) \ BEGIN \ unsigned _l, _h; \ @@ -114,6 +122,8 @@ __extension__ typedef unsigned long long EventClock; (lvalue) = ((EventClock)_h << 32) | _l; \ END +#endif + /* The __extension__ keyword doesn't work on printf formats, so we concatenate two 32-bit hex numbers to print the 64-bit value. */ #define EVENT_CLOCK_PRINT(stream, clock) \ @@ -150,7 +160,7 @@ typedef mps_clock_t EventClock; /* C. COPYRIGHT AND LICENSE * - * Copyright (C) 2001-2002 Ravenbrook Limited . + * Copyright (C) 2001-2013 Ravenbrook Limited . * All rights reserved. This is an open source license. Contact * Ravenbrook for commercial licensing options. * diff --git a/mps/code/gcovfmt.py b/mps/code/gcovfmt.py new file mode 100755 index 00000000000..ac6e9c73fe6 --- /dev/null +++ b/mps/code/gcovfmt.py @@ -0,0 +1,109 @@ +#!/usr/bin/python +# +# $Id$ +# Copyright (c) 2013 Ravenbrook Limited. See end of file for license. +# +# This program takes the output of gcov on standard input and writes a +# human-readable table with a summary, to the file named on the +# command line (or standard output if none is given). The summary line +# is always written to standard output so that in the context of "make +# test" where the detailed test output is being directed to a test log +# file, the coverage summary can still be presented. +# +# gcov output looks like this: +# +# File '/project/mps/master/code/mpsi.c' +# Lines executed:85.12% of 921 +# /project/mps/master/code/mpsi.c:creating 'mpsi.c.gcov' +# +# Note that we select only the .c files (there may also be output for +# system files like signal.h with inline function definitions, and we +# are not interested in covering them). The MPS has no inline function +# definitions in headers. + +from sys import argv, stdin, stdout +from re import match + +def coverage(): + """For each .c file with coverage data, generate a triple (percent + coverage, file name, number of lines). + + """ + for line in stdin: + m1 = match(r"File '.*/([^/]+\.c)'$", line) + if not m1: + continue + m2 = match(r"Lines executed:(\d[0-9.]*)% of (\d+)$", next(stdin)) + if m2: + yield float(m2.group(1)), m1.group(1), int(m2.group(2)) + +def main(): + if len(argv) >= 2: + out = open(argv[1], 'a') + else: + out = stdout + fmt1 = "{:<16s} {:<7s} {:<7s} {:<7s}\n" + fmt2 = "{:<16s} {:7d} {:7d} {:7.2f}\n" + underlines = "---------------- ------- ------- -------".split() + out.write(fmt1.format(*"File Lines Covered Percent".split())) + out.write(fmt1.format(*underlines)) + total_lines, total_covered = 0, 0 + for percent, file, lines in sorted(coverage()): + covered = int(round(lines * percent / 100)) + total_lines += lines + total_covered += covered + out.write(fmt2.format(file, lines, covered, percent)) + out.write(fmt1.format(*underlines)) + if total_lines == 0: + total_percent = 100.0 + else: + total_percent = 100.0 * total_covered / total_lines + summary = fmt2.format("COVERAGE TOTAL", total_lines, total_covered, + total_percent) + out.write(summary) + if out != stdout: + stdout.write(summary) + +if __name__ == '__main__': + main() + + +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2013 Ravenbrook Limited . +# All rights reserved. This is an open source license. Contact +# Ravenbrook for commercial licensing options. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Redistributions in any form must be accompanied by information on how +# to obtain complete source code for this software and any accompanying +# software that uses this software. The source code must either be +# included in the distribution or be available for no more than the cost +# of distribution plus a nominal fee, and must be freely redistributable +# under reasonable conditions. For an executable file, complete source +# code means the source code for all modules it contains. It does not +# include source code for modules or files that typically accompany the +# major components of the operating system on which the executable file +# runs. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mps/code/mps.xcodeproj/project.pbxproj b/mps/code/mps.xcodeproj/project.pbxproj index f6eade11025..3c9183c7be9 100644 --- a/mps/code/mps.xcodeproj/project.pbxproj +++ b/mps/code/mps.xcodeproj/project.pbxproj @@ -2453,7 +2453,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# bttest & teletest cannot be run unattended\n# mv2test cannot be run because MV2 is broken\n# amcssth doesn't work on OS X (job001621)\nTESTCASES=\"abqtest amcss amcsshe amsss amssshe apss arenacv awlut \\\n awluthe btcv cbstest finalcv finaltest lockcov locv \\\n messtest mpmss mpsicv poolncv qs sacss segsmss steptest \\\n walkt0\"\nOUTPUT=$(mktemp /tmp/mps.log.XXXXXX)\necho \"Logging test output to $OUTPUT\"\nfor TEST in $TESTCASES; do\n TESTCASE=$TARGET_BUILD_DIR/$TEST\n printf \"\\n\\n-- Running $TESTCASE at $(date) --\\n\" >> $OUTPUT\n echo \"Running $TESTCASE\"\n $TESTCASE >> $OUTPUT || exit 1\ndone"; + shellScript = "# bttest & teletest cannot be run unattended\n# mv2test cannot be run because MV2 is broken\n# amcssth doesn't work on OS X (job001621)\nTESTCASES=\"abqtest amcss amcsshe amsss amssshe apss arenacv awlut \\\n awluthe btcv cbstest finalcv finaltest lockcov locv \\\n messtest mpmss mpsicv poolncv qs sacss segsmss steptest \\\n walkt0\"\nOUTPUT=$(mktemp /tmp/mps.log.XXXXXX)\necho \"Logging test output to $OUTPUT\"\nfor TEST in $TESTCASES; do\n TESTCASE=$TARGET_BUILD_DIR/$TEST\n printf \"\\n\\n-- Running $TESTCASE at $(date) --\\n\" >> $OUTPUT\n echo \"Running $TEST ($CONFIGURATION)\"\n $TESTCASE >> $OUTPUT || exit 1\ndone\necho \"All tests pass.\"\n\n# Coverage\nif [ \"$CONFIGURATION\" == \"Debug\" ]; then\n (cd xc/$PROJECT.build/$CONFIGURATION/$PROJECT.build/Objects-normal/x86_64 &&\n gcov mps.c 2>>$OUTPUT) |\n python gcovfmt.py $OUTPUT\nfi"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -3178,6 +3178,8 @@ 22FA177216E8D6FC0098B23F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = amcssth; }; name = Debug; @@ -3185,6 +3187,8 @@ 22FA177316E8D6FC0098B23F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = amcssth; }; name = Release; @@ -3192,6 +3196,8 @@ 22FA177416E8D6FC0098B23F /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = amcssth; }; name = WE; @@ -3200,6 +3206,8 @@ isa = XCBuildConfiguration; buildSettings = { GCC_C_LANGUAGE_STANDARD = c99; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3223,6 +3231,8 @@ 2D604B9F16514B1A003AAF46 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3244,6 +3254,8 @@ 3104AFBA156D357B000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3251,6 +3263,8 @@ 3104AFBB156D357B000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3258,6 +3272,8 @@ 3104AFD0156D35E2000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3265,6 +3281,8 @@ 3104AFD1156D35E2000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3272,6 +3290,8 @@ 3104AFE5156D3682000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3279,6 +3299,8 @@ 3104AFE6156D3682000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3302,6 +3324,8 @@ 3104B011156D38F3000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3309,6 +3333,8 @@ 3104B012156D38F3000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3316,6 +3342,8 @@ 3104B02A156D39D4000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3323,6 +3351,8 @@ 3104B02B156D39D4000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3330,6 +3360,8 @@ 3104B045156D3AD8000A585A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3337,6 +3369,8 @@ 3104B046156D3AD8000A585A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3344,6 +3378,8 @@ 3114A597156E913C001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3351,6 +3387,8 @@ 3114A598156E913C001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3358,6 +3396,8 @@ 3114A5AF156E92C0001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3365,6 +3405,8 @@ 3114A5B0156E92C0001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3372,6 +3414,8 @@ 3114A5C5156E9315001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3379,6 +3423,8 @@ 3114A5C6156E9315001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3386,6 +3432,8 @@ 3114A5DE156E93A0001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3393,6 +3441,8 @@ 3114A5DF156E93A0001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3400,6 +3450,8 @@ 3114A5F7156E93E7001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3407,6 +3459,8 @@ 3114A5F8156E93E7001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3414,6 +3468,8 @@ 3114A60D156E9430001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3421,6 +3477,8 @@ 3114A60E156E9430001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3428,6 +3486,8 @@ 3114A624156E9485001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3435,6 +3495,8 @@ 3114A625156E9485001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3442,6 +3504,8 @@ 3114A63B156E94DB001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3449,6 +3513,8 @@ 3114A63C156E94DB001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3456,6 +3522,8 @@ 3114A654156E9596001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3463,6 +3531,8 @@ 3114A655156E9596001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3470,6 +3540,8 @@ 3114A66A156E95D9001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3477,6 +3549,8 @@ 3114A66B156E95D9001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3484,6 +3558,8 @@ 3114A684156E9669001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3491,6 +3567,8 @@ 3114A685156E9669001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3498,6 +3576,8 @@ 3114A69D156E971B001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3505,6 +3585,8 @@ 3114A69E156E971B001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3512,6 +3594,8 @@ 3114A6B4156E9759001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3519,6 +3603,8 @@ 3114A6B5156E9759001E0AA3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3526,6 +3612,8 @@ 3114A6CE156E9815001E0AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3540,6 +3628,8 @@ 3124CAC0156BE3EC00753214 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3547,6 +3637,8 @@ 3124CAC1156BE3EC00753214 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3554,6 +3646,8 @@ 3124CADC156BE64A00753214 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3561,6 +3655,8 @@ 3124CADD156BE64A00753214 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3568,6 +3664,8 @@ 3124CAF3156BE7F300753214 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3575,6 +3673,8 @@ 3124CAF4156BE7F300753214 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3654,6 +3754,8 @@ 318387EE15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3661,6 +3763,8 @@ 318387EF15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3668,6 +3772,8 @@ 318387F015DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3675,6 +3781,8 @@ 318387F115DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3682,6 +3790,8 @@ 318387F215DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3689,6 +3799,8 @@ 318387F315DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3696,6 +3808,8 @@ 318387F415DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3703,6 +3817,8 @@ 318387F515DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3710,6 +3826,8 @@ 318387F615DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3717,6 +3835,8 @@ 318387F715DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3724,6 +3844,8 @@ 318387F815DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3731,6 +3853,8 @@ 318387F915DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3738,6 +3862,8 @@ 318387FA15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3745,6 +3871,8 @@ 318387FB15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3752,6 +3880,8 @@ 318387FC15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3759,6 +3889,8 @@ 318387FD15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3766,6 +3898,8 @@ 318387FE15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3773,6 +3907,8 @@ 318387FF15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3780,6 +3916,8 @@ 3183880015DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3787,6 +3925,8 @@ 3183880115DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3794,6 +3934,8 @@ 3183880215DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3801,6 +3943,8 @@ 3183880315DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3808,6 +3952,8 @@ 3183880415DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3815,6 +3961,8 @@ 3183880515DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3822,6 +3970,8 @@ 3183880615DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3829,6 +3979,8 @@ 3183880715DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3836,6 +3988,8 @@ 3183880815DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3843,6 +3997,8 @@ 3183880915DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3850,6 +4006,8 @@ 3183880A15DC30CC008E4EA0 /* WE */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = WE; @@ -3864,6 +4022,8 @@ 31D60015156D3CB200337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3871,6 +4031,8 @@ 31D60016156D3CB200337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3878,6 +4040,8 @@ 31D6002F156D3D3F00337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3885,6 +4049,8 @@ 31D60030156D3D3F00337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3892,6 +4058,8 @@ 31D60046156D3EC700337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3899,6 +4067,8 @@ 31D60047156D3EC700337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3906,6 +4076,8 @@ 31D6005C156D3F3500337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3913,6 +4085,8 @@ 31D6005D156D3F3500337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3920,6 +4094,8 @@ 31D60079156D3FBC00337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3927,6 +4103,8 @@ 31D6007A156D3FBC00337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -3934,6 +4112,8 @@ 31D60094156D402900337B26 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -3941,6 +4121,8 @@ 31D60095156D402900337B26 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -4060,6 +4242,8 @@ ALWAYS_SEARCH_USER_PATHS = NO; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -4077,6 +4261,8 @@ 31EEAC6D156AB52600714D05 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -4084,6 +4270,8 @@ 31EEAC6E156AB52600714D05 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/mps/code/poolamc.c b/mps/code/poolamc.c index 09f39903437..823455abbd2 100644 --- a/mps/code/poolamc.c +++ b/mps/code/poolamc.c @@ -29,9 +29,9 @@ static Bool amcSegHasNailboard(Seg seg); static Bool AMCCheck(AMC amc); static Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO); static Res AMCHeaderFix(Pool pool, ScanState ss, Seg seg, Ref *refIO); -static PoolClass AMCPoolClassGet(void); -static BufferClass amcBufClassGet(void); -static SegClass amcSegClassGet(void); +extern PoolClass AMCPoolClassGet(void); +extern BufferClass amcBufClassGet(void); +extern SegClass amcSegClassGet(void); /* amcGenStruct -- pool AMC generation descriptor */ @@ -1768,7 +1768,7 @@ fixInPlace: /* see .Nailboard.emergency */ * * See . */ -Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO) +static Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO) { Arena arena; AMC amc; diff --git a/mps/code/poolawl.c b/mps/code/poolawl.c index 42a47ea501a..68675722aa8 100644 --- a/mps/code/poolawl.c +++ b/mps/code/poolawl.c @@ -132,7 +132,7 @@ typedef struct AWLSegStruct { #define AWLSeg2Seg(awlseg) ((Seg)(awlseg)) -static SegClass AWLSegClassGet(void); +extern SegClass AWLSegClassGet(void); static Bool AWLSegCheck(AWLSeg awlseg) diff --git a/mps/code/poolmrg.c b/mps/code/poolmrg.c index b7cf9794361..ed8737f1d0a 100644 --- a/mps/code/poolmrg.c +++ b/mps/code/poolmrg.c @@ -168,8 +168,8 @@ typedef struct MRGRefSegStruct { /* forward declarations */ -static SegClass MRGLinkSegClassGet(void); -static SegClass MRGRefSegClassGet(void); +extern SegClass MRGLinkSegClassGet(void); +extern SegClass MRGRefSegClassGet(void); /* MRGLinkSegCheck -- check a link segment diff --git a/mps/code/poolsnc.c b/mps/code/poolsnc.c index 358548b2e07..85e822bb396 100644 --- a/mps/code/poolsnc.c +++ b/mps/code/poolsnc.c @@ -1,7 +1,7 @@ /* poolsnc.c: STACK NO CHECKING POOL CLASS * * $Id$ - * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. + * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license. * * DESIGN * @@ -47,8 +47,8 @@ typedef struct SNCStruct { /* Forward declarations */ -static SegClass SNCSegClassGet(void); -static BufferClass SNCBufClassGet(void); +extern SegClass SNCSegClassGet(void); +extern BufferClass SNCBufClassGet(void); static Bool SNCCheck(SNC snc); static void sncPopPartialSegChain(SNC snc, Buffer buf, Seg upTo); @@ -700,7 +700,7 @@ static Bool SNCCheck(SNC snc) /* C. COPYRIGHT AND LICENSE * - * Copyright (C) 2001-2002 Ravenbrook Limited . + * Copyright (C) 2001-2013 Ravenbrook Limited . * All rights reserved. This is an open source license. Contact * Ravenbrook for commercial licensing options. * diff --git a/mps/code/testlib.c b/mps/code/testlib.c index be7284ea3fa..dae807b59fb 100644 --- a/mps/code/testlib.c +++ b/mps/code/testlib.c @@ -8,6 +8,7 @@ */ #include "testlib.h" +#include "clock.h" /* for EVENT_CLOCK */ #include "mps.h" #include "misc.h" /* for NOOP */ #include @@ -246,17 +247,15 @@ mps_addr_t rnd_addr(void) * that's impossible. * (2008..2010-03-22) * - * 3. v3 states: when autogenerated from time(), the published state - * (printf'd) is that *after* the 10 rnds. Therefore you can get - * the state easily, store it, re-use it, etc. - * (New from 2010-03-22, changelist 170093) + * 3. v3 states: the published state is the state *after* all + * initialization is complete. Therefore you can easily store and + * re-use the published state. (From 2010-03-22, changelist + * 170093). */ void randomize(int argc, char *argv[]) { - int i; int n; - unsigned long seedt; unsigned long seed0; if (argc > 1) { @@ -266,29 +265,11 @@ void randomize(int argc, char *argv[]) argv[0], seed0); rnd_state_set(seed0); } else { - /* time_t uses an arbitrary encoding, but hopefully the low order */ - /* 31 bits will have at least one bit changed from run to run. */ - seedt = 1 + (unsigned long)time(NULL) % (R_m - 1); - - /* The value returned by time() on some OSs may simply be a - * count of seconds: therefore successive runs may start with - * nearby seeds, possibly differing only by 1. So the first value - * returned by rnd() may differ by only 48271. It is conceivable - * that some tests might be able to 'spot' this pattern (for - * example: by using the first rnd() value, mod 100M and rounded - * to multiple of 1024K, as arena size in bytes). - * - * So to mix it up a bit, we do a few iterations now. How many? - * Very roughly, 48271^2 is of the same order as 2^31, so two - * iterations would make the characteristic difference similar to - * the period. Hey, let's go wild and do 10. - */ - rnd_state_set(seedt); - for(i = 0; i < 10; i += 1) { - (void)rnd(); - } - - seed0 = rnd_state(); + /* Initialize seed based on seconds since epoch and on processor + * cycle count. */ + EventClock t2; + EVENT_CLOCK(t2); + seed0 = 1 + ((unsigned long)time(NULL) + (unsigned long)t2) % (R_m - 1); printf("%s: randomize(): choosing initial state (v3): %lu.\n", argv[0], seed0); rnd_state_set(seed0); diff --git a/mps/design/config.txt b/mps/design/config.txt index ab640a9f205..0cfc86919f7 100644 --- a/mps/design/config.txt +++ b/mps/design/config.txt @@ -275,8 +275,6 @@ Publishing division of Harlequin. Implementation -------------- -[ Now in impl.h.config, may symbols out of date. GavinM 1997-08-07 ] - _`.impl`: The two implementation files `config.h`_ and `mpstd.h`_ can be seen as preprocessor programs which "accept" build parameters and "emit" configuration parameters (`.fig.impl`_). The build parameters are diff --git a/mps/manual/source/pool/intro.rst b/mps/manual/source/pool/intro.rst index 1d0b7cec744..2346e1637bd 100644 --- a/mps/manual/source/pool/intro.rst +++ b/mps/manual/source/pool/intro.rst @@ -51,15 +51,15 @@ yes no none :ref:`pool-lo` yes no exact :ref:`pool-ams` yes no ambiguous nothing suitable yes no weak nothing suitable -no *any* none :ref:`pool-mvt` -no *any* exact :ref:`pool-mvt` [1]_ -no *any* ambiguous :ref:`pool-mvt` [1]_ -no *any* weak :ref:`pool-mvt` [1]_ +no *any* none :ref:`pool-mvff` +no *any* exact :ref:`pool-mvff` [1]_ +no *any* ambiguous :ref:`pool-mvff` [1]_ +no *any* weak :ref:`pool-mvff` [1]_ ========== ====================== =========== ==================================== .. note:: - .. [1] :ref:`pool-mvt` doesn't scan for references, but you can + .. [1] :ref:`pool-mvff` doesn't scan for references, but you can work around this by registering your blocks as :term:`roots` (with the appropriate :term:`rank`) just after they are allocated, and deregistering them just diff --git a/mps/manual/source/pool/mv.rst b/mps/manual/source/pool/mv.rst index e71153d5c75..abce8f405dc 100644 --- a/mps/manual/source/pool/mv.rst +++ b/mps/manual/source/pool/mv.rst @@ -9,7 +9,7 @@ MV (Manual Variable) .. deprecated:: starting with version 1.111. - :ref:`pool-mvt` or :ref:`pool-mvff` should be used instead. + :ref:`pool-mvff` should be used instead. **MV** is a general-purpose :term:`manually managed ` :term:`pool class` that manages :term:`blocks` of diff --git a/mps/manual/source/topic/scanning.rst b/mps/manual/source/topic/scanning.rst index b7aed248ee7..cc1c8ec8a7f 100644 --- a/mps/manual/source/topic/scanning.rst +++ b/mps/manual/source/topic/scanning.rst @@ -229,7 +229,7 @@ code. The MPS provides a convenience macro :c:func:`MPS_FIX12` for the common case of calling :c:func:`MPS_FIX1` and then immediately calling :c:func:`MPS_FIX2` if the reference is "of interest". -.. warning:: +.. note:: Some compilers generate better code if you use :c:func:`MPS_FIX12`, and some if you use :c:func:`MPS_FIX1` and diff --git a/mps/procedure/version-create/index.html b/mps/procedure/version-create/index.html index d1405d204e3..3868585a042 100644 --- a/mps/procedure/version-create/index.html +++ b/mps/procedure/version-create/index.html @@ -6,7 +6,7 @@ -Memory Pool System Version Create Procedure +Memory Pool System Version Creation Procedure @@ -27,7 +27,7 @@
-

Memory Pool System Version Create Procedure

+

Memory Pool System Version Creation Procedure

Richard Kistruck, @@ -49,98 +49,89 @@

2. Preamble

-

Do I need this procedure?

+

2.1. Do I need this procedure?

-

You might not need to create a new version. An alternative is to create a further 'point release' on the existing version. Refer to PQTCM when deciding. (Summary: am I changing the specification?).

+

You might not need to create a new version. An alternative is to create a further ‘point release’ on the existing version. Refer to PQTCM when deciding. (Summary: am I changing the specification?).

-

What is a version?

+

2.2. What is a version?

-

A version is a 'clone' of all the master source files, that then has its own evolution. A Version has these parts:

+

A version is a ‘clone’ of all the master source files, that then has its own evolution. A version has these parts:

+ +
    + +
  1. A version name, consisting of a major version number A and a minor version number BBB.

  2. -
    • -Perforce branch, defining the mapping used to integrate from master to version. By convention, the name of the branch is "mps/version/A.BBB": note that we make the branch name exactly match the pathname of that version's sub-tree. For example: -
      
      -  $ p4 branch -o mps/version/1.105
      -  ...
      -      //info.ravenbrook.com/project/mps/master/... //info.ravenbrook.com/project/mps/version/1.105/...
      -  ...
      +

      A Perforce branch specification that defines the mapping used between the master sources and the sources on the version branch. By convention, the name of the branch is mps/version/A.BBB: note that we make the branch name exactly match the pathname of that version's sub-tree. For example:

      +
      $ p4 branch -o mps/version/1.105
      +Branch:	mps/version/1.105
      +
      +Description:
      +	Branching master sources for version 1.105.
      +
      +View:
      +	//info.ravenbrook.com/project/mps/master/... //info.ravenbrook.com/project/mps/version/1.105/...
       
    • -
    • Cloned (integrated) and submitted files, in the "version/A.BBB/..." sub-tree. Usually this is a clone of the entire "master" subtree and all its files. These were created in a single change with "p4 integrate -b <branchspec>". This initial integrate is what populates the version branch with files; before that it was empty. For each of these files, Perforce reports the first action as "branch". Some files may then be further modified.
    • +
    • Cloned (integrated) and submitted files, in the version/A.BBB/... sub-tree. Usually this is a clone of the entire master/... subtree and all its files. These were created in a single change by running p4 integrate -b mps/version/A.BBB. This initial integrate is what populates the version branch with files; before that it was empty. For each of these files, Perforce reports the first action as “branch”. Some files may then be further modified.

    • -
    • Origin: The point in time that the initial integrate was performed, expressed as its changelevel minus one, defines the "Origin" of the version. The Origin is the last change on the master sources that also made it into the version sources by virtue of the initial integrate command.
    • +
    • Origin: The point in time that the initial integrate was performed, expressed as its changelevel minus one, defines the “Origin” of the version. This is the last change on the master sources that also made it into the version sources by virtue of the initial integrate command.

    • -
    • Entry in the table at http://info.ravenbrook.com/project/mps/version/. -
    • -
    +
  3. Entry in the table at //info.ravenbrook.com/project/mps/version/.

  4. + +

3. Procedure: How to make a new version

-

-0. Some files contain an MPS version-name. What version-name do the *master* -copies of these files contain? It depends. Some contain the pseudo-version-name -"master": you will leave these files unchanged on master, and only update them -on the version branch (see step 6 below). Others, even in master, refer to the -expected next version-name: you should update these files before making the -branch. Make these files contain the expected new version-name, and/or -information pertinent to the new version: master/readme.txt -master/code/version.c master/code/w3build.bat -(check the "Setup" section of -procedure/release-build for the full list of these files) Submit these files -before you continue.

+
    -

    -1. Make the branch: p4 branch mps/version/A.BBB Description: Branching master -sources for version A.BBB. Always the whole of master: -

    -

    //info.ravenbrook.com/project/mps/master/... //info.ravenbrook.com/project/mps/version/A.BBB/...

    +
  1. Consider each deprecated feature (by grepping the manual sources for deprecated:: sections) and decide whether it needs to be removed from the version you are about to make (and all subsequent versions). Remove features from the master sources before making the version branch.

  2. -

    -2. Make sure you have no unsubmitted files, and then:

    -

    p4 integrate -b mps/version/A.BBB

    +
  3. Choose the version number for the new version. Typically this has the same major version number as the previous version, and the next minor version number. Thus 1.104 is followed by 1.105. [TODO: when does the major version number change?]

  4. -

    -3. p4 submit

    +
  5. Make sure you have the new version branch mapped to your client workspace: run p4 client and check that there is a mapping for //info.ravenbrook.com/project/mps/version/A.BBB/....

  6. -

    -4. Determine the Origin of the new version: do p4 changes -m 5 on the master, -and note the latest change that was in before the integrate. -

    +
  7. In the master sources, edit code/version.c and change MPS_RELEASE to refer to the version you are about to create (using .0 for the release), and update MPSCopyrightNotice to include the current year. Submit this file to Perforce. [Note that MPS_RELEASE in this file is used to populate the release number for the Sphinx documentation: see manual/source/conf.py.]

  8. -

    -[Note: it's better to do it this way -- do the integrate from the _implicit_ -tip of the master, and then check back to see what happened -- because it's -hard to get wrong. Also, then the integrate has the changelevel origin+1. -Clashes with master submits could theoretically occur, and could be avoided by -determining the origin first and specifying it to the initial integrate, but in -practice this never happens. RHSK] -

    +
  9. Determine the origin of the branch: run p4 changes -m 1 //info.ravenbrook.com/project/mps/master/... and note the output changelevel (this is called ORIGIN in the examples below).

  10. -

    -5. Update the table at <http://info.ravenbrook.com/project/mps/version/>. -

    +
  11. Make the branch: p4 branch mps/version/A.BBB and edit the branch specification to read as follows:

    -

    -6. Edit Master->Version in documents that erroneously say "Master". +

    Branch:	mps/version/A.BBB
    +
    +Description:
    +	Branching master sources for version A.BBB.
    +
    +View:
    +	//info.ravenbrook.com/project/mps/master/... //info.ravenbrook.com/project/mps/version/A.BBB/...
    +
  12. + +
  13. Make sure you have no unsubmitted files, and then run p4 integrate -b mps/version/A.BBB //info.ravenbrook.com/project/mps/master/...@ORIGIN and then p4 submit.

  14. + +
  15. Update the table at http://info.ravenbrook.com/project/mps/version/.

  16. + +
  17. +Edit Master->Version in documents that erroneously say "Master". Always edit version/A.BBB/index.html, eg. (case-sensitive):

    "of the Master version"  ->  "of Version A.BBB"
     "Master"  ->  "Version A.BBB"

    Less importantly, edit various other files. See change 30260. -

    +

  18. -

    -7. Do an empty-integrate of this change back on to the masters, so P4 thinks +

  19. +Do an empty-integrate of this change back on to the masters, so P4 thinks it's done and doesn't keep suggesting it:

    p4 integrate -r -b mps/version/A.BBB <Files Edited Master->Version>
     p4 resolve -ay <Files Edited Master->Version>
    -
    +
  20. + +

A. References

@@ -175,6 +166,7 @@ p4 resolve -ay <Files Edited Master->Version> 2007-07-05 RHSK Releasename now also in w3build.bat. Make sure all submitted before integ. 2008-10-29 RHSK Convert from text to html. 2010-11-06 RHSK Correctly format example of p4 branch -o mps/version/1.105 +2013-05-16 GDR readme.txt doesn’t need updating; w3build.bat no longer exists

C. Copyright and License