| Title and Copyright Information |
| About This Manual |
| Audience |
| New and Changed Features |
| Organization |
| Related Documents |
| Reader's Comments |
| Conventions |
| 1 | Introduction |
| 1.1 | Applicability |
| 1.2 | Architectural Level |
| 1.3 | Goals |
| 1.4 | Requirements |
| 1.5 | Definitions |
| 2 | Tru64 UNIX Concepts |
| 2.1 | Address Representation |
| 2.2 | Procedure Representation |
| 2.3 | Register Usage Conventions |
| 2.3.1 | Integer Registers |
| 2.3.2 | Floating-Point Registers |
| 2.4 | Register Names |
| 2.5 | Program Image Layout |
| 3 | Flow Control |
| 3.1 | Procedure Types |
| 3.1.1 | Procedure Descriptor Overview |
| 3.1.2 | Stack Frame Procedure |
| 3.1.2.1 | Stack Frame Format |
| 3.1.2.2 | Register Save Area |
| 3.1.3 | Register Frame Procedure |
| 3.1.4 | Null Frame Procedure |
| 3.2 | Transfer of Control |
| 3.2.1 | Call Conventions |
| 3.2.2 | Linkage |
| 3.2.3 | Link-Time Optimization |
| 3.2.4 | Calling Computed Addresses |
| 3.2.5 | Bound Procedure Values |
| 3.2.6 | Entry and Exit Code Sequences |
| 3.2.6.1 | Entry Code Sequence |
| 3.2.6.1.1 | Prologue Length |
| 3.2.6.1.2 | Frame Pointer Conventions |
| 3.2.6.1.3 | Entry Code Example for a Stack Frame Procedure |
| 3.2.6.1.4 | Entry Code Example for a Register Frame Procedure |
| 3.2.6.2 | Exit Code Sequence |
| 3.2.6.2.1 | Reserved Instruction Sequence for a Procedure Exit |
| 3.2.6.2.2 | Exit Code Sequence Steps |
| 3.2.6.2.3 | Exit Code Example for a Stack Frame Procedure |
| 3.2.6.2.4 | Exit Code Example for a Register Frame Procedure |
| 4 | Data Manipulation |
| 4.1 | Data Passing |
| 4.1.1 | Argument Passing Mechanisms |
| 4.1.2 | Normal Argument List Structure |
| 4.1.3 | Homed Memory Argument List Structure |
| 4.1.4 | Argument Lists and High-Level Languages |
| 4.1.5 | Unused Bits in Passed Data |
| 4.1.6 | Sending Data |
| 4.1.6.1 | Sending Mechanism |
| 4.1.6.2 | Order of Argument Evaluation |
| 4.1.7 | Returning Data |
| 4.1.7.1 | Function Value Return by Immediate Value |
| 4.1.7.2 | Function Value Return by Reference |
| 4.1.7.3 | Function Value Return by Descriptor |
| 4.2 | Data Allocation |
| 4.2.1 | Data Alignment |
| 4.2.2 | Granularity of Memory |
| 4.2.3 | Record Layout Conventions |
| 5 | Event Processing |
| 5.1 | Exception Handling |
| 5.1.1 | Exception Handling Requirements |
| 5.1.2 | Exception Handling Overview |
| 5.1.3 | Kinds of Exceptions |
| 5.1.3.1 | General Exceptions |
| 5.1.3.2 | Unwind Exceptions |
| 5.1.3.3 | Signal Exceptions |
| 5.1.4 | Status Values and Exception Codes |
| 5.1.5 | Exception Records |
| 5.1.5.1 | Exception Records for General Exceptions |
| 5.1.5.2 | Exception Records for Unwind Exceptions |
| 5.1.5.3 | Exception Records for Signal Exceptions |
| 5.1.6 | Frame-Based Exception Handlers |
| 5.1.7 | Establishing Handlers |
| 5.1.8 | Raising Exceptions |
| 5.1.8.1 | Raising General Exceptions |
| 5.1.8.2 | Raising General Exceptions Using gentrap |
| 5.1.8.3 | Raising Unwind Exceptions |
| 5.1.8.4 | Raising Signal Exceptions |
| 5.1.9 | Search for and Invocation of Exception Handlers |
| 5.1.9.1 | Invocation Order for Exception Handlers |
| 5.1.9.2 | Handler Invocation and Arguments |
| 5.1.10 | Modification of Exception Records and Context by Handlers |
| 5.1.11 | Handler Completion and Return Value |
| 5.1.11.1 | Completion by Reraising the Exception |
| 5.1.11.2 | Completion by Continuing Thread Execution |
| 5.1.11.3 | Completion During Unwinding |
| 5.1.11.4 | Completion from Signal Exceptions |
| 5.1.12 | Other Considerations in Handling Exceptions |
| 5.1.12.1 | Exception Synchronization |
| 5.1.12.2 | Continuation from Exceptions |
| 5.1.13 | Exception and Signal Handling Coexistence |
| 5.2 | Unwinding |
| 5.2.1 | Overview of Unwinding |
| 5.2.2 | Types of Unwind Operations |
| 5.2.2.1 | General Unwind |
| 5.2.2.2 | Exit Unwind |
| 5.2.3 | Types of Unwind Invocations |
| 5.2.3.1 | Unwind Operations with No Active Exception |
| 5.2.3.2 | Unwind Operations During an Active Exception |
| 5.2.4 | Unwind Initiation |
| 5.2.5 | Unwinding from an Inserted Code Range |
| 5.2.6 | Multiply Active Unwind Operations |
| 5.2.6.1 | Nested Unwind |
| 5.2.6.2 | Colliding Unwind |
| 5.2.7 | Unwind Completion |
| 5.2.8 | Unwinding Coexistence with setjmp and longjmp |
| 6 | Stack Limits in Multithreaded Execution Environments |
| 6.1 | Stack Limit Checking |
| 6.1.1 | Stack Region Definitions |
| 6.1.2 | Methods for Stack Limit Checking |
| 6.1.2.1 | Implicit Stack Limit Checking |
| 6.1.2.2 | Explicit Stack Limit Checking |
| 6.1.3 | Stack Reserve Region Checking |
| 6.2 | Stack Overflow Handling |
| 7 | Procedure Invocations and Call Chains |
| 7.1 | Referencing a Procedure Invocation |
| 7.2 | Providing a Procedure Invocation Context |
| 7.3 | Walking the Call Chain |
| 8 | Procedure Descriptors |
| 8.1 | Procedure Descriptor Representation |
| 8.1.1 | Code Range Descriptors |
| 8.1.2 | Run-Time Procedure Descriptors |
| 8.1.3 | Examples |
| 8.1.3.1 | Multiple Entry Point Example |
| 8.1.3.2 | Instrumented Code Example |
| 8.2 | Procedure Descriptor Access Routines |
| 8.3 | Run-Time Generated Code |
| Figures |
| 3-1 | Fixed Size Stack Frame Format |
| 3-2 | Variable Size Stack Frame Format |
| 3-3 | Register Save Area Layout |
| 3-4 | Register Save Area Example |
| 4-1 | In-Memory Homed Argument List Structure |
| 5-1 | Status Value Representation |
| 5-2 | Exception Record Format |
| 5-3 | Procedure Invocation Chain |
| 8-1 | Code Range Descriptor |
| 8-2 | Long Form Run-Time Procedure Descriptor |
| 8-3 | Short Form Run-Time Procedure Descriptor |
| Tables |
| 2-1 | General-Purpose Integer Registers |
| 2-2 | Floating-Point Registers |
| 3-1 | Procedure Properties Summary |
| 4-1 | Argument Item Locations |
| 4-2 | Unused Bits in Passed Data |
| 4-3 | Data Alignment Addresses |
| 5-1 | gentrap EXPT_CODE Values |
| Index |