]> git.saurik.com Git - apple/dyld.git/commitdiff
dyld-46.16.tar.gz mac-os-x-10411ppc mac-os-x-10411x86 v46.16
authorApple <opensource@apple.com>
Tue, 29 Jan 2008 19:08:32 +0000 (19:08 +0000)
committerApple <opensource@apple.com>
Tue, 29 Jan 2008 19:08:32 +0000 (19:08 +0000)
14 files changed:
src/ImageLoader.cpp
src/ImageLoader.h
src/ImageLoaderMachO.cpp
src/dyldAPIs.cpp
unit-tests/test-cases/jump-table-dynamic-lookup/Makefile [new file with mode: 0644]
unit-tests/test-cases/jump-table-dynamic-lookup/foo.c [new file with mode: 0644]
unit-tests/test-cases/jump-table-dynamic-lookup/foo.h [new file with mode: 0644]
unit-tests/test-cases/jump-table-dynamic-lookup/main.c [new file with mode: 0644]
unit-tests/test-cases/jump-table-race/Makefile [new file with mode: 0644]
unit-tests/test-cases/jump-table-race/foo.c [new file with mode: 0644]
unit-tests/test-cases/jump-table-race/foo.h [new file with mode: 0644]
unit-tests/test-cases/jump-table-race/main.c [new file with mode: 0644]
unit-tests/test-cases/non-weak-library/Makefile
unit-tests/test-cases/non-weak-library/main.c

index 246137421b82b0269f5cf78b38e03e1990e1a59a..61f49ef3eb93bad5e8f63039040732947143511d 100644 (file)
@@ -48,7 +48,7 @@ uint64_t                                                              ImageLoader::fgTotalBindTime;
 uint64_t                                                               ImageLoader::fgTotalNotifyTime;
 uint64_t                                                               ImageLoader::fgTotalInitTime;
 uintptr_t                                                              ImageLoader::fgNextSplitSegAddress = 0x90000000;
-uintptr_t                                                              Segment::fgNextNonSplitSegAddress = 0x8FE00000;
+uintptr_t                                                              Segment::fgNextNonSplitSegAddress = 0x8F000000;
 
 
 
@@ -722,8 +722,10 @@ void ImageLoader::reprebindCommit(const LinkContext& context, bool commit, bool
                throwf("realpath() failed on %s, errno=%d", this->getPath(), errno);
        }
        // recreate temp file name
-       char tempFilePath[strlen(realFilePath)+strlen("_redoprebinding")+2];
-       ImageLoader::addSuffix(realFilePath, "_redoprebinding", tempFilePath);
+       char tempFilePath[PATH_MAX];
+       char suffix[64];
+       sprintf(suffix, "_redoprebinding%d", getpid());
+       ImageLoader::addSuffix(realFilePath, suffix, tempFilePath);
 
        if ( commit ) {
                // all files successfully reprebound, so do swap
@@ -763,8 +765,10 @@ uint64_t ImageLoader::reprebind(const LinkContext& context, time_t timestamp)
        if ( realpath(this->getPath(), realFilePath) == NULL ) {
                throwf("realpath() failed on %s, errno=%d", this->getPath(), errno);
        }
-       char tempFilePath[strlen(realFilePath)+strlen("_redoprebinding")+2];
-       ImageLoader::addSuffix(realFilePath, "_redoprebinding", tempFilePath);
+       char tempFilePath[PATH_MAX];
+       char suffix[64];
+       sprintf(suffix, "_redoprebinding%d", getpid());
+       ImageLoader::addSuffix(realFilePath, suffix, tempFilePath);
 
        // make copy of file and map it in
        uint8_t* fileToPrebind;
@@ -863,7 +867,7 @@ static void printTime(const char* msg, uint64_t partTime, uint64_t totalTime)
        if ( sUnitsPerSecond == 0 ) {
                struct mach_timebase_info timeBaseInfo;
                if ( mach_timebase_info(&timeBaseInfo) == KERN_SUCCESS ) {
-                       sUnitsPerSecond = timeBaseInfo.denom;
+                       sUnitsPerSecond = 1000000000ULL * timeBaseInfo.denom / timeBaseInfo.numer;
                }
        }
        if ( partTime < sUnitsPerSecond ) {
@@ -875,7 +879,7 @@ static void printTime(const char* msg, uint64_t partTime, uint64_t totalTime)
        }
        else {
                uint32_t secondsTimeTen = (partTime*10)/sUnitsPerSecond;
-               uint32_t seconds = secondsTimeTen/100;
+               uint32_t seconds = secondsTimeTen/10;
                uint32_t percentTimesTen = (partTime*1000)/totalTime;
                uint32_t percent = percentTimesTen/10;
                fprintf(stderr, "%s: %u.%u seconds (%u.%u%%)\n", msg, seconds, secondsTimeTen-seconds*10, percent, percentTimesTen-percent*10);
@@ -909,7 +913,7 @@ void ImageLoader::printStatistics(unsigned int imageCount)
        fprintf(stderr, "total images loaded:  %d (%d used prebinding)\n", imageCount, fgImagesWithUsedPrebinding);
        printTime("total images loading time", fgTotalLoadLibrariesTime, totalTime);
        fprintf(stderr, "total rebase fixups:  %s\n", commatize(fgTotalRebaseFixups, commaNum1));
-       printTime("total rebase fixups time", fgTotalRebaseFixups, totalTime);
+       printTime("total rebase fixups time", fgTotalRebaseTime, totalTime);
        fprintf(stderr, "total binding fixups: %s\n", commatize(fgTotalBindFixups, commaNum1));
        printTime("total binding fixups time", fgTotalBindTime, totalTime);
        fprintf(stderr, "total bindings lazily fixed up: %s of %s\n", commatize(fgTotalLazyBindFixups, commaNum1), commatize(fgTotalPossibleLazyBindFixups, commaNum2));
index f15177c4c4023d4482aa52049bcf2cfcb47d090e..4a8a9d89cdc33ac1d3b93f70a1619728d8278971 100644 (file)
@@ -95,6 +95,7 @@ public:
                const char*             imageSuffix;
                PrebindMode             prebindUsage;
                SharedRegionMode sharedRegionMode;
+               bool                    prebinding;
                bool                    bindFlat;
                bool                    slideAndPackDylibs;
                bool                    verboseOpts;
index 418805b30d8fafeaac958008fd0167c197698e99..2d2cb44fb6d7b08e41ea1c6fe71e776623a88e06 100644 (file)
@@ -1299,7 +1299,14 @@ void ImageLoaderMachO::doRebase(const LinkContext& context)
                ++fgImagesWithUsedPrebinding; // bump totals for statistics
                return;
        }
-               
+       
+       // <rdar://problem/5146059> update_prebinding fails if a prebound dylib depends on a non-prebound dylib
+       // In the unusual case that we find a prebound dylib dependent on un-prebound dylib and we are running
+       // update_prebinding, we want the link of the prebound dylib to fail so that it will be excluded from 
+       // the list of dylibs to be re-written.
+       if ( context.prebinding && !this->isPrebindable() )
+               throwf("dylib not prebound: %s", this->getPath());
+       
        // print why prebinding was not used
        if ( context.verbosePrebinding ) {
                if ( !this->isPrebindable() ) {
@@ -1781,7 +1788,7 @@ uintptr_t ImageLoaderMachO::resolveUndefined(const LinkContext& context, const s
        }
        else {
                // symbol requires searching images with coalesced symbols
-               if ( this->needsCoalescing() && symbolRequiresCoalescing(undefinedSymbol) ) {
+               if ( !context.prebinding && this->needsCoalescing() && symbolRequiresCoalescing(undefinedSymbol) ) {
                        const Symbol* sym;
                        if ( context.coalescedExportFinder(symbolName, &sym, foundIn) )
                                return (*foundIn)->getExportedSymbolAddress(sym);
@@ -1827,7 +1834,7 @@ uintptr_t ImageLoaderMachO::resolveUndefined(const LinkContext& context, const s
                }
                
                if ( target == NULL ) {
-                       fprintf(stderr, "resolveUndefined(%s) in %s\n", symbolName, this->getPath());
+                       //fprintf(stderr, "resolveUndefined(%s) in %s\n", symbolName, this->getPath());
                        throw "symbol not found";
                }
                
@@ -2305,16 +2312,49 @@ void ImageLoaderMachO::setupLazyPointerHandler(const LinkContext& context)
                                                const uint8_t type = sect->flags & SECTION_TYPE;
                                                if ( (type == S_SYMBOL_STUBS) && (sect->flags & S_ATTR_SELF_MODIFYING_CODE) && (sect->reserved2 == 5) ) {
                                                        // reset each jmp entry in this section
+                                                       const uint32_t indirectTableOffset = sect->reserved1;
+                                                       const uint32_t* const indirectTable = (uint32_t*)&fLinkEditBase[fDynamicInfo->indirectsymoff];
                                                        uint8_t* start = (uint8_t*)(sect->addr + this->fSlide);
                                                        uint8_t* end = start + sect->size;
                                                        uintptr_t dyldHandler = (uintptr_t)&fast_stub_binding_helper_interface;
-                                                       for (uint8_t* entry = start; entry < end; entry += 5) {
-                                                               uint32_t rel32 = dyldHandler - (((uint32_t)entry)+5);
-                                                               entry[0] = 0xE8; // CALL rel32
-                                                               entry[1] = rel32 & 0xFF;
-                                                               entry[2] = (rel32 >> 8) & 0xFF;
-                                                               entry[3] = (rel32 >> 16) & 0xFF;
-                                                               entry[4] = (rel32 >> 24) & 0xFF;
+                                                       uint32_t entryIndex = 0;
+                                                       for (uint8_t* entry = start; entry < end; entry += 5, ++entryIndex) {
+                                                               bool installLazyHandler = true;
+                                                               // jump table entries that cross a (64-byte) cache line boundary have the potential to cause crashes
+                                                               // if the instruction is updated by one thread while being executed by another
+                                                               if ( ((uint32_t)entry & 0xFFFFFFC0) != ((uint32_t)entry+4 & 0xFFFFFFC0) ) {
+                                                                       // need to bind this now to avoid a potential problem if bound lazily
+                                                                       uint32_t symbolIndex = indirectTable[indirectTableOffset + entryIndex];
+                                                                       // the latest linker marks 64-byte crossing stubs with INDIRECT_SYMBOL_ABS so they are not used
+                                                                       if ( symbolIndex != INDIRECT_SYMBOL_ABS ) {
+                                                                               const char* symbolName = &fStrings[fSymbolTable[symbolIndex].n_un.n_strx];
+                                                                               ImageLoader* image = NULL;
+                                                                               try {
+                                                                                       uintptr_t symbolAddr = this->resolveUndefined(context, &fSymbolTable[symbolIndex], this->usesTwoLevelNameSpace(), &image);
+                                                                                       symbolAddr = this->bindIndirectSymbol((uintptr_t*)entry, sect, symbolName, symbolAddr, image, context);
+                                                                                       ++fgTotalBindFixups;
+                                                                                       uint32_t rel32 = symbolAddr - (((uint32_t)entry)+5);
+                                                                                       entry[0] = 0xE9; // JMP rel32
+                                                                                       entry[1] = rel32 & 0xFF;
+                                                                                       entry[2] = (rel32 >> 8) & 0xFF;
+                                                                                       entry[3] = (rel32 >> 16) & 0xFF;
+                                                                                       entry[4] = (rel32 >> 24) & 0xFF;
+                                                                                       installLazyHandler = false;
+                                                                               } 
+                                                                               catch (const char* msg) {
+                                                                                       // ignore errors when binding symbols early
+                                                                                       // maybe the function is never called, and therefore erroring out now would be a regression
+                                                                               }
+                                                                       }
+                                                               }
+                                                               if ( installLazyHandler ) {
+                                                                       uint32_t rel32 = dyldHandler - (((uint32_t)entry)+5);
+                                                                       entry[0] = 0xE8; // CALL rel32
+                                                                       entry[1] = rel32 & 0xFF;
+                                                                       entry[2] = (rel32 >> 8) & 0xFF;
+                                                                       entry[3] = (rel32 >> 16) & 0xFF;
+                                                                       entry[4] = (rel32 >> 24) & 0xFF;
+                                                               }
                                                        }
                                                }
                                        }
@@ -2331,7 +2371,7 @@ bool ImageLoaderMachO::usablePrebinding(const LinkContext& context) const
        // if prebound and loaded at prebound address, and all libraries are same as when this was prebound, then no need to bind
        if ( this->isPrebindable() 
                && (this->getSlide() == 0) 
-               && this->usesTwoLevelNameSpace()
+               && (this->usesTwoLevelNameSpace() || context.prebinding)
                && this->allDependentLibrariesAsWhenPreBound() ) {
                // allow environment variables to disable prebinding
                if ( context.bindFlat )
@@ -2511,16 +2551,22 @@ void ImageLoaderMachO::applyPrebindingToLoadCommands(const LinkContext& context,
                                        for (const DependentLibrary* dl=fLibraries; dl < &fLibraries[fLibrariesCount]; dl++) {
                                                if (strcmp(dl->name, name) == 0 ) {
                                                        // found matching DependentLibrary for this load command
-                                                       ImageLoaderMachO* targetImage = (ImageLoaderMachO*)(dl->image); // !!! assume only mach-o images are prebound
-                                                       if ( ! targetImage->isPrebindable() )
-                                                               throw "dependent dylib is not prebound";
-                                                       // if the target is currently being re-prebound then its timestamp will be the same as this one
-                                                       if ( ! targetImage->usablePrebinding(context) ) {
-                                                               dylib->dylib.timestamp = timestamp;
+                                                       if ( dl->image == NULL ) {
+                                                               // missing weak linked dylib
+                                                               dylib->dylib.timestamp = 0;
                                                        }
                                                        else {
-                                                               // otherwise dependent library is already correctly prebound, so use its checksum
-                                                               dylib->dylib.timestamp = targetImage->doGetLibraryInfo().checksum;
+                                                               ImageLoaderMachO* targetImage = (ImageLoaderMachO*)(dl->image); // !!! assume only mach-o images are prebound
+                                                               if ( ! targetImage->isPrebindable() )
+                                                                       throw "dependent dylib is not prebound";
+                                                               // if the target is currently being re-prebound then its timestamp will be the same as this one
+                                                               if ( ! targetImage->usablePrebinding(context) ) {
+                                                                       dylib->dylib.timestamp = timestamp;
+                                                               }
+                                                               else {
+                                                                       // otherwise dependent library is already correctly prebound, so use its checksum
+                                                                       dylib->dylib.timestamp = targetImage->doGetLibraryInfo().checksum;
+                                                               }
                                                        }
                                                        break;
                                                }
index 64cfb890ca56e5bbf27e2da6194587e22edee520..06d9defccff3df2918203c58890dff8c6d60a819 100644 (file)
@@ -1481,7 +1481,10 @@ static void _dyld_update_prebinding(int pathCount, const char* paths[], uint32_t
                if ( dyld::getImageCount() != 1 )
                        throw "_dyld_update_prebinding cannot be called with dylib already loaded";
                        
-               const uint32_t max_allowed_link_errors = 10;
+               // note that we are prebinding
+               dyld::gLinkContext.prebinding = true;
+
+               const uint32_t max_allowed_link_errors = 100;
                uint32_t link_error_count = 0;
                
                // load and link each dylib
@@ -1513,10 +1516,12 @@ static void _dyld_update_prebinding(int pathCount, const char* paths[], uint32_t
                                                stage = "link";
                                        fprintf(stderr, "update_prebinding: warning: could not %s %s: %s\n", stage, paths[i], msg);
                                }
-                               if ( image != NULL )
+                               if ( (image != NULL) && image->isPrebindable() ) // don't count top level dylib being unprebound as an error
                                        link_error_count++;
-                               if ( link_error_count > max_allowed_link_errors )
-                                       throw;
+                               if ( link_error_count > max_allowed_link_errors ) {
+                                       fprintf(stderr, "update_prebinding: too many errors (%d) \n", link_error_count);
+                                       throw "terminating";
+                               }
                        }
                }
                
diff --git a/unit-tests/test-cases/jump-table-dynamic-lookup/Makefile b/unit-tests/test-cases/jump-table-dynamic-lookup/Makefile
new file mode 100644 (file)
index 0000000..04d3fb6
--- /dev/null
@@ -0,0 +1,46 @@
+##
+# Copyright (c) 2007 Apple Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+# 
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+# 
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+# 
+# @APPLE_LICENSE_HEADER_END@
+##
+TESTROOT = ../..
+include ${TESTROOT}/include/common.makefile
+
+run: all
+       ./main
+
+all: main libfoo.dylib
+
+###
+### Test that when i386 "fast stubs" are updated early to 
+### avoid the cache line crossing race conditition, that 
+### dynamically looked up functions around bound lazily
+###
+
+main: main.c libfoo.dylib
+       ${CC} ${CCFLAGS} -I${TESTROOT}/include -o main main.c -undefined dynamic_lookup
+
+libfoo.dylib: foo.c 
+       ${CC} ${CCFLAGS} -dynamiclib foo.c -o libfoo.dylib
+
+
+clean:
+       ${RM} ${RMFLAGS} main libfoo.dylib
+       
diff --git a/unit-tests/test-cases/jump-table-dynamic-lookup/foo.c b/unit-tests/test-cases/jump-table-dynamic-lookup/foo.c
new file mode 100644 (file)
index 0000000..35c9bb7
--- /dev/null
@@ -0,0 +1,827 @@
+#include "foo.h"
+
+void foo000(int p) {}
+void foo001(int p) {}
+void foo002(int p) {}
+void foo003(int p) {}
+void foo004(int p) {}
+void foo005(int p) {}
+void foo006(int p) {}
+void foo007(int p) {}
+void foo008(int p) {}
+void foo009(int p) {}
+void foo010(int p) {}
+void foo011(int p) {}
+void foo012(int p) {}
+void foo013(int p) {}
+void foo014(int p) {}
+void foo015(int p) {}
+void foo016(int p) {}
+void foo017(int p) {}
+void foo018(int p) {}
+void foo019(int p) {}
+void foo020(int p) {}
+void foo021(int p) {}
+void foo022(int p) {}
+void foo023(int p) {}
+void foo024(int p) {}
+void foo025(int p) {}
+void foo026(int p) {}
+void foo027(int p) {}
+void foo028(int p) {}
+void foo029(int p) {}
+void foo030(int p) {}
+void foo031(int p) {}
+void foo032(int p) {}
+void foo033(int p) {}
+void foo034(int p) {}
+void foo035(int p) {}
+void foo036(int p) {}
+void foo037(int p) {}
+void foo038(int p) {}
+void foo039(int p) {}
+void foo040(int p) {}
+void foo041(int p) {}
+void foo042(int p) {}
+void foo043(int p) {}
+void foo044(int p) {}
+void foo045(int p) {}
+void foo046(int p) {}
+void foo047(int p) {}
+void foo048(int p) {}
+void foo049(int p) {}
+void foo050(int p) {}
+void foo051(int p) {}
+void foo052(int p) {}
+void foo053(int p) {}
+void foo054(int p) {}
+void foo055(int p) {}
+void foo056(int p) {}
+void foo057(int p) {}
+void foo058(int p) {}
+void foo059(int p) {}
+void foo060(int p) {}
+void foo061(int p) {}
+void foo062(int p) {}
+void foo063(int p) {}
+void foo064(int p) {}
+void foo065(int p) {}
+void foo066(int p) {}
+void foo067(int p) {}
+void foo068(int p) {}
+void foo069(int p) {}
+void foo070(int p) {}
+void foo071(int p) {}
+void foo072(int p) {}
+void foo073(int p) {}
+void foo074(int p) {}
+void foo075(int p) {}
+void foo076(int p) {}
+void foo077(int p) {}
+void foo078(int p) {}
+void foo079(int p) {}
+void foo080(int p) {}
+void foo081(int p) {}
+void foo082(int p) {}
+void foo083(int p) {}
+void foo084(int p) {}
+void foo085(int p) {}
+void foo086(int p) {}
+void foo087(int p) {}
+void foo088(int p) {}
+void foo089(int p) {}
+void foo090(int p) {}
+void foo091(int p) {}
+void foo092(int p) {}
+void foo093(int p) {}
+void foo094(int p) {}
+void foo095(int p) {}
+void foo096(int p) {}
+void foo097(int p) {}
+void foo098(int p) {}
+void foo099(int p) {}
+void foo100(int p) {}
+void foo101(int p) {}
+void foo102(int p) {}
+void foo103(int p) {}
+void foo104(int p) {}
+void foo105(int p) {}
+void foo106(int p) {}
+void foo107(int p) {}
+void foo108(int p) {}
+void foo109(int p) {}
+void foo110(int p) {}
+void foo111(int p) {}
+void foo112(int p) {}
+void foo113(int p) {}
+void foo114(int p) {}
+void foo115(int p) {}
+void foo116(int p) {}
+void foo117(int p) {}
+void foo118(int p) {}
+void foo119(int p) {}
+void foo120(int p) {}
+void foo121(int p) {}
+void foo122(int p) {}
+void foo123(int p) {}
+void foo124(int p) {}
+void foo125(int p) {}
+void foo126(int p) {}
+void foo127(int p) {}
+void foo128(int p) {}
+void foo129(int p) {}
+void foo130(int p) {}
+void foo131(int p) {}
+void foo132(int p) {}
+void foo133(int p) {}
+void foo134(int p) {}
+void foo135(int p) {}
+void foo136(int p) {}
+void foo137(int p) {}
+void foo138(int p) {}
+void foo139(int p) {}
+void foo140(int p) {}
+void foo141(int p) {}
+void foo142(int p) {}
+void foo143(int p) {}
+void foo144(int p) {}
+void foo145(int p) {}
+void foo146(int p) {}
+void foo147(int p) {}
+void foo148(int p) {}
+void foo149(int p) {}
+void foo150(int p) {}
+void foo151(int p) {}
+void foo152(int p) {}
+void foo153(int p) {}
+void foo154(int p) {}
+void foo155(int p) {}
+void foo156(int p) {}
+void foo157(int p) {}
+void foo158(int p) {}
+void foo159(int p) {}
+void foo160(int p) {}
+void foo161(int p) {}
+void foo162(int p) {}
+void foo163(int p) {}
+void foo164(int p) {}
+void foo165(int p) {}
+void foo166(int p) {}
+void foo167(int p) {}
+void foo168(int p) {}
+void foo169(int p) {}
+void foo170(int p) {}
+void foo171(int p) {}
+void foo172(int p) {}
+void foo173(int p) {}
+void foo174(int p) {}
+void foo175(int p) {}
+void foo176(int p) {}
+void foo177(int p) {}
+void foo178(int p) {}
+void foo179(int p) {}
+void foo180(int p) {}
+void foo181(int p) {}
+void foo182(int p) {}
+void foo183(int p) {}
+void foo184(int p) {}
+void foo185(int p) {}
+void foo186(int p) {}
+void foo187(int p) {}
+void foo188(int p) {}
+void foo189(int p) {}
+void foo190(int p) {}
+void foo191(int p) {}
+void foo192(int p) {}
+void foo193(int p) {}
+void foo194(int p) {}
+void foo195(int p) {}
+void foo196(int p) {}
+void foo197(int p) {}
+void foo198(int p) {}
+void foo199(int p) {}
+void foo200(int p) {}
+void foo201(int p) {}
+void foo202(int p) {}
+void foo203(int p) {}
+void foo204(int p) {}
+void foo205(int p) {}
+void foo206(int p) {}
+void foo207(int p) {}
+void foo208(int p) {}
+void foo209(int p) {}
+void foo210(int p) {}
+void foo211(int p) {}
+void foo212(int p) {}
+void foo213(int p) {}
+void foo214(int p) {}
+void foo215(int p) {}
+void foo216(int p) {}
+void foo217(int p) {}
+void foo218(int p) {}
+void foo219(int p) {}
+void foo220(int p) {}
+void foo221(int p) {}
+void foo222(int p) {}
+void foo223(int p) {}
+void foo224(int p) {}
+void foo225(int p) {}
+void foo226(int p) {}
+void foo227(int p) {}
+void foo228(int p) {}
+void foo229(int p) {}
+void foo230(int p) {}
+void foo231(int p) {}
+void foo232(int p) {}
+void foo233(int p) {}
+void foo234(int p) {}
+void foo235(int p) {}
+void foo236(int p) {}
+void foo237(int p) {}
+void foo238(int p) {}
+void foo239(int p) {}
+void foo240(int p) {}
+void foo241(int p) {}
+void foo242(int p) {}
+void foo243(int p) {}
+void foo244(int p) {}
+void foo245(int p) {}
+void foo246(int p) {}
+void foo247(int p) {}
+void foo248(int p) {}
+void foo249(int p) {}
+void foo250(int p) {}
+void foo251(int p) {}
+void foo252(int p) {}
+void foo253(int p) {}
+void foo254(int p) {}
+void foo255(int p) {}
+void foo256(int p) {}
+void foo257(int p) {}
+void foo258(int p) {}
+void foo259(int p) {}
+void foo260(int p) {}
+void foo261(int p) {}
+void foo262(int p) {}
+void foo263(int p) {}
+void foo264(int p) {}
+void foo265(int p) {}
+void foo266(int p) {}
+void foo267(int p) {}
+void foo268(int p) {}
+void foo269(int p) {}
+void foo270(int p) {}
+void foo271(int p) {}
+void foo272(int p) {}
+void foo273(int p) {}
+void foo274(int p) {}
+void foo275(int p) {}
+void foo276(int p) {}
+void foo277(int p) {}
+void foo278(int p) {}
+void foo279(int p) {}
+void foo280(int p) {}
+void foo281(int p) {}
+void foo282(int p) {}
+void foo283(int p) {}
+void foo284(int p) {}
+void foo285(int p) {}
+void foo286(int p) {}
+void foo287(int p) {}
+void foo288(int p) {}
+void foo289(int p) {}
+void foo290(int p) {}
+void foo291(int p) {}
+void foo292(int p) {}
+void foo293(int p) {}
+void foo294(int p) {}
+void foo295(int p) {}
+void foo296(int p) {}
+void foo297(int p) {}
+void foo298(int p) {}
+void foo299(int p) {}
+void foo300(int p) {}
+void foo301(int p) {}
+void foo302(int p) {}
+void foo303(int p) {}
+void foo304(int p) {}
+void foo305(int p) {}
+void foo306(int p) {}
+void foo307(int p) {}
+void foo308(int p) {}
+void foo309(int p) {}
+void foo310(int p) {}
+void foo311(int p) {}
+void foo312(int p) {}
+void foo313(int p) {}
+void foo314(int p) {}
+void foo315(int p) {}
+void foo316(int p) {}
+void foo317(int p) {}
+void foo318(int p) {}
+void foo319(int p) {}
+void foo320(int p) {}
+void foo321(int p) {}
+void foo322(int p) {}
+void foo323(int p) {}
+void foo324(int p) {}
+void foo325(int p) {}
+void foo326(int p) {}
+void foo327(int p) {}
+void foo328(int p) {}
+void foo329(int p) {}
+void foo330(int p) {}
+void foo331(int p) {}
+void foo332(int p) {}
+void foo333(int p) {}
+void foo334(int p) {}
+void foo335(int p) {}
+void foo336(int p) {}
+void foo337(int p) {}
+void foo338(int p) {}
+void foo339(int p) {}
+void foo340(int p) {}
+void foo341(int p) {}
+void foo342(int p) {}
+void foo343(int p) {}
+void foo344(int p) {}
+void foo345(int p) {}
+void foo346(int p) {}
+void foo347(int p) {}
+void foo348(int p) {}
+void foo349(int p) {}
+void foo350(int p) {}
+void foo351(int p) {}
+void foo352(int p) {}
+void foo353(int p) {}
+void foo354(int p) {}
+void foo355(int p) {}
+void foo356(int p) {}
+void foo357(int p) {}
+void foo358(int p) {}
+void foo359(int p) {}
+void foo360(int p) {}
+void foo361(int p) {}
+void foo362(int p) {}
+void foo363(int p) {}
+void foo364(int p) {}
+void foo365(int p) {}
+void foo366(int p) {}
+void foo367(int p) {}
+void foo368(int p) {}
+void foo369(int p) {}
+void foo370(int p) {}
+void foo371(int p) {}
+void foo372(int p) {}
+void foo373(int p) {}
+void foo374(int p) {}
+void foo375(int p) {}
+void foo376(int p) {}
+void foo377(int p) {}
+void foo378(int p) {}
+void foo379(int p) {}
+void foo380(int p) {}
+void foo381(int p) {}
+void foo382(int p) {}
+void foo383(int p) {}
+void foo384(int p) {}
+void foo385(int p) {}
+void foo386(int p) {}
+void foo387(int p) {}
+void foo388(int p) {}
+void foo389(int p) {}
+void foo390(int p) {}
+void foo391(int p) {}
+void foo392(int p) {}
+void foo393(int p) {}
+void foo394(int p) {}
+void foo395(int p) {}
+void foo396(int p) {}
+void foo397(int p) {}
+void foo398(int p) {}
+void foo399(int p) {}
+void foo400(int p) {}
+void foo401(int p) {}
+void foo402(int p) {}
+void foo403(int p) {}
+void foo404(int p) {}
+void foo405(int p) {}
+void foo406(int p) {}
+void foo407(int p) {}
+void foo408(int p) {}
+void foo409(int p) {}
+void foo410(int p) {}
+void foo411(int p) {}
+void foo412(int p) {}
+void foo413(int p) {}
+void foo414(int p) {}
+void foo415(int p) {}
+void foo416(int p) {}
+void foo417(int p) {}
+void foo418(int p) {}
+void foo419(int p) {}
+void foo420(int p) {}
+void foo421(int p) {}
+void foo422(int p) {}
+void foo423(int p) {}
+void foo424(int p) {}
+void foo425(int p) {}
+void foo426(int p) {}
+void foo427(int p) {}
+void foo428(int p) {}
+void foo429(int p) {}
+void foo430(int p) {}
+void foo431(int p) {}
+void foo432(int p) {}
+void foo433(int p) {}
+void foo434(int p) {}
+void foo435(int p) {}
+void foo436(int p) {}
+void foo437(int p) {}
+void foo438(int p) {}
+void foo439(int p) {}
+void foo440(int p) {}
+void foo441(int p) {}
+void foo442(int p) {}
+void foo443(int p) {}
+void foo444(int p) {}
+void foo445(int p) {}
+void foo446(int p) {}
+void foo447(int p) {}
+void foo448(int p) {}
+void foo449(int p) {}
+void foo450(int p) {}
+void foo451(int p) {}
+void foo452(int p) {}
+void foo453(int p) {}
+void foo454(int p) {}
+void foo455(int p) {}
+void foo456(int p) {}
+void foo457(int p) {}
+void foo458(int p) {}
+void foo459(int p) {}
+void foo460(int p) {}
+void foo461(int p) {}
+void foo462(int p) {}
+void foo463(int p) {}
+void foo464(int p) {}
+void foo465(int p) {}
+void foo466(int p) {}
+void foo467(int p) {}
+void foo468(int p) {}
+void foo469(int p) {}
+void foo470(int p) {}
+void foo471(int p) {}
+void foo472(int p) {}
+void foo473(int p) {}
+void foo474(int p) {}
+void foo475(int p) {}
+void foo476(int p) {}
+void foo477(int p) {}
+void foo478(int p) {}
+void foo479(int p) {}
+void foo480(int p) {}
+void foo481(int p) {}
+void foo482(int p) {}
+void foo483(int p) {}
+void foo484(int p) {}
+void foo485(int p) {}
+void foo486(int p) {}
+void foo487(int p) {}
+void foo488(int p) {}
+void foo489(int p) {}
+void foo490(int p) {}
+void foo491(int p) {}
+void foo492(int p) {}
+void foo493(int p) {}
+void foo494(int p) {}
+void foo495(int p) {}
+void foo496(int p) {}
+void foo497(int p) {}
+void foo498(int p) {}
+void foo499(int p) {}
+void foo500(int p) {}
+void foo501(int p) {}
+void foo502(int p) {}
+void foo503(int p) {}
+void foo504(int p) {}
+void foo505(int p) {}
+void foo506(int p) {}
+void foo507(int p) {}
+void foo508(int p) {}
+void foo509(int p) {}
+void foo510(int p) {}
+void foo511(int p) {}
+void foo512(int p) {}
+void foo513(int p) {}
+void foo514(int p) {}
+void foo515(int p) {}
+void foo516(int p) {}
+void foo517(int p) {}
+void foo518(int p) {}
+void foo519(int p) {}
+void foo520(int p) {}
+void foo521(int p) {}
+void foo522(int p) {}
+void foo523(int p) {}
+void foo524(int p) {}
+void foo525(int p) {}
+void foo526(int p) {}
+void foo527(int p) {}
+void foo528(int p) {}
+void foo529(int p) {}
+void foo530(int p) {}
+void foo531(int p) {}
+void foo532(int p) {}
+void foo533(int p) {}
+void foo534(int p) {}
+void foo535(int p) {}
+void foo536(int p) {}
+void foo537(int p) {}
+void foo538(int p) {}
+void foo539(int p) {}
+void foo540(int p) {}
+void foo541(int p) {}
+void foo542(int p) {}
+void foo543(int p) {}
+void foo544(int p) {}
+void foo545(int p) {}
+void foo546(int p) {}
+void foo547(int p) {}
+void foo548(int p) {}
+void foo549(int p) {}
+void foo550(int p) {}
+void foo551(int p) {}
+void foo552(int p) {}
+void foo553(int p) {}
+void foo554(int p) {}
+void foo555(int p) {}
+void foo556(int p) {}
+void foo557(int p) {}
+void foo558(int p) {}
+void foo559(int p) {}
+void foo560(int p) {}
+void foo561(int p) {}
+void foo562(int p) {}
+void foo563(int p) {}
+void foo564(int p) {}
+void foo565(int p) {}
+void foo566(int p) {}
+void foo567(int p) {}
+void foo568(int p) {}
+void foo569(int p) {}
+void foo570(int p) {}
+void foo571(int p) {}
+void foo572(int p) {}
+void foo573(int p) {}
+void foo574(int p) {}
+void foo575(int p) {}
+void foo576(int p) {}
+void foo577(int p) {}
+void foo578(int p) {}
+void foo579(int p) {}
+void foo580(int p) {}
+void foo581(int p) {}
+void foo582(int p) {}
+void foo583(int p) {}
+void foo584(int p) {}
+void foo585(int p) {}
+void foo586(int p) {}
+void foo587(int p) {}
+void foo588(int p) {}
+void foo589(int p) {}
+void foo590(int p) {}
+void foo591(int p) {}
+void foo592(int p) {}
+void foo593(int p) {}
+void foo594(int p) {}
+void foo595(int p) {}
+void foo596(int p) {}
+void foo597(int p) {}
+void foo598(int p) {}
+void foo599(int p) {}
+void foo600(int p) {}
+void foo601(int p) {}
+void foo602(int p) {}
+void foo603(int p) {}
+void foo604(int p) {}
+void foo605(int p) {}
+void foo606(int p) {}
+void foo607(int p) {}
+void foo608(int p) {}
+void foo609(int p) {}
+void foo610(int p) {}
+void foo611(int p) {}
+void foo612(int p) {}
+void foo613(int p) {}
+void foo614(int p) {}
+void foo615(int p) {}
+void foo616(int p) {}
+void foo617(int p) {}
+void foo618(int p) {}
+void foo619(int p) {}
+void foo620(int p) {}
+void foo621(int p) {}
+void foo622(int p) {}
+void foo623(int p) {}
+void foo624(int p) {}
+void foo625(int p) {}
+void foo626(int p) {}
+void foo627(int p) {}
+void foo628(int p) {}
+void foo629(int p) {}
+void foo630(int p) {}
+void foo631(int p) {}
+void foo632(int p) {}
+void foo633(int p) {}
+void foo634(int p) {}
+void foo635(int p) {}
+void foo636(int p) {}
+void foo637(int p) {}
+void foo638(int p) {}
+void foo639(int p) {}
+void foo640(int p) {}
+void foo641(int p) {}
+void foo642(int p) {}
+void foo643(int p) {}
+void foo644(int p) {}
+void foo645(int p) {}
+void foo646(int p) {}
+void foo647(int p) {}
+void foo648(int p) {}
+void foo649(int p) {}
+void foo650(int p) {}
+void foo651(int p) {}
+void foo652(int p) {}
+void foo653(int p) {}
+void foo654(int p) {}
+void foo655(int p) {}
+void foo656(int p) {}
+void foo657(int p) {}
+void foo658(int p) {}
+void foo659(int p) {}
+void foo660(int p) {}
+void foo661(int p) {}
+void foo662(int p) {}
+void foo663(int p) {}
+void foo664(int p) {}
+void foo665(int p) {}
+void foo666(int p) {}
+void foo667(int p) {}
+void foo668(int p) {}
+void foo669(int p) {}
+void foo670(int p) {}
+void foo671(int p) {}
+void foo672(int p) {}
+void foo673(int p) {}
+void foo674(int p) {}
+void foo675(int p) {}
+void foo676(int p) {}
+void foo677(int p) {}
+void foo678(int p) {}
+void foo679(int p) {}
+void foo680(int p) {}
+void foo681(int p) {}
+void foo682(int p) {}
+void foo683(int p) {}
+void foo684(int p) {}
+void foo685(int p) {}
+void foo686(int p) {}
+void foo687(int p) {}
+void foo688(int p) {}
+void foo689(int p) {}
+void foo690(int p) {}
+void foo691(int p) {}
+void foo692(int p) {}
+void foo693(int p) {}
+void foo694(int p) {}
+void foo695(int p) {}
+void foo696(int p) {}
+void foo697(int p) {}
+void foo698(int p) {}
+void foo699(int p) {}
+void foo700(int p) {}
+void foo701(int p) {}
+void foo702(int p) {}
+void foo703(int p) {}
+void foo704(int p) {}
+void foo705(int p) {}
+void foo706(int p) {}
+void foo707(int p) {}
+void foo708(int p) {}
+void foo709(int p) {}
+void foo710(int p) {}
+void foo711(int p) {}
+void foo712(int p) {}
+void foo713(int p) {}
+void foo714(int p) {}
+void foo715(int p) {}
+void foo716(int p) {}
+void foo717(int p) {}
+void foo718(int p) {}
+void foo719(int p) {}
+void foo720(int p) {}
+void foo721(int p) {}
+void foo722(int p) {}
+void foo723(int p) {}
+void foo724(int p) {}
+void foo725(int p) {}
+void foo726(int p) {}
+void foo727(int p) {}
+void foo728(int p) {}
+void foo729(int p) {}
+void foo730(int p) {}
+void foo731(int p) {}
+void foo732(int p) {}
+void foo733(int p) {}
+void foo734(int p) {}
+void foo735(int p) {}
+void foo736(int p) {}
+void foo737(int p) {}
+void foo738(int p) {}
+void foo739(int p) {}
+void foo740(int p) {}
+void foo741(int p) {}
+void foo742(int p) {}
+void foo743(int p) {}
+void foo744(int p) {}
+void foo745(int p) {}
+void foo746(int p) {}
+void foo747(int p) {}
+void foo748(int p) {}
+void foo749(int p) {}
+void foo750(int p) {}
+void foo751(int p) {}
+void foo752(int p) {}
+void foo753(int p) {}
+void foo754(int p) {}
+void foo755(int p) {}
+void foo756(int p) {}
+void foo757(int p) {}
+void foo758(int p) {}
+void foo759(int p) {}
+void foo760(int p) {}
+void foo761(int p) {}
+void foo762(int p) {}
+void foo763(int p) {}
+void foo764(int p) {}
+void foo765(int p) {}
+void foo766(int p) {}
+void foo767(int p) {}
+void foo768(int p) {}
+void foo769(int p) {}
+void foo770(int p) {}
+void foo771(int p) {}
+void foo772(int p) {}
+void foo773(int p) {}
+void foo774(int p) {}
+void foo775(int p) {}
+void foo776(int p) {}
+void foo777(int p) {}
+void foo778(int p) {}
+void foo779(int p) {}
+void foo780(int p) {}
+void foo781(int p) {}
+void foo782(int p) {}
+void foo783(int p) {}
+void foo784(int p) {}
+void foo785(int p) {}
+void foo786(int p) {}
+void foo787(int p) {}
+void foo788(int p) {}
+void foo789(int p) {}
+void foo790(int p) {}
+void foo791(int p) {}
+void foo792(int p) {}
+void foo793(int p) {}
+void foo794(int p) {}
+void foo795(int p) {}
+void foo796(int p) {}
+void foo797(int p) {}
+void foo798(int p) {}
+void foo799(int p) {}
+void foo800(int p) {}
+void foo801(int p) {}
+void foo802(int p) {}
+void foo803(int p) {}
+void foo804(int p) {}
+void foo805(int p) {}
+void foo806(int p) {}
+void foo807(int p) {}
+void foo808(int p) {}
+void foo809(int p) {}
+void foo810(int p) {}
+void foo811(int p) {}
+void foo812(int p) {}
+void foo813(int p) {}
+void foo814(int p) {}
+void foo815(int p) {}
+void foo816(int p) {}
+void foo817(int p) {}
+void foo818(int p) {}
+void foo819(int p) {}
+void foo820(int p) {}
+void foo821(int p) {}
+void foo822(int p) {}
+void foo823(int p) {}
+void foo824(int p) {}
diff --git a/unit-tests/test-cases/jump-table-dynamic-lookup/foo.h b/unit-tests/test-cases/jump-table-dynamic-lookup/foo.h
new file mode 100644 (file)
index 0000000..33a9be4
--- /dev/null
@@ -0,0 +1,825 @@
+extern void foo000(int);
+extern void foo001(int);
+extern void foo002(int);
+extern void foo003(int);
+extern void foo004(int);
+extern void foo005(int);
+extern void foo006(int);
+extern void foo007(int);
+extern void foo008(int);
+extern void foo009(int);
+extern void foo010(int);
+extern void foo011(int);
+extern void foo012(int);
+extern void foo013(int);
+extern void foo014(int);
+extern void foo015(int);
+extern void foo016(int);
+extern void foo017(int);
+extern void foo018(int);
+extern void foo019(int);
+extern void foo020(int);
+extern void foo021(int);
+extern void foo022(int);
+extern void foo023(int);
+extern void foo024(int);
+extern void foo025(int);
+extern void foo026(int);
+extern void foo027(int);
+extern void foo028(int);
+extern void foo029(int);
+extern void foo030(int);
+extern void foo031(int);
+extern void foo032(int);
+extern void foo033(int);
+extern void foo034(int);
+extern void foo035(int);
+extern void foo036(int);
+extern void foo037(int);
+extern void foo038(int);
+extern void foo039(int);
+extern void foo040(int);
+extern void foo041(int);
+extern void foo042(int);
+extern void foo043(int);
+extern void foo044(int);
+extern void foo045(int);
+extern void foo046(int);
+extern void foo047(int);
+extern void foo048(int);
+extern void foo049(int);
+extern void foo050(int);
+extern void foo051(int);
+extern void foo052(int);
+extern void foo053(int);
+extern void foo054(int);
+extern void foo055(int);
+extern void foo056(int);
+extern void foo057(int);
+extern void foo058(int);
+extern void foo059(int);
+extern void foo060(int);
+extern void foo061(int);
+extern void foo062(int);
+extern void foo063(int);
+extern void foo064(int);
+extern void foo065(int);
+extern void foo066(int);
+extern void foo067(int);
+extern void foo068(int);
+extern void foo069(int);
+extern void foo070(int);
+extern void foo071(int);
+extern void foo072(int);
+extern void foo073(int);
+extern void foo074(int);
+extern void foo075(int);
+extern void foo076(int);
+extern void foo077(int);
+extern void foo078(int);
+extern void foo079(int);
+extern void foo080(int);
+extern void foo081(int);
+extern void foo082(int);
+extern void foo083(int);
+extern void foo084(int);
+extern void foo085(int);
+extern void foo086(int);
+extern void foo087(int);
+extern void foo088(int);
+extern void foo089(int);
+extern void foo090(int);
+extern void foo091(int);
+extern void foo092(int);
+extern void foo093(int);
+extern void foo094(int);
+extern void foo095(int);
+extern void foo096(int);
+extern void foo097(int);
+extern void foo098(int);
+extern void foo099(int);
+extern void foo100(int);
+extern void foo101(int);
+extern void foo102(int);
+extern void foo103(int);
+extern void foo104(int);
+extern void foo105(int);
+extern void foo106(int);
+extern void foo107(int);
+extern void foo108(int);
+extern void foo109(int);
+extern void foo110(int);
+extern void foo111(int);
+extern void foo112(int);
+extern void foo113(int);
+extern void foo114(int);
+extern void foo115(int);
+extern void foo116(int);
+extern void foo117(int);
+extern void foo118(int);
+extern void foo119(int);
+extern void foo120(int);
+extern void foo121(int);
+extern void foo122(int);
+extern void foo123(int);
+extern void foo124(int);
+extern void foo125(int);
+extern void foo126(int);
+extern void foo127(int);
+extern void foo128(int);
+extern void foo129(int);
+extern void foo130(int);
+extern void foo131(int);
+extern void foo132(int);
+extern void foo133(int);
+extern void foo134(int);
+extern void foo135(int);
+extern void foo136(int);
+extern void foo137(int);
+extern void foo138(int);
+extern void foo139(int);
+extern void foo140(int);
+extern void foo141(int);
+extern void foo142(int);
+extern void foo143(int);
+extern void foo144(int);
+extern void foo145(int);
+extern void foo146(int);
+extern void foo147(int);
+extern void foo148(int);
+extern void foo149(int);
+extern void foo150(int);
+extern void foo151(int);
+extern void foo152(int);
+extern void foo153(int);
+extern void foo154(int);
+extern void foo155(int);
+extern void foo156(int);
+extern void foo157(int);
+extern void foo158(int);
+extern void foo159(int);
+extern void foo160(int);
+extern void foo161(int);
+extern void foo162(int);
+extern void foo163(int);
+extern void foo164(int);
+extern void foo165(int);
+extern void foo166(int);
+extern void foo167(int);
+extern void foo168(int);
+extern void foo169(int);
+extern void foo170(int);
+extern void foo171(int);
+extern void foo172(int);
+extern void foo173(int);
+extern void foo174(int);
+extern void foo175(int);
+extern void foo176(int);
+extern void foo177(int);
+extern void foo178(int);
+extern void foo179(int);
+extern void foo180(int);
+extern void foo181(int);
+extern void foo182(int);
+extern void foo183(int);
+extern void foo184(int);
+extern void foo185(int);
+extern void foo186(int);
+extern void foo187(int);
+extern void foo188(int);
+extern void foo189(int);
+extern void foo190(int);
+extern void foo191(int);
+extern void foo192(int);
+extern void foo193(int);
+extern void foo194(int);
+extern void foo195(int);
+extern void foo196(int);
+extern void foo197(int);
+extern void foo198(int);
+extern void foo199(int);
+extern void foo200(int);
+extern void foo201(int);
+extern void foo202(int);
+extern void foo203(int);
+extern void foo204(int);
+extern void foo205(int);
+extern void foo206(int);
+extern void foo207(int);
+extern void foo208(int);
+extern void foo209(int);
+extern void foo210(int);
+extern void foo211(int);
+extern void foo212(int);
+extern void foo213(int);
+extern void foo214(int);
+extern void foo215(int);
+extern void foo216(int);
+extern void foo217(int);
+extern void foo218(int);
+extern void foo219(int);
+extern void foo220(int);
+extern void foo221(int);
+extern void foo222(int);
+extern void foo223(int);
+extern void foo224(int);
+extern void foo225(int);
+extern void foo226(int);
+extern void foo227(int);
+extern void foo228(int);
+extern void foo229(int);
+extern void foo230(int);
+extern void foo231(int);
+extern void foo232(int);
+extern void foo233(int);
+extern void foo234(int);
+extern void foo235(int);
+extern void foo236(int);
+extern void foo237(int);
+extern void foo238(int);
+extern void foo239(int);
+extern void foo240(int);
+extern void foo241(int);
+extern void foo242(int);
+extern void foo243(int);
+extern void foo244(int);
+extern void foo245(int);
+extern void foo246(int);
+extern void foo247(int);
+extern void foo248(int);
+extern void foo249(int);
+extern void foo250(int);
+extern void foo251(int);
+extern void foo252(int);
+extern void foo253(int);
+extern void foo254(int);
+extern void foo255(int);
+extern void foo256(int);
+extern void foo257(int);
+extern void foo258(int);
+extern void foo259(int);
+extern void foo260(int);
+extern void foo261(int);
+extern void foo262(int);
+extern void foo263(int);
+extern void foo264(int);
+extern void foo265(int);
+extern void foo266(int);
+extern void foo267(int);
+extern void foo268(int);
+extern void foo269(int);
+extern void foo270(int);
+extern void foo271(int);
+extern void foo272(int);
+extern void foo273(int);
+extern void foo274(int);
+extern void foo275(int);
+extern void foo276(int);
+extern void foo277(int);
+extern void foo278(int);
+extern void foo279(int);
+extern void foo280(int);
+extern void foo281(int);
+extern void foo282(int);
+extern void foo283(int);
+extern void foo284(int);
+extern void foo285(int);
+extern void foo286(int);
+extern void foo287(int);
+extern void foo288(int);
+extern void foo289(int);
+extern void foo290(int);
+extern void foo291(int);
+extern void foo292(int);
+extern void foo293(int);
+extern void foo294(int);
+extern void foo295(int);
+extern void foo296(int);
+extern void foo297(int);
+extern void foo298(int);
+extern void foo299(int);
+extern void foo300(int);
+extern void foo301(int);
+extern void foo302(int);
+extern void foo303(int);
+extern void foo304(int);
+extern void foo305(int);
+extern void foo306(int);
+extern void foo307(int);
+extern void foo308(int);
+extern void foo309(int);
+extern void foo310(int);
+extern void foo311(int);
+extern void foo312(int);
+extern void foo313(int);
+extern void foo314(int);
+extern void foo315(int);
+extern void foo316(int);
+extern void foo317(int);
+extern void foo318(int);
+extern void foo319(int);
+extern void foo320(int);
+extern void foo321(int);
+extern void foo322(int);
+extern void foo323(int);
+extern void foo324(int);
+extern void foo325(int);
+extern void foo326(int);
+extern void foo327(int);
+extern void foo328(int);
+extern void foo329(int);
+extern void foo330(int);
+extern void foo331(int);
+extern void foo332(int);
+extern void foo333(int);
+extern void foo334(int);
+extern void foo335(int);
+extern void foo336(int);
+extern void foo337(int);
+extern void foo338(int);
+extern void foo339(int);
+extern void foo340(int);
+extern void foo341(int);
+extern void foo342(int);
+extern void foo343(int);
+extern void foo344(int);
+extern void foo345(int);
+extern void foo346(int);
+extern void foo347(int);
+extern void foo348(int);
+extern void foo349(int);
+extern void foo350(int);
+extern void foo351(int);
+extern void foo352(int);
+extern void foo353(int);
+extern void foo354(int);
+extern void foo355(int);
+extern void foo356(int);
+extern void foo357(int);
+extern void foo358(int);
+extern void foo359(int);
+extern void foo360(int);
+extern void foo361(int);
+extern void foo362(int);
+extern void foo363(int);
+extern void foo364(int);
+extern void foo365(int);
+extern void foo366(int);
+extern void foo367(int);
+extern void foo368(int);
+extern void foo369(int);
+extern void foo370(int);
+extern void foo371(int);
+extern void foo372(int);
+extern void foo373(int);
+extern void foo374(int);
+extern void foo375(int);
+extern void foo376(int);
+extern void foo377(int);
+extern void foo378(int);
+extern void foo379(int);
+extern void foo380(int);
+extern void foo381(int);
+extern void foo382(int);
+extern void foo383(int);
+extern void foo384(int);
+extern void foo385(int);
+extern void foo386(int);
+extern void foo387(int);
+extern void foo388(int);
+extern void foo389(int);
+extern void foo390(int);
+extern void foo391(int);
+extern void foo392(int);
+extern void foo393(int);
+extern void foo394(int);
+extern void foo395(int);
+extern void foo396(int);
+extern void foo397(int);
+extern void foo398(int);
+extern void foo399(int);
+extern void foo400(int);
+extern void foo401(int);
+extern void foo402(int);
+extern void foo403(int);
+extern void foo404(int);
+extern void foo405(int);
+extern void foo406(int);
+extern void foo407(int);
+extern void foo408(int);
+extern void foo409(int);
+extern void foo410(int);
+extern void foo411(int);
+extern void foo412(int);
+extern void foo413(int);
+extern void foo414(int);
+extern void foo415(int);
+extern void foo416(int);
+extern void foo417(int);
+extern void foo418(int);
+extern void foo419(int);
+extern void foo420(int);
+extern void foo421(int);
+extern void foo422(int);
+extern void foo423(int);
+extern void foo424(int);
+extern void foo425(int);
+extern void foo426(int);
+extern void foo427(int);
+extern void foo428(int);
+extern void foo429(int);
+extern void foo430(int);
+extern void foo431(int);
+extern void foo432(int);
+extern void foo433(int);
+extern void foo434(int);
+extern void foo435(int);
+extern void foo436(int);
+extern void foo437(int);
+extern void foo438(int);
+extern void foo439(int);
+extern void foo440(int);
+extern void foo441(int);
+extern void foo442(int);
+extern void foo443(int);
+extern void foo444(int);
+extern void foo445(int);
+extern void foo446(int);
+extern void foo447(int);
+extern void foo448(int);
+extern void foo449(int);
+extern void foo450(int);
+extern void foo451(int);
+extern void foo452(int);
+extern void foo453(int);
+extern void foo454(int);
+extern void foo455(int);
+extern void foo456(int);
+extern void foo457(int);
+extern void foo458(int);
+extern void foo459(int);
+extern void foo460(int);
+extern void foo461(int);
+extern void foo462(int);
+extern void foo463(int);
+extern void foo464(int);
+extern void foo465(int);
+extern void foo466(int);
+extern void foo467(int);
+extern void foo468(int);
+extern void foo469(int);
+extern void foo470(int);
+extern void foo471(int);
+extern void foo472(int);
+extern void foo473(int);
+extern void foo474(int);
+extern void foo475(int);
+extern void foo476(int);
+extern void foo477(int);
+extern void foo478(int);
+extern void foo479(int);
+extern void foo480(int);
+extern void foo481(int);
+extern void foo482(int);
+extern void foo483(int);
+extern void foo484(int);
+extern void foo485(int);
+extern void foo486(int);
+extern void foo487(int);
+extern void foo488(int);
+extern void foo489(int);
+extern void foo490(int);
+extern void foo491(int);
+extern void foo492(int);
+extern void foo493(int);
+extern void foo494(int);
+extern void foo495(int);
+extern void foo496(int);
+extern void foo497(int);
+extern void foo498(int);
+extern void foo499(int);
+extern void foo500(int);
+extern void foo501(int);
+extern void foo502(int);
+extern void foo503(int);
+extern void foo504(int);
+extern void foo505(int);
+extern void foo506(int);
+extern void foo507(int);
+extern void foo508(int);
+extern void foo509(int);
+extern void foo510(int);
+extern void foo511(int);
+extern void foo512(int);
+extern void foo513(int);
+extern void foo514(int);
+extern void foo515(int);
+extern void foo516(int);
+extern void foo517(int);
+extern void foo518(int);
+extern void foo519(int);
+extern void foo520(int);
+extern void foo521(int);
+extern void foo522(int);
+extern void foo523(int);
+extern void foo524(int);
+extern void foo525(int);
+extern void foo526(int);
+extern void foo527(int);
+extern void foo528(int);
+extern void foo529(int);
+extern void foo530(int);
+extern void foo531(int);
+extern void foo532(int);
+extern void foo533(int);
+extern void foo534(int);
+extern void foo535(int);
+extern void foo536(int);
+extern void foo537(int);
+extern void foo538(int);
+extern void foo539(int);
+extern void foo540(int);
+extern void foo541(int);
+extern void foo542(int);
+extern void foo543(int);
+extern void foo544(int);
+extern void foo545(int);
+extern void foo546(int);
+extern void foo547(int);
+extern void foo548(int);
+extern void foo549(int);
+extern void foo550(int);
+extern void foo551(int);
+extern void foo552(int);
+extern void foo553(int);
+extern void foo554(int);
+extern void foo555(int);
+extern void foo556(int);
+extern void foo557(int);
+extern void foo558(int);
+extern void foo559(int);
+extern void foo560(int);
+extern void foo561(int);
+extern void foo562(int);
+extern void foo563(int);
+extern void foo564(int);
+extern void foo565(int);
+extern void foo566(int);
+extern void foo567(int);
+extern void foo568(int);
+extern void foo569(int);
+extern void foo570(int);
+extern void foo571(int);
+extern void foo572(int);
+extern void foo573(int);
+extern void foo574(int);
+extern void foo575(int);
+extern void foo576(int);
+extern void foo577(int);
+extern void foo578(int);
+extern void foo579(int);
+extern void foo580(int);
+extern void foo581(int);
+extern void foo582(int);
+extern void foo583(int);
+extern void foo584(int);
+extern void foo585(int);
+extern void foo586(int);
+extern void foo587(int);
+extern void foo588(int);
+extern void foo589(int);
+extern void foo590(int);
+extern void foo591(int);
+extern void foo592(int);
+extern void foo593(int);
+extern void foo594(int);
+extern void foo595(int);
+extern void foo596(int);
+extern void foo597(int);
+extern void foo598(int);
+extern void foo599(int);
+extern void foo600(int);
+extern void foo601(int);
+extern void foo602(int);
+extern void foo603(int);
+extern void foo604(int);
+extern void foo605(int);
+extern void foo606(int);
+extern void foo607(int);
+extern void foo608(int);
+extern void foo609(int);
+extern void foo610(int);
+extern void foo611(int);
+extern void foo612(int);
+extern void foo613(int);
+extern void foo614(int);
+extern void foo615(int);
+extern void foo616(int);
+extern void foo617(int);
+extern void foo618(int);
+extern void foo619(int);
+extern void foo620(int);
+extern void foo621(int);
+extern void foo622(int);
+extern void foo623(int);
+extern void foo624(int);
+extern void foo625(int);
+extern void foo626(int);
+extern void foo627(int);
+extern void foo628(int);
+extern void foo629(int);
+extern void foo630(int);
+extern void foo631(int);
+extern void foo632(int);
+extern void foo633(int);
+extern void foo634(int);
+extern void foo635(int);
+extern void foo636(int);
+extern void foo637(int);
+extern void foo638(int);
+extern void foo639(int);
+extern void foo640(int);
+extern void foo641(int);
+extern void foo642(int);
+extern void foo643(int);
+extern void foo644(int);
+extern void foo645(int);
+extern void foo646(int);
+extern void foo647(int);
+extern void foo648(int);
+extern void foo649(int);
+extern void foo650(int);
+extern void foo651(int);
+extern void foo652(int);
+extern void foo653(int);
+extern void foo654(int);
+extern void foo655(int);
+extern void foo656(int);
+extern void foo657(int);
+extern void foo658(int);
+extern void foo659(int);
+extern void foo660(int);
+extern void foo661(int);
+extern void foo662(int);
+extern void foo663(int);
+extern void foo664(int);
+extern void foo665(int);
+extern void foo666(int);
+extern void foo667(int);
+extern void foo668(int);
+extern void foo669(int);
+extern void foo670(int);
+extern void foo671(int);
+extern void foo672(int);
+extern void foo673(int);
+extern void foo674(int);
+extern void foo675(int);
+extern void foo676(int);
+extern void foo677(int);
+extern void foo678(int);
+extern void foo679(int);
+extern void foo680(int);
+extern void foo681(int);
+extern void foo682(int);
+extern void foo683(int);
+extern void foo684(int);
+extern void foo685(int);
+extern void foo686(int);
+extern void foo687(int);
+extern void foo688(int);
+extern void foo689(int);
+extern void foo690(int);
+extern void foo691(int);
+extern void foo692(int);
+extern void foo693(int);
+extern void foo694(int);
+extern void foo695(int);
+extern void foo696(int);
+extern void foo697(int);
+extern void foo698(int);
+extern void foo699(int);
+extern void foo700(int);
+extern void foo701(int);
+extern void foo702(int);
+extern void foo703(int);
+extern void foo704(int);
+extern void foo705(int);
+extern void foo706(int);
+extern void foo707(int);
+extern void foo708(int);
+extern void foo709(int);
+extern void foo710(int);
+extern void foo711(int);
+extern void foo712(int);
+extern void foo713(int);
+extern void foo714(int);
+extern void foo715(int);
+extern void foo716(int);
+extern void foo717(int);
+extern void foo718(int);
+extern void foo719(int);
+extern void foo720(int);
+extern void foo721(int);
+extern void foo722(int);
+extern void foo723(int);
+extern void foo724(int);
+extern void foo725(int);
+extern void foo726(int);
+extern void foo727(int);
+extern void foo728(int);
+extern void foo729(int);
+extern void foo730(int);
+extern void foo731(int);
+extern void foo732(int);
+extern void foo733(int);
+extern void foo734(int);
+extern void foo735(int);
+extern void foo736(int);
+extern void foo737(int);
+extern void foo738(int);
+extern void foo739(int);
+extern void foo740(int);
+extern void foo741(int);
+extern void foo742(int);
+extern void foo743(int);
+extern void foo744(int);
+extern void foo745(int);
+extern void foo746(int);
+extern void foo747(int);
+extern void foo748(int);
+extern void foo749(int);
+extern void foo750(int);
+extern void foo751(int);
+extern void foo752(int);
+extern void foo753(int);
+extern void foo754(int);
+extern void foo755(int);
+extern void foo756(int);
+extern void foo757(int);
+extern void foo758(int);
+extern void foo759(int);
+extern void foo760(int);
+extern void foo761(int);
+extern void foo762(int);
+extern void foo763(int);
+extern void foo764(int);
+extern void foo765(int);
+extern void foo766(int);
+extern void foo767(int);
+extern void foo768(int);
+extern void foo769(int);
+extern void foo770(int);
+extern void foo771(int);
+extern void foo772(int);
+extern void foo773(int);
+extern void foo774(int);
+extern void foo775(int);
+extern void foo776(int);
+extern void foo777(int);
+extern void foo778(int);
+extern void foo779(int);
+extern void foo780(int);
+extern void foo781(int);
+extern void foo782(int);
+extern void foo783(int);
+extern void foo784(int);
+extern void foo785(int);
+extern void foo786(int);
+extern void foo787(int);
+extern void foo788(int);
+extern void foo789(int);
+extern void foo790(int);
+extern void foo791(int);
+extern void foo792(int);
+extern void foo793(int);
+extern void foo794(int);
+extern void foo795(int);
+extern void foo796(int);
+extern void foo797(int);
+extern void foo798(int);
+extern void foo799(int);
+extern void foo800(int);
+extern void foo801(int);
+extern void foo802(int);
+extern void foo803(int);
+extern void foo804(int);
+extern void foo805(int);
+extern void foo806(int);
+extern void foo807(int);
+extern void foo808(int);
+extern void foo809(int);
+extern void foo810(int);
+extern void foo811(int);
+extern void foo812(int);
+extern void foo813(int);
+extern void foo814(int);
+extern void foo815(int);
+extern void foo816(int);
+extern void foo817(int);
+extern void foo818(int);
+extern void foo819(int);
+extern void foo820(int);
+extern void foo821(int);
+extern void foo822(int);
+extern void foo823(int);
+extern void foo824(int);
diff --git a/unit-tests/test-cases/jump-table-dynamic-lookup/main.c b/unit-tests/test-cases/jump-table-dynamic-lookup/main.c
new file mode 100644 (file)
index 0000000..6325af7
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2007 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+#include <stdio.h>  // fprintf(0x12345678), NULL
+#include <stdlib.h> // exit(0x12345678), EXIT_SUCCESS
+#include <dlfcn.h> 
+
+#include "test.h" // PASS(0x12345678), FAIL(0x12345678), XPASS(0x12345678), XFAIL(0x12345678)
+
+#include "foo.h"
+
+static void* callAll(void* p)
+{
+       foo001(0x12345678);
+       foo002(0x12345678);
+       foo003(0x12345678);
+       foo004(0x12345678);
+       foo005(0x12345678);
+       foo006(0x12345678);
+       foo007(0x12345678);
+       foo008(0x12345678);
+       foo009(0x12345678);
+       foo010(0x12345678);
+       foo011(0x12345678);
+       foo012(0x12345678);
+       foo013(0x12345678);
+       foo014(0x12345678);
+       foo015(0x12345678);
+       foo016(0x12345678);
+       foo017(0x12345678);
+       foo018(0x12345678);
+       foo019(0x12345678);
+       foo020(0x12345678);
+       foo021(0x12345678);
+       foo022(0x12345678);
+       foo023(0x12345678);
+       foo024(0x12345678);
+       foo025(0x12345678);
+       foo026(0x12345678);
+       foo027(0x12345678);
+       foo028(0x12345678);
+       foo029(0x12345678);
+       foo030(0x12345678);
+       foo031(0x12345678);
+       foo032(0x12345678);
+       return NULL;
+}
+
+int main()
+{
+       // load libfoo so that functions can be found dynamically
+       dlopen("libfoo.dylib", RTLD_LAZY);
+
+       // call all foos
+       callAll(NULL);
+
+       PASS("jump-table-dynamic-lookup");
+       return EXIT_SUCCESS;
+}
+
+
diff --git a/unit-tests/test-cases/jump-table-race/Makefile b/unit-tests/test-cases/jump-table-race/Makefile
new file mode 100644 (file)
index 0000000..abb4839
--- /dev/null
@@ -0,0 +1,45 @@
+##
+# Copyright (c) 2007 Apple Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+# 
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+# 
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+# 
+# @APPLE_LICENSE_HEADER_END@
+##
+TESTROOT = ../..
+include ${TESTROOT}/include/common.makefile
+
+run: all
+       ./main
+
+all: main
+
+###
+### The point of this test is that i386 "fast stubs" are updated in 
+### a thread safe manner.
+###
+
+main: main.c libfoo.dylib
+       ${CC} ${CCFLAGS} -I${TESTROOT}/include -o main main.c libfoo.dylib 
+
+libfoo.dylib: foo.c 
+       ${CC} ${CCFLAGS} -dynamiclib foo.c -o libfoo.dylib
+
+
+clean:
+       ${RM} ${RMFLAGS} main libfoo.dylib
+       
diff --git a/unit-tests/test-cases/jump-table-race/foo.c b/unit-tests/test-cases/jump-table-race/foo.c
new file mode 100644 (file)
index 0000000..35c9bb7
--- /dev/null
@@ -0,0 +1,827 @@
+#include "foo.h"
+
+void foo000(int p) {}
+void foo001(int p) {}
+void foo002(int p) {}
+void foo003(int p) {}
+void foo004(int p) {}
+void foo005(int p) {}
+void foo006(int p) {}
+void foo007(int p) {}
+void foo008(int p) {}
+void foo009(int p) {}
+void foo010(int p) {}
+void foo011(int p) {}
+void foo012(int p) {}
+void foo013(int p) {}
+void foo014(int p) {}
+void foo015(int p) {}
+void foo016(int p) {}
+void foo017(int p) {}
+void foo018(int p) {}
+void foo019(int p) {}
+void foo020(int p) {}
+void foo021(int p) {}
+void foo022(int p) {}
+void foo023(int p) {}
+void foo024(int p) {}
+void foo025(int p) {}
+void foo026(int p) {}
+void foo027(int p) {}
+void foo028(int p) {}
+void foo029(int p) {}
+void foo030(int p) {}
+void foo031(int p) {}
+void foo032(int p) {}
+void foo033(int p) {}
+void foo034(int p) {}
+void foo035(int p) {}
+void foo036(int p) {}
+void foo037(int p) {}
+void foo038(int p) {}
+void foo039(int p) {}
+void foo040(int p) {}
+void foo041(int p) {}
+void foo042(int p) {}
+void foo043(int p) {}
+void foo044(int p) {}
+void foo045(int p) {}
+void foo046(int p) {}
+void foo047(int p) {}
+void foo048(int p) {}
+void foo049(int p) {}
+void foo050(int p) {}
+void foo051(int p) {}
+void foo052(int p) {}
+void foo053(int p) {}
+void foo054(int p) {}
+void foo055(int p) {}
+void foo056(int p) {}
+void foo057(int p) {}
+void foo058(int p) {}
+void foo059(int p) {}
+void foo060(int p) {}
+void foo061(int p) {}
+void foo062(int p) {}
+void foo063(int p) {}
+void foo064(int p) {}
+void foo065(int p) {}
+void foo066(int p) {}
+void foo067(int p) {}
+void foo068(int p) {}
+void foo069(int p) {}
+void foo070(int p) {}
+void foo071(int p) {}
+void foo072(int p) {}
+void foo073(int p) {}
+void foo074(int p) {}
+void foo075(int p) {}
+void foo076(int p) {}
+void foo077(int p) {}
+void foo078(int p) {}
+void foo079(int p) {}
+void foo080(int p) {}
+void foo081(int p) {}
+void foo082(int p) {}
+void foo083(int p) {}
+void foo084(int p) {}
+void foo085(int p) {}
+void foo086(int p) {}
+void foo087(int p) {}
+void foo088(int p) {}
+void foo089(int p) {}
+void foo090(int p) {}
+void foo091(int p) {}
+void foo092(int p) {}
+void foo093(int p) {}
+void foo094(int p) {}
+void foo095(int p) {}
+void foo096(int p) {}
+void foo097(int p) {}
+void foo098(int p) {}
+void foo099(int p) {}
+void foo100(int p) {}
+void foo101(int p) {}
+void foo102(int p) {}
+void foo103(int p) {}
+void foo104(int p) {}
+void foo105(int p) {}
+void foo106(int p) {}
+void foo107(int p) {}
+void foo108(int p) {}
+void foo109(int p) {}
+void foo110(int p) {}
+void foo111(int p) {}
+void foo112(int p) {}
+void foo113(int p) {}
+void foo114(int p) {}
+void foo115(int p) {}
+void foo116(int p) {}
+void foo117(int p) {}
+void foo118(int p) {}
+void foo119(int p) {}
+void foo120(int p) {}
+void foo121(int p) {}
+void foo122(int p) {}
+void foo123(int p) {}
+void foo124(int p) {}
+void foo125(int p) {}
+void foo126(int p) {}
+void foo127(int p) {}
+void foo128(int p) {}
+void foo129(int p) {}
+void foo130(int p) {}
+void foo131(int p) {}
+void foo132(int p) {}
+void foo133(int p) {}
+void foo134(int p) {}
+void foo135(int p) {}
+void foo136(int p) {}
+void foo137(int p) {}
+void foo138(int p) {}
+void foo139(int p) {}
+void foo140(int p) {}
+void foo141(int p) {}
+void foo142(int p) {}
+void foo143(int p) {}
+void foo144(int p) {}
+void foo145(int p) {}
+void foo146(int p) {}
+void foo147(int p) {}
+void foo148(int p) {}
+void foo149(int p) {}
+void foo150(int p) {}
+void foo151(int p) {}
+void foo152(int p) {}
+void foo153(int p) {}
+void foo154(int p) {}
+void foo155(int p) {}
+void foo156(int p) {}
+void foo157(int p) {}
+void foo158(int p) {}
+void foo159(int p) {}
+void foo160(int p) {}
+void foo161(int p) {}
+void foo162(int p) {}
+void foo163(int p) {}
+void foo164(int p) {}
+void foo165(int p) {}
+void foo166(int p) {}
+void foo167(int p) {}
+void foo168(int p) {}
+void foo169(int p) {}
+void foo170(int p) {}
+void foo171(int p) {}
+void foo172(int p) {}
+void foo173(int p) {}
+void foo174(int p) {}
+void foo175(int p) {}
+void foo176(int p) {}
+void foo177(int p) {}
+void foo178(int p) {}
+void foo179(int p) {}
+void foo180(int p) {}
+void foo181(int p) {}
+void foo182(int p) {}
+void foo183(int p) {}
+void foo184(int p) {}
+void foo185(int p) {}
+void foo186(int p) {}
+void foo187(int p) {}
+void foo188(int p) {}
+void foo189(int p) {}
+void foo190(int p) {}
+void foo191(int p) {}
+void foo192(int p) {}
+void foo193(int p) {}
+void foo194(int p) {}
+void foo195(int p) {}
+void foo196(int p) {}
+void foo197(int p) {}
+void foo198(int p) {}
+void foo199(int p) {}
+void foo200(int p) {}
+void foo201(int p) {}
+void foo202(int p) {}
+void foo203(int p) {}
+void foo204(int p) {}
+void foo205(int p) {}
+void foo206(int p) {}
+void foo207(int p) {}
+void foo208(int p) {}
+void foo209(int p) {}
+void foo210(int p) {}
+void foo211(int p) {}
+void foo212(int p) {}
+void foo213(int p) {}
+void foo214(int p) {}
+void foo215(int p) {}
+void foo216(int p) {}
+void foo217(int p) {}
+void foo218(int p) {}
+void foo219(int p) {}
+void foo220(int p) {}
+void foo221(int p) {}
+void foo222(int p) {}
+void foo223(int p) {}
+void foo224(int p) {}
+void foo225(int p) {}
+void foo226(int p) {}
+void foo227(int p) {}
+void foo228(int p) {}
+void foo229(int p) {}
+void foo230(int p) {}
+void foo231(int p) {}
+void foo232(int p) {}
+void foo233(int p) {}
+void foo234(int p) {}
+void foo235(int p) {}
+void foo236(int p) {}
+void foo237(int p) {}
+void foo238(int p) {}
+void foo239(int p) {}
+void foo240(int p) {}
+void foo241(int p) {}
+void foo242(int p) {}
+void foo243(int p) {}
+void foo244(int p) {}
+void foo245(int p) {}
+void foo246(int p) {}
+void foo247(int p) {}
+void foo248(int p) {}
+void foo249(int p) {}
+void foo250(int p) {}
+void foo251(int p) {}
+void foo252(int p) {}
+void foo253(int p) {}
+void foo254(int p) {}
+void foo255(int p) {}
+void foo256(int p) {}
+void foo257(int p) {}
+void foo258(int p) {}
+void foo259(int p) {}
+void foo260(int p) {}
+void foo261(int p) {}
+void foo262(int p) {}
+void foo263(int p) {}
+void foo264(int p) {}
+void foo265(int p) {}
+void foo266(int p) {}
+void foo267(int p) {}
+void foo268(int p) {}
+void foo269(int p) {}
+void foo270(int p) {}
+void foo271(int p) {}
+void foo272(int p) {}
+void foo273(int p) {}
+void foo274(int p) {}
+void foo275(int p) {}
+void foo276(int p) {}
+void foo277(int p) {}
+void foo278(int p) {}
+void foo279(int p) {}
+void foo280(int p) {}
+void foo281(int p) {}
+void foo282(int p) {}
+void foo283(int p) {}
+void foo284(int p) {}
+void foo285(int p) {}
+void foo286(int p) {}
+void foo287(int p) {}
+void foo288(int p) {}
+void foo289(int p) {}
+void foo290(int p) {}
+void foo291(int p) {}
+void foo292(int p) {}
+void foo293(int p) {}
+void foo294(int p) {}
+void foo295(int p) {}
+void foo296(int p) {}
+void foo297(int p) {}
+void foo298(int p) {}
+void foo299(int p) {}
+void foo300(int p) {}
+void foo301(int p) {}
+void foo302(int p) {}
+void foo303(int p) {}
+void foo304(int p) {}
+void foo305(int p) {}
+void foo306(int p) {}
+void foo307(int p) {}
+void foo308(int p) {}
+void foo309(int p) {}
+void foo310(int p) {}
+void foo311(int p) {}
+void foo312(int p) {}
+void foo313(int p) {}
+void foo314(int p) {}
+void foo315(int p) {}
+void foo316(int p) {}
+void foo317(int p) {}
+void foo318(int p) {}
+void foo319(int p) {}
+void foo320(int p) {}
+void foo321(int p) {}
+void foo322(int p) {}
+void foo323(int p) {}
+void foo324(int p) {}
+void foo325(int p) {}
+void foo326(int p) {}
+void foo327(int p) {}
+void foo328(int p) {}
+void foo329(int p) {}
+void foo330(int p) {}
+void foo331(int p) {}
+void foo332(int p) {}
+void foo333(int p) {}
+void foo334(int p) {}
+void foo335(int p) {}
+void foo336(int p) {}
+void foo337(int p) {}
+void foo338(int p) {}
+void foo339(int p) {}
+void foo340(int p) {}
+void foo341(int p) {}
+void foo342(int p) {}
+void foo343(int p) {}
+void foo344(int p) {}
+void foo345(int p) {}
+void foo346(int p) {}
+void foo347(int p) {}
+void foo348(int p) {}
+void foo349(int p) {}
+void foo350(int p) {}
+void foo351(int p) {}
+void foo352(int p) {}
+void foo353(int p) {}
+void foo354(int p) {}
+void foo355(int p) {}
+void foo356(int p) {}
+void foo357(int p) {}
+void foo358(int p) {}
+void foo359(int p) {}
+void foo360(int p) {}
+void foo361(int p) {}
+void foo362(int p) {}
+void foo363(int p) {}
+void foo364(int p) {}
+void foo365(int p) {}
+void foo366(int p) {}
+void foo367(int p) {}
+void foo368(int p) {}
+void foo369(int p) {}
+void foo370(int p) {}
+void foo371(int p) {}
+void foo372(int p) {}
+void foo373(int p) {}
+void foo374(int p) {}
+void foo375(int p) {}
+void foo376(int p) {}
+void foo377(int p) {}
+void foo378(int p) {}
+void foo379(int p) {}
+void foo380(int p) {}
+void foo381(int p) {}
+void foo382(int p) {}
+void foo383(int p) {}
+void foo384(int p) {}
+void foo385(int p) {}
+void foo386(int p) {}
+void foo387(int p) {}
+void foo388(int p) {}
+void foo389(int p) {}
+void foo390(int p) {}
+void foo391(int p) {}
+void foo392(int p) {}
+void foo393(int p) {}
+void foo394(int p) {}
+void foo395(int p) {}
+void foo396(int p) {}
+void foo397(int p) {}
+void foo398(int p) {}
+void foo399(int p) {}
+void foo400(int p) {}
+void foo401(int p) {}
+void foo402(int p) {}
+void foo403(int p) {}
+void foo404(int p) {}
+void foo405(int p) {}
+void foo406(int p) {}
+void foo407(int p) {}
+void foo408(int p) {}
+void foo409(int p) {}
+void foo410(int p) {}
+void foo411(int p) {}
+void foo412(int p) {}
+void foo413(int p) {}
+void foo414(int p) {}
+void foo415(int p) {}
+void foo416(int p) {}
+void foo417(int p) {}
+void foo418(int p) {}
+void foo419(int p) {}
+void foo420(int p) {}
+void foo421(int p) {}
+void foo422(int p) {}
+void foo423(int p) {}
+void foo424(int p) {}
+void foo425(int p) {}
+void foo426(int p) {}
+void foo427(int p) {}
+void foo428(int p) {}
+void foo429(int p) {}
+void foo430(int p) {}
+void foo431(int p) {}
+void foo432(int p) {}
+void foo433(int p) {}
+void foo434(int p) {}
+void foo435(int p) {}
+void foo436(int p) {}
+void foo437(int p) {}
+void foo438(int p) {}
+void foo439(int p) {}
+void foo440(int p) {}
+void foo441(int p) {}
+void foo442(int p) {}
+void foo443(int p) {}
+void foo444(int p) {}
+void foo445(int p) {}
+void foo446(int p) {}
+void foo447(int p) {}
+void foo448(int p) {}
+void foo449(int p) {}
+void foo450(int p) {}
+void foo451(int p) {}
+void foo452(int p) {}
+void foo453(int p) {}
+void foo454(int p) {}
+void foo455(int p) {}
+void foo456(int p) {}
+void foo457(int p) {}
+void foo458(int p) {}
+void foo459(int p) {}
+void foo460(int p) {}
+void foo461(int p) {}
+void foo462(int p) {}
+void foo463(int p) {}
+void foo464(int p) {}
+void foo465(int p) {}
+void foo466(int p) {}
+void foo467(int p) {}
+void foo468(int p) {}
+void foo469(int p) {}
+void foo470(int p) {}
+void foo471(int p) {}
+void foo472(int p) {}
+void foo473(int p) {}
+void foo474(int p) {}
+void foo475(int p) {}
+void foo476(int p) {}
+void foo477(int p) {}
+void foo478(int p) {}
+void foo479(int p) {}
+void foo480(int p) {}
+void foo481(int p) {}
+void foo482(int p) {}
+void foo483(int p) {}
+void foo484(int p) {}
+void foo485(int p) {}
+void foo486(int p) {}
+void foo487(int p) {}
+void foo488(int p) {}
+void foo489(int p) {}
+void foo490(int p) {}
+void foo491(int p) {}
+void foo492(int p) {}
+void foo493(int p) {}
+void foo494(int p) {}
+void foo495(int p) {}
+void foo496(int p) {}
+void foo497(int p) {}
+void foo498(int p) {}
+void foo499(int p) {}
+void foo500(int p) {}
+void foo501(int p) {}
+void foo502(int p) {}
+void foo503(int p) {}
+void foo504(int p) {}
+void foo505(int p) {}
+void foo506(int p) {}
+void foo507(int p) {}
+void foo508(int p) {}
+void foo509(int p) {}
+void foo510(int p) {}
+void foo511(int p) {}
+void foo512(int p) {}
+void foo513(int p) {}
+void foo514(int p) {}
+void foo515(int p) {}
+void foo516(int p) {}
+void foo517(int p) {}
+void foo518(int p) {}
+void foo519(int p) {}
+void foo520(int p) {}
+void foo521(int p) {}
+void foo522(int p) {}
+void foo523(int p) {}
+void foo524(int p) {}
+void foo525(int p) {}
+void foo526(int p) {}
+void foo527(int p) {}
+void foo528(int p) {}
+void foo529(int p) {}
+void foo530(int p) {}
+void foo531(int p) {}
+void foo532(int p) {}
+void foo533(int p) {}
+void foo534(int p) {}
+void foo535(int p) {}
+void foo536(int p) {}
+void foo537(int p) {}
+void foo538(int p) {}
+void foo539(int p) {}
+void foo540(int p) {}
+void foo541(int p) {}
+void foo542(int p) {}
+void foo543(int p) {}
+void foo544(int p) {}
+void foo545(int p) {}
+void foo546(int p) {}
+void foo547(int p) {}
+void foo548(int p) {}
+void foo549(int p) {}
+void foo550(int p) {}
+void foo551(int p) {}
+void foo552(int p) {}
+void foo553(int p) {}
+void foo554(int p) {}
+void foo555(int p) {}
+void foo556(int p) {}
+void foo557(int p) {}
+void foo558(int p) {}
+void foo559(int p) {}
+void foo560(int p) {}
+void foo561(int p) {}
+void foo562(int p) {}
+void foo563(int p) {}
+void foo564(int p) {}
+void foo565(int p) {}
+void foo566(int p) {}
+void foo567(int p) {}
+void foo568(int p) {}
+void foo569(int p) {}
+void foo570(int p) {}
+void foo571(int p) {}
+void foo572(int p) {}
+void foo573(int p) {}
+void foo574(int p) {}
+void foo575(int p) {}
+void foo576(int p) {}
+void foo577(int p) {}
+void foo578(int p) {}
+void foo579(int p) {}
+void foo580(int p) {}
+void foo581(int p) {}
+void foo582(int p) {}
+void foo583(int p) {}
+void foo584(int p) {}
+void foo585(int p) {}
+void foo586(int p) {}
+void foo587(int p) {}
+void foo588(int p) {}
+void foo589(int p) {}
+void foo590(int p) {}
+void foo591(int p) {}
+void foo592(int p) {}
+void foo593(int p) {}
+void foo594(int p) {}
+void foo595(int p) {}
+void foo596(int p) {}
+void foo597(int p) {}
+void foo598(int p) {}
+void foo599(int p) {}
+void foo600(int p) {}
+void foo601(int p) {}
+void foo602(int p) {}
+void foo603(int p) {}
+void foo604(int p) {}
+void foo605(int p) {}
+void foo606(int p) {}
+void foo607(int p) {}
+void foo608(int p) {}
+void foo609(int p) {}
+void foo610(int p) {}
+void foo611(int p) {}
+void foo612(int p) {}
+void foo613(int p) {}
+void foo614(int p) {}
+void foo615(int p) {}
+void foo616(int p) {}
+void foo617(int p) {}
+void foo618(int p) {}
+void foo619(int p) {}
+void foo620(int p) {}
+void foo621(int p) {}
+void foo622(int p) {}
+void foo623(int p) {}
+void foo624(int p) {}
+void foo625(int p) {}
+void foo626(int p) {}
+void foo627(int p) {}
+void foo628(int p) {}
+void foo629(int p) {}
+void foo630(int p) {}
+void foo631(int p) {}
+void foo632(int p) {}
+void foo633(int p) {}
+void foo634(int p) {}
+void foo635(int p) {}
+void foo636(int p) {}
+void foo637(int p) {}
+void foo638(int p) {}
+void foo639(int p) {}
+void foo640(int p) {}
+void foo641(int p) {}
+void foo642(int p) {}
+void foo643(int p) {}
+void foo644(int p) {}
+void foo645(int p) {}
+void foo646(int p) {}
+void foo647(int p) {}
+void foo648(int p) {}
+void foo649(int p) {}
+void foo650(int p) {}
+void foo651(int p) {}
+void foo652(int p) {}
+void foo653(int p) {}
+void foo654(int p) {}
+void foo655(int p) {}
+void foo656(int p) {}
+void foo657(int p) {}
+void foo658(int p) {}
+void foo659(int p) {}
+void foo660(int p) {}
+void foo661(int p) {}
+void foo662(int p) {}
+void foo663(int p) {}
+void foo664(int p) {}
+void foo665(int p) {}
+void foo666(int p) {}
+void foo667(int p) {}
+void foo668(int p) {}
+void foo669(int p) {}
+void foo670(int p) {}
+void foo671(int p) {}
+void foo672(int p) {}
+void foo673(int p) {}
+void foo674(int p) {}
+void foo675(int p) {}
+void foo676(int p) {}
+void foo677(int p) {}
+void foo678(int p) {}
+void foo679(int p) {}
+void foo680(int p) {}
+void foo681(int p) {}
+void foo682(int p) {}
+void foo683(int p) {}
+void foo684(int p) {}
+void foo685(int p) {}
+void foo686(int p) {}
+void foo687(int p) {}
+void foo688(int p) {}
+void foo689(int p) {}
+void foo690(int p) {}
+void foo691(int p) {}
+void foo692(int p) {}
+void foo693(int p) {}
+void foo694(int p) {}
+void foo695(int p) {}
+void foo696(int p) {}
+void foo697(int p) {}
+void foo698(int p) {}
+void foo699(int p) {}
+void foo700(int p) {}
+void foo701(int p) {}
+void foo702(int p) {}
+void foo703(int p) {}
+void foo704(int p) {}
+void foo705(int p) {}
+void foo706(int p) {}
+void foo707(int p) {}
+void foo708(int p) {}
+void foo709(int p) {}
+void foo710(int p) {}
+void foo711(int p) {}
+void foo712(int p) {}
+void foo713(int p) {}
+void foo714(int p) {}
+void foo715(int p) {}
+void foo716(int p) {}
+void foo717(int p) {}
+void foo718(int p) {}
+void foo719(int p) {}
+void foo720(int p) {}
+void foo721(int p) {}
+void foo722(int p) {}
+void foo723(int p) {}
+void foo724(int p) {}
+void foo725(int p) {}
+void foo726(int p) {}
+void foo727(int p) {}
+void foo728(int p) {}
+void foo729(int p) {}
+void foo730(int p) {}
+void foo731(int p) {}
+void foo732(int p) {}
+void foo733(int p) {}
+void foo734(int p) {}
+void foo735(int p) {}
+void foo736(int p) {}
+void foo737(int p) {}
+void foo738(int p) {}
+void foo739(int p) {}
+void foo740(int p) {}
+void foo741(int p) {}
+void foo742(int p) {}
+void foo743(int p) {}
+void foo744(int p) {}
+void foo745(int p) {}
+void foo746(int p) {}
+void foo747(int p) {}
+void foo748(int p) {}
+void foo749(int p) {}
+void foo750(int p) {}
+void foo751(int p) {}
+void foo752(int p) {}
+void foo753(int p) {}
+void foo754(int p) {}
+void foo755(int p) {}
+void foo756(int p) {}
+void foo757(int p) {}
+void foo758(int p) {}
+void foo759(int p) {}
+void foo760(int p) {}
+void foo761(int p) {}
+void foo762(int p) {}
+void foo763(int p) {}
+void foo764(int p) {}
+void foo765(int p) {}
+void foo766(int p) {}
+void foo767(int p) {}
+void foo768(int p) {}
+void foo769(int p) {}
+void foo770(int p) {}
+void foo771(int p) {}
+void foo772(int p) {}
+void foo773(int p) {}
+void foo774(int p) {}
+void foo775(int p) {}
+void foo776(int p) {}
+void foo777(int p) {}
+void foo778(int p) {}
+void foo779(int p) {}
+void foo780(int p) {}
+void foo781(int p) {}
+void foo782(int p) {}
+void foo783(int p) {}
+void foo784(int p) {}
+void foo785(int p) {}
+void foo786(int p) {}
+void foo787(int p) {}
+void foo788(int p) {}
+void foo789(int p) {}
+void foo790(int p) {}
+void foo791(int p) {}
+void foo792(int p) {}
+void foo793(int p) {}
+void foo794(int p) {}
+void foo795(int p) {}
+void foo796(int p) {}
+void foo797(int p) {}
+void foo798(int p) {}
+void foo799(int p) {}
+void foo800(int p) {}
+void foo801(int p) {}
+void foo802(int p) {}
+void foo803(int p) {}
+void foo804(int p) {}
+void foo805(int p) {}
+void foo806(int p) {}
+void foo807(int p) {}
+void foo808(int p) {}
+void foo809(int p) {}
+void foo810(int p) {}
+void foo811(int p) {}
+void foo812(int p) {}
+void foo813(int p) {}
+void foo814(int p) {}
+void foo815(int p) {}
+void foo816(int p) {}
+void foo817(int p) {}
+void foo818(int p) {}
+void foo819(int p) {}
+void foo820(int p) {}
+void foo821(int p) {}
+void foo822(int p) {}
+void foo823(int p) {}
+void foo824(int p) {}
diff --git a/unit-tests/test-cases/jump-table-race/foo.h b/unit-tests/test-cases/jump-table-race/foo.h
new file mode 100644 (file)
index 0000000..33a9be4
--- /dev/null
@@ -0,0 +1,825 @@
+extern void foo000(int);
+extern void foo001(int);
+extern void foo002(int);
+extern void foo003(int);
+extern void foo004(int);
+extern void foo005(int);
+extern void foo006(int);
+extern void foo007(int);
+extern void foo008(int);
+extern void foo009(int);
+extern void foo010(int);
+extern void foo011(int);
+extern void foo012(int);
+extern void foo013(int);
+extern void foo014(int);
+extern void foo015(int);
+extern void foo016(int);
+extern void foo017(int);
+extern void foo018(int);
+extern void foo019(int);
+extern void foo020(int);
+extern void foo021(int);
+extern void foo022(int);
+extern void foo023(int);
+extern void foo024(int);
+extern void foo025(int);
+extern void foo026(int);
+extern void foo027(int);
+extern void foo028(int);
+extern void foo029(int);
+extern void foo030(int);
+extern void foo031(int);
+extern void foo032(int);
+extern void foo033(int);
+extern void foo034(int);
+extern void foo035(int);
+extern void foo036(int);
+extern void foo037(int);
+extern void foo038(int);
+extern void foo039(int);
+extern void foo040(int);
+extern void foo041(int);
+extern void foo042(int);
+extern void foo043(int);
+extern void foo044(int);
+extern void foo045(int);
+extern void foo046(int);
+extern void foo047(int);
+extern void foo048(int);
+extern void foo049(int);
+extern void foo050(int);
+extern void foo051(int);
+extern void foo052(int);
+extern void foo053(int);
+extern void foo054(int);
+extern void foo055(int);
+extern void foo056(int);
+extern void foo057(int);
+extern void foo058(int);
+extern void foo059(int);
+extern void foo060(int);
+extern void foo061(int);
+extern void foo062(int);
+extern void foo063(int);
+extern void foo064(int);
+extern void foo065(int);
+extern void foo066(int);
+extern void foo067(int);
+extern void foo068(int);
+extern void foo069(int);
+extern void foo070(int);
+extern void foo071(int);
+extern void foo072(int);
+extern void foo073(int);
+extern void foo074(int);
+extern void foo075(int);
+extern void foo076(int);
+extern void foo077(int);
+extern void foo078(int);
+extern void foo079(int);
+extern void foo080(int);
+extern void foo081(int);
+extern void foo082(int);
+extern void foo083(int);
+extern void foo084(int);
+extern void foo085(int);
+extern void foo086(int);
+extern void foo087(int);
+extern void foo088(int);
+extern void foo089(int);
+extern void foo090(int);
+extern void foo091(int);
+extern void foo092(int);
+extern void foo093(int);
+extern void foo094(int);
+extern void foo095(int);
+extern void foo096(int);
+extern void foo097(int);
+extern void foo098(int);
+extern void foo099(int);
+extern void foo100(int);
+extern void foo101(int);
+extern void foo102(int);
+extern void foo103(int);
+extern void foo104(int);
+extern void foo105(int);
+extern void foo106(int);
+extern void foo107(int);
+extern void foo108(int);
+extern void foo109(int);
+extern void foo110(int);
+extern void foo111(int);
+extern void foo112(int);
+extern void foo113(int);
+extern void foo114(int);
+extern void foo115(int);
+extern void foo116(int);
+extern void foo117(int);
+extern void foo118(int);
+extern void foo119(int);
+extern void foo120(int);
+extern void foo121(int);
+extern void foo122(int);
+extern void foo123(int);
+extern void foo124(int);
+extern void foo125(int);
+extern void foo126(int);
+extern void foo127(int);
+extern void foo128(int);
+extern void foo129(int);
+extern void foo130(int);
+extern void foo131(int);
+extern void foo132(int);
+extern void foo133(int);
+extern void foo134(int);
+extern void foo135(int);
+extern void foo136(int);
+extern void foo137(int);
+extern void foo138(int);
+extern void foo139(int);
+extern void foo140(int);
+extern void foo141(int);
+extern void foo142(int);
+extern void foo143(int);
+extern void foo144(int);
+extern void foo145(int);
+extern void foo146(int);
+extern void foo147(int);
+extern void foo148(int);
+extern void foo149(int);
+extern void foo150(int);
+extern void foo151(int);
+extern void foo152(int);
+extern void foo153(int);
+extern void foo154(int);
+extern void foo155(int);
+extern void foo156(int);
+extern void foo157(int);
+extern void foo158(int);
+extern void foo159(int);
+extern void foo160(int);
+extern void foo161(int);
+extern void foo162(int);
+extern void foo163(int);
+extern void foo164(int);
+extern void foo165(int);
+extern void foo166(int);
+extern void foo167(int);
+extern void foo168(int);
+extern void foo169(int);
+extern void foo170(int);
+extern void foo171(int);
+extern void foo172(int);
+extern void foo173(int);
+extern void foo174(int);
+extern void foo175(int);
+extern void foo176(int);
+extern void foo177(int);
+extern void foo178(int);
+extern void foo179(int);
+extern void foo180(int);
+extern void foo181(int);
+extern void foo182(int);
+extern void foo183(int);
+extern void foo184(int);
+extern void foo185(int);
+extern void foo186(int);
+extern void foo187(int);
+extern void foo188(int);
+extern void foo189(int);
+extern void foo190(int);
+extern void foo191(int);
+extern void foo192(int);
+extern void foo193(int);
+extern void foo194(int);
+extern void foo195(int);
+extern void foo196(int);
+extern void foo197(int);
+extern void foo198(int);
+extern void foo199(int);
+extern void foo200(int);
+extern void foo201(int);
+extern void foo202(int);
+extern void foo203(int);
+extern void foo204(int);
+extern void foo205(int);
+extern void foo206(int);
+extern void foo207(int);
+extern void foo208(int);
+extern void foo209(int);
+extern void foo210(int);
+extern void foo211(int);
+extern void foo212(int);
+extern void foo213(int);
+extern void foo214(int);
+extern void foo215(int);
+extern void foo216(int);
+extern void foo217(int);
+extern void foo218(int);
+extern void foo219(int);
+extern void foo220(int);
+extern void foo221(int);
+extern void foo222(int);
+extern void foo223(int);
+extern void foo224(int);
+extern void foo225(int);
+extern void foo226(int);
+extern void foo227(int);
+extern void foo228(int);
+extern void foo229(int);
+extern void foo230(int);
+extern void foo231(int);
+extern void foo232(int);
+extern void foo233(int);
+extern void foo234(int);
+extern void foo235(int);
+extern void foo236(int);
+extern void foo237(int);
+extern void foo238(int);
+extern void foo239(int);
+extern void foo240(int);
+extern void foo241(int);
+extern void foo242(int);
+extern void foo243(int);
+extern void foo244(int);
+extern void foo245(int);
+extern void foo246(int);
+extern void foo247(int);
+extern void foo248(int);
+extern void foo249(int);
+extern void foo250(int);
+extern void foo251(int);
+extern void foo252(int);
+extern void foo253(int);
+extern void foo254(int);
+extern void foo255(int);
+extern void foo256(int);
+extern void foo257(int);
+extern void foo258(int);
+extern void foo259(int);
+extern void foo260(int);
+extern void foo261(int);
+extern void foo262(int);
+extern void foo263(int);
+extern void foo264(int);
+extern void foo265(int);
+extern void foo266(int);
+extern void foo267(int);
+extern void foo268(int);
+extern void foo269(int);
+extern void foo270(int);
+extern void foo271(int);
+extern void foo272(int);
+extern void foo273(int);
+extern void foo274(int);
+extern void foo275(int);
+extern void foo276(int);
+extern void foo277(int);
+extern void foo278(int);
+extern void foo279(int);
+extern void foo280(int);
+extern void foo281(int);
+extern void foo282(int);
+extern void foo283(int);
+extern void foo284(int);
+extern void foo285(int);
+extern void foo286(int);
+extern void foo287(int);
+extern void foo288(int);
+extern void foo289(int);
+extern void foo290(int);
+extern void foo291(int);
+extern void foo292(int);
+extern void foo293(int);
+extern void foo294(int);
+extern void foo295(int);
+extern void foo296(int);
+extern void foo297(int);
+extern void foo298(int);
+extern void foo299(int);
+extern void foo300(int);
+extern void foo301(int);
+extern void foo302(int);
+extern void foo303(int);
+extern void foo304(int);
+extern void foo305(int);
+extern void foo306(int);
+extern void foo307(int);
+extern void foo308(int);
+extern void foo309(int);
+extern void foo310(int);
+extern void foo311(int);
+extern void foo312(int);
+extern void foo313(int);
+extern void foo314(int);
+extern void foo315(int);
+extern void foo316(int);
+extern void foo317(int);
+extern void foo318(int);
+extern void foo319(int);
+extern void foo320(int);
+extern void foo321(int);
+extern void foo322(int);
+extern void foo323(int);
+extern void foo324(int);
+extern void foo325(int);
+extern void foo326(int);
+extern void foo327(int);
+extern void foo328(int);
+extern void foo329(int);
+extern void foo330(int);
+extern void foo331(int);
+extern void foo332(int);
+extern void foo333(int);
+extern void foo334(int);
+extern void foo335(int);
+extern void foo336(int);
+extern void foo337(int);
+extern void foo338(int);
+extern void foo339(int);
+extern void foo340(int);
+extern void foo341(int);
+extern void foo342(int);
+extern void foo343(int);
+extern void foo344(int);
+extern void foo345(int);
+extern void foo346(int);
+extern void foo347(int);
+extern void foo348(int);
+extern void foo349(int);
+extern void foo350(int);
+extern void foo351(int);
+extern void foo352(int);
+extern void foo353(int);
+extern void foo354(int);
+extern void foo355(int);
+extern void foo356(int);
+extern void foo357(int);
+extern void foo358(int);
+extern void foo359(int);
+extern void foo360(int);
+extern void foo361(int);
+extern void foo362(int);
+extern void foo363(int);
+extern void foo364(int);
+extern void foo365(int);
+extern void foo366(int);
+extern void foo367(int);
+extern void foo368(int);
+extern void foo369(int);
+extern void foo370(int);
+extern void foo371(int);
+extern void foo372(int);
+extern void foo373(int);
+extern void foo374(int);
+extern void foo375(int);
+extern void foo376(int);
+extern void foo377(int);
+extern void foo378(int);
+extern void foo379(int);
+extern void foo380(int);
+extern void foo381(int);
+extern void foo382(int);
+extern void foo383(int);
+extern void foo384(int);
+extern void foo385(int);
+extern void foo386(int);
+extern void foo387(int);
+extern void foo388(int);
+extern void foo389(int);
+extern void foo390(int);
+extern void foo391(int);
+extern void foo392(int);
+extern void foo393(int);
+extern void foo394(int);
+extern void foo395(int);
+extern void foo396(int);
+extern void foo397(int);
+extern void foo398(int);
+extern void foo399(int);
+extern void foo400(int);
+extern void foo401(int);
+extern void foo402(int);
+extern void foo403(int);
+extern void foo404(int);
+extern void foo405(int);
+extern void foo406(int);
+extern void foo407(int);
+extern void foo408(int);
+extern void foo409(int);
+extern void foo410(int);
+extern void foo411(int);
+extern void foo412(int);
+extern void foo413(int);
+extern void foo414(int);
+extern void foo415(int);
+extern void foo416(int);
+extern void foo417(int);
+extern void foo418(int);
+extern void foo419(int);
+extern void foo420(int);
+extern void foo421(int);
+extern void foo422(int);
+extern void foo423(int);
+extern void foo424(int);
+extern void foo425(int);
+extern void foo426(int);
+extern void foo427(int);
+extern void foo428(int);
+extern void foo429(int);
+extern void foo430(int);
+extern void foo431(int);
+extern void foo432(int);
+extern void foo433(int);
+extern void foo434(int);
+extern void foo435(int);
+extern void foo436(int);
+extern void foo437(int);
+extern void foo438(int);
+extern void foo439(int);
+extern void foo440(int);
+extern void foo441(int);
+extern void foo442(int);
+extern void foo443(int);
+extern void foo444(int);
+extern void foo445(int);
+extern void foo446(int);
+extern void foo447(int);
+extern void foo448(int);
+extern void foo449(int);
+extern void foo450(int);
+extern void foo451(int);
+extern void foo452(int);
+extern void foo453(int);
+extern void foo454(int);
+extern void foo455(int);
+extern void foo456(int);
+extern void foo457(int);
+extern void foo458(int);
+extern void foo459(int);
+extern void foo460(int);
+extern void foo461(int);
+extern void foo462(int);
+extern void foo463(int);
+extern void foo464(int);
+extern void foo465(int);
+extern void foo466(int);
+extern void foo467(int);
+extern void foo468(int);
+extern void foo469(int);
+extern void foo470(int);
+extern void foo471(int);
+extern void foo472(int);
+extern void foo473(int);
+extern void foo474(int);
+extern void foo475(int);
+extern void foo476(int);
+extern void foo477(int);
+extern void foo478(int);
+extern void foo479(int);
+extern void foo480(int);
+extern void foo481(int);
+extern void foo482(int);
+extern void foo483(int);
+extern void foo484(int);
+extern void foo485(int);
+extern void foo486(int);
+extern void foo487(int);
+extern void foo488(int);
+extern void foo489(int);
+extern void foo490(int);
+extern void foo491(int);
+extern void foo492(int);
+extern void foo493(int);
+extern void foo494(int);
+extern void foo495(int);
+extern void foo496(int);
+extern void foo497(int);
+extern void foo498(int);
+extern void foo499(int);
+extern void foo500(int);
+extern void foo501(int);
+extern void foo502(int);
+extern void foo503(int);
+extern void foo504(int);
+extern void foo505(int);
+extern void foo506(int);
+extern void foo507(int);
+extern void foo508(int);
+extern void foo509(int);
+extern void foo510(int);
+extern void foo511(int);
+extern void foo512(int);
+extern void foo513(int);
+extern void foo514(int);
+extern void foo515(int);
+extern void foo516(int);
+extern void foo517(int);
+extern void foo518(int);
+extern void foo519(int);
+extern void foo520(int);
+extern void foo521(int);
+extern void foo522(int);
+extern void foo523(int);
+extern void foo524(int);
+extern void foo525(int);
+extern void foo526(int);
+extern void foo527(int);
+extern void foo528(int);
+extern void foo529(int);
+extern void foo530(int);
+extern void foo531(int);
+extern void foo532(int);
+extern void foo533(int);
+extern void foo534(int);
+extern void foo535(int);
+extern void foo536(int);
+extern void foo537(int);
+extern void foo538(int);
+extern void foo539(int);
+extern void foo540(int);
+extern void foo541(int);
+extern void foo542(int);
+extern void foo543(int);
+extern void foo544(int);
+extern void foo545(int);
+extern void foo546(int);
+extern void foo547(int);
+extern void foo548(int);
+extern void foo549(int);
+extern void foo550(int);
+extern void foo551(int);
+extern void foo552(int);
+extern void foo553(int);
+extern void foo554(int);
+extern void foo555(int);
+extern void foo556(int);
+extern void foo557(int);
+extern void foo558(int);
+extern void foo559(int);
+extern void foo560(int);
+extern void foo561(int);
+extern void foo562(int);
+extern void foo563(int);
+extern void foo564(int);
+extern void foo565(int);
+extern void foo566(int);
+extern void foo567(int);
+extern void foo568(int);
+extern void foo569(int);
+extern void foo570(int);
+extern void foo571(int);
+extern void foo572(int);
+extern void foo573(int);
+extern void foo574(int);
+extern void foo575(int);
+extern void foo576(int);
+extern void foo577(int);
+extern void foo578(int);
+extern void foo579(int);
+extern void foo580(int);
+extern void foo581(int);
+extern void foo582(int);
+extern void foo583(int);
+extern void foo584(int);
+extern void foo585(int);
+extern void foo586(int);
+extern void foo587(int);
+extern void foo588(int);
+extern void foo589(int);
+extern void foo590(int);
+extern void foo591(int);
+extern void foo592(int);
+extern void foo593(int);
+extern void foo594(int);
+extern void foo595(int);
+extern void foo596(int);
+extern void foo597(int);
+extern void foo598(int);
+extern void foo599(int);
+extern void foo600(int);
+extern void foo601(int);
+extern void foo602(int);
+extern void foo603(int);
+extern void foo604(int);
+extern void foo605(int);
+extern void foo606(int);
+extern void foo607(int);
+extern void foo608(int);
+extern void foo609(int);
+extern void foo610(int);
+extern void foo611(int);
+extern void foo612(int);
+extern void foo613(int);
+extern void foo614(int);
+extern void foo615(int);
+extern void foo616(int);
+extern void foo617(int);
+extern void foo618(int);
+extern void foo619(int);
+extern void foo620(int);
+extern void foo621(int);
+extern void foo622(int);
+extern void foo623(int);
+extern void foo624(int);
+extern void foo625(int);
+extern void foo626(int);
+extern void foo627(int);
+extern void foo628(int);
+extern void foo629(int);
+extern void foo630(int);
+extern void foo631(int);
+extern void foo632(int);
+extern void foo633(int);
+extern void foo634(int);
+extern void foo635(int);
+extern void foo636(int);
+extern void foo637(int);
+extern void foo638(int);
+extern void foo639(int);
+extern void foo640(int);
+extern void foo641(int);
+extern void foo642(int);
+extern void foo643(int);
+extern void foo644(int);
+extern void foo645(int);
+extern void foo646(int);
+extern void foo647(int);
+extern void foo648(int);
+extern void foo649(int);
+extern void foo650(int);
+extern void foo651(int);
+extern void foo652(int);
+extern void foo653(int);
+extern void foo654(int);
+extern void foo655(int);
+extern void foo656(int);
+extern void foo657(int);
+extern void foo658(int);
+extern void foo659(int);
+extern void foo660(int);
+extern void foo661(int);
+extern void foo662(int);
+extern void foo663(int);
+extern void foo664(int);
+extern void foo665(int);
+extern void foo666(int);
+extern void foo667(int);
+extern void foo668(int);
+extern void foo669(int);
+extern void foo670(int);
+extern void foo671(int);
+extern void foo672(int);
+extern void foo673(int);
+extern void foo674(int);
+extern void foo675(int);
+extern void foo676(int);
+extern void foo677(int);
+extern void foo678(int);
+extern void foo679(int);
+extern void foo680(int);
+extern void foo681(int);
+extern void foo682(int);
+extern void foo683(int);
+extern void foo684(int);
+extern void foo685(int);
+extern void foo686(int);
+extern void foo687(int);
+extern void foo688(int);
+extern void foo689(int);
+extern void foo690(int);
+extern void foo691(int);
+extern void foo692(int);
+extern void foo693(int);
+extern void foo694(int);
+extern void foo695(int);
+extern void foo696(int);
+extern void foo697(int);
+extern void foo698(int);
+extern void foo699(int);
+extern void foo700(int);
+extern void foo701(int);
+extern void foo702(int);
+extern void foo703(int);
+extern void foo704(int);
+extern void foo705(int);
+extern void foo706(int);
+extern void foo707(int);
+extern void foo708(int);
+extern void foo709(int);
+extern void foo710(int);
+extern void foo711(int);
+extern void foo712(int);
+extern void foo713(int);
+extern void foo714(int);
+extern void foo715(int);
+extern void foo716(int);
+extern void foo717(int);
+extern void foo718(int);
+extern void foo719(int);
+extern void foo720(int);
+extern void foo721(int);
+extern void foo722(int);
+extern void foo723(int);
+extern void foo724(int);
+extern void foo725(int);
+extern void foo726(int);
+extern void foo727(int);
+extern void foo728(int);
+extern void foo729(int);
+extern void foo730(int);
+extern void foo731(int);
+extern void foo732(int);
+extern void foo733(int);
+extern void foo734(int);
+extern void foo735(int);
+extern void foo736(int);
+extern void foo737(int);
+extern void foo738(int);
+extern void foo739(int);
+extern void foo740(int);
+extern void foo741(int);
+extern void foo742(int);
+extern void foo743(int);
+extern void foo744(int);
+extern void foo745(int);
+extern void foo746(int);
+extern void foo747(int);
+extern void foo748(int);
+extern void foo749(int);
+extern void foo750(int);
+extern void foo751(int);
+extern void foo752(int);
+extern void foo753(int);
+extern void foo754(int);
+extern void foo755(int);
+extern void foo756(int);
+extern void foo757(int);
+extern void foo758(int);
+extern void foo759(int);
+extern void foo760(int);
+extern void foo761(int);
+extern void foo762(int);
+extern void foo763(int);
+extern void foo764(int);
+extern void foo765(int);
+extern void foo766(int);
+extern void foo767(int);
+extern void foo768(int);
+extern void foo769(int);
+extern void foo770(int);
+extern void foo771(int);
+extern void foo772(int);
+extern void foo773(int);
+extern void foo774(int);
+extern void foo775(int);
+extern void foo776(int);
+extern void foo777(int);
+extern void foo778(int);
+extern void foo779(int);
+extern void foo780(int);
+extern void foo781(int);
+extern void foo782(int);
+extern void foo783(int);
+extern void foo784(int);
+extern void foo785(int);
+extern void foo786(int);
+extern void foo787(int);
+extern void foo788(int);
+extern void foo789(int);
+extern void foo790(int);
+extern void foo791(int);
+extern void foo792(int);
+extern void foo793(int);
+extern void foo794(int);
+extern void foo795(int);
+extern void foo796(int);
+extern void foo797(int);
+extern void foo798(int);
+extern void foo799(int);
+extern void foo800(int);
+extern void foo801(int);
+extern void foo802(int);
+extern void foo803(int);
+extern void foo804(int);
+extern void foo805(int);
+extern void foo806(int);
+extern void foo807(int);
+extern void foo808(int);
+extern void foo809(int);
+extern void foo810(int);
+extern void foo811(int);
+extern void foo812(int);
+extern void foo813(int);
+extern void foo814(int);
+extern void foo815(int);
+extern void foo816(int);
+extern void foo817(int);
+extern void foo818(int);
+extern void foo819(int);
+extern void foo820(int);
+extern void foo821(int);
+extern void foo822(int);
+extern void foo823(int);
+extern void foo824(int);
diff --git a/unit-tests/test-cases/jump-table-race/main.c b/unit-tests/test-cases/jump-table-race/main.c
new file mode 100644 (file)
index 0000000..202fe28
--- /dev/null
@@ -0,0 +1,865 @@
+/*
+ * Copyright (c) 2007 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+#include <stdio.h>  // fprintf(0x12345678), NULL
+#include <stdlib.h> // exit(0x12345678), EXIT_SUCCESS
+#include <pthread.h> 
+
+#include "test.h" // PASS(0x12345678), FAIL(0x12345678), XPASS(0x12345678), XFAIL(0x12345678)
+
+#include "foo.h"
+
+static void* callAll(void* p)
+{
+       foo002(0x12345678);
+       foo003(0x12345678);
+       foo004(0x12345678);
+       foo005(0x12345678);
+       foo006(0x12345678);
+       foo007(0x12345678);
+       foo008(0x12345678);
+       foo009(0x12345678);
+       foo010(0x12345678);
+       foo011(0x12345678);
+       foo012(0x12345678);
+       foo013(0x12345678);
+       foo014(0x12345678);
+       foo015(0x12345678);
+       foo016(0x12345678);
+       foo017(0x12345678);
+       foo018(0x12345678);
+       foo019(0x12345678);
+       foo020(0x12345678);
+       foo021(0x12345678);
+       foo022(0x12345678);
+       foo023(0x12345678);
+       foo024(0x12345678);
+       foo025(0x12345678);
+       foo026(0x12345678);
+       foo027(0x12345678);
+       foo028(0x12345678);
+       foo029(0x12345678);
+       foo030(0x12345678);
+       foo031(0x12345678);
+       foo032(0x12345678);
+       foo033(0x12345678);
+       foo034(0x12345678);
+       foo035(0x12345678);
+       foo036(0x12345678);
+       foo037(0x12345678);
+       foo038(0x12345678);
+       foo039(0x12345678);
+       foo040(0x12345678);
+       foo041(0x12345678);
+       foo042(0x12345678);
+       foo043(0x12345678);
+       foo044(0x12345678);
+       foo045(0x12345678);
+       foo046(0x12345678);
+       foo047(0x12345678);
+       foo048(0x12345678);
+       foo049(0x12345678);
+       foo050(0x12345678);
+       foo051(0x12345678);
+       foo052(0x12345678);
+       foo053(0x12345678);
+       foo054(0x12345678);
+       foo055(0x12345678);
+       foo056(0x12345678);
+       foo057(0x12345678);
+       foo058(0x12345678);
+       foo059(0x12345678);
+       foo060(0x12345678);
+       foo061(0x12345678);
+       foo062(0x12345678);
+       foo063(0x12345678);
+       foo064(0x12345678);
+       foo065(0x12345678);
+       foo066(0x12345678);
+       foo067(0x12345678);
+       foo068(0x12345678);
+       foo069(0x12345678);
+       foo070(0x12345678);
+       foo071(0x12345678);
+       foo072(0x12345678);
+       foo073(0x12345678);
+       foo074(0x12345678);
+       foo075(0x12345678);
+       foo076(0x12345678);
+       foo077(0x12345678);
+       foo078(0x12345678);
+       foo079(0x12345678);
+       foo080(0x12345678);
+       foo081(0x12345678);
+       foo082(0x12345678);
+       foo083(0x12345678);
+       foo084(0x12345678);
+       foo085(0x12345678);
+       foo086(0x12345678);
+       foo087(0x12345678);
+       foo088(0x12345678);
+       foo089(0x12345678);
+       foo090(0x12345678);
+       foo091(0x12345678);
+       foo092(0x12345678);
+       foo093(0x12345678);
+       foo094(0x12345678);
+       foo095(0x12345678);
+       foo096(0x12345678);
+       foo097(0x12345678);
+       foo098(0x12345678);
+       foo099(0x12345678);
+       foo100(0x12345678);
+       foo101(0x12345678);
+       foo102(0x12345678);
+       foo103(0x12345678);
+       foo104(0x12345678);
+       foo105(0x12345678);
+       foo106(0x12345678);
+       foo107(0x12345678);
+       foo108(0x12345678);
+       foo109(0x12345678);
+       foo110(0x12345678);
+       foo111(0x12345678);
+       foo112(0x12345678);
+       foo113(0x12345678);
+       foo114(0x12345678);
+       foo115(0x12345678);
+       foo116(0x12345678);
+       foo117(0x12345678);
+       foo118(0x12345678);
+       foo119(0x12345678);
+       foo120(0x12345678);
+       foo121(0x12345678);
+       foo122(0x12345678);
+       foo123(0x12345678);
+       foo124(0x12345678);
+       foo125(0x12345678);
+       foo126(0x12345678);
+       foo127(0x12345678);
+       foo128(0x12345678);
+       foo129(0x12345678);
+       foo130(0x12345678);
+       foo131(0x12345678);
+       foo132(0x12345678);
+       foo133(0x12345678);
+       foo134(0x12345678);
+       foo135(0x12345678);
+       foo136(0x12345678);
+       foo137(0x12345678);
+       foo138(0x12345678);
+       foo139(0x12345678);
+       foo140(0x12345678);
+       foo141(0x12345678);
+       foo142(0x12345678);
+       foo143(0x12345678);
+       foo144(0x12345678);
+       foo145(0x12345678);
+       foo146(0x12345678);
+       foo147(0x12345678);
+       foo148(0x12345678);
+       foo149(0x12345678);
+       foo150(0x12345678);
+       foo151(0x12345678);
+       foo152(0x12345678);
+       foo153(0x12345678);
+       foo154(0x12345678);
+       foo155(0x12345678);
+       foo156(0x12345678);
+       foo157(0x12345678);
+       foo158(0x12345678);
+       foo159(0x12345678);
+       foo160(0x12345678);
+       foo161(0x12345678);
+       foo162(0x12345678);
+       foo163(0x12345678);
+       foo164(0x12345678);
+       foo165(0x12345678);
+       foo166(0x12345678);
+       foo167(0x12345678);
+       foo168(0x12345678);
+       foo169(0x12345678);
+       foo170(0x12345678);
+       foo171(0x12345678);
+       foo172(0x12345678);
+       foo173(0x12345678);
+       foo174(0x12345678);
+       foo175(0x12345678);
+       foo176(0x12345678);
+       foo177(0x12345678);
+       foo178(0x12345678);
+       foo179(0x12345678);
+       foo180(0x12345678);
+       foo181(0x12345678);
+       foo182(0x12345678);
+       foo183(0x12345678);
+       foo184(0x12345678);
+       foo185(0x12345678);
+       foo186(0x12345678);
+       foo187(0x12345678);
+       foo188(0x12345678);
+       foo189(0x12345678);
+       foo190(0x12345678);
+       foo191(0x12345678);
+       foo192(0x12345678);
+       foo193(0x12345678);
+       foo194(0x12345678);
+       foo195(0x12345678);
+       foo196(0x12345678);
+       foo197(0x12345678);
+       foo198(0x12345678);
+       foo199(0x12345678);
+       foo200(0x12345678);
+       foo201(0x12345678);
+       foo202(0x12345678);
+       foo203(0x12345678);
+       foo204(0x12345678);
+       foo205(0x12345678);
+       foo206(0x12345678);
+       foo207(0x12345678);
+       foo208(0x12345678);
+       foo209(0x12345678);
+       foo210(0x12345678);
+       foo211(0x12345678);
+       foo212(0x12345678);
+       foo213(0x12345678);
+       foo214(0x12345678);
+       foo215(0x12345678);
+       foo216(0x12345678);
+       foo217(0x12345678);
+       foo218(0x12345678);
+       foo219(0x12345678);
+       foo220(0x12345678);
+       foo221(0x12345678);
+       foo222(0x12345678);
+       foo223(0x12345678);
+       foo224(0x12345678);
+       foo225(0x12345678);
+       foo226(0x12345678);
+       foo227(0x12345678);
+       foo228(0x12345678);
+       foo229(0x12345678);
+       foo230(0x12345678);
+       foo231(0x12345678);
+       foo232(0x12345678);
+       foo233(0x12345678);
+       foo234(0x12345678);
+       foo235(0x12345678);
+       foo236(0x12345678);
+       foo237(0x12345678);
+       foo238(0x12345678);
+       foo239(0x12345678);
+       foo240(0x12345678);
+       foo241(0x12345678);
+       foo242(0x12345678);
+       foo243(0x12345678);
+       foo244(0x12345678);
+       foo245(0x12345678);
+       foo246(0x12345678);
+       foo247(0x12345678);
+       foo248(0x12345678);
+       foo249(0x12345678);
+       foo250(0x12345678);
+       foo251(0x12345678);
+       foo252(0x12345678);
+       foo253(0x12345678);
+       foo254(0x12345678);
+       foo255(0x12345678);
+       foo256(0x12345678);
+       foo257(0x12345678);
+       foo258(0x12345678);
+       foo259(0x12345678);
+       foo260(0x12345678);
+       foo261(0x12345678);
+       foo262(0x12345678);
+       foo263(0x12345678);
+       foo264(0x12345678);
+       foo265(0x12345678);
+       foo266(0x12345678);
+       foo267(0x12345678);
+       foo268(0x12345678);
+       foo269(0x12345678);
+       foo270(0x12345678);
+       foo271(0x12345678);
+       foo272(0x12345678);
+       foo273(0x12345678);
+       foo274(0x12345678);
+       foo275(0x12345678);
+       foo276(0x12345678);
+       foo277(0x12345678);
+       foo278(0x12345678);
+       foo279(0x12345678);
+       foo280(0x12345678);
+       foo281(0x12345678);
+       foo282(0x12345678);
+       foo283(0x12345678);
+       foo284(0x12345678);
+       foo285(0x12345678);
+       foo286(0x12345678);
+       foo287(0x12345678);
+       foo288(0x12345678);
+       foo289(0x12345678);
+       foo290(0x12345678);
+       foo291(0x12345678);
+       foo292(0x12345678);
+       foo293(0x12345678);
+       foo294(0x12345678);
+       foo295(0x12345678);
+       foo296(0x12345678);
+       foo297(0x12345678);
+       foo298(0x12345678);
+       foo299(0x12345678);
+       foo300(0x12345678);
+       foo301(0x12345678);
+       foo302(0x12345678);
+       foo303(0x12345678);
+       foo304(0x12345678);
+       foo305(0x12345678);
+       foo306(0x12345678);
+       foo307(0x12345678);
+       foo308(0x12345678);
+       foo309(0x12345678);
+       foo310(0x12345678);
+       foo311(0x12345678);
+       foo312(0x12345678);
+       foo313(0x12345678);
+       foo314(0x12345678);
+       foo315(0x12345678);
+       foo316(0x12345678);
+       foo317(0x12345678);
+       foo318(0x12345678);
+       foo319(0x12345678);
+       foo320(0x12345678);
+       foo321(0x12345678);
+       foo322(0x12345678);
+       foo323(0x12345678);
+       foo324(0x12345678);
+       foo325(0x12345678);
+       foo326(0x12345678);
+       foo327(0x12345678);
+       foo328(0x12345678);
+       foo329(0x12345678);
+       foo330(0x12345678);
+       foo331(0x12345678);
+       foo332(0x12345678);
+       foo333(0x12345678);
+       foo334(0x12345678);
+       foo335(0x12345678);
+       foo336(0x12345678);
+       foo337(0x12345678);
+       foo338(0x12345678);
+       foo339(0x12345678);
+       foo340(0x12345678);
+       foo341(0x12345678);
+       foo342(0x12345678);
+       foo343(0x12345678);
+       foo344(0x12345678);
+       foo345(0x12345678);
+       foo346(0x12345678);
+       foo347(0x12345678);
+       foo348(0x12345678);
+       foo349(0x12345678);
+       foo350(0x12345678);
+       foo351(0x12345678);
+       foo352(0x12345678);
+       foo353(0x12345678);
+       foo354(0x12345678);
+       foo355(0x12345678);
+       foo356(0x12345678);
+       foo357(0x12345678);
+       foo358(0x12345678);
+       foo359(0x12345678);
+       foo360(0x12345678);
+       foo361(0x12345678);
+       foo362(0x12345678);
+       foo363(0x12345678);
+       foo364(0x12345678);
+       foo365(0x12345678);
+       foo366(0x12345678);
+       foo367(0x12345678);
+       foo368(0x12345678);
+       foo369(0x12345678);
+       foo370(0x12345678);
+       foo371(0x12345678);
+       foo372(0x12345678);
+       foo373(0x12345678);
+       foo374(0x12345678);
+       foo375(0x12345678);
+       foo376(0x12345678);
+       foo377(0x12345678);
+       foo378(0x12345678);
+       foo379(0x12345678);
+       foo380(0x12345678);
+       foo381(0x12345678);
+       foo382(0x12345678);
+       foo383(0x12345678);
+       foo384(0x12345678);
+       foo385(0x12345678);
+       foo386(0x12345678);
+       foo387(0x12345678);
+       foo388(0x12345678);
+       foo389(0x12345678);
+       foo390(0x12345678);
+       foo391(0x12345678);
+       foo392(0x12345678);
+       foo393(0x12345678);
+       foo394(0x12345678);
+       foo395(0x12345678);
+       foo396(0x12345678);
+       foo397(0x12345678);
+       foo398(0x12345678);
+       foo399(0x12345678);
+       foo400(0x12345678);
+       foo401(0x12345678);
+       foo402(0x12345678);
+       foo403(0x12345678);
+       foo404(0x12345678);
+       foo405(0x12345678);
+       foo406(0x12345678);
+       foo407(0x12345678);
+       foo408(0x12345678);
+       foo409(0x12345678);
+       foo410(0x12345678);
+       foo411(0x12345678);
+       foo412(0x12345678);
+       foo413(0x12345678);
+       foo414(0x12345678);
+       foo415(0x12345678);
+       foo416(0x12345678);
+       foo417(0x12345678);
+       foo418(0x12345678);
+       foo419(0x12345678);
+       foo420(0x12345678);
+       foo421(0x12345678);
+       foo422(0x12345678);
+       foo423(0x12345678);
+       foo424(0x12345678);
+       foo425(0x12345678);
+       foo426(0x12345678);
+       foo427(0x12345678);
+       foo428(0x12345678);
+       foo429(0x12345678);
+       foo430(0x12345678);
+       foo431(0x12345678);
+       foo432(0x12345678);
+       foo433(0x12345678);
+       foo434(0x12345678);
+       foo435(0x12345678);
+       foo436(0x12345678);
+       foo437(0x12345678);
+       foo438(0x12345678);
+       foo439(0x12345678);
+       foo440(0x12345678);
+       foo441(0x12345678);
+       foo442(0x12345678);
+       foo443(0x12345678);
+       foo444(0x12345678);
+       foo445(0x12345678);
+       foo446(0x12345678);
+       foo447(0x12345678);
+       foo448(0x12345678);
+       foo449(0x12345678);
+       foo450(0x12345678);
+       foo451(0x12345678);
+       foo452(0x12345678);
+       foo453(0x12345678);
+       foo454(0x12345678);
+       foo455(0x12345678);
+       foo456(0x12345678);
+       foo457(0x12345678);
+       foo458(0x12345678);
+       foo459(0x12345678);
+       foo460(0x12345678);
+       foo461(0x12345678);
+       foo462(0x12345678);
+       foo463(0x12345678);
+       foo464(0x12345678);
+       foo465(0x12345678);
+       foo466(0x12345678);
+       foo467(0x12345678);
+       foo468(0x12345678);
+       foo469(0x12345678);
+       foo470(0x12345678);
+       foo471(0x12345678);
+       foo472(0x12345678);
+       foo473(0x12345678);
+       foo474(0x12345678);
+       foo475(0x12345678);
+       foo476(0x12345678);
+       foo477(0x12345678);
+       foo478(0x12345678);
+       foo479(0x12345678);
+       foo480(0x12345678);
+       foo481(0x12345678);
+       foo482(0x12345678);
+       foo483(0x12345678);
+       foo484(0x12345678);
+       foo485(0x12345678);
+       foo486(0x12345678);
+       foo487(0x12345678);
+       foo488(0x12345678);
+       foo489(0x12345678);
+       foo490(0x12345678);
+       foo491(0x12345678);
+       foo492(0x12345678);
+       foo493(0x12345678);
+       foo494(0x12345678);
+       foo495(0x12345678);
+       foo496(0x12345678);
+       foo497(0x12345678);
+       foo498(0x12345678);
+       foo499(0x12345678);
+       foo500(0x12345678);
+       foo501(0x12345678);
+       foo502(0x12345678);
+       foo503(0x12345678);
+       foo504(0x12345678);
+       foo505(0x12345678);
+       foo506(0x12345678);
+       foo507(0x12345678);
+       foo508(0x12345678);
+       foo509(0x12345678);
+       foo510(0x12345678);
+       foo511(0x12345678);
+       foo512(0x12345678);
+       foo513(0x12345678);
+       foo514(0x12345678);
+       foo515(0x12345678);
+       foo516(0x12345678);
+       foo517(0x12345678);
+       foo518(0x12345678);
+       foo519(0x12345678);
+       foo520(0x12345678);
+       foo521(0x12345678);
+       foo522(0x12345678);
+       foo523(0x12345678);
+       foo524(0x12345678);
+       foo525(0x12345678);
+       foo526(0x12345678);
+       foo527(0x12345678);
+       foo528(0x12345678);
+       foo529(0x12345678);
+       foo530(0x12345678);
+       foo531(0x12345678);
+       foo532(0x12345678);
+       foo533(0x12345678);
+       foo534(0x12345678);
+       foo535(0x12345678);
+       foo536(0x12345678);
+       foo537(0x12345678);
+       foo538(0x12345678);
+       foo539(0x12345678);
+       foo540(0x12345678);
+       foo541(0x12345678);
+       foo542(0x12345678);
+       foo543(0x12345678);
+       foo544(0x12345678);
+       foo545(0x12345678);
+       foo546(0x12345678);
+       foo547(0x12345678);
+       foo548(0x12345678);
+       foo549(0x12345678);
+       foo550(0x12345678);
+       foo551(0x12345678);
+       foo552(0x12345678);
+       foo553(0x12345678);
+       foo554(0x12345678);
+       foo555(0x12345678);
+       foo556(0x12345678);
+       foo557(0x12345678);
+       foo558(0x12345678);
+       foo559(0x12345678);
+       foo560(0x12345678);
+       foo561(0x12345678);
+       foo562(0x12345678);
+       foo563(0x12345678);
+       foo564(0x12345678);
+       foo565(0x12345678);
+       foo566(0x12345678);
+       foo567(0x12345678);
+       foo568(0x12345678);
+       foo569(0x12345678);
+       foo570(0x12345678);
+       foo571(0x12345678);
+       foo572(0x12345678);
+       foo573(0x12345678);
+       foo574(0x12345678);
+       foo575(0x12345678);
+       foo576(0x12345678);
+       foo577(0x12345678);
+       foo578(0x12345678);
+       foo579(0x12345678);
+       foo580(0x12345678);
+       foo581(0x12345678);
+       foo582(0x12345678);
+       foo583(0x12345678);
+       foo584(0x12345678);
+       foo585(0x12345678);
+       foo586(0x12345678);
+       foo587(0x12345678);
+       foo588(0x12345678);
+       foo589(0x12345678);
+       foo590(0x12345678);
+       foo591(0x12345678);
+       foo592(0x12345678);
+       foo593(0x12345678);
+       foo594(0x12345678);
+       foo595(0x12345678);
+       foo596(0x12345678);
+       foo597(0x12345678);
+       foo598(0x12345678);
+       foo599(0x12345678);
+       foo600(0x12345678);
+       foo601(0x12345678);
+       foo602(0x12345678);
+       foo603(0x12345678);
+       foo604(0x12345678);
+       foo605(0x12345678);
+       foo606(0x12345678);
+       foo607(0x12345678);
+       foo608(0x12345678);
+       foo609(0x12345678);
+       foo610(0x12345678);
+       foo611(0x12345678);
+       foo612(0x12345678);
+       foo613(0x12345678);
+       foo614(0x12345678);
+       foo615(0x12345678);
+       foo616(0x12345678);
+       foo617(0x12345678);
+       foo618(0x12345678);
+       foo619(0x12345678);
+       foo620(0x12345678);
+       foo621(0x12345678);
+       foo622(0x12345678);
+       foo623(0x12345678);
+       foo624(0x12345678);
+       foo625(0x12345678);
+       foo626(0x12345678);
+       foo627(0x12345678);
+       foo628(0x12345678);
+       foo629(0x12345678);
+       foo630(0x12345678);
+       foo631(0x12345678);
+       foo632(0x12345678);
+       foo633(0x12345678);
+       foo634(0x12345678);
+       foo635(0x12345678);
+       foo636(0x12345678);
+       foo637(0x12345678);
+       foo638(0x12345678);
+       foo639(0x12345678);
+       foo640(0x12345678);
+       foo641(0x12345678);
+       foo642(0x12345678);
+       foo643(0x12345678);
+       foo644(0x12345678);
+       foo645(0x12345678);
+       foo646(0x12345678);
+       foo647(0x12345678);
+       foo648(0x12345678);
+       foo649(0x12345678);
+       foo650(0x12345678);
+       foo651(0x12345678);
+       foo652(0x12345678);
+       foo653(0x12345678);
+       foo654(0x12345678);
+       foo655(0x12345678);
+       foo656(0x12345678);
+       foo657(0x12345678);
+       foo658(0x12345678);
+       foo659(0x12345678);
+       foo660(0x12345678);
+       foo661(0x12345678);
+       foo662(0x12345678);
+       foo663(0x12345678);
+       foo664(0x12345678);
+       foo665(0x12345678);
+       foo666(0x12345678);
+       foo667(0x12345678);
+       foo668(0x12345678);
+       foo669(0x12345678);
+       foo670(0x12345678);
+       foo671(0x12345678);
+       foo672(0x12345678);
+       foo673(0x12345678);
+       foo674(0x12345678);
+       foo675(0x12345678);
+       foo676(0x12345678);
+       foo677(0x12345678);
+       foo678(0x12345678);
+       foo679(0x12345678);
+       foo680(0x12345678);
+       foo681(0x12345678);
+       foo682(0x12345678);
+       foo683(0x12345678);
+       foo684(0x12345678);
+       foo685(0x12345678);
+       foo686(0x12345678);
+       foo687(0x12345678);
+       foo688(0x12345678);
+       foo689(0x12345678);
+       foo690(0x12345678);
+       foo691(0x12345678);
+       foo692(0x12345678);
+       foo693(0x12345678);
+       foo694(0x12345678);
+       foo695(0x12345678);
+       foo696(0x12345678);
+       foo697(0x12345678);
+       foo698(0x12345678);
+       foo699(0x12345678);
+       foo700(0x12345678);
+       foo701(0x12345678);
+       foo702(0x12345678);
+       foo703(0x12345678);
+       foo704(0x12345678);
+       foo705(0x12345678);
+       foo706(0x12345678);
+       foo707(0x12345678);
+       foo708(0x12345678);
+       foo709(0x12345678);
+       foo710(0x12345678);
+       foo711(0x12345678);
+       foo712(0x12345678);
+       foo713(0x12345678);
+       foo714(0x12345678);
+       foo715(0x12345678);
+       foo716(0x12345678);
+       foo717(0x12345678);
+       foo718(0x12345678);
+       foo719(0x12345678);
+       foo720(0x12345678);
+       foo721(0x12345678);
+       foo722(0x12345678);
+       foo723(0x12345678);
+       foo724(0x12345678);
+       foo725(0x12345678);
+       foo726(0x12345678);
+       foo727(0x12345678);
+       foo728(0x12345678);
+       foo729(0x12345678);
+       foo730(0x12345678);
+       foo731(0x12345678);
+       foo732(0x12345678);
+       foo733(0x12345678);
+       foo734(0x12345678);
+       foo735(0x12345678);
+       foo736(0x12345678);
+       foo737(0x12345678);
+       foo738(0x12345678);
+       foo739(0x12345678);
+       foo740(0x12345678);
+       foo741(0x12345678);
+       foo742(0x12345678);
+       foo743(0x12345678);
+       foo744(0x12345678);
+       foo745(0x12345678);
+       foo746(0x12345678);
+       foo747(0x12345678);
+       foo748(0x12345678);
+       foo749(0x12345678);
+       foo750(0x12345678);
+       foo751(0x12345678);
+       foo752(0x12345678);
+       foo753(0x12345678);
+       foo754(0x12345678);
+       foo755(0x12345678);
+       foo756(0x12345678);
+       foo757(0x12345678);
+       foo758(0x12345678);
+       foo759(0x12345678);
+       foo760(0x12345678);
+       foo761(0x12345678);
+       foo762(0x12345678);
+       foo763(0x12345678);
+       foo764(0x12345678);
+       foo765(0x12345678);
+       foo766(0x12345678);
+       foo767(0x12345678);
+       foo768(0x12345678);
+       foo769(0x12345678);
+       foo770(0x12345678);
+       foo771(0x12345678);
+       foo772(0x12345678);
+       foo773(0x12345678);
+       foo774(0x12345678);
+       foo775(0x12345678);
+       foo776(0x12345678);
+       foo777(0x12345678);
+       foo778(0x12345678);
+       foo779(0x12345678);
+       foo780(0x12345678);
+       foo781(0x12345678);
+       foo782(0x12345678);
+       foo783(0x12345678);
+       foo784(0x12345678);
+       foo785(0x12345678);
+       foo786(0x12345678);
+       foo787(0x12345678);
+       foo788(0x12345678);
+       foo789(0x12345678);
+       foo790(0x12345678);
+       foo791(0x12345678);
+       foo792(0x12345678);
+       foo793(0x12345678);
+       foo794(0x12345678);
+       foo795(0x12345678);
+       foo796(0x12345678);
+       foo797(0x12345678);
+       foo798(0x12345678);
+       foo799(0x12345678);
+       foo800(0x12345678);
+       foo801(0x12345678);
+       foo802(0x12345678);
+       foo803(0x12345678);
+       foo804(0x12345678);
+       foo805(0x12345678);
+       foo806(0x12345678);
+       foo807(0x12345678);
+       foo808(0x12345678);
+       foo809(0x12345678);
+       foo810(0x12345678);
+       foo811(0x12345678);
+       foo812(0x12345678);
+       foo813(0x12345678);
+       foo814(0x12345678);
+       foo815(0x12345678);
+       foo816(0x12345678);
+       foo817(0x12345678);
+       return NULL;
+}
+
+int main()
+{
+       // call all foo's on another thread
+       pthread_t otherThread;
+       pthread_create(&otherThread, NULL, &callAll, NULL);
+
+       // call all foo's on this thread
+       callAll(NULL);
+
+       PASS("jump-table-race");
+       return EXIT_SUCCESS;
+}
+
+
index d2b10dd98b124660f470c3b83c1fc2215fa0f2ff..2c49d4f69163ebb9aad22294549c01e379f1594f 100644 (file)
@@ -24,7 +24,7 @@ TESTROOT = ../..
 include ${TESTROOT}/include/common.makefile
 
 run: all
-       cd absent/  && ../${TESTROOT}/bin/exit-non-zero-pass.pl "pass message" "fail message" ./main
+       cd absent/  && ../${TESTROOT}/bin/exit-non-zero-pass.pl "non-weak-library" "non-weak-library" ./main
        cd present/ && ./main
 
 all: foo.c main.c
index de02062cf04c19a6f266e809b4936cd363804426..9487058b10a62c05a91e0d4505267ae1e1eec229 100644 (file)
@@ -29,10 +29,10 @@ int
 main(int argc, char **argv)
 {
 #if defined(LIB_PRESENT)
-  PASS("pass message");
+  PASS("non-weak-library");
 #endif
 #if defined(LIB_ABSENT)
-  FAIL("fail message");
+  FAIL("non-weak-library");
 #endif
 
   return EXIT_SUCCESS;