Non-modal Symbols

(0x0001) Compile Flag

This symbol communicates to CodeView compile time information on a per module basis, such as the language and version number of the language processor , the ambient model for code and data, and the target processor.

2

2

1

3

*

length

S_COMPILE

machine

flags

version


machine enumeration specifying target processor. Values not specified below are reserved.

0x00 Intel 8080

0x01 Intel 8086

0x02 Intel 80286

0x03 Intel 80386

0x04 Intel 80486

0x05 Intel Pentium
0x06 Intel Pentium Pro

0x10 MIPS R4000

0x11 Reserved for future MIPS processor

0x12 Reserved for future MIPS processor

0x20 MC68000

0x21 MC68010

0x22 MC68020

0x23 MC68030

0x24 MC68040

0x30 DEC Alpha
0x40 PPC601
0x41 PPC603
0x42 PPC604
0x43 PPC620

flags flags showing compile time options

Language :8
PCodePresent :1

FloatPrecision :2
FloatPackage :2
AmbientData :3
AmbientCode :3

Mode32 :1 Compiled for 32 bit addresses
Reserved :4

Language enumeration

0 C
1 C++
2 Fortran
3 Masm
4 Pascal
5 Basic
6 Cobol
7 - 255 Reserved

Ambient code and data memory model enumeration

0 Near

1 Far
2 Huge

3 - 7 Reserved

Floating package enumeration

0 Hardware processor (80x87 for Intel 80x86 processors)
1 Emulator
2 Altmath

3 Reserved

The FloatPrecision flag is set to 1 if the compiler follows the ANSI C floating point precision rules. This is specified to Microsoft C compilers by setting the -Op option.

version Length-prefixed string specifying language processor version. Language processors can place additional data in version string if desired.

(0x1001) Register

This symbol record describes a symbol that has been enregistered. Provisions for enabling future implementation tracking of a symbol into and out of registers is provided in this symbol. When the symbol processor is examining a register symbol, the length field of the symbol is compared with the offset of the byte following the symbol name field. If these are the same, there is no register tracking information. If the length and offset are different, the byte following the end of the symbol name is examined. If the byte is zero, there is no register tracking information following the symbol. If the byte is not zero, then the byte indexes into the list of stack machine implementations and styles of register tracking. Microsoft does not currently emit or process register tracking information.

2

2

4

2

*

*

length

S_REGISTER

@type

register

name

tracking


@type The type of the symbol

register Enumerate of the registers in which the symbol value is stored. This field is treated as two bytes. The high order byte specifies the register in which the high order part of the value is stored. The low byte specifies the register for the low order part of the value. If the value is not stored in two registers then high order regisr field contains the enumerate value for no register. For register enumeration values, see Section 6. The register index enumeration is specific to the processor model for the module.

name Length-prefixed name of the symbol stored in the register

tracking Register tracking information. Format unspecified.

(0x1002) Constant

This record is used to output constants and C enumerations. If used to output an enumeration, then the type index refers to the containing enum.

2

2

4

*

*

length

S_CONSTANT

@type

value

name


@type Type of symbol or containing enum

value Numeric leaf containing the value of symbol

name Length-prefixed name of symbol

(0x1003) User-defined type

This specifies a C typedef or user-defined type, such as classes, structures, unions, or enums.

2

2

4

*

length

S_UDT

@type

name


@type Type of symbol

name Length-prefixed name of the user defined type

(0x0005) Start Search

These records are always the first symbol records in a module's $$SYMBOL section. There is one Start Search symbol for each segment (PE section) to which the module contributes code. Each Start Search symbol contains the segment (PE section) number and $$SYMBOL offset of the record of the outermost lexical scope in this module that physically appears first in the specified segment of the load image. This referenced symbol is the symbol used to initiate context searches within this module. The Start Search symbols are inserted into the $$SYMBOLS table by CVPACK and must not be emitted by the language processor.

/* M00 REVIEW - Davidgra: are scopes sorted into offset order */

2

2

4

2

length

S_SSEARCH

sym off

segment


sym off $$SYMBOL offset of the procedure or thunk record for this module that has the lowest offset for the specified segment. See Section 1.2 on lexical scope linking.

segment Segment (PE section) that this Start Search refers to

(0x0006) End of Block

Closes the scope of the nearest preceding Block Start, Global Procedure Start, Local Procedure Start, With Start, or Thunk Start definition.

2

2

length

S_END


(0x0007) Skip Record

This record reserves symbol space for incremental compilers. The compiler can reserve a dead space in the OMF for future expansions due to an incremental build. This symbol and the associated reserved space is removed by the CVPACK utility.

2

2

*

length

S_SKIP

skip data


skip data Unused data. Use the length field that precedes every symbol record to skip this record.

(0x0008) CodeView Internal

The symbol is internally used by CodeView and never appears in the executable. Its format is unspecified.

(0x0009) Object File Name

This symbol specifies the name of the object file for this module.

2

2

4

*

length

S_OBJNAME

signature

name


signature Signature for the CodeView information contained in this module. If the object file contains precompiled types, then the signature will be checked against the signature in the LF_PRECOMP type record contained in the $$TYPES table for the user of the precompiled types. The signature check is used to detect recompilation of the supplier of the precompiled types without recompilation of all of the users of the precompiled types. The method for computing the signature is unspecified. It should be sufficiently robust to detect failures to recompile.

name Length prefixed name of the object file without any path information prepended to the name.

(0x000a) End of Arguments

This symbol specifies the end of symbol records for the formal arguments for a function. Use of this symbol is optional for OMF and is required for MIPS compiled code. In OMF format, the end of arguments can also be deduced from the fact that arguments for a function have positive offset from the frame pointer.

2

2

length

S_ENDARG


(0x1004) COBOL User-defined Type

This record is used to define a user-defined type for the Microfocus Cobol compiler. This record cannot be moved into the global symbol table by CVPACK.

2

2

4

*

length

S_COBOLUDT

@type

name


@type Type of symbol

name Length-prefixed name of the user defined type

(0x1005) Many Registers

This record is used to specify that a symbol is stored in a set of registers.

2

2

4

1

1 * count

*

length

S_MANYREG

@type

count

reglist

name


@type Type index of the symbol

count Count of the register enumerates that follow

reglist List of registers in which the symbol is stored. The registers are listed high order register first.

name Name of the symbol

(0x000d) Function Return

This symbol us used to describe how a function is called, the return value if any is returned and how the stack is cleaned up.

2

2

2

1

*

length

S_RETURN

flags

style

data


flags Flags for function call

cstyle :1 push varargs right to left if true

rsclean :1 returnee stack cleanup if true

unused :14

style Function return style

0x00 void return

0x01 return value is in registers specified in data

0x02 indirect caller allocated near

0x03 indirect caller allocated far

0x04 indirect returnee allocated near

0x05 indirect returnee allocated far

data Data required by function return style.

If style is 0x01, then data is the format

1

1 * count

count

reglist


count Count of the number of registers

reglist Registers (high order first) containing the value

(0x000e) this at Method Entry

This record is used to describe the this pointer at entry to a method. It is really a wrapper for another symbol that describes the this pointer.

2

2

*

length

S_ENTRYTHIS

symbol


symbol Full symbol including length and symbol type fields that describes the this pointer.