From 577cc7d16e9038f578beeee9ada9fd8f82f0b3d6 Mon Sep 17 00:00:00 2001 From: Apple Date: Tue, 29 Jan 2008 19:08:32 +0000 Subject: [PATCH] dyld-46.16.tar.gz --- src/ImageLoader.cpp | 20 +- src/ImageLoader.h | 1 + src/ImageLoaderMachO.cpp | 84 +- src/dyldAPIs.cpp | 13 +- .../jump-table-dynamic-lookup/Makefile | 46 + .../jump-table-dynamic-lookup/foo.c | 827 +++++++++++++++++ .../jump-table-dynamic-lookup/foo.h | 825 +++++++++++++++++ .../jump-table-dynamic-lookup/main.c | 80 ++ .../test-cases/jump-table-race/Makefile | 45 + unit-tests/test-cases/jump-table-race/foo.c | 827 +++++++++++++++++ unit-tests/test-cases/jump-table-race/foo.h | 825 +++++++++++++++++ unit-tests/test-cases/jump-table-race/main.c | 865 ++++++++++++++++++ .../test-cases/non-weak-library/Makefile | 2 +- unit-tests/test-cases/non-weak-library/main.c | 4 +- 14 files changed, 4430 insertions(+), 34 deletions(-) create mode 100644 unit-tests/test-cases/jump-table-dynamic-lookup/Makefile create mode 100644 unit-tests/test-cases/jump-table-dynamic-lookup/foo.c create mode 100644 unit-tests/test-cases/jump-table-dynamic-lookup/foo.h create mode 100644 unit-tests/test-cases/jump-table-dynamic-lookup/main.c create mode 100644 unit-tests/test-cases/jump-table-race/Makefile create mode 100644 unit-tests/test-cases/jump-table-race/foo.c create mode 100644 unit-tests/test-cases/jump-table-race/foo.h create mode 100644 unit-tests/test-cases/jump-table-race/main.c diff --git a/src/ImageLoader.cpp b/src/ImageLoader.cpp index 2461374..61f49ef 100644 --- a/src/ImageLoader.cpp +++ b/src/ImageLoader.cpp @@ -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)); diff --git a/src/ImageLoader.h b/src/ImageLoader.h index f15177c..4a8a9d8 100644 --- a/src/ImageLoader.h +++ b/src/ImageLoader.h @@ -95,6 +95,7 @@ public: const char* imageSuffix; PrebindMode prebindUsage; SharedRegionMode sharedRegionMode; + bool prebinding; bool bindFlat; bool slideAndPackDylibs; bool verboseOpts; diff --git a/src/ImageLoaderMachO.cpp b/src/ImageLoaderMachO.cpp index 418805b..2d2cb44 100644 --- a/src/ImageLoaderMachO.cpp +++ b/src/ImageLoaderMachO.cpp @@ -1299,7 +1299,14 @@ void ImageLoaderMachO::doRebase(const LinkContext& context) ++fgImagesWithUsedPrebinding; // bump totals for statistics return; } - + + // 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; } diff --git a/src/dyldAPIs.cpp b/src/dyldAPIs.cpp index 64cfb89..06d9def 100644 --- a/src/dyldAPIs.cpp +++ b/src/dyldAPIs.cpp @@ -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 index 0000000..04d3fb6 --- /dev/null +++ b/unit-tests/test-cases/jump-table-dynamic-lookup/Makefile @@ -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 index 0000000..35c9bb7 --- /dev/null +++ b/unit-tests/test-cases/jump-table-dynamic-lookup/foo.c @@ -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 index 0000000..33a9be4 --- /dev/null +++ b/unit-tests/test-cases/jump-table-dynamic-lookup/foo.h @@ -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 index 0000000..6325af7 --- /dev/null +++ b/unit-tests/test-cases/jump-table-dynamic-lookup/main.c @@ -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 // fprintf(0x12345678), NULL +#include // exit(0x12345678), EXIT_SUCCESS +#include + +#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 index 0000000..abb4839 --- /dev/null +++ b/unit-tests/test-cases/jump-table-race/Makefile @@ -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 index 0000000..35c9bb7 --- /dev/null +++ b/unit-tests/test-cases/jump-table-race/foo.c @@ -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 index 0000000..33a9be4 --- /dev/null +++ b/unit-tests/test-cases/jump-table-race/foo.h @@ -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 index 0000000..202fe28 --- /dev/null +++ b/unit-tests/test-cases/jump-table-race/main.c @@ -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 // fprintf(0x12345678), NULL +#include // exit(0x12345678), EXIT_SUCCESS +#include + +#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; +} + + diff --git a/unit-tests/test-cases/non-weak-library/Makefile b/unit-tests/test-cases/non-weak-library/Makefile index d2b10dd..2c49d4f 100644 --- a/unit-tests/test-cases/non-weak-library/Makefile +++ b/unit-tests/test-cases/non-weak-library/Makefile @@ -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 diff --git a/unit-tests/test-cases/non-weak-library/main.c b/unit-tests/test-cases/non-weak-library/main.c index de02062..9487058 100644 --- a/unit-tests/test-cases/non-weak-library/main.c +++ b/unit-tests/test-cases/non-weak-library/main.c @@ -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; -- 2.45.2