7. Masm bugs fixed in JWasm
# | Description | Fixed Masm Version |
---|---|---|
1 | the infamous "invoke" bug: if an argument for invoke has to be expanded (from BYTE or WORD to DWORD, for example ), bad code was generated. | 9 |
2 | PROTOs contained twice in the source caused an EXTDEF entry to be generated in the object module. | - |
3 | "TYPE xmm0" will return 10 in Masm v6 and v7 - the correct value is 16. | 8 |
4 | a nested structure might cause a GPF in Masm if the embedded STRUCT's starting offset has to be adjusted due to alignment. | - |
5 | defining huge arrays in Masm is very slow and might even cause a deadlock if COFF has been selected as output format. | - |
6 | for Masm v6 and v7, if an array > 64 kB is defined and output format OMF is selected, the array's size will be mod 0x10000 only. | 8 |
7 | Masm doesn't flag invalid numbers in struct/array initializer strings. | - |
8 | if an ALIAS is defined somewhere in the source and the symbol table is listed, a 'General Failure' error occurs in Masm if output format is OMF. | - |
9 | Type "coerces" for DWORD data items defined in a 32bit segment are ignored by Masm, i.e., "dd far16 ptr <symbol>" will generate a near32 fixup instead of a far16 one. | - |
10 | if the ALIGN directive has to add 5 bytes in 32bit code segments, Masm includes an "add eax,0" opcode, which isn't a no-op because flags are modified. | - |
11 | silent truncation of immediate constants: Masm v6 and v7 will accept line "mov [word_variable],12345h" without error. | 8 |
12 | preprocessed output with option -EP may erroneously contain text macros and macro function calls if the macros are located in the initialization string of a structured variable. | - |
13 | Masm generates wrong code if a conditional jump is coupled with a type coercion which modifies offset magnitude. Examples: "jz near32 ptr ..." in 16bit code or "jz near16 ptr ..." in 32bit code). | - |
14 | if the arguments given to Masm end with an option which expects a parameter (i.e. "ml -c -Fo"), a 'General Failure' may occur. | - |
15 | floating-point data items in Masm can be followed by any suffix (example: REAL4 1.0foo, 2.0bar). JWasm won't accept this. | - |
16 | If a local is defined inside a macro, Masm will create a unique name for it. The name is constructed by using '??' as prefix, followed by a hexadecimal number with 4 digits. There is no check for overflow, however, so if the total of locals in all macros exceeds 65536, strange errors will occur. | - |
17 | If a weak external is defined for -coff with the ALIAS directive, an invalid fixup - and also a strange entry in the module's symbol table - is created. | - |
18 | If a section contains more than 0xffff relocations in COFF, the number of relocations that is stored in the object module is just the value of the lower 16-bit half of the relocation count. | 8 |
19 | If a symbolic constant (=equate) is made public in OMF format, Masm will store the symbol's value in a 16-bit record if it is in the range -32768 ... 65535. If the symbol is referenced in another module as a 32-bit number, it is always zero-extended, never sign-extended; hence values -1 ... -32768 will become 65535 ... 32768. | - |
20 | if data labels become public by the -Zf option ( and not by the PUBLIC directive ), their names are not decorated. Also, if format is COFF, they won't become true publics, they're just included in the symbol table with class "static", | - |