LNK9111001: Address Label Offset Wrong in USE32 Segment

ID Number: Q78627

3.60 3.61 3.64 3.65 3.69 5.10 5.13 | 5.01 5.10 5.13

MS-DOS | OS/2

buglist3.65 buglist3.69 buglist5.01 buglist5.10 buglist5.13

Summary:

PROBLEM ID: LNK9111001

SYMPTOMS

When a label corresponds to an absolute address and is defined in a

USE32 segment, LINK generates the wrong offset for this label.

Incorrect data will be accessed through this label.

STATUS

Microsoft has confirmed this to be a problem in LINK versions 3.60,

3.61, 3.64, 3.65, 3.69, 5.01, 5.1, and 5.13. We are researching this

problem and will post new information here as it becomes available.

More Information:

A label can represent an absolute address of XXXX:YYYY by placing it

in a segment with combine type "at XXXX" and after an org directive

"org YYYY".

The following sample code demonstrates the problem. The first listing

was generated by MASM. Note that the offset of Vector is 20h, as it

should be. The second listing is from CodeView. Note that the offset

of Vector is 28h, which is incorrect.

Sample Code

-----------

; Assemble options needed: none

.model small,c

.386

0000 Zero segment use32 at 0

org 32

0020 Vector label dword

0020 Zero ends

0000 .code

assume es:Zero

0000 start:

0000 67& 66| 26: A3 mov [Vector], eax

00000020 R

end start

; CodeView listing

1: .model small,c

2: .386

3:

4: Zero segment use32 at 0

5: org 32

6:

7: Vector label dword

8:

9: Zero ends

10:

11: .code

12:

13: assume es:Zero

14:

15: start:

16:

17: mov [Vector], eax

6A8F:0000 676626A32800000MOV DWord Ptr ES:[00000028],EAX

18:

19: end start

Additional reference words: 5.10