AS/400 Machine Level Programming

Table of contents

Chapter 0: Introduction - - - - - - - 0-1

Why Program at the Machine-Level? 0-1

What is the Machine-Level? - - - - - - - 0-1

Above and Below the MI 0-1

Old MI and New MI - - - - - - - - 0-1

Is MI Hard and Arcane? 0-1

What About All Those MI-Instructions? - - - - - - 0-2

Small Programs or Large Programs 0-2

Why is MI so Secret? - - - - - - - - 0-2

Chapter 1: Getting Your Own MI-Compiler - - - - - - 1-1

MI-Compilers 1-1

Create Program (QPRCRTPG) API - - - - - - 1-1

Detailed Explanation of Each Parameter (Boring) 1-2

The MI-Compiler Front-End - - - - - - - 1-4

The CRTMIPGM Command 1-7

Hello World - - - - - - - - - 1-8

MI Functional Reference Manual 1-10

Chapter 2: Data Types and Your First Real MI-Program - - - 2-1

Data Types 2-1

Character Data Type - - - - - - - - 2-1

Numeric Data Types 2-2

Data Names - - - - - - - - - 2-2

Comments 2-3

Hexadecimal Constants - - - - - - - - 2-3

Convert Hexadecimal to Character 2-3

Compile Errors - - - - - - - - 2-4

Conditions and Branching 2-4

Labels and Branch Points - - - - - - - 2-5

Short Form of Instructions 2-5

Structured Data - - - - - - - - 2-5

Our First "Real" MI-Program 2-7

Chapter 3: Pointers, Pointers, and Pointers - - - - - - 3-1

Space Data Object 3-1

Setting a Space Pointer - - - - - - - - 3-2

Explore Pointers: Materialize Invocation Stack 3-2

Static Storage Method - - - - - - - - 3-2

Dealing with Exceptions 3-4

Automatic Storage Allocation - - - - - - - 3-5

Instruction Pointers 3-6

Chapter 4: Arithmetic and Timestamps - - - - - 4-1

Timestamps 4-1

Convert Timestamp to Date and Time - - - - - - 4-1

Converting to a Date 4-2

Complete Program to Show Current Date and Time - - - - 4-3

Leap Seconds 4-4

Higher Resolution in Later Versions - - - - - - 4-5

Chapter 5: Calling Other Programs - - - - - - 5-1

External Program Objects 5-1

Obtaining a System Pointer - - - - - - - 5-1

Initializing a System Pointer 5-1

Resolving a System Pointer - - - - - - - 5-1

Copying a System Pointer 5-2

System Entry Point Table (SEPT) - - - - - - 5-2

Counterfeiting a Pointer 5-2

Encapsulated Objects - - - - - - - - 5-2

The Argument List 5-2

Program Call Example - - - - - - - - 5-3

Relative Branch Conditions 5-4

An Optimization - - - - - - - - - 5-5

The System Entry Point Table 5-5

Chapter 6: RISC Code for Setting a Pointer - - - - - - 6-1

Set Space Pointer From Pointer 6-1

Documentation About the PowerPC - - - - - - 6-1

AS/400 RISC PowerPC Machine Architecture 6-1

System Service Tools - - - - - - - - 6-2

Dissecting SETSPPFP 6-4

LQ - Load Quadword Instruction and Pointer Tag Bits - - - - 6-4

TXER Instruction 6-5

ORI - OR Immediate Instruction - - - - - - - 6-6

ADDI - Add Immediate Instruction 6-6

RLDICL Instruction - - - - - - - - 6-6

Condition Register 6-7

BC - Branch Conditional Instruction - - - - - - 6-7

BLA - Branch with Link to Absolute Address Instruction 6-8

Link Register - - - - - - - - - 6-8

Addresses, Segments, Offsets, and SLIC 6-8

LD - Load Doubleword Instruction - - - - - - 6-9

RLDICR Instruction 6-9

SETTAG Instruction - - - - - - - - 6-10

STQ, Store Quadword Instruction 6-10

Final Annotated SETSPPFP Code - - - - - - - 6-10

Chapter 7: Accessing Arbitrary Data in Memory - - - - - 7-1

Accessing Arbitrary Data 7-1

Set Space Pointer From Any Pointer - - - - - - 7-1

Counterfeiting the Pointer 7-1

Accessing Encapsulated Program Code - - - - - - 7-2

Using the Debugger 7-3

System Domain Objects - - - - - - - 7-4

Going System State 7-5

This Does Not Work on a CISC Box - - - - - - 7-5

Chapter 8: Getting/Setting File Member Information - - - - - 8-1

File Member Information 8-1

File Member Cursors - - - - - - - - 8-1

The Member Header 8-1

Converting Dates to Timestamps - - - - - - 8-3

Must be System State 8-3

Parameters - - - - - - - - - 8-3

Command CHGMBR and Command Processing Program CHGMBRCL 8-4

Command Processing Program - - - - - - - 8-5

The Complete MIMBRINF Program 8-6

Chapter 9: The Work Control Block Table - - - - - - 9-1

Tasks, Processes, and Jobs 9-1

Job Names - - - - - - - - - 9-1

Finding Work Control Block Tables 9-1

The Process Communication Object - - - - - - 9-1

The Master (Root) WCB Table List 9-2

Scanning the WCB Tables - - - - - - - 9-3

Testing if a Pointer is Null 9-3

Searching a Work Control Block Table - - - - - - 9-3

Scanning WCB for Device Name 9-4

Checking the Job Status - - - - - - - 9-4

Putting It All Together 9-5

Performance - - - - - - - - - 9-7

A Faster Way of Locating Jobs 9-7

Format of the Job Index Header - - - - - - - 9-7

Format of the Job Index Entry 9-8

Addressing the Job Index - - - - - - - 9-8

Finding Entries in the Job Index 9-9

A Faster Version, MIWCBFND - - - - - - - 9-9

A Brief History of WCBT Problems 9-11

Chapter 10: Internal Sorting, Combsort - - - - - 10-1

Sorting Internal Data 10-1

Bubble Sort - - - - - - - - - 10-1

Combsort 10-2

MI-Version of Combsort - - - - - - - 10-2

Override Program Attribute 10-3

The Sort Double Loop - - - - - - - - 10-3

Complete Combsort Code 10-4

Using Instruction Pointers - - - - - - - 10-4

Testing Combsort 10-5

Generating Random Numbers - - - - - - - 10-5

Measuring Processor Time Spent 10-5

Calling Combsort - - - - - - - - 10-6

Computing N log2 N 10-6

Compute Mathematical Function with 1 Argument - - - - - 10-7

Computing Time Differences 10-7

Simple Numeric Editing - - - - - - - - 10-8

The Complete MITSTCMB Test Program 10-8

Performance Results - - - - - - - - 10-10

RPG Version of COMBSORT 10-11

Chapter 11: The Machine State Register. - - - - - 11-1

Machine State Register (MSR) 11-1

Privilege Level - - - - - - - - - 11-2

The MFMSR/MTMSRD Instructions 11-2

Running in Supervisor Mode - - - - - - - 11-3

Finding the SLIC Code for Call Program 11-3

Retrieving Machine Registers - - - - - - - 11-5

Getting General-Purpose Registers 11-5

Getting Special-Purpose General-Use Registers - - - - - 11-6

STD Instruction 11-7

Getting the Machine State Register - - - - - - 11-8

The Program State 11-8

The Floating Point Bit - - - - - - - - 11-8

Chapter 12: Input/Output in MI Using the SEPT - - - - 12-1

A File Compressor/Decompressor 12-1

The User File Control Block - - - - - - - 12-1

How Do We Know This Stuff? 12-2

Setting Library/File/Member - - - - - - - 12-2

Some AS/400-S/38 History 12-3

Control Flags - - - - - - - - - 12-3

More Control Flags 12-4

The FCMPRS (File Compress) Command - - - - - - 12-4

Command-Processing Program 12-4

Parameter Block - - - - - - - - 12-4

The System Entry Point Table (SEPT) 12-5

Opening a File - - - - - - - - - 12-6

The Open Data Path 12-7

Data Management Entry Point Table - - - - - - 12-9

I/O Routines 12-10

The Data Management Option List - - - - - - 12-10

The Data Management Control List 12-12

Filling the Input Area - - - - - - - - 12-12

Compressing the Input 12-12

Write the Compressed Records - - - - - - - 12-13

Getting the System Name 12-14

Decompressing the Data - - - - - - - 12-14

Compression Ratio 12-15

The Complete Program - - - - - - - - 12-15

Chapter 13: File Conversion and Hashing - - - - - 13-1

Minimum File Transformation: COPY 13-1

Generic File Transformer Command - - - - - - - 13-2

Translating the Data From a File 13-3

A GREP-Like Utility - - - - - - - - 13-4

A KWIC (KeyWord-In-Context) Version of GREP 13-5

Calculating a File Digest - - - - - - - 13-6

Clearing the File Before Output 13-8

Variable Length Part of the UFCB - - - - - - 13-8

Blocking Records to Increase I/O Performance 13-8

With/Without Level Check - - - - - - - 13-8

Chapter 14: Password Encryption on the AS/400 - - - - - 14-1

Password Protected Access 14-1

Password Rules - - - - - - - - 14-1

Retrieving the Encrypted Password 14-1

Algorithm for the 1st Encrypted Password - - - - - - 14-2

Using CIPHER to DES-Encrypt 14-4

Algorithm for the 2nd Encrypted Password - - - - - 14-5

Why Seven Characters Instead of Eight? 14-7

The Magic Constant - - - - - - - - 14-7

The Compleat MIENCPWD Program 14-8

The Brute-Force Attack - - - - - - - - 14-10

Passwords Stored in the Clear! 14-10

A Password Checking Utility - - - - - - - 14-10

Real Security 14-12

Chapter 15: Program Validation Value - - - - - - 15-1

The Program Validation Value 15-1

States and Domains - - - - - - - - 15-1

Saving/Restoring Programs 15-1

Calculating the Program Validation Value - - - - - - 15-1

The ILE Program Model 15-2

Our TEST Program - - - - - - - - 15-2

Object Header 15-2

Program Header - - - - - - - - 15-3

The AS/400 Security Oracle 15-3

Effective Address Translation - - - - - - - 15-4

Page Protection Bits 15-5

Writable Program Header - - - - - - - 15-5

History Log 15-5

Program Version Table - - - - - - - - 15-6

Program MICLNPGM to Clean Patch Information and History Log 15-7

Program Maintenance Header - - - - - - - 15-9

Module Table 15-10

Module Header - - - - - - - - - 15-10

Module Version Table 15-11

Procedure Table - - - - - - - - 15-12

RISC Instructions 15-12

Module Constants - - - - - - - - 15-13

Primary Associated Space 15-13

Which Components Go Into the PVV? - - - - - - 15-13

Diffusion and Confusion 15-13

Program MIPGMVV Computes the PVV - - - - - - 15-14

Clearing the History Log on V4R4+ 15-16

Digitally Signed Objects - - - - - - - 15-16

Chapter 16: User-Defined 5250 Datastream I/O - - - - - 16-1

Display Files 16-1

The MIHWORLD Program - - - - - - - 16-2

Data Management Option List 16-3

Data Management Control List - - - - - - - 16-3

Device Control (or Name) Block 16-3

Machine Space Pointers - - - - - - - 16-4

Datastream Format 16-4

Buffer Format - - - - - - - - - 16-4

Datastream Commands 16-4

Orders - - - - - - - - - 16-6

Field Control Word 16-7

Field Format Word - - - - - - - - 16-7

Screen Attributes 16-8

Explanation of the Magic Constants - - - - - - 16-9

Chapter 17: A Simple Screen I/O Interface - - - - - - 17-1

Describing Screen Files 17-1

Item Introducer - - - - - - - - 17-2

Logical Attributes 17-2

Cursor Position - - - - - - - - 17-3

The Contiguous Data Block 17-3

The MITSTSCR Test Program - - - - - - - 17-4

Command Keys 17-4

The MISCRNIO Screen Handler - - - - - - - 17-4

File control Block and Data Management Entries 17-5

Buffer Formats - - - - - - - - 17-6

Orders 17-7

Command Key Translation - - - - - - - 17-7

Data Content Translation 17-8

Attribute Translation - - - - - - - - 17-8

Current Cursor Position 17-8

The Screen Handler Code - - - - - - - 17-9

Open Terminal 17-9

Close Terminal - - - - - - - - - 17-9

Write to Terminal 17-9

The VERIFY MI-Instruction - - - - - - - 17-10

The XLATE MI-Instruction 17-10

Calculating Where to Place the Cursor - - - - - - 17-11

Read from Terminal 17-11

Format of MDT Input Fields Returned - - - - - - 17-12

Finding Field With Cursor 17-13

Chapter 18: (SCV) Supervisor Call Vectored - - - - - 18-1

The SCV/RFSCV Instructions 18-1

How Is the SCV Used? - - - - - - - - 18-1

The SCV Dispatch Code 18-1

RLDIMI Instruction - - - - - - - - 18-2

Tracing and Single-Step Mode 18-3

ADDIS Instruction - - - - - - - - 18-3

SCV 10 Handler 18-4

The Blocked Instruction Flag Table - - - - - - 18-4

Other SCV Calls 18-6

What Did We Learn? - - - - - - - - 18-6

Chapter 19: Calculating Archimedes' Constant, Pi - - - - 19-1

An Amazing Formula for Pi 19-1

Computing the Square Root - - - - - - - 19-1

The MIPIPKD Program 19-2

The MIPIFLT Program - - - - - - - - 19-3

The Original S/38 Program, MIPIS38 19-4

Chapter 20: Exception Handling - - - - - - 20-1

Exceptions and Events 20-1

Declaring an Exception Monitor - - - - - - - 20-1

The Exception Identifier 20-2

Searching for Exception Descriptions - - - - - - 20-2

Materialize an Exception Description 20-2

Modifying an Exception Description - - - - - - 20-3

Monitoring Exceptions: The MIDECEXC Program 20-3

Exception General and Specific Data - - - - - - 20-4

Return from Exception 20-5

Signaling Exceptions: The MISIGEXC Program - - - - - 20-6

Materialize Invocation Attributes 20-6

Signaling an Exception - - - - - - - - 20-7

Various Errors 20-8

Preventing Messages in the Joblog - - - - - - 20-9

Chapter 21: Walking the ODP Chain - - - - - - 21-1

The Open Data Path 21-1

Searching Work Control Block Tables - - - - - - 21-1

The Data Management Communication Object 21-2

The DMQC Root - - - - - - - - - 21-2

The SETSPPO MI-Instruction 21-3

A DMCQ Open Entry - - - - - - - - 21-5

Locating the ODPs 21-5

Structure of the ODP - - - - - - - - 21-6

The Open Feedback 21-6

The I/O Feedback - - - - - - - - 21-7

Data to Collect about an Active File 21-7

The MIODPWLK Program - - - - - - - 21-8

Chapter 22: How to Generate a Truly Random Number - - - - 22-1

What is a Random Number? 22-1

Use of Randomness - - - - - - - - 22-1

Bad Seeds 22-1

The Entropy Pool - - - - - - - - 22-2

Sources of Entropy 22-2

Timing Information - - - - - - - - 22-3

Entropy Pool Format 22-3

The Yield Time - - - - - - - - 22-4

Resource Management Data 22-4

Processor Utilization - - - - - - - - 22-5

Storage Management Counters 22-5

Main Storage Pool Information - - - - - - - 22-6

Disk Storage Information 22-7

Activity Level Control Data - - - - - - - 22-8

Can We Measure the Amount of Entropy in the Pool? 22-9

Aging the Entropy Pool - - - - - - - - 22-9

The Get Entropy Program (MIGETETP) 22-10

The Internal State - - - - - - - - 22-10

Generation of Entropy 22-11

The Entropy Monitor Program (MIETPMON) - - - - - 22-12

Conclusion 22-13

TCP/IP Flaw Because of Lack of Randomness - - - - - 22-13

Chapter 23: Automatic Refresh of Display - - - - - - 23-1

The Automatic Refresh Problem 23-1

DDS Specification for the Display File - - - - - - 23-1

ASSUME (Assume) Keyword 23-1

CFnn (Command Function) Keyword - - - - - - 23-1

KEEP (Keep) Keyword 23-1

OVERLAY (Overlay) Keyword - - - - - - - 23-1

USRDFN (User-Defined) Keyword 23-2

INVITE (Invite) Keyword - - - - - - - - 23-2

Invited Devices 23-2

General-Purpose Time-out Program - - - - - - 23-3

The DDS for the Invited Device 23-3

RPG Versions of the Time-Out Program - - - - - - 23-4

Call Stack for WRKACTJOB Command 23-4

The QDMACCIN Program - - - - - - - 23-5

Changing the Time-out Value Dynamically 23-6

The MIINVDSP Invited Display Program - - - - - 23-6

Automatic Refresh Driver Program MIAUTREF 23-8

The CVTEFN MI-Instruction - - - - - - - 23-10

The ROLLUP / ROLLDOWN Problem 23-10

Acknowledgements - - - - - - - - 23-11

Chapter 24: Editing of Numeric Variables - - - - - - 24-1

The Importance of Editing 24-1

Edit Codes and Edit Words - - - - - - - 24-1

COBOL Pictures 24-1

The EDIT MI-Instruction - - - - - - - 24-2

The Edit Mask 24-2

Parameter Length Conformance - - - - - - - 24-4

Left-Justifying the Number 24-4

Chapter 25: Machine Indexes - - - - - - - 25-1

What is a Machine Index? 25-1

Binary Radix Trees. - - - - - - - - 25-1

The Index Instructions 25-1

Security Level 40+ Considerations - - - - - - 25-1

The Search Engine Problem 25-2

Index Object Subtypes - - - - - - - - 25-2

Creating the Index 25-2

Reading the File Member - - - - - - - - 25-5

Extracting Words 25-6

Inserting an Entry - - - - - - - - 25-7

Internal Structure of an Index 25-8

Iterating over All Members of a File - - - - - - 25-9

Insertion Speed 25-11

Searching the Index - - - - - - - - 25-11

Building a Screen 25-13

Searching for the Word - - - - - - - - 25-14

Chapter 26: The AS/400 Memory Explorer - - - - - - 26-1

Examining Memory without SST 26-1

Accessing Arbitrary Memory - - - - - - - 26-1

Preserving Tag Bits 26-2

Screen Layout - - - - - - - - - 26-3

Arrays of Fields 26-3

The Explorer Program (MIEXPLR) - - - - - - 26-4

The DATA to Show 26-4

Stacking/Unstacking of Addresses - - - - - - 26-4

Showing the Screen 26-4

Enter: Specifying the Location of the Data - - - - - 26-6

Paging Down/Up to See More 26-7

The HOME or PCS Position - - - - - - - 26-7

Look at Memory at Another Address 26-7

Detecting a Pointer - - - - - - - - 26-8

The CMPPTRT MI-instruction 26-8

Unstacking to Previous Address - - - - - - - 26-9

Displaying Timestamps 26-9

Disassembling Instructions - - - - - - - 26-9

Exiting the Program 26-10

Building the Screen Image - - - - - - - - 26-10

Determining the Pointer Description 26-11

Ready-made AS/400 Explorer - - - - - - - 26-11

Chapter 27: Inside a Save File - - - - - - 27-1

Why Save-Files? 27-1

The Internal Save Format - - - - - - - - 27-1

The Dump Space 27-2

Dump Space Management Instructions - - - - - - 27-2

Checksums 27-2

Dump Space Header - - - - - - - - 27-2

The Dump Space Data Pages - - - - - - - 27-2

The Dump Descriptor 27-3

Dump Descriptor Catalog - - - - - - - - 27-3

Extended Object Information 27-4

Show Object in a Save File, MIOBJSAV - - - - - - 27-4

Walk Descriptors in Save File, MIWLKSAV 27-7

Modifying a Save File - - - - - - - - 27-9

Save File Integrity? NOT 27-9

Single-Level Store? Maybe Not Always - - - - - - 27-10

"Flushing" a Save File to Disk 27-10

Changing Module Information, MICHGMOD - - - - - 27-10

Save Files for CISC Architecture 27-13

Chapter 28: Recursion, Entropy, and the End of the World - - - - 28-1

Recursive Procedures 28-1

Summing of Integers - - - - - - - - 28-1

Equipartition of Energy 28-2

Distinguishability of Particles - - - - - - - 28-3

"How Many Ways to Distribute 10 Units of Energy among 5 Distinguishable Particles?" 28-3

A Computer Simulation - - - - - - - - 28-3

Programming Idioms 28-4

Storage Attributes - - - - - - - - 28-4

Calling MIADSUMR 28-5

A Parameter That Is Not a Pointer - - - - - - 28-6

An Iterative Version, MIADSUMI 28-6

Sample Results (Combinatorial Explosion) - - - - - 28-7

Method of Finite Differences 28-8

A Note About the Programs for This Chapter - - - - - 28-8

The Tower of Hanoi 28-8

Fibonacci Numbers - - - - - - - - 28-11

Chapter 29: Changing Your Machine's Serial Number - - - - 29-1

What Legitimate Reason Can You Have For This? 29-1

A True Horror Story - - - - - - - - 29-1

The MATMATR Instruction 29-2

Finding the SCV Function - - - - - - - 29-2

OS/400 is Developed Under UNIX 29-2

Contents of the Data Segment - - - - - - - 29-2

Get the Serial Number 29-3

The HDTA Object - - - - - - - - 29-4

System Values 29-5

What Happens at the Next IPL? - - - - - - - 29-5

Place of Manufacture 29-6

The "Software" Serial Number - - - - - - - 29-6

Pure conjecture (Probably Incorrect) 29-6

A Little More History 29-6

Chapter 30: The Advanced Encryption Standard - - - - 30-1

The Need for a New Encryption Standard 30-1

The New Encryption Standard - - - - - - - 30-1

The Rounds 30-1

Copy Bits Logical (CPYBTL) - - - - - - - 30-2

Generated RISC Code for MI-Version 30-3

Generated RISC Code for C-Version - - - - - - 30-3

Optimized RISC Code for C-Version 30-4

C-Version of AES - - - - - - - - 30-4

Defining an Encryption Round 30-5

Defining a Decryption Round - - - - - - - 30-6

Key Expansion 30-6

The Encryption/Decryption Process - - - - - - 30-8

Operating Modes 30-8

Electronic Codebook Mode - - - - - - - 30-9

Cipher Block Chaining Mode 30-9

The File Encryption Program, MIFAES - - - - - - 30-10

Encryption/Decryption Speed 30-11

Compiling and Binding the C-Programs - - - - - - 30-11

The AES C-Program 30-11

The AESTEST Testprogram - - - - - - - 30-12

Chapter 31: The Object Information Repository - - - - 31-1

Extended Common Object Information 31-1

Work with Object Command (WRKOBJ) - - - - - - 31-1

The OIR (Object Information Repository) 31-2

Work with OIR (MIWRKOIR) - - - - - - - 31-3

Must be System State 31-5

The Change Object Description API (QLICOBJD) - - - - - 31-5

Fields in the OIR 31-5

The MISHWOIR Test Program - - - - - - - 31-7

What is in the Additional OIR Records? 31-11

Chapter 32: Immune against Check Object Integrity - - - - - 32-1

Checking Object Integrity 32-1

Hacking CHKOBJITG? - - - - - - - - 32-1

Using CHKOBJITG 32-1

Disowning an Object - - - - - - - - 32-2

The User Profile as a Machine Index 32-3

Defense in Depth (The Alter Log) - - - - - - 32-3

Format of Alter Log Entries 32-4

Clearing the Alter Log - - - - - - - - 32-5

How Did We Know the Address of the Alter Log? 32-5

Chapter 33: Analysis of SCV 7, Program Call - - - - - 33-1

Program Calls 33-1

Adopted Authority - - - - - - - - 33-1

The Program State Attribute 33-1

Generated Code for CALLX Instruction - - - - - - 33-1

The SCV 7 Dispatch Code 33-2

The #AICAPGM Module - - - - - - - 33-2

Check State Attribute 33-3

Finally Calling the Program - - - - - - - 33-4

Entering the Called Program 33-4

The STDU RISC-Instruction - - - - - - - 33-4

Returning from the Called Program 33-4

Format of the Invocation Stack Frame, ISF - - - - - 33-5

Chapter 34: Anatomy of a User Profile - - - - - - 34-1

The Central Role of a User Profile 34-1

Getting User Profile for a Job - - - - - - - 34-1

Object Specific Header 34-2

Privileged Instruction Bits in User Profile - - - - - - 34-2

Special Authority Bits in User Profile 34-2

Object Audit Level - - - - - - - - 34-3

User Audit Levels 34-3

A Dangerous Program - - - - - - - - 34-4

The Associated Space 34-4

Qualified Values - - - - - - - - 34-5

Various User Profile Flags 34-5

Language, Country, and Character Set IDs - - - - - - 34-5

User Options 34-6

Objects Owned by User Profile - - - - - - - 34-6

Chapter 38: Source and Debug Information - - - - - - 38-1

ILE Programs and Modules 38-1

OIR-Information for Modules - - - - - - - 38-1

Change Licensed Object Description, QLICOBJD 38-2

Anatomy of a Module - - - - - - - - 38-2

The HLL Symbol Table 38-3

View Descriptors - - - - - - - - 38-3

Descriptor Types 38-5

No Debug Source - - - - - - - - 38-5

Why Make the Symbol Table Inaccessible? 38-5

Changing Source/Debug Information, MICHGMOD - - - - 38-5

The Bound Program 38-8

The BNAS Information - - - - - - - - 38-8

Debug Source Information 38-11

Appendix A: MI-Instructions Quick Reference - - - - - A-1

MI-Instruction Quick Reference A-1

Computational and Branching Instructions - - - - - A-1

Pointer/Resolution Instructions A-6

Space Management Instructions - - - - - - - A-7

Independent Index Instructions A-7

Authorization Instructions - - - - - - - A-7

Program and Invocation Instructions A-8

Exception Management Instructions - - - - - - A-9

Queue Management Instructions A-9

Object Lock Instructions - - - - - - - A-10

Context Management Instructions A-10

Heap Management Instructions - - - - - - A-10

Resource Management Instructions A-11

MI Support Functions Instructions - - - - - - A-11

Date/Time/Timestamp Instructions A-11

Appendix B: Object Type/Subtypes - - - - - - - B-1

Object Type/Subtypes B-1

Object List - - - - - - - - - B-1

Appendix C: PowerPC Instruction Set Quick Reference - - - - C-1

Instructions Sorted by Mnemonic C-1

Appendix D: SEPT Entries in the User Domain - - - - - D-1

System Entry Point Table Entries D-1

Entries Sorted by Number - - - - - - - D-1

Entries Sorted by Name D-13

Appendix E: SCV 10 Function Numbers - - - - - E-1

Supervisor Call (Vectored) Functions E-1

Appendix F: Open and I/O Feedback Areas - - - - - - F-1

Open Feedback Area F-1

I/O Feedback Area - - - - - - - - F-6

Common I/O Feedback Area F-6

I/O Feedback Area for ICF and Display Files - - - - - - F-8

I/O Feedback Area for Printer Files F-10

I/O Feedback Area for Database Files - - - - - - F-10