]> git.saurik.com Git - apple/dyld.git/blobdiff - unit-tests/test-cases/big-stack/main.c
dyld-353.2.1.tar.gz
[apple/dyld.git] / unit-tests / test-cases / big-stack / main.c
index dc1339a9973d1059206a17df2c4a2f5d9cac2e22..2c83e2d64051d3d969967786037b243cb3bca0a2 100644 (file)
@@ -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@
  * 
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
@@ -31,6 +31,7 @@
 // This builds an executable that needs > 2GB of stack
 //
 
 // 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
 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;
 {
        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);
 }
 
                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;
 
 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;
 }
 
        return EXIT_SUCCESS;
 }