home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / rconfig.lha / RConfig_v1.1 / tests / 5 / test5.c < prev   
C/C++ Source or Header  |  1992-09-20  |  1KB  |  57 lines

  1. /*
  2.  * RConfig Validation Suite by Anthon Pang, Omni Communications Products
  3.  *
  4.  * Object Code: dynastack stkchk & setjmp interdependence test
  5.  * Assigned Test # 5
  6.  * Requirements: Compile with -bs -bd -at; process result with stkchker
  7.  *   Use small stack (ie 8K); rsetjmp.h file
  8.  * Desired Observation(s):
  9.  *   Recursive loop chews up stack space, printing the contents (address value)
  10.  *   of _stkbase; _stkbase changes as dynastack code builds extension stack
  11.  *   during execution; unwinding stack at 65th iteration, longjmp should
  12.  *   restore state & continue unwinding stack explicitly
  13.  */
  14.  
  15. #ifndef __DYNASTACK_STKCHK
  16. #define __DYNASTACK_STKCHK
  17. #endif
  18.  
  19. #include <stdio.h>
  20.  
  21. #include "rlib.h"
  22.  
  23. jmp_buf myenv;
  24.  
  25. void proc(z)
  26. int z;
  27. {
  28.     char y[127];
  29.     extern long _stkbase;
  30.  
  31.     if (z == 100)
  32.         return;
  33.     else {
  34.         /* recursion */
  35.         printf("stackbase: %ld  iteration: %d\n",_stkbase,z);
  36.         proc(z+1);
  37.  
  38.         if (z == 65) longjmp(myenv, 1);
  39.  
  40.         /* unwind stack */
  41.         printf("stackbase: %ld  iteration: %d\n",_stkbase,z);
  42.     }
  43. }
  44.  
  45. void main() {
  46.     char x[2048];
  47.  
  48.     x[0] = 'X';
  49.  
  50.     if (setjmp(myenv))
  51.         printf("stackbase: %ld\nDone.\n",_stkbase);
  52.     else
  53.         proc(0);
  54.  
  55.     exit(0);
  56. }
  57.