For TSD formats for other versions of OS/2 see:
Pointers
CurrTSD points to the current TSD.
┌─────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpad │+0 │1000 │B │Dummy page to catch faults │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDUserStack │+1000 │F98 │W │Thread's kernel stack │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDUserESP │+1f98 │4 │D │Saved user stack pointer │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDUserSS │+1f9c │2 │W │Saved user stack segment │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDUserSSPad │+1f9e │2 │W │Pad word pushed by gate │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDKernelESP │+1fa0 │4 │D │Saved kernel stack pointer. │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpTCB │+1fa4 │4 │D │Link to TCB │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpfnFault │+1fa8 │4 │D │ptr to local fault handler in effect │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDTrapNum │+1fac │4 │D │TrapNum from the last fault │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDerrcFault │+1fb0 │4 │D │error code from the last fault │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpljmp │+1fb4 │4 │D │Buffer saved by TKCatchFault │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDselFault │+1fb8 │2 │W │faulting selector │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDCpl2_SSSize │+1fba │2 │W │Size of ring 2 stack - atleast thats │ │ │ │ │ │what the user beleives │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDdescLDT │+1fbc │8 │D │LDT table descriptor │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDdescKStackSS │+1fc4 │8 │D │SS descriptor │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDdescFPEM │+1fcc │8 │D │reserved descriptor slot │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDdescTIB │+1fd4 │8 │D │FS mapping to TIB │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDulExitCode │+1fdc │4 │D │Proposed Thread Exit code (for dbg) │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDerridFault │+1fe0 │4 │D │error id from page fault │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDPFErr │+1fe4 │4 │D │actual error from PGPagefault │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDlDbgRangeStart│+1fe8 │4 │D │ │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDlDbgRangeEnd │+1fec │4 │D │ │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDlDbgLastAddr │+1ff0 │4 │D │ │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpPCB │+1ff4 │4 │D │Pointer to Profile Control Block │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDpDLLTerm │+1ff8 │4 │D │Pointer to data buffer │ ├─────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │TSDcObjSem │+1ffc │4 │D │Count of object semaphores held │ └─────────────────┴──────┴──────┴────┴────────────────────────────────────────┘