Skip to content

Latest commit

 

History

History

Q75244

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
layout title permalink
page
Q75244: FIX: Avoid externdef or proto when Initializing Data
/kb/075/Q75244/

Q75244: FIX: Avoid externdef or proto when Initializing Data

{% raw %}

Article: Q75244
Product(s): Microsoft Macro Assembler
Version(s): MS-DOS:6.0
Operating System(s): 
Keyword(s): 
Last Modified: 04-MAY-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Macro Assembler (MASM), version 6.0 
-------------------------------------------------------------------------------

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

Additional query words: 6.00 buglist6.00 fixlist6.00a

======================================================================
Keywords          :  
Technology        : kbMASMsearch kbAudDeveloper kbMASM600
Version           : MS-DOS:6.0
Solution Type     : kbfix

=============================================================================

{% endraw %}