FIX: Avoid externdef or proto when Initializing Data (75244)



The information in this article applies to:

  • Microsoft Macro Assembler (MASM) 6.0

This article was previously published under Q75244

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

The following sample code can be used to demonstrate the problem.

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
				

Modification Type:MajorLast Reviewed:10/29/2003
Keywords:kbfix KB75244