X-Git-Url: https://git.saurik.com/apple/dyld.git/blobdiff_plain/bac542e65c0030c0d819c7ff1dcfc25892a61844..19894a1236eae932b4028640f24ab843f691d4e4:/unit-tests/test-cases/big-stack/main.c diff --git a/unit-tests/test-cases/big-stack/main.c b/unit-tests/test-cases/big-stack/main.c index dc1339a..2c83e2d 100644 --- a/unit-tests/test-cases/big-stack/main.c +++ b/unit-tests/test-cases/big-stack/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2006-2012 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -31,6 +31,7 @@ // This builds an executable that needs > 2GB of stack // + char* keepAlive; // to keep compiler from optimizing away stack variable // keep recursing until desired stack size achieved @@ -38,38 +39,21 @@ void foo(unsigned long long stackSize, char* stackStart) { char buffer[32*1024*1024]; keepAlive = buffer; - if ( (stackStart - buffer) > stackSize ) + // only recursive if there is enough room for next buffer + intptr_t freeStackSpace = (buffer - sizeof(buffer)) - (stackStart - stackSize); + //fprintf(stderr, "&buffer=%p, stackStart=%p, freeStackSpace=0x%lx\n", buffer, stackStart, freeStackSpace); + if ( freeStackSpace < sizeof(buffer) ) return; else foo(stackSize, stackStart); } -#if __ppc__ -static bool isRosetta() -{ - int mib[] = { CTL_KERN, KERN_CLASSIC, getpid() }; - int is_classic = 0; - size_t len = sizeof(int); - int ret = sysctl(mib, 3, &is_classic, &len, NULL, 0); - if ((ret != -1) && is_classic) { - // we're running under Rosetta - return true; - } - return false; -} -#endif int main() { char start; -#if __ppc__ - // programs running under rosetta cannot use large amounts of stack - if ( isRosetta() ) - foo(0x02000000, &start); - else -#endif - foo(0x81000000, &start); // 2.1 GB stack + foo(STACK_SIZE, &start); return EXIT_SUCCESS; }