\Symbolic Debugging of. Charles E. McDowell. April University of California at Santa Cruz. Santa Cruz, CA abstract

Similar documents
Debugging Optimized Code. Without Being Misled. Max Copperman UCSC-CRL June 11, University of California, Santa Cruz

Draft. Debugging of Optimized Code through. Comparison Checking. Clara Jaramillo, Rajiv Gupta and Mary Lou Soa. Abstract

A taxonomy of race. D. P. Helmbold, C. E. McDowell. September 28, University of California, Santa Cruz. Santa Cruz, CA

SRC Research. A Practical Approach for Recovery of Evicted Variables. Report 167. Caroline Tice and Susan L. Graham.

Technische Universitat Munchen. Institut fur Informatik. D Munchen.

DTIC ELECTF- FEB i. v928 ' Evicted Variables and the Interaction of Global Register Allocation and Symbolic Debugging "AD-A.

2 Fredrik Manne, Svein Olav Andersen where an error occurs. In order to automate the process most debuggers can set conditional breakpoints (watch-poi

Comparison Checking: An Approach to Avoid Debugging of Optimized Code?

Conditional Branching is not Necessary for Universal Computation in von Neumann Computers Raul Rojas (University of Halle Department of Mathematics an

C. E. McDowell August 25, Baskin Center for. University of California, Santa Cruz. Santa Cruz, CA USA. abstract

S1: a = b + c; I1: ld r1, b <1> S2: x = 2;

UMIACS-TR December, CS-TR-3192 Revised April, William Pugh. Dept. of Computer Science. Univ. of Maryland, College Park, MD 20742

Control of Processes in Operating Systems: The Boss-Slave Relation

Autolink. A Tool for the Automatic and Semi-Automatic Test Generation

Incremental Flow Analysis. Andreas Krall and Thomas Berger. Institut fur Computersprachen. Technische Universitat Wien. Argentinierstrae 8

Incremental Regression Testing. Hiralal Agrawal. Joseph R. Horgan. Edward W. Krauser. Saul A. London. Bellcore. 445 South Street. Morristown, NJ 07960

DTIC ELECTE. co AD-A Computer Science 00 ~~MAY 06 19

Reductions of the general virus detection problem

Heap-on-Top Priority Queues. March Abstract. We introduce the heap-on-top (hot) priority queue data structure that combines the

Transport protocols are of practical. login, le transfer, and remote procedure. calls. will operate on and therefore are generally

On Checkpoint Latency. Nitin H. Vaidya. In the past, a large number of researchers have analyzed. the checkpointing and rollback recovery scheme

1.1 Related work Our taxonomy aims at providing a terminology of replay debugger characteristics. The need for a debugging terminology has been formal

Server 1 Server 2 CPU. mem I/O. allocate rec n read elem. n*47.0. n*20.0. select. n*1.0. write elem. n*26.5 send. n*

. The problem: ynamic ata Warehouse esign Ws are dynamic entities that evolve continuously over time. As time passes, new queries need to be answered

2 Data Reduction Techniques The granularity of reducible information is one of the main criteria for classifying the reduction techniques. While the t

TIME WARP PARALLEL LOGIC SIMULATION ON A DISTRIBUTED MEMORY MULTIPROCESSOR. Peter Luksch, Holger Weitlich

SGML and Exceptions z. Pekka Kilpelainen and Derick Wood y. June University of Helsinki. Helsinki. Finland

The of these simple branch prediction strategies is about 3%, but some benchmark programs have a of. A more sophisticated implementation of static bra

Implementations of Dijkstra's Algorithm. Based on Multi-Level Buckets. November Abstract

p q r int (*funcptr)(); SUB2() {... SUB3() {... } /* End SUB3 */ SUB1() {... c1: SUB3();... c3 c1 c2: SUB3();... } /* End SUB2 */ ...

Availability of Coding Based Replication Schemes. Gagan Agrawal. University of Maryland. College Park, MD 20742

Consistent Logical Checkpointing. Nitin H. Vaidya. Texas A&M University. Phone: Fax:

FSU DEPARTMENT OF COMPUTER SCIENCE

Goal is to produce more ecient code for expressions

Recovering from Main-Memory Lapses. H.V. Jagadish Avi Silberschatz S. Sudarshan. AT&T Bell Labs. 600 Mountain Ave., Murray Hill, NJ 07974

Towards a Reference Framework. Gianpaolo Cugola and Carlo Ghezzi. [cugola, P.za Leonardo da Vinci 32.

A Note on the Succinctness of Descriptions of Deterministic Languages

An On-line Variable Length Binary. Institute for Systems Research and. Institute for Advanced Computer Studies. University of Maryland

(a) Control-Flow Graph. (b) Guarded code. x=1 y=1 x>0? x=y+1 x>1? y=x+2 B2. y=x+3

Figure 1: Representation of moving images using layers Once a set of ane models has been found, similar models are grouped based in a mean-square dist

Schema and Database Evolution in Object. Database Systems. Project Progress Report. Parag Mahalley. Jayesh Govindrajan. Swathi Subramanium

Extra-High Speed Matrix Multiplication on the Cray-2. David H. Bailey. September 2, 1987

Design of it : an Aldor library to express parallel programs Extended Abstract Niklaus Mannhart Institute for Scientic Computing ETH-Zentrum CH-8092 Z

Evolving Turing-Complete Programs for a Register Machine with. Self-modifying Code. 1 Introduction

Implementing Dynamic Minimal-prefix Tries

Optimum Alphabetic Binary Trees T. C. Hu and J. D. Morgenthaler Department of Computer Science and Engineering, School of Engineering, University of C

A Mini Challenge: Build a Verifiable Filesystem

2 Related Work Often, animation is dealt with in an ad-hoc manner, such as keeping track of line-numbers. Below, we discuss some generic approaches. T

Networks for Control. California Institute of Technology. Pasadena, CA Abstract

Dept. of Computer Science. The eld of time series analysis and forecasting methods has signicantly changed in the last

Exploration of Unknown or Partially Known. Prof. Dr. -Ing. G. Farber. the current step. It can be derived from a third camera

Single-pass Static Semantic Check for Efficient Translation in YAPL

KeyNote: Trust Management for Public-Key. 180 Park Avenue. Florham Park, NJ USA.

For our sample application we have realized a wrapper WWWSEARCH which is able to retrieve HTML-pages from a web server and extract pieces of informati

PARALLEL COMPUTATION OF THE SINGULAR VALUE DECOMPOSITION ON TREE ARCHITECTURES

LHC-B. 60 silicon vertex detector elements. (strips not to scale) [cm] [cm] = 1265 strips

Regular Languages (14 points) Solution: Problem 1 (6 points) Minimize the following automaton M. Show that the resulting DFA is minimal.

Using Local Trajectory Optimizers To Speed Up Global. Christopher G. Atkeson. Department of Brain and Cognitive Sciences and

SAMOS: an Active Object{Oriented Database System. Stella Gatziu, Klaus R. Dittrich. Database Technology Research Group

Chapter 14: Pushdown Automata

Comparison Checking. Dept. of Computer Science. Chatham College. Pittsburgh, USA. Rajiv Gupta. University of Arizona. Tucson, USA

Transparent Access to Legacy Data in Java. Olivier Gruber. IBM Almaden Research Center. San Jose, CA Abstract

Henning Koch. Dept. of Computer Science. University of Darmstadt. Alexanderstr. 10. D Darmstadt. Germany. Keywords:

The performance of xed block size fractal coding schemes for this model were investigated by calculating the distortion for each member of an ensemble

Routing and Ad-hoc Retrieval with the. Nikolaus Walczuch, Norbert Fuhr, Michael Pollmann, Birgit Sievers. University of Dortmund, Germany.

AST: Support for Algorithm Selection with a CBR Approach

to replicas and does not include a tie-breaking rule, a ordering to the sites. each time the replicated data are modied.

OBJECT-ORIENTED SOFTWARE DEVELOPMENT Using OBJECT MODELING TECHNIQUE (OMT)

Transformation of structured documents with the use of grammar

director executor user program user program signal, breakpoint function call communication channel client library directing server

Figure 1: An Area Voronoi Diagram of a typical GIS Scene generated from the ISPRS Working group III/3 Avenches data set. 2 ARRANGEMENTS 2.1 Voronoi Di

header of x code field body dovar code docol code header of foo code field code code body code field ;s code

Distributed Algorithms for Detecting Conjunctive Predicates. The University of Texas at Austin, September 30, Abstract

signature i-1 signature i instruction j j+1 branch adjustment value "if - path" initial value signature i signature j instruction exit signature j+1

Local qualitative shape from stereo. without detailed correspondence. Extended Abstract. Shimon Edelman. Internet:

Automated Model Transformations Based on STRIPS Planning

Exact Side Eects for Interprocedural Dependence Analysis Peiyi Tang Department of Computer Science The Australian National University Canberra ACT 26

Stability in ATM Networks. network.

To the management of Entrust Datacard Limited (formerly known as Entrust Limited, hereinafter Entrust ) and Trend Micro, Inc.

Performance Measures for Multi-Graded Relevance

Select (SumSal > Budget) Join (DName) E4: Aggregate (SUM Salary by DName) Emp. Select (SumSal > Budget) Aggregate (SUM Salary by DName, Budget)

However, m pq is just an approximation of M pq. As it was pointed out by Lin [2], more precise approximation can be obtained by exact integration of t

184 Facta Universitatis ser.: Elect. and Energ. vol.8, No.2(1995) Fig. 1. Centralized lookup service of computer network. Instead of it usually global

Siemens TREC-4 Report: Further Experiments with Database. Merging. Ellen M. Voorhees. Siemens Corporate Research, Inc.

CA Compiler Construction

Siegfried Loer and Ahmed Serhrouchni. Abstract. SPIN is a tool to simulate and validate Protocols. PROMELA, its

ABCDE. HP Part No Printed in U.S.A U0989

The Simplex Algorithm with a New. Primal and Dual Pivot Rule. Hsin-Der CHEN 3, Panos M. PARDALOS 3 and Michael A. SAUNDERS y. June 14, 1993.

We can express this in dataflow equations using gen and kill sets, where the sets are now sets of expressions.

Network Documentation: A Web-Based Relational Database Approach

task object task queue

Compiler Optimization Techniques

Dynamic Translation for EPIC Architectures

Understanding Concurrent Programs. using. Computer Science Department. Science Labs, South Rd. the language WSL [2,9,14] the Wide Spectrum Language,

Buckets, Heaps, Lists, and. Monotone Priority Queues. Craig Silverstein y. Computer Science Department. Stanford University. Stanford, CA 94305

AGDB: A Debugger for Agent Tcl. Melissa Hirschl and David Kotz. Hanover, NH fhershey, February 4, 1997.

residual residual program final result

We saw in the introduction how values used in one block ofaæow graph could be used in other blocks. offset := 4*j; value := baseëoffsetë

Department of Electrical Engineering, Keio University Hiyoshi Kouhoku-ku Yokohama 223, Japan

VISION-BASED HANDLING WITH A MOBILE ROBOT

Transcription:

A urther Note on Hennessy's \Symbolic ebugging of Optimized Code" Max Copperman Charles E. Mcowell UCSC-CRL-92-2 Supersedes UCSC-CRL-9-0 April 992 Board of Studies in Computer and Information Sciences University of California at Santa Cruz Santa Cruz, CA 906 abstract When attempting to debug optimized programs, most debuggers may give misleading information about the value of variables at breakpoints. Hennessy proposed a set of algorithms for generating optimized code and determining when, in the generated code, the reported values would be misleading, and under certain circumstances actually recovering the \expected" value of the variable (i.e., one that would not be misleading). We point out where the assumptions made by Hennessy need to be revised due to advances in compiler and debugger technology, and give references for rent work on this revised problem.

. Introduction Introduction Hennessy's paper \Symbolic ebugging of Optimized Code" [Hen82] discusses one of the problems of source-level debugging of optimized code: how to provide information about the value of a variable that has been aected by optimization without confusing or misleading the user. When the debugger gains control due to a program trap or breakpoint, it should provide values that are consistent with the order of evaluation and assignment in the source program, which corresponds to the the order of evaluation and assignment in an unoptimized version of the program. Unfortunately, this is not always possible, because various kinds of optimizations may cause a variable to have a value that has been assigned earlier or later than in the source (or unoptimized) code. Such a variable is termed nonrent at points in optimized code where its value diers from its value at corresponding points in the source or unoptimized code and rent at points where its value is the same. The bulk of Hennessy's paper deals with problems that arise from local optimization. He describes information to be used to determine which variables are nonrent in the presence of local optimizations and algorithms that use that information to make the determination and, if possible, recover the correct values of such variables. Wall et al [WST8] describes errors in Hennessy's algorithms and gives corrected algorithms. The code generation algorithm used in Hennessy's work (a standard algorithm from Aho and Ullman [AU77], [AU73], [AU72]) generates code that contains only one assignment to any variable within a basic block. In the next section, we show how Hennessy's algorithms (and the modied algorithms of [WST8]) are dependent on this characteristic. ue to a decade's progress in computer architecture and compiler technology, highly optimized code may contain more than one assignment to a given variable within a basic block. At one time registers were expensive and variables were assumed to reside in memory; if a variable could be kept in a register for its entire lifetime, it was considered to have been `optimized away'. Many architectures today provide enough registers that many variables never need to be stored in memory. Symbol table formats recognize this fact by allowing a variable to be mapped to a register; debuggers will retrieve the value in the register when queried about the variable. In fact, it is becoming more and more common to allow a variable to be mapped to a number of locations over its lifetime [CMR88], [Str9], [Wan9], [Sil92]. Assume that in some source code, a variable V is assigned into more than once in a basic block. Assuming that V is used after each such assignment, the code generation technique used by Hennessy would use temporaries (registers) for all but the last such assignment. Under the old assumption that V is stored in memory and has a single location known to the debugger, this is an optimization that eliminates memory references and thereby speeds up the program, at the cost of making the value of V nonrent between the rst and last assignments into V in the block. With rent compiler and debugger technology, each temporary is an alias for V (over the appropriate range of code), and V is rent throughout the block. The machine code that is produced by the code generation algorithm used by Hennessy contains more than one assignment into a variable V within a single block B if

2 2. The Problem x = a*b+c; d = e*x; f = sqrt(x); g = (h*x)/i; x = j*k; igure.: In the above code for a basic block, the rst assignment to x must take place because x is used within the block. The second assignment to x must take place because x must have the correct value on block exit. the source code contains more than one assignment into V within B, the result of some such assignment other than the last one is used within B, and each temporary into which such a result is computed is considered to be an alias for V appropriate range of code addresses (and the debugger is so informed). igure comprises a block in which two assignments are made to variable x. over the 2 The Problem The algorithms given by Hennessy for determining whether a variable V not give correct results when there are multiple assignments into V is rent at a breakpoint do in a block, that is, when what were once considered unavailable compiler temporaries are considered to be aliases for V. Hennessy's algorithms will report that x is nonrent at a breakpoint reached between the two assignments to x within the block shown in igure. Hennessy's debugger algorithms take as input an augmented expression dag. A normal expression dag has a variable name (or several) optionally labeling each node, indicating that the value of that node should be assigned to that variable when the value is computed. If a variable V is assigned at more than one node, as the dag is constructed the label is moved to the latest node at which V is assigned, so that subsequent uses of V within the dag refer to the node containing the correct value of V. Thus there is only one instance of any given variable label in the dag. Hennessy augments the dag in a number of ways, only one of which is germane here: rather than moving labels, a eld is added to distinguish between old and rent labels. In the dag construction algorithm, the node representing the last value assigned to a variable within a basic block is given a \rent" label for that variable. Nodes corresponding to previous values assigned to the same variable within the basic block are given an \old" label for that variable. By construction, there is only one rent label for each variable assigned to within the dag. In Hennessy's paper, an old label represents an assignment in the unoptimized version that is not present in the optimized version, and a rent label represents an assignment that appears in both unoptimized and optimized versions. Coutant et al [CMR88], Streepy [Str9], and the WAR standardization eort [Sil92] discuss dierent formats whereby a debugger can be informed of such aliases.

3. Examples 3 When what were once considered compiler temporaries are considered valid locations for variables, this construction produces assignments with old labels that appear in both unoptimized and optimized versions, contrary to the intended meaning of the old label. 2 ue to this construction, Hennessy's algorithms for determining whether a variable is rent (and the modied versions of Wall et al [WST8]) will provide all rent variables in programs that either: contain no old labels, or contain old labels, but due to optimization do not perform the assignments represented by those labels (even into temporaries), that is, programs that do not perform more than one assignment to any variable within a basic block. These algorithms will fail to provide some available rent values in programs that perform more than one assignment to any variable within a basic block. These algorithms cannot provide all rent variables for highly optimized code. It clearly follows that the algorithms cannot provide all rent variables for partially optimized code, which in addition may contain dead stores to variables subsequently assigned within a block. A general solution must work not only on highly optimized code, but on partially optimized and unoptimized code as well. 3 3 Examples igure 3. is a reproduction of igure 7 from Hennessy's paper. In this example, if execution is suspended at instruction 2 0 then is nonrent because the code that should have assigned into has been eliminated and is nonrent because the code that assigns into has been executed earlier than in the unoptimized code. igure 3.2 is a modied version of the same example. A use of has been inserted between the rst and second assignments into, thus code must be generated for the rst assignment into : is assigned into twice in the same basic block. If execution is suspended at the corresponding point in this example (now instruction 3 0 rather than 2 0 due to the presence of the additional assignment), is rent. has the same value at that point in the optimized and unoptimized code. However, the augmented dag for this modied example contains an old label for at node, just as in the case when no code was generated for the node. Algorithm from Wall et al [WST8], shown in igure 3., therefore reports as being nonrent (to relate this example to Algorithm, let L be the label on node : nodepointer of L < (the node number of the breakpoint location), L is an old label, and is not in ixed). 2 It should be noted that this will oc independently of the compiler's choice for the location of the temporary { it will happen even if the compiler chooses the storage location of the variable as the `temporary' location. It was once safe to assume that this would not oc, because variables were located in memory, but today variables may be located in registers, and the compiler may well choose the same location for the `temporary' and `permanent' variable locations. 3 Compilers routinely oer partial optimization in the form of optimization levels. These typically allow a trade-o between speed of compilation and completeness of optimization. A typographical error in the original gure has been corrected: the roll forward variable (RV) is, as is clear from the code and the text, but is shown in the original gure as A. The problem addressed by Wall et al in [WST8] is orthogonal to the problem introduced by our new interpretation of the

3. Examples Unoptimized Code Optimized Code Nonrent Variables RBV RV. := 2. A := B + C 0. := B 3. := B 2 0. A := B + C. := E 3 0. := E Root Order Code Order < < code start (2) < code start () < code start () A old + E 2 3 B C igure 3.: An Example (igure 7) from Hennessy's Paper The problem results from the fact that a rent variable corresponds to a node labelled old. It should be possible to modify the expression dag construction algorithm to allow multiple rent labels, so that every assignment into a variable within a block is labelled rent, and a node labelled old truly represents an eliminated assignment. However, Hennessy's algorithms assume that there is only one rent label for a variable in a block. This can be seen by examining igure 3.3, which is a further modied version of the example. The label on node is rent because the assignment does take place. A dead store into has been added (statement, node 6) and eliminated by optimization. If execution is suspended at statement 0 (corresponding to statement 6 in the unoptimized code), is nonrent because of the eliminated assignment. However, Algorithm reports as rent because the rent label of on node machine code { Hennessy's original Algorithm also reports as being nonrent.

3. Examples Unoptimized Code Optimized Code Variables Reported as Nonrent RBV RV. := 0. := 2. A := B + C 2 0. := B 3. := B 3 0. A := B + C. G := + A 0. G := + A. := E 0. := E Root Order < < < 6 Code Order code start () < code start (2) < code start () < code start () < code start (6) G + old A + 6 6 E 2 3 B C igure 3.2: A Modied Example on which Hennessy's Algorithms Are Conservative

6 3. Examples Unoptimized Code Optimized Code Variables Reported as Nonrent RBV RV. := 2. A := B + C 3. := B. G := + A. := H 6. := E 0. := 2 0. := B 3 0. A := B + C 0. G := + A 0. := E Root Order < < < 7 Code Order code start () < code start (2) < code start () < code start () < code start (7) G 6 old 6 7 7 + H E A + 2 3 B C igure 3.3: A urther Modied Example: if multiple rent labels are allowed for a single variable in a block (here ), Hennessy's algorithms will give incorrect results.

. Related Work 7 Input: A dag and a node d that is the error or breakpoint location. Output: The sets RV and RBV. Method: RV := ;; RBV := ;; f irst pass: nd the identiers that were stored into g ixed := fvjv is a rent label on some node n with codestart(n) < codestart(d)g for each label L in do begin n := the node labeled by L; v := the variable in the label L; if (nodepointer of L < d) f i.e., the assignment should have been done g and ((codestart(n) > codestart(d)) f but was not because of code motion g or (L is an old label) and (v is not in ixed)) f or because of a deleted store whose absence is not made irrelevant by a later store that is actually executed g then RV := RV [fvg; f compute the RBV set g if (L is rent) and (codestart(n) < codestart(d)) f i.e., the assignment was executed g and (nodepointer of L d) f but should not have been executed yet g then RBV := RBV [fvg; end igure 3.: Algorithm from Wall et al causes to be placed in the set ixed; when subsequently the old label on node 6 is examined, is rejected from membership in the RV (Roll orward Variable) set because is in ixed. Note also that in the computation of the RBV (Roll Backward Variable) set, if an assignment to a variable V and the corresponding uses of V are moved up (oc earlier in the optimized code than in the unoptimized code) so that they cross both the breakpoint and another (rent) assignment to V, V will be incorrectly placed in RBV. Algorithm 2 also relies upon the assumption that there is a single rent label for a variable in the dag, particularly in the function Available. Related Work Since Hennessy's paper, several groups have worked on this or related problems. Coutant et al [CMR88] describes a compiler/debugger pair modied to allow source-level debugging of optimized code. The part of their work relevant to this discussion is that the debugger reports when variables have been made nonrent due to instruction scheduling within a basic block. The compiler tracks stores to user variables that have been moved across statement boundaries. As of the 990 implementation, a variable was reported to be nonrent after its last use, although it may still be available in a register or in memory [Mel90]. Streepy

8. Summary [Str9] describes a rich compiler/debugger interface designed to allow source-level debugging of optimized code. The interface denes source units beyond subroutines and statements (it includes loops, blocks, and expressions) and includes a source range table mapping between source units and sequences of object code generated from them. This provides sucient information to determine whether a variable is rent at a breakpoint when local optimizations have been performed: within a basic block, there is a total order on source statements and a total order on object code addresses, and the source range table gives a mapping between them, allowing dierences in order to be determined. 6 Across basic blocks, the orderings on source statements and object code addresses are partial orders, thus the source range table does not provide sucient information to determine whether a variable is rent at a breakpoint: when global optimizations have been performed, data ow information is needed. ata ow techniques have been successfully applied to problem of rentness determination in the presence of both local and global optimization by Copperman and Mcowell [Cop92], [CM9] and independently by Bemmerl and Wismueller [BW92]. Reaching denitions are computed before optimization is performed. In Copperman and Mcowell's work, a second reaching denitions computation is done after optimization is performed, and a comparison of the denitions of a variable that reach a breakpoint before and after optimization is used to determine if the variable is rent at the breakpoint. In Bemmerl and Wismueller's work, each denition of a variable found to reach a breakpoint before optimization is tested to determine whether it is killed along any path along which it is `supposed' to reach the breakpoint. Summary Many debuggers occasionally give misleading information about the value of a variable at a breakpoint in an optimized program. Hennessy's algorithms for determining when a reported value would be misleading due to local optimizations assume that optimized code contains only one assignment to any variable within a basic block. This assumption was valid when he made it, but is now overly restrictive: compiler and debugger technology has progressed so that what were once considered compiler temporaries are now considered aliases for variables, thus there may be more than one assignment to a variable within a block. The problem of rentness determination is more general than the problem that Hennessy solved. Several groups have worked on the more general problem with some success. References [AU77] Aho, A.V. and Ullman, J.. Principles of Compiler esign, Addison Wesley, Menlo Park, CA, 977. [AU73] Aho, A.V. and Ullman, J.. The Theory of Parsing, Translation, and Compiling, Prentice Hall, Englewood Clis, N.J., 973. 6 The information is sucient provided that assignment is considered to be an expression, and thus a mapping between assignment operators and the object code that sets the variable (the store into memory, computation into a register, or register copy operation) is provided. It is not clear from Streepy's paper that this is the case, but if not, it is clearly possible to extend the interface in this direction.

References 9 [AU72] Aho, A.V. and Ullman, J.. \Optimization of Straightline Code," Siam J. Comput., (Jan. 972), -9. [Cop92] M. Copperman, \ebugging Optimized Code Without Being Misled," UCSC Technical Report UCSC- CRL-92-0, January 992. Submitted for publication to ACM Transactions on Programming Languages and Systems. [CM9] Copperman, M., Mcowell, C. \ebugging Optimized Code Without Surprises (Extended Abstract)," Proceedings of the Supercomputer ebugging Workshop, Albuquerque NM, November 99 [CMR88]. Coutant, S. Meloy, M. Ruscetta \OC: a Practical Approach to Source-Level ebugging of Globally Optimized Code," Proceedings of the SIGPLAN `88 Conference on Programming Language esign and Implementation, pp. 2-3, 988. [Sil92] Personal Communication, J. Silverstein, ed., \WAR ebugging Information ormat," Proposed Standard, UNIX International Programming Languages Special Interest Group, April 992. [Hen82] Hennessy, J. \Symbolic ebugging of Optimized Code," ACM Transactions on Programming Languages and Systems, Vol., No. 3, pp. 323-3, 982 [Mel90] Personal Communication, Meloy, S., Hewlett-Packard, 33 Mount Pleasant Rd., Lincoln, CA [Hen90] Personal Communication, Hennessy, J., Center for Integrated Systems, Stanford University, Stanford, CA [Str9] L. Streepy, \CXdb A New View On Optimization," Proceedings of the Supercomputer ebugging Workshop, Albuquerque, November 99. [Wan9] Personal Communication regarding Microtec Research's Xray ebugger, Wang,., Microtec Research, Inc., Santa Clara, CA, January 992 [Wis92] Personal Communication, Wismueller, R., Institut fur Informatik, Technische Universitat Munchen, Munich, Germany, March 992 [BW92] T. Bemmerl, R. Wismueller, "Quellcode-ebugging von global optimierten Programmen", Proceedings of the GI-ITG Workshop "Parallelrechner und Programmiersprachen", Schloss agstuhl, Germany, eb. 992 [WST8]. Wall, A. Srivastava, R. Templin, \A note on Hennessy's Symbolic ebugging of Optimized Code," ACM Transactions on Programming Languages and Systems, Vol. 7, No., pp. 76-8, Jan. 98.