Low‐cost, Concurrent Checking of Pointer and Array Accesses in C Programs

Execution Shadow processing was moti vated, in part, by a tool called AE that supports ab tract execution [17]. AE is used for ef ficient generation of detailed program traces. A source program, in C, is instrumented to record a small set of key events during e xecution. After execution these e v nts serv e as input to an abstract v ersion of the original program that can recreate a full trace of the original program. The e vents recorded by the original program include control flo w decisions. These are essentially the same data needed by a shado w process to follow a main process. AE is a post-run technique that shifts some of the costs in volved in tracing certain incidents during a program’ s execution to the program that uses those incidents. In contrast, shado w processing is arun-time technique that remo ves expensi ve tracing from the critical e x cution path of a program and shifts it to another processor . Table 7: Concurrent Guarding using Shadow Processing: (user + system) time Program Original (time in seconds) Embedded Checking Shadow Guarding Purified (% incr ease) Guarded (% incr ease) Main (% incr ease) Shadow: without output calls (% incr ease) alvinn (50 epochs) 25.6 s 774.6% 472.3% < 1% 472.3% compress 2.9 s 748.3% 113.8% 10.3% 89.7% decompress 2.0 s 765.0% 145.0% 10.0% 85.0% ear 305.4 s 589.1% 642.0% < 1% 636.4% eqntott 18.8 s 735.6% 1337.2% 3.2% 1328.2% espresso 7.9 s 1107.6% 648.1% 1.3% 650.6% sc (loadc2) 38.6 s 613.5% 173.3% 6.7% 95.1% xlisp 122.1 s 988.1% 775.6% 5.6% 787.6%

[1]  Michael Wolfe,et al.  Elimination of redundant array subscript range checks , 1995, PLDI '95.

[2]  Robert O. Hastings,et al.  Fast detection of memory leaks and access errors , 1991 .

[3]  Todd M. Austin,et al.  Efficient detection of all pointer and array access errors , 1994, PLDI '94.

[4]  P.P. Gelsinger,et al.  Microprocessors circa 2000 , 1989, IEEE Spectrum.

[5]  Larry Rudolph,et al.  Debugging parallel programs in parallel , 1988, PADD '88.

[6]  Joseph L. Steffen Adding run‐time checking to the portable C compiler , 1992, Softw. Pract. Exp..

[7]  Thomas Reps Demonstration of a Prototype Tool for Program Integration , 1989 .

[8]  Sriram Sankar,et al.  Concurrent runtime monitoring of formally specified programs , 1993, Computer.

[9]  Miron Livny,et al.  Condor-a hunter of idle workstations , 1988, [1988] Proceedings. The 8th International Conference on Distributed.

[10]  James R. Larus,et al.  Abstract execution: A technique for efficiently tracing programs , 1990, Softw. Pract. Exp..

[11]  Barton P. Miller,et al.  An empirical study of the reliability of UNIX utilities , 1990, Commun. ACM.

[12]  Donn Seeley,et al.  A Tour of the Worm , 1988 .

[13]  Charles N. Fischer,et al.  A case study of run‐time errors in Pascal programs , 1982, Softw. Pract. Exp..

[14]  Rajiv Gupta,et al.  Optimizing array bound checks using flow analysis , 1993, LOPL.

[15]  Edward J. McCluskey,et al.  Concurrent Error Detection Using Watchdog Processors - A Survey , 1988, IEEE Trans. Computers.

[16]  Ilya Gertner,et al.  High-level debugging in parasight , 1988, PADD '88.

[17]  Edward A. Feustel,et al.  On The Advantages of Tagged Architecture , 1973, IEEE Transactions on Computers.

[18]  Anoop Gupta,et al.  SPLASH: Stanford parallel applications for shared-memory , 1992, CARN.