Symbols for 16:32 Segmented and 32-bit Flat Architectures

(0x1006) BP Relative 16:32

This symbol specifies symbols that are allocated on the stack for a procedure. For C/C++, these include the actual parameters to a function and the local nonstatic variables of functions.

2

2

4

4

*

length

S_BPREL32

offset

@type

name


offset Signed offset relative to BP. If offset is 0, then the symbol was assigned to a register or never instantiated by the optimizer and cannot be evaluated because its location is unknown.

@type Type of the symbol

name Length-prefixed name of the symbol

(0x1007) Local Data 16:32

These symbols are used for data that is not exported from a module. In C/C++, symbols that are declared static are emitted as Local Data symbols. Symbols that are emitted as Local Data cannot be moved by CVPACK into the global symbol table for the executable file.

2

2

4

4

2

*

length

S_LDATA32

@type

offset

segment

name


@type Type index of the symbol.

offset Offset portion of the symbol address.

segment Segment portion of the symbol. address

name Length-prefixed name of symbol

(0x1008 Global Data Symbol 16:32 )

This symbol record has the same format as the Local Data 16:32 except that the record type is S_GDATA32. For C/C++, symbols that are not specifically declared static are emitted as Global Data Symbols and can be compacted by CVPACK into the global symbol table.

(0x1009) Public 16:32

This symbol has the same format as the Local Data 16:32 symbol. Its use is reserved to symbols in the Publics table emitted by the linker into the Symbol and Type OMF portion of the executable file.

(0x100a) Local Procedure Start 16:32

This symbol record defines local (file static) procedure definition. For C/C++, functions that are declared static to a module are emitted as Local Procedure symbols. Functions not specifically declared static are emitted as Global Procedures (see below.)

2

2

4

4

4

4

4

length

symbol

pParent

pEnd

pNext

proc length

debug start

->


4

4

4

2

1

*

debug end

@proctype

offset

segment

flags

name


symbol S_LPROC32 or S_GPROC32.

pParent See the section on lexical scope linking

pEnd See the section on lexical scope linking

pNext See the section on lexical scope linking

proc length Length in bytes of this procedure

debug start Offset in bytes from the start of the procedure to the point where the stack frame has been set up. Parameter and frame variables can be viewed at this point.

debug end Offset in bytes from the start of the procedure to the point where the procedure is ready to return and has calculated its return value, if any. Frame and register variables can still be viewed.

@proctype Type of the procedure type record

offset Offset portion of the procedure address

segment Segment portion of the procedure address

flags Procedure flags:
fpo :1 true if function has frame pointer omitted

interrupt :1 true if function is interrupt routine
return :1 true if function performs far return

never :1 true if function never returns

unused :4

name Length-prefixed name of procedure

(0x100b) Global Procedure Start 16:32

This symbol is used for procedures that are not specifically declared static to a module. The format is the same as the Local Procedure Start 16:32 symbol (see above.)

(0x0206) Thunk Start 16:32

This record is used to specify any piece of code that exists outside a procedure. It is followed by an End record. The thunk record is intended for small code fragments. and a two byte length field is sufficient for its intended purpose.

2

2

4

4

4

4

2

length

S_THUNK32

pParent

pEnd

pNext

offset

segment


2

1

*

*

thunk length

ordinal

name

variant


pParent See the section on lexical scope linking

pEnd See the section on lexical scope linking

pNext See the section on lexical scope linking

offset Offset portion of the thunk address

segment Segment portion of the thunk address

thunk length Length in bytes of this thunk

ordinal Ordinal specifying the type of thunk

0 notype

1 adjustor

2 vcall

3 pcode

name Length-prefixed name of thunk

variant Variant field, depending on value of ordinal. If ordinal is notype, there is no variant field. If ordinal is adjustor, the variant field is a two-byte signed value specifying the delta to be added to the this pointer, followed by the length prefixed name of the target function. If the ordinal is vcall, then the variant field is a two-byte signed displacement into the virtual table. If ordinal is pcode, the variant is the seg:offset of the pcode entry point.

(0x0207) Block Start 16:32

This symbol specifies the start of an inner block of lexically scoped symbols. The lexical scope is terminated by a matching S_END symbol.

2

2

4

4

4

4

2

*

length

S_BLOCK32

pParent

pEnd

length

offset

segment

name


pParent See the section on lexical scope linking.

pEnd See the section on lexical scope linking.

length Length in bytes of the scope of this block

offset Offset portion of the segmented procedure address

segment Segment portion of the segmented procedure address

name Length-prefixed name of the block

(0x0208) With Start 16:32

2

2

4

4

4

4

2

*

length

S_WITH32

pParent

pEnd

length

offset

segment

expr


pParent See the section on lexical scope linking

pEnd See the section on lexical scope linking

length Length in bytes of the scope of the with block.

offset Offset portion of the segmented address of the start of the block

segment Segment portion of the segmented address of the start of the block

expr Length-prefixed ASCII string, evaluated at run time, of the expression used in the with statement.

(0x0209) Code Label 16:32

2

2

4

2

1

*

length

S_LABEL32

offset

segment

flags

name


offset Offset portion of the segmented address of the start of the block

segment Segment portion of the segmented address of the start of the block

flags Label flags. This uses the same flag definition as in the S_LPROC16 symbol record.
fpo :1 true if function has frame pointer omitted

interrupt :1 true if function is interrupt routine
return :1 true if function performs far return

never :1 true if function never returns

unused :4

name Length prefixed name of label

(0x020a) Change Execution Model 16:32

This record is used to notify the debugger that, starting at the given code offset and until the address specified by the next Change Execution Model record, the execution model is of the specified type. The native execution model is assumed in the absence of Change Execution Model records

2

2

4

2

2

*

length

S_CEXMODEL32

offset

segment

model

variant


offset Offset portion of start of the block

segment Segment portion of the start of block

model The execution model.

0x00 Not executable code (e.g., a table)

0x01 Compiler generated jump table

0x02 Padding for data

0x03 - 0x1f Reserved for specific noncode types.

0x20 Native model (no processor specified)

0x21 Microfocus Cobol (unused in 16:32)

0x22 Code padding for alignment

0x23 Code

0x24 - 0x3f Reserved

0x40 Pcode (Reserved)

variant Variable data dependent upon the execution model field. If the variant record contains segment or offset information, then CVPACK and CodeView must be modified to process the segment information.

The other models do not have variant fields.

(0x100c) Virtual Function Table Path 16:32

This record is used to describe the base class path for the virtual function table descriptor.

2

2

4

4

4

2

length

S_VFTTABLE32

@root

@path

offset

segment


@root The type index of the class at the root of the path

@path Type index of the record describing the base class path from the root to the leaf class for the virtual function table.

offset Offset portion of start of the virtual function table

segment Segment portion of the virtual function table

(0x100d) Register Relative 16:32

This symbol specifies symbols that are allocated relative to a register.

2

2

4

4

2

*

length

S_REGREL32

offset

@type

register

name


offset Signed offset relative to register.

@type Type of the symbol

register Register enumerates on which the symbol is based. Note that the register field can specify a pair of register such as ES:EBX

name Length-prefixed name of the symbol

(0x100e) Local Thread Storage 16:32

These symbols are used for data declared with the __thread storage attribute that is not exported from a module. In C/C++, __thread symbols that are declared static are emitted as Local Thread Storage 16:32 symbols. Symbols that are emitted as Local Thread Storage 16:32 cannot be moved by CVPACK into the global symbol table for the executable file.

2

2

4

4

2

*

length

S_LTHREAD32

@type

offset

segment

name


@type type index

offset offset into thread local storage

segment segment of thread local storage

name length prefixed name

(0x100f) Global Thread Storage 16:32

This symbol record has the same format as the Local Thread Storage 16:32 except that the symbol type is S_GTHREAD32. For C/C++, __thread symbols that are not specifically declared static are emitted as Global Thread Storage 16:32 symbols and can be compacted by CVPACK into the global symbol table.