MSM9108003: Avoid externdef or proto when Initializing Data

ID Number: Q75244

6.00 | 6.00

MS-DOS | OS/2

buglist6.00 fixlist6.00a

Summary:

PROBLEM ID: MSM9108003

SYMPTOMS

When defining and initializing a data structure that contains an

address defined with externdef or proto, the linker does not

resolve the address correctly in the Microsoft Macro Assembler

(MASM) version 6.0.

CAUSE

The example code below illustrates this problem. In the example,

a function table is initialized to the address of four separate

functions. The two functions defined with "externdef" and "proto

far" do not cause the assembler to generate the correct EXTDEF

(EXTernal DEFinition) record. As a result, the linker doesn't

resolve the addresses correctly.

STATUS

Microsoft has confirmed this to be a problem in MASM version 6.0.

This problem was corrected in MASM version 6.0a.

More Information:

Sample Code

-----------

; Assemble options needed: none

.MODEL LARGE

FN typedef proto far

PFN typedef far ptr FN

ST_ST struct 1b

func1 PFN ?

func2 PFN ?

func3 PFN ?

func4 PFN ?

ST_ST ends

extern FN_1A:FN

externdef FN_2A:FN

FN_3A proto far

DATA segment word public "DATA"

ST_ST <FN_1A, \

FN_2A, \ ; This doesn't work.

FN_3A, \ ; This doesn't work either.

FN_4A>

DATA ends

_TEXT segment word public 'CODE'

FN_4A proc far

ret

FN_4A endp

_TEXT ends

end

Additional reference words: 6.00