1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
A few tables for the chapters that don't exist yet:
Table 3.2 Header of preprocessed line generated by macroinstruction
/-------------------------------------------------------------------------\
| Offset | Value |
|========|================================================================|
| +0 | pointer to the name symbol of macro which generated this line |
|--------|----------------------------------------------------------------|
| +4 | line number in bits 0-30, the highest bit set |
|--------|----------------------------------------------------------------|
| +8 | pointer to the line which invoked the macro |
|--------|----------------------------------------------------------------|
| +12 | pointer to the line in macro from which this one was generated |
\-------------------------------------------------------------------------/
Table 5.1 Symbol structure
/-------------------------------------------------------------------------\
| Offset | Size | Description |
|========|=======|========================================================|
| +0 | qword | value of symbol |
|--------|-------|--------------------------------------------------------|
| +8 | word | flags (table 5.2) |
|--------|-------|--------------------------------------------------------|
| +10 | byte | size of data labelled by this symbol |
|--------|-------|--------------------------------------------------------|
| +11 | byte | type of symbol (table 5.3) |
|--------|-------|--------------------------------------------------------|
| +12 | dword | extended SIB, the first two bytes are register codes |
| | | and the second two bytes are corresponding scales |
|--------|-------|--------------------------------------------------------|
| +16 | word | number of pass in which symbol was defined last time |
|--------|-------|--------------------------------------------------------|
| +18 | word | number of pass in which symbol was used last time |
|--------|-------|--------------------------------------------------------|
| +20 | dword | address of object section or external symbol to which |
| | | this symbol is relative (only for relocatable symbols) |
\-------------------------------------------------------------------------/
Table 5.2 Symbol flags
/----------------------------------------------------------------\
| Bit | Value | Description |
|=====|=======|==================================================|
| 0 | 1 | symbol was defined |
|-----|-------|--------------------------------------------------|
| 1 | 2 | symbol can be redefined |
|-----|-------|--------------------------------------------------|
| 2 | 4 | symbol was redefined |
|-----|-------|--------------------------------------------------|
| 3 | 8 | symbol was used |
|-----|-------|--------------------------------------------------|
| 4 | 10h | the prediction was needed when checking |
| | | whether the symbol was used |
|-----|-------|--------------------------------------------------|
| 5 | 20h | result of last predicted check for being used |
|-----|-------|--------------------------------------------------|
| 6 | 40h | the prediction was needed when checking |
| | | whether the symbol was defined |
|-----|-------|--------------------------------------------------|
| 7 | 80h | result of last predicted check for being defined |
|-----|-------|--------------------------------------------------|
| 8 | 100h | the optimization adjustment is applied to |
| | | the value of this symbol |
\----------------------------------------------------------------/
Table 5.3 Symbol types
/-------------------------------------------------------------------\
| Value | Description |
|=======|===========================================================|
| 0 | absolute value |
|-------|-----------------------------------------------------------|
| 1 | relocatable segment address (only with MZ output) |
|-------|-----------------------------------------------------------|
| 2 | relocatable 32-bit address |
|-------|-----------------------------------------------------------|
| 3 | relocatable relative 32-bit address (value valid only for |
| | symbol used in the same section where it was calculated, |
| | it should not occur in the symbol structure) |
|-------|-----------------------------------------------------------|
| 4 | relocatable 64-bit address |
\-------------------------------------------------------------------/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
A few tables for the chapters that don't exist yet:
Table 3.2 Header of preprocessed line generated by macroinstruction
/-------------------------------------------------------------------------\
| Offset | Value |
|========|================================================================|
| +0 | pointer to the name symbol of macro which generated this line |
|--------|----------------------------------------------------------------|
| +4 | line number in bits 0-30, the highest bit set |
|--------|----------------------------------------------------------------|
| +8 | pointer to the line which invoked the macro |
|--------|----------------------------------------------------------------|
| +12 | pointer to the line in macro from which this one was generated |
\-------------------------------------------------------------------------/
Table 5.1 Symbol structure
/-------------------------------------------------------------------------\
| Offset | Size | Description |
|========|=======|========================================================|
| +0 | qword | value of symbol |
|--------|-------|--------------------------------------------------------|
| +8 | word | flags (table 5.2) |
|--------|-------|--------------------------------------------------------|
| +10 | byte | size of data labelled by this symbol |
|--------|-------|--------------------------------------------------------|
| +11 | byte | type of symbol (table 5.3) |
|--------|-------|--------------------------------------------------------|
| +12 | dword | extended SIB, the first two bytes are register codes |
| | | and the second two bytes are corresponding scales |
|--------|-------|--------------------------------------------------------|
| +16 | word | number of pass in which symbol was defined last time |
|--------|-------|--------------------------------------------------------|
| +18 | word | number of pass in which symbol was used last time |
|--------|-------|--------------------------------------------------------|
| +20 | dword | address of object section or external symbol to which |
| | | this symbol is relative (only for relocatable symbols) |
\-------------------------------------------------------------------------/
Table 5.2 Symbol flags
/----------------------------------------------------------------\
| Bit | Value | Description |
|=====|=======|==================================================|
| 0 | 1 | symbol was defined |
|-----|-------|--------------------------------------------------|
| 1 | 2 | symbol can be redefined |
|-----|-------|--------------------------------------------------|
| 2 | 4 | symbol was redefined |
|-----|-------|--------------------------------------------------|
| 3 | 8 | symbol was used |
|-----|-------|--------------------------------------------------|
| 4 | 10h | the prediction was needed when checking |
| | | whether the symbol was used |
|-----|-------|--------------------------------------------------|
| 5 | 20h | result of last predicted check for being used |
|-----|-------|--------------------------------------------------|
| 6 | 40h | the prediction was needed when checking |
| | | whether the symbol was defined |
|-----|-------|--------------------------------------------------|
| 7 | 80h | result of last predicted check for being defined |
|-----|-------|--------------------------------------------------|
| 8 | 100h | the optimization adjustment is applied to |
| | | the value of this symbol |
\----------------------------------------------------------------/
Table 5.3 Symbol types
/-------------------------------------------------------------------\
| Value | Description |
|=======|===========================================================|
| 0 | absolute value |
|-------|-----------------------------------------------------------|
| 1 | relocatable segment address (only with MZ output) |
|-------|-----------------------------------------------------------|
| 2 | relocatable 32-bit address |
|-------|-----------------------------------------------------------|
| 3 | relocatable relative 32-bit address (value valid only for |
| | symbol used in the same section where it was calculated, |
| | it should not occur in the symbol structure) |
|-------|-----------------------------------------------------------|
| 4 | relocatable 64-bit address |
\-------------------------------------------------------------------/
|