JWasm v2.04RC4
JWasm v2.04RC4 09/15/2010Changelog:
__/__/2010, v2.04:
Bugfixes:
-ELF fixups for 16-bit relative offsets (GNU extension) were wrong.
-PUSHCONTEXT|POPCONTEXT didn't accept multiple arguments.
-a code segment defined with simplified segment directive .CODE,
with a name argument and which was added to a group BEFORE the
definition, was created with default attributes.
-MZ format: segment fixups in the MZ header weren't always calculated
correctly.
-ALIGN, EVEN: "filler" bytes were emitted unless the segment was
"absolute" or "bss". Now this is done only when data or code was
emitted just before the directive.
-COFF format: JWasm expected to use the ".drectve" section exclusively.
If it was defined within the source, an error occured.
-COFF format: option -SAFESEH didn't emit a "@feat.00" absolute
symbol in the object module, as requested by the MS COFF specification.
-JWASMR.EXE: v2.03 often fell into an endless loop due to an error in
fixup management for backpatching.
-in v2.03, constants with -65536 < value < -32768 were not accepted
for 16-bit targets in MOVs.
-a label was accepted even when there already existed a proto with the
same name.
-operator TYPE ignored a possible coercion for a type argument.
-a duplicate RECORD definition was rejected, even if both definitions
were identical.
-an absolute external used as a byte immediate may have caused invalid
code to be generated ( extern x:abs - or al,xx ). MOV and PUSH were
not affected, though.
-in v2.00-2.03, PROTOs were listed in the "Symbols" section, not in
the "Procedures" section.
-for COMMunal variables, there was no check if the symbol was defined
with a different kind already.
-if .STARTUP or .EXIT occured before any code or data definition
lines, the code generated by those directives might have get
truncated.
-INVOKE: a FWORD parameter caused an error if the argument to be
pushed was a constant.
-LOCAL and INVOKE: a local or a parameter of size 0 confused the
assembler.
-MOVD didn't accept a REAL4 memory operand as second argument.
-EXTERN directive: altname was ignored if external was a prototype.
-EXTERN directive: altname symbol was rejected if it was external.
-OMF output format: no WKEXT comment records were written for
EXTERNal items with an alternate name.
-if floating-point emulation fixups were to be generated, there was
no NOP inserted before FWAIT if current CPU was 80386 or better.
-INVOKE, VARARG parameter: if cpu was < 80386 and a constant value
which didn't fit into a word was to be pushed, JWasm complained.
-INVOKE, VARARG parameter: the calculation of the stack adjustment
value was wrong in the following cases:
a) when a byte register was pushed
b) when the argument consisted of 2 registers ('ds::bx')
-JWASMR.EXE: freeing a PROC's local items was done with the wrong
linked list. This often resulted in an abnormal termination.
-in v2.03, if Win64 output format was selected, a GPF did occur if
a stack variable was used as an argument for INVOKE.
-SHR and SHL operator didn't reject negative shift counts. Also,
shift counts >= 64 returned compiler-dependant results.
-if a text literal defined with SUBSTR was referenced before definition,
the definition failed.
-INVOKE for Win64 didn't work for VARARG parameters.
Other changes:
-OPTION NOSIGNEXTEND supported.
-OPTION WIN64 added.
-new cmdline switch -Zv8.
-INVOKE generates smaller code for constant arguments with 8086 cpu.
-INVOKE for Win64 watches if register parameter values are destroyed.
http://www.japheth.de/Download/JWasm/JWasm204brc4.zip
页:
[1]