From 04156cd099ca15a9aa89d405b0ad967d3de564e6 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Mon, 14 Jul 2008 02:45:57 -0400 Subject: Move the revision history into the documentation Clumsily convert the revision history to nasmdoc format, so it can be included in the documentation as Appendix C. --- CHANGES | 1500 +-------------------------------------------------------------- 1 file changed, 2 insertions(+), 1498 deletions(-) (limited to 'CHANGES') diff --git a/CHANGES b/CHANGES index 3646230..b89696f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,1498 +1,2 @@ -2.04 ----- -* Sanitize macro handing in the %error directive. -* New %warning preprocessor directive. -* __utf16__ and __utf32__ operators to generate UTF-16 and UTF-32 - strings. -* Fix bug in case-insensitive matching when compiled on platforms that - don't use the "configure" script. Of the official release binaries, - that only affects the OS/2 binary. -* Correct the handling of nested %reps. -* Support for x87 packed BCD constants. -* New %warning directive to issue user-controlled warnings. -* New %strcat directive to join strings together. -* Correct the LTR instruction in 64-bit mode. -* Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode. - -2.03.01 -------- -* Fix buffer overflow in the listing module. -* Fix the handling of hexadecimal escape codes in `...` strings. -* The Postscript/PDF documentation has been reformatted. -* The -F option now implies -g. - -2.03 ----- -* Add support for Intel AVX, CLMUL and FMA instructions, - including YMM registers. -* "dy", "resy" and "yword" for 32-byte operands. -* Fix some SSE5 instructions. -* Intel INVEPT, INVVPID and MOVBE instructions. -* Fix checking for critical expressions when the optimizer is enabled. -* Support the DWARF debugging format for ELF targets. -* Fix optimizations of signed bytes. -* Fix operation on bigendian machines. -* Fix buffer overflow in the preprocessor. -* SAFESEH support for Win32, IMAGEREL for Win64 (SEH). -* %? and %?? to refer to the name of a macro itself. In particular, - "%idefine keyword $%?" can be used to make a keyword "disappear". -* New options for dependency generation: -MD, -MF, -MP, -MT, -MQ. -* New preprocessor directives %pathsearch and %depend; INCBIN - reimplemented as a macro. -* %include now resolves macros in a sane manner. -* %substr can now be used to get other than one-character substrings. -* New type of character/string constants, using backquotes (`...`), - which support C-style escape sequences. -* %defstr and %idefstr to stringize macro definitions before creation. -* Fix forward references used in EQU statements. - -2.02 ----- -* Additional fixes for MMX operands with explicit "qword", as well as - (hopefully) SSE operands with "oword". -* Fix handling of truncated strings with DO. -* Fix segfaults due to memory overwrites when floating-point constants - were used. -* Fix segfaults due to missing include files. -* Fix OpenWatcom Makefiles for DOS and OS/2. -* Add autogenerated instruction list back into the documentation. -* ELF: Fix segfault when generating stabs, and no symbols have been - defined. -* ELF: Experimental support for DWARF debugging information. -* New compile date and time standard macros. -* %ifnum now returns true for negative numbers. -* New %iftoken test for a single token. -* New %ifempty test for empty expansion. -* Add support for the XSAVE instruction group. -* Makefile for Netware/gcc. -* Fix issue with some warnings getting emitted way too many times. -* Autogenerated instruction list added to the documentation. - -2.01 ----- -* Fix the handling of MMX registers with explicit "qword" tags on - memory (broken in 2.00 due to 64-bit changes.) -* Fix the PREFETCH instructions. -* Fix the documentation. -* Fix debugging info when using "-f elf" (backwards alias for "-f - elf32"). -* Man pages for rdoff tools (from the Debian project.) -* ELF: handle large numbers of sections. -* Fix corrupt output when the optimizer runs out of passes. - -2.00 ----- -* Added c99 data-type compliance. -* Added general x86-64 support. -* Added win64 (x86-64 COFF) output format. -* Added __BITS__ standard macro. -* Renamed the elf output format to elf32 for clarity. -* Added elf64 and macho (MacOS X) output formats. -* Added Numeric constants in DQ directive. -* Added oword, do and reso pseudo operands. -* Allow underscores in numbers. -* Added 8-, 16- and 128-bit floating-point formats. -* Added binary, octal and hexadecimal floating-point. -* Correct the generation of floating-point constants. -* Added Floating-point option control. -* Added Infinity and NaN floating point support. -* Added ELF Symbol Visibility support. -* Added Setting OSABI value in ELF header directive. -* Added Generate Makefile Dependencies option. -* Added Unlimited Optimization Passes option. -* Added %IFN and %ELIFN support. -* Added Logical Negation Operator. -* Enhanced Stack Relative Preprocessor Directives. -* Enhanced ELF Debug Formats. -* Enhanced Send Errors to a File option. -* Added SSSE3, SSE4.1, SSE4.2, SSE5 support. -* Added a large number of additional instructions. -* Significant performance improvements. - -0.98.39 -------- -* fix buffer overflow -* fix outas86's .bss handling -* "make spotless" no longer deletes config.h.in. -* %(el)if(n)idn insensitivity to string quotes difference (#809300). -* (nasm.c) __OUTPUT_FORMAT__ changed to string value instead of symbol. - -0.98.38 -------- -* Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify - mkdep.pl to be able to generate completely pathless dependencies, as - required by OpenWatcom wmake (it supports path searches, but not - explicit paths.) -* Fix the STR instruction. -* Fix the ELF output format, which was broken under certain - circumstances due to the addition of stabs support. -* Quick-fix Borland format debug-info for -f obj -* Fix for %rep with no arguments (#560568) -* Fix concatenation of preprocessor function call (#794686) -* Fix long label causes coredump (#677841) -* Use autoheader as well as autoconf to keep configure from generating - ridiculously long command lines. -* Make sure that all of the formats which support debugging output - actually will suppress debugging output when -g not specified. - -0.98.37 -------- -* Paths given in "-I" switch searched for "incbin"ed as - well as "%include"ed files. -* Added stabs debugging for the ELF output format, patch from - Martin Wawro. -* Fix output/outbin.c to allow origin > 80000000h. -* Make -U switch work. -* Fix the use of relative offsets with explicit prefixes, e.g. "a32 loop foo". -* Remove "backslash()". -* Fix the SMSW and SLDT instructions. -* -O2 and -O3 are no longer aliases for -O10 and -O15. If you mean the - latter, please say so! :) - -0.98.36 -------- -* Update rdoff - librarian/archiver - common rec - docs! -* Fix signed/unsigned problems. -* Fix JMP FAR label and CALL FAR label. -* Add new multisection support - map files - fix align bug -* Fix sysexit, movhps/movlps reg,reg bugs in insns.dat -* "Q" or "O" suffixes indicate octal -* Support Prescott new instructions (PNI). -* Cyrix XSTORE instruction. - -0.98.35 -------- -* Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.) -* Fix dependencies and compiler warnings. -* Add "const" in a number of places. -* Add -X option to specify error reporting format (use -Xvc to - integrate with Microsoft Visual Studio.) -* Minor changes for code legibility. -* Drop use of tmpnam() in rdoff (security fix.) - -0.98.34 -------- -* Correct additional address-size vs. operand-size confusions. -* Generate dependencies for all Makefiles automatically. -* Add support for unimplemented (but theoretically available) - registers such as tr0 and cr5. Segment registers 6 and 7 are called - segr6 and segr7 for the operations which they can be represented. -* Correct some disassembler bugs related to redundant address-size prefixes. - Some work still remains in this area. -* Correctly generate an error for things like "SEG eax". -* Add the JMPE instruction, enabled by "CPU IA64". -* Correct compilation on newer gcc/glibc platforms. -* Issue an error on things like "jmp far eax". - - -0.98.33 -------- - -* New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to - round out the version-query macros. version.pl now understands - X.YYplWW or X.YY.ZZplWW as a version number, equivalent to - X.YY.ZZ.WW (or X.YY.0.WW, as appropriate). -* New keyword "strict" to disable the optimization of specific - operands. -* Fix the handing of size overrides with JMP instructions - (instructions such as "jmp dword foo".) -* Fix the handling of "ABSOLUTE label", where "label" points into a - relocatable segment. -* Fix OBJ output format with lots of externs. -* More documentation updates. -* Add -Ov option to get verbose information about optimizations. -* Undo a braindead change which broke %elif directives. -* Makefile updates. - - -0.98.32 -------- - -* Fix NASM crashing when %macro directives were left unterminated. -* Lots of documentation updates. -* Complete rewrite of the PostScript/PDF documentation generator. -* The MS Visual C++ Makefile was updated and corrected. -* Recognize .rodata as a standard section name in ELF. -* Fix some obsolete Perl4-isms in Perl scripts. -* Fix configure.in to work with autoconf 2.5x. -* Fix a couple of "make cleaner" misses. -* Make the normal "./configure && make" work with Cygwin. - - -0.98.31 -------- - -* Correctly build in a separate object directory again. -* Derive all references to the version number from the version file. -* New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros. -* Lots of Makefile updates and bug fixes. -* New %ifmacro directive to test for multiline macros. -* Documentation updates. -* Fixes for 16-bit OBJ format output. -* Changed the NASM environment variable to NASMENV. - - -0.98.30 -------- - -* Changed doc files a lot: completely removed old READMExx and - Wishlist files, incorporating all information in CHANGES and TODO. -* I waited a long time to rename zoutieee.c to (original) outieee.c -* moved all output modules to output/ subdirectory. -* Added 'make strip' target to strip debug info from nasm & ndisasm. -* Added INSTALL file with installation instructions. -* Added -v option description to nasm man. -* Added dist makefile target to produce source distributions. -* 16-bit support for ELF output format (GNU extension, but useful.) - - -0.98.28 -------- - -* Fastcooked this for Debian's Woody release: -Frank applied the INCBIN bug patch to 0.98.25alt and called -it 0.98.28 to not confuse poor little apt-get. - - -0.98.26 -------- - -* Reorganised files even better from 0.98.25alt - - -0.98.25alt ----------- - -* Prettified the source tree. Moved files to more reasonable places. -* Added findleak.pl script to misc/ directory. -* Attempted to fix doc. - -0.98.25 -------- - -* Line continuation character '\' -* Docs inadvertantly reverted - "dos packaging". - - -0.98.24p1 ---------- - -* FIXME: Someone, document this please. - - -0.98.24 -------- - -* Documentation - Ndisasm doc added to Nasm.doc. - - -0.98.23 -------- - -* Attempted to remove rdoff version1 -* Lino Mastrodomenico's patches to preproc.c (%$$ bug?). - - -0.98.22 -------- - -* Update rdoff2 - attempt to remove v1. - - -0.98.21 -------- - -* Optimization fixes. - - -0.98.20 -------- - -* Optimization fixes. - - -0.98.19 -------- - -* H. J. Lu's patch back out. - - -0.98.18 -------- - -* Added ".rdata" to "-f win32". - - -0.98.17 -------- - -* H. J. Lu's "bogus elf" patch. (Red Hat problem?) - - -0.98.16 -------- - -* Fix whitespace before "[section ..." bug. - -0.98.15 -------- - -* Rdoff changes (?). -* Fix fixes to memory leaks. - -0.98.14 -------- - -* Fix memory leaks. -* (there was no '.13) - -0.98.12 -------- - -* Update optimization (new function of "-O1") -* Changes to test/bintest.asm (?). - -0.98.11 -------- - -* Optimization changes. -* Ndisasm fixed. -* (there was no '.10) - -0.98.09 -------- - -* Add multiple sections support to "-f bin". -* Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15. -* Add "-v" as an alias to the "-r" switch. -* Remove "#ifdef" from Tasm compatibility options. -* Remove redundant size-overrides on "mov ds, ex", etc. -* Fixes to SSE2, other insns.dat (?). -* Enable uppercase "I" and "P" switches. -* Case insinsitive "seg" and "wrt". -* Update install.sh (?). -* Allocate tokens in blocks. -* Improve "invalid effective address" messages. - -0.98.08 -------- - -* Add "%strlen" and "%substr" macro operators -* Fixed broken c16.mac. -* Unterminated string error reported. -* Fixed bugs as per 0.98bf - - -0.98.09b with John Coffman patches released 28-Oct-2001 -------------------------------------------------------- - -Changes from 0.98.07 release to 98.09b as of 28-Oct-2001 - -* More closely compatible with 0.98 when -O0 is implied -or specified. Not strictly identical, since backward -branches in range of short offsets are recognized, and signed -byte values with no explicit size specification will be -assembled as a single byte. - -* More forgiving with the PUSH instruction. 0.98 requires -a size to be specified always. 0.98.09b will imply the size -from the current BITS setting (16 or 32). - -* Changed definition of the optimization flag: - - -O0 strict two-pass assembly, JMP and Jcc are - handled more like 0.98, except that back- - ward JMPs are short, if possible. - - -O1 strict two-pass assembly, but forward - branches are assembled with code guaranteed - to reach; may produce larger code than - -O0, but will produce successful assembly - more often if branch offset sizes are not - specified. - - -O2 multi-pass optimization, minimize branch - offsets; also will minimize signed immed- - iate bytes, overriding size specification. - - -O3 like -O2, but more passes taken, if needed - - -0.98.07 released 01/28/01 -------------------------- - -* Added Stepane Denis' SSE2 instructions to a *working* - version of the code - some earlier versions were based on - broken code - sorry 'bout that. version "0.98.07" - - -01/28/01 --------- - -* Cosmetic modifications to nasm.c, nasm.h, - AUTHORS, MODIFIED - - -0.98.06f released 01/18/01 --------------------------- - -* - Add "metalbrain"s jecxz bug fix in insns.dat - - alter nasmdoc.src to match - version "0.98.06f" - - -0.98.06e released 01/09/01 --------------------------- - -* Removed the "outforms.h" file - it appears to be - someone's old backup of "outform.h". version "0.98.06e" - - -01/09/01 --------- - -* fbk - finally added the fix for the "multiple %includes bug", - known since 7/27/99 - reported originally (?) and sent to - us by Austin Lunnen - he reports that John Fine had a fix - within the day. Here it is... - -* Nelson Rush resigns from the group. Big thanks to Nelson for - his leadership and enthusiasm in getting these changes - incorporated into Nasm! - -* fbk - [list +], [list -] directives - ineptly implemented, should - be re-written or removed, perhaps. - -* Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format - as well - testing might be desirable... - - -08/07/00 --------- - -* James Seter - -postfix, -prefix command line switches. -* Yuri Zaporogets - rdoff utility changes. - - -0.98p1 ------- - -* GAS-like palign (Panos Minos) -* FIXME: Someone, fill this in with details - - -0.98bf (bug-fixed) ----------------------------------- - -* Fixed - elf and aoutb bug - shared libraries - - multiple "%include" bug in "-f obj" - - jcxz, jecxz bug - - unrecognized option bug in ndisasm - -0.98.03 with John Coffman's changes released 27-Jul-2000 --------------------------------------------------------- - -* Added signed byte optimizations for the 0x81/0x83 class -of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR: -when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also -optimization of signed byte form of 'PUSH imm' and 'IMUL -reg,imm'/'IMUL reg,reg,imm.' No size specification is needed. - -* Added multi-pass JMP and Jcc offset optimization. Offsets -on forward references will preferentially use the short form, -without the need to code a specific size (short or near) for -the branch. Added instructions for 'Jcc label' to use the -form 'Jnotcc $+3/JMP label', in cases where a short offset -is out of bounds. If compiling for a 386 or higher CPU, then -the 386 form of Jcc will be used instead. - -This feature is controlled by a new command-line switch: "O", -(upper case letter O). "-O0" reverts the assembler to no -extra optimization passes, "-O1" allows up to 5 extra passes, -and "-O2"(default), allows up to 10 extra optimization passes. - -* Added a new directive: 'cpu XXX', where XXX is any of: -8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or -Katmai. All are case insensitive. All instructions will -be selected only if they apply to the selected cpu or lower. -Corrected a couple of bugs in cpu-dependence in 'insns.dat'. - -* Added to 'standard.mac', the "use16" and "use32" forms of -the "bits 16/32" directive. This is nothing new, just conforms -to a lot of other assemblers. (minor) - -* Changed label allocation from 320/32 (10000 labels @ 200K+) -to 32/37 (1000 labels); makes running under DOS much easier. -Since additional label space is allocated dynamically, this -should have no effect on large programs with lots of labels. -The 37 is a prime, believed to be better for hashing. (minor) - -* Integrated patchfile 0.98-0.98.01. I call this version -0.98.03, for historical reasons: 0.98.02 was trashed. - ---John Coffman 27-Jul-2000 - - -Kendall Bennett's SciTech MGL changes -------------------------------------- -Note that you must define "TASM_COMPAT" at compile-time -to get the Tasm Ideal Mode compatibility. - -All changes can be compiled in and out using the TASM_COMPAT macros, -and when compiled without TASM_COMPAT defined we get the exact same -binary as the unmodified 0.98 sources. - -standard.mac, macros.c: - . Added macros to ignore TASM directives before first include - -nasm.h: - . Added extern declaration for tasm_compatible_mode - -nasm.c: - . Added global variable tasm_compatible_mode - . Added command line switch for TASM compatible mode (-t) - . Changed version command line to reflect when compiled with TASM additions - . Added response file processing to allow all arguments on a single - line (response file is @resp rather than -@resp for NASM format). - -labels.c: - . Changes islocal() macro to support TASM style @@local labels. - . Added islocalchar() macro to support TASM style @@local labels. - -parser.c: - . Added support for TASM style memory references (ie: mov [DWORD eax],10 - rather than the NASM style mov DWORD [eax],10). - -preproc.c: - . Added new directives, %arg, %local, %stacksize to directives table - . Added support for TASM style directives without a leading % symbol. - -Integrated a block of changes from Andrew Zabolotny : - -* A new keyword %xdefine and its case-insensitive counterpart %ixdefine. - They work almost the same way as %define and %idefine but expand - the definition immediately, not on the invocation. Something like a cross - between %define and %assign. The "x" suffix stands for "eXpand", so - "xdefine" can be deciphered as "expand-and-define". Thus you can do - things like this: - - %assign ofs 0 - - %macro arg 1 - %xdefine %1 dword [esp+ofs] - %assign ofs ofs+4 - %endmacro - -* Changed the place where the expansion of %$name macros are expanded. - Now they are converted into ..@ctxnum.name form when detokenizing, so - there are no quirks as before when using %$name arguments to macros, - in macros etc. For example: - - %macro abc 1 - %define %1 hello - %endm - - abc %$here - %$here - - Now last line will be expanded into "hello" as expected. This also allows - for lots of goodies, a good example are extended "proc" macros included - in this archive. - -* Added a check for "cstk" in smacro_defined() before calling get_ctx() - - this allows for things like: - - %ifdef %$abc - %endif - - to work without warnings even in no context. - -* Added a check for "cstk" in %if*ctx and %elif*ctx directives - - this allows to use %ifctx without excessive warnings. If there is - no active context, %ifctx goes through "false" branch. - -* Removed "user error: " prefix with %error directive: it just clobbers the - output and has absolutely no functionality. Besides, this allows to write - macros that does not differ from built-in functions in any way. - -* Added expansion of string that is output by %error directive. Now you - can do things like: - - %define hello(x) Hello, x! - - %define %$name andy - %error "hello(%$name)" - - Same happened with %include directive. - -* Now all directives that expect an identifier will try to expand and - concatenate everything without whitespaces in between before usage. - For example, with "unfixed" nasm the commands - - %define %$abc hello - %define __%$abc goodbye - __%$abc - - would produce "incorrect" output: last line will expand to - - hello goodbyehello - - Not quite what you expected, eh? :-) The answer is that preprocessor - treats the %define construct as if it would be - - %define __ %$abc goodbye - - (note the white space between __ and %$abc). After my "fix" it - will "correctly" expand into - - goodbye - - as expected. Note that I use quotes around words "correct", "incorrect" - etc because this is rather a feature not a bug; however current behaviour - is more logical (and allows more advanced macro usage :-). - - Same change was applied to: - %push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine, - %assign,%iassign,%undef - -* A new directive [WARNING {+|-}warning-id] have been added. It works only - if the assembly phase is enabled (i.e. it doesn't work with nasm -e). - -* A new warning type: macro-selfref. By default this warning is disabled; - when enabled NASM warns when a macro self-references itself; for example - the following source: - - [WARNING macro-selfref] - - %macro push 1-* - %rep %0 - push %1 - %rotate 1 - %endrep - %endmacro - - push eax,ebx,ecx - - will produce a warning, but if we remove the first line we won't see it - anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor - eats such constructs without warnings at all). - -* Added a "error" routine to preprocessor which always will set ERR_PASS1 - bit in severity_code. This removes annoying repeated errors on first - and second passes from preprocessor. - -* Added the %+ operator in single-line macros for concatenating two - identifiers. Usage example: - - %define _myfunc _otherfunc - %define cextern(x) _ %+ x - cextern (myfunc) - - After first expansion, third line will become "_myfunc". After this - expansion is performed again so it becomes "_otherunc". - -* Now if preprocessor is in a non-emmitting state, no warning or error - will be emmitted. Example: - - %if 1 - mov eax,ebx - %else - put anything you want between these two brackets, - even macro-parameter references %1 or local labels %$zz - or macro-local labels %%zz - no warning will be emmitted. - %endif - -* Context-local variables on expansion as a last resort are looked up - in outer contexts. For example, the following piece: - - %push outer - %define %$a [esp] - - %push inner - %$a - %pop - %pop - - will expand correctly the fourth line to [esp]; if we'll define another - %$a inside the "inner" context, it will take precedence over outer - definition. However, this modification has been applied only to - expand_smacro and not to smacro_define: as a consequence expansion - looks in outer contexts, but %ifdef won't look in outer contexts. - - This behaviour is needed because we don't want nested contexts to - act on already defined local macros. Example: - - %define %$arg1 [esp+4] - test eax,eax - if nz - mov eax,%$arg1 - endif - - In this example the "if" mmacro enters into the "if" context, so %$arg1 - is not valid anymore inside "if". Of course it could be worked around - by using explicitely %$$arg1 but this is ugly IMHO. - -* Fixed memory leak in %undef. The origline wasn't freed before - exiting on success. - -* Fixed trap in preprocessor when line expanded to empty set of tokens. - This happens, for example, in the following case: - - #define SOMETHING - SOMETHING - - -0.98 ----- - -All changes since NASM 0.98p3 have been produced by H. Peter Anvin . - -* The documentation comment delimiter is \# not #. -* Allow EQU definitions to refer to external labels; reported by - Pedro Gimeno. -* Re-enable support for RDOFF v1; reported by Pedro Gimeno. -* Updated License file per OK from Simon and Julian. - - -0.98p9 ------- - -* Update documentation (although the instruction set reference will - have to wait; I don't want to hold up the 0.98 release for it.) -* Verified that the NASM implementation of the PEXTRW and PMOVMSKB - instructions is correct. The encoding differs from what the Intel - manuals document, but the Pentium III behaviour matches NASM, not - the Intel manuals. -* Fix handling of implicit sizes in PSHUFW and PINSRW, reported by - Stefan Hoffmeister. -* Resurrect the -s option, which was removed when changing the - diagnostic output to stdout. - - -0.98p8 ------- - -* Fix for "DB" when NASM is running on a bigendian machine. -* Invoke insns.pl once for each output script, making Makefile.in - legal for "make -j". -* Improve the Unix configure-based makefiles to make package - creation easier. -* Included an RPM .spec file for building RPM (RedHat Package Manager) - packages on Linux or Unix systems. -* Fix Makefile dependency problems. -* Change src/rdsrc.pl to include sectioning information in info - output; required for install-info to work. -* Updated the RDOFF distribution to version 2 from Jules; minor - massaging to make it compile in my environment. -* Split doc files that can be built by anyone with a Perl interpreter off - into a separate archive. -* "Dress rehearsal" release! - - -0.98p7 ------- - -* Fixed opcodes with a third byte-sized immediate argument to not - complain if given "byte" on the immediate. -* Allow %undef to remove single-line macros with arguments. This - matches the behaviour of #undef in the C preprocessor. -* Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for - compatibility with most C compilers and preprocessors. This allows - Makefile options to be shared between cc and nasm, for example. -* Minor cleanups. -* Went through the list of Katmai instructions and hopefully fixed the - (rather few) mistakes in it. -* (Hopefully) fixed a number of disassembler bugs related to ambiguous - instructions (disambiguated by -p) and SSE instructions with REP. -* Fix for bug reported by Mark Junger: "call dword 0x12345678" should - work and may add an OSP (affected CALL, JMP, Jcc). -* Fix for environments when "stderr" isn't a compile-time constant. - - -0.98p6 ------- - -* Took officially over coordination of the 0.98 release; so drop - the p3.x notation. Skipped p4 and p5 to avoid confusion with John - Fine's J4 and J5 releases. -* Update the documentation; however, it still doesn't include - documentation for the various new instructions. I somehow wonder if - it makes sense to have an instruction set reference in the assembler - manual when Intel et al have PDF versions of their manuals online. -* Recognize "idt" or "centaur" for the -p option to ndisasm. -* Changed error messages back to stderr where they belong, but add an - -E option to redirect them elsewhere (the DOS shell cannot redirect - stderr.) -* -M option to generate Makefile dependencies (based on code from Alex - Verstak.) -* %undef preprocessor directive, and -u option, that undefines a - single-line macro. -* OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from - Chuck Crayne. -* Various minor bugfixes (reported by): - - Dangling %s in preproc.c (Martin Junker) -* THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am - on a trip and didn't bring the Katmai instruction reference, so I - can't work on them right now. -* Updated the License file per agreement with Simon and Jules to - include a GPL distribution clause. - - -0.98p3.7 --------- - -* (Hopefully) fixed the canned Makefiles to include the outrdf2 and - zoutieee modules. -* Renamed changes.asm to changed.asm. - - -0.98p3.6 --------- - -* Fixed a bunch of instructions that were added in 0.98p3.5 which had - memory operands, and the address-size prefix was missing from the - instruction pattern. - - -0.98p3.5 --------- - -* Merged in changes from John S. Fine's 0.98-J5 release. John's based - 0.98-J5 on my 0.98p3.3 release; this merges the changes. -* Expanded the instructions flag field to a long so we can fit more - flags; mark SSE (KNI) and AMD or Katmai-specific instructions as - such. -* Fix the "PRIV" flag on a bunch of instructions, and create new - "PROT" flag for protected-mode-only instructions (orthogonal to if - the instruction is privileged!) and new "SMM" flag for SMM-only - instructions. -* Added AMD-only SYSCALL and SYSRET instructions. -* Make SSE actually work, and add new Katmai MMX instructions. -* Added a -p (preferred vendor) option to ndisasm so that it can - distinguish e.g. Cyrix opcodes also used in SSE. For example: - - ndisasm -p cyrix aliased.bin - 00000000 670F514310 paddsiw mm0,[ebx+0x10] - 00000005 670F514320 paddsiw mm0,[ebx+0x20] - ndisasm -p intel aliased.bin - 00000000 670F514310 sqrtps xmm0,[ebx+0x10] - 00000005 670F514320 sqrtps xmm0,[ebx+0x20] -* Added a bunch of Cyrix-specific instructions. - - -0.98p3.4 --------- - -* Made at least an attempt to modify all the additional Makefiles (in - the Mkfiles directory). I can't test it, but this was the best I - could do. -* DOS DJGPP+"Opus Make" Makefile from John S. Fine. -* changes.asm changes from John S. Fine. - - -0.98p3.3 --------- - -* Patch from Conan Brink to allow nesting of %rep directives. -* If we're going to allow INT01 as an alias for INT1/ICEBP (one of - Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3 - as well. -* Updated changes.asm to include the latest changes. -* Tried to clean up the s that had snuck in from a DOS/Windows - environment into my Unix environment, and try to make sure than - DOS/Windows users get them back. -* We would silently generate broken tools if insns.dat wasn't sorted - properly. Change insns.pl so that the order doesn't matter. -* Fix bug in insns.pl (introduced by me) which would cause conditional - instructions to have an extra "cc" in disassembly, e.g. "jnz" - disassembled as "jccnz". - - -0.98p3.2 --------- - -* Merged in John S. Fine's changes from his 0.98-J4 prerelease; see - http://www.csoft.net/cz/johnfine/ -* Changed previous "spotless" Makefile target (appropriate for distribution) - to "distclean", and added "cleaner" target which is same as "clean" - except deletes files generated by Perl scripts; "spotless" is union. -* Removed BASIC programs from distribution. Get a Perl interpreter - instead (see below.) -* Calling this "pre-release 3.2" rather than "p3-hpa2" because of - John's contributions. -* Actually link in the IEEE output format (zoutieee.c); fix a bunch of - compiler warnings in that file. Note I don't know what IEEE output - is supposed to look like, so these changes were made "blind". - - -0.98p3-hpa ----------- - -* Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully - buildable version for Unix systems (Makefile.in updates, etc.) -* Changed insns.pl to create the instruction tables in nasm.h and - names.c, so that a new instruction can be added by adding it *only* - to insns.dat. -* Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE, - FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel - guarantee will never be used; one of them is documented as UD2 in - Intel documentation, the other one just as "Undefined Opcode" -- - calling it UD1 seemed to make sense.) -* MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10 - characters long. Now MAX_SYMBOL is derived from insns.dat. -* A note on the BASIC programs included: forget them. insns.bas is - already out of date. Get yourself a Perl interpreter for your - platform of choice at: - - http://www.cpan.org/ports/index.html - - -0.98 pre-release 3 -------------------- - -added response file support, improved command line handling, new layout -help screen - -fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff -related bugs, updated Wishlist; 0.98 Prerelease 3. - - -0.98 pre-release 2 -------------------- - -fixed bug in outcoff.c to do with truncating section names longer -than 8 characters, referencing beyond end of string; 0.98 pre-release 2 - - -0.98 pre-released May 1999 --------------------------- - -Fixed a bug whereby STRUC didn't work at all in RDF. - -Fixed a problem with group specification in PUBDEFs in OBJ. - -Improved ease of adding new output formats. Contribution due to -Fox Cutter. - -Fixed a bug in relocations in the `bin' format: was showing up when -a relocatable reference crossed an 8192-byte boundary in any output -section. - -Fixed a bug in local labels: local-label lookups were inconsistent -between passes one and two if an EQU occurred between the definition -of a global label and the subsequent use of a local label local to -that global. - -Fixed a seg-fault in the preprocessor (again) which happened when -you use a blank line as the first line of a multi-line macro -definition and then defined a label on the same line as a call to -that macro. - -Fixed a stale-pointer bug in the handling of the NASM environment -variable. Thanks to Thomas McWilliams. - -ELF had a hard limit on the number of sections which caused -segfaults when transgressed. Fixed. - -Added ability for ndisasm to read from stdin by using `-' as the -filename. - -ndisasm wasn't outputting the TO keyword. Fixed. - -Fixed error cascade on bogus expression in %if - an error in -evaluation was causing the entire %if to be discarded, thus creating -trouble later when the %else or %endif was encountered. - -Forward reference tracking was instruction-granular not operand- -granular, which was causing 286-specific code to be generated -needlessly on code of the form `shr word [forwardref],1'. Thanks to -Jim Hague for sending a patch. - -All messages now appear on stdout, as sending them to stderr serves -no useful purpose other than to make redirection difficult. - -Fixed the problem with EQUs pointing to an external symbol - this -now generates an error message. - -Allowed multiple size prefixes to an operand, of which only the first -is taken into account. - -Incorporated John Fine's changes, including fixes of a large number -of preprocessor bugs, some small problems in OBJ, and a reworking of -label handling to define labels before their line is assembled, rather -than after. - -Reformatted a lot of the source code to be more readable. Included -'coding.txt' as a guideline for how to format code for contributors. - -Stopped nested %reps causing a panic - they now cause a slightly more -friendly error message instead. - -Fixed floating point constant problems (patch by Pedro Gimeno) - -Fixed the return value of insn_size() not being checked for -1, indicating -an error. - -Incorporated 3D now instructions. - -Fixed the 'mov eax, eax + ebx' bug. - -Fixed the GLOBAL EQU bug in ELF. Released developers release 3. - -Incorporated John Fine's command line parsing changes - -Incorporated David Lindauer's OMF debug support - -Made changes for LCC 4.0 support (__NASM_CDecl__, removed register size -specification warning when sizes agree). - -Released NASM 0.98 Pre-release 1 - - -0.97 released December 1997 ---------------------------- - -This was entirely a bug-fix release to 0.96, which seems to have got -cursed. Silly me. - -Fixed stupid mistake in OBJ which caused `MOV EAX,' to -fail. Caused by an error in the `MOV EAX,' support. - -ndisasm hung at EOF when compiled with lcc on Linux because lcc on -Linux somehow breaks feof(). ndisasm now does not rely on feof(). - -A heading in the documentation was missing due to a markup error in -the indexing. Fixed. - -Fixed failure to update all pointers on realloc() within extended- -operand code in parser.c. Was causing wrong behaviour and seg faults -on lines such as `dd 0.0,0.0,0.0,0.0,...' - -Fixed a subtle preprocessor bug whereby invoking one multi-line -macro on the first line of the expansion of another, when the second -had been invoked with a label defined before it, didn't expand the -inner macro. - -Added internal.doc back in to the distribution archives - it was -missing in 0.96 *blush* - -Fixed bug causing 0.96 to be unable to assemble its own test files, -specifically objtest.asm. *blush again* - -Fixed seg-faults and bogus error messages caused by mismatching -%rep and %endrep within multi-line macro definitions. - -Fixed a problem with buffer overrun in OBJ, which was causing -corruption at ends of long PUBDEF records. - -Separated DOS archives into main-program and documentation to reduce -download size. - - -0.96 released November 1997 ---------------------------- - -Fixed a bug whereby, if `nasm sourcefile' would cause a filename -collision warning and put output into `nasm.out', then `nasm -sourcefile -o outputfile' still gave the warning even though the -`-o' was honoured. - -Fixed name pollution under Digital UNIX: one of its header files -defined R_SP, which broke the enum in nasm.h. - -Fixed minor instruction table problems: FUCOM and FUCOMP didn't have -two-operand forms; NDISASM didn't recognise the longer register -forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was -flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand -size prefixes; `AAD imm' and `AAM imm' are no longer flagged as -undocumented because the Intel Architecture reference documents -them. - -Fixed a problem with the local-label mechanism, whereby strange -types of symbol (EQUs, auto-defined OBJ segment base symbols) -interfered with the `previous global label' value and screwed up -local labels. - -Fixed a bug whereby the stub preprocessor didn't communicate with -the listing file generator, so that the -a and -l options in -conjunction would produce a useless listing file. - -Merged `os2' object file format back into `obj', after discovering -that `obj' _also_ shouldn't have a link pass separator in a module -containing a non-trivial MODEND. Flat segments are now declared -using the FLAT attribute. `os2' is no longer a valid object format -name: use `obj'. - -Removed the fixed-size temporary storage in the evaluator. Very very -long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or -so) should now no longer crash NASM. - -Fixed a bug involving segfaults on disassembly of MMX instructions, -by changing the meaning of one of the operand-type flags in nasm.h. -This may cause other apparently unrelated MMX problems; it needs to -be tested thoroughly. - -Fixed some buffer overrun problems with large OBJ output files. -Thanks to DJ Delorie for the bug report and fix. - -Made preprocess-only mode actually listen to the %line markers as it -prints them, so that it can report errors more sanely. - -Re-designed the evaluator to keep more sensible track of expressions -involving forward references: can now cope with previously-nightmare -situations such as - mov ax,foo | bar - foo equ 1 - bar equ 2 - -Added the ALIGN and ALIGNB standard macros. - -Added PIC support in ELF: use of WRT to obtain the four extra -relocation types needed. - -Added the ability for output file formats to define their own -extensions to the GLOBAL, COMMON and EXTERN directives. - -Implemented common-variable alignment, and global-symbol type and -size declarations, in ELF. - -Implemented NEAR and FAR keywords for common variables, plus -far-common element size specification, in OBJ. - -Added a feature whereby EXTERNs and COMMONs in OBJ can be given a -default WRT specification (either a segment or a group). - -Transformed the Unix NASM archive into an auto-configuring package. - -Added a sanity-check for people applying SEG to things which are -already segment bases: this previously went unnoticed by the SEG -processing and caused OBJ-driver panics later. - -Added the ability, in OBJ format, to deal with `MOV EAX,' -type references: OBJ doesn't directly support dword-size segment -base fixups, but as long as the low two bytes of the constant term -are zero, a word-size fixup can be generated instead and it will -work. - -Added the ability to specify sections' alignment requirements in -Win32 object files and pure binary files. - -Added preprocess-time expression evaluation: the %assign (and -%iassign) directive and the bare %if (and %elif) conditional. Added -relational operators to the evaluator, for use only in %if -constructs: the standard relationals = < > <= >= <> (and C-like -synonyms == and !=) plus low-precedence logical operators &&, ^^ and -||. - -Added a preprocessor repeat construct: %rep / %exitrep / %endrep. - -Added the __FILE__ and __LINE__ standard macros. - -Added a sanity check for number constants being greater than -0xFFFFFFFF. The warning can be disabled. - -Added the %0 token whereby a variadic multi-line macro can tell how -many parameters it's been given in a specific invocation. - -Added %rotate, allowing multi-line macro parameters to be cycled. - -Added the `*' option for the maximum parameter count on multi-line -macros, allowing them to take arbitrarily many parameters. - -Added the ability for the user-level forms of EXTERN, GLOBAL and -COMMON to take more than one argument. - -Added the IMPORT and EXPORT directives in OBJ format, to deal with -Windows DLLs. - -Added some more preprocessor %if constructs: %ifidn / %ifidni (exact -textual identity), and %ifid / %ifnum / %ifstr (token type testing). - -Added the ability to distinguish SHL AX,1 (the 8086 version) from -SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to -be 1). - -Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete -with PIC shared library features. - -Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT, -FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the -otherwise accepted standard. The previous behaviour, though it was a -deliberate feature, was a deliberate feature based on a -misunderstanding. Apologies for the inconvenience. - -Improved the flexibility of ABSOLUTE: you can now give it an -expression rather than being restricted to a constant, and it can -take relocatable arguments as well. - -Added the ability for a variable to be declared as EXTERN multiple -times, and the subsequent definitions are just ignored. - -We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be -alone on a line (without a following instruction). - -Improved sanity checks on whether the arguments to EXTERN, GLOBAL -and COMMON are valid identifiers. - -Added misc/exebin.mac to allow direct generation of .EXE files by -hacking up an EXE header using DB and DW; also added test/binexe.asm -to demonstrate the use of this. Thanks to Yann Guidon for -contributing the EXE header code. - -ndisasm forgot to check whether the input file had been successfully -opened. Now it does. Doh! - -Added the Cyrix extensions to the MMX instruction set. - -Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be -assembled differently. This is important since [ESI+EBP] and -[EBP+ESI] have different default base segment registers. - -Added support for the PharLap OMF extension for 4096-byte segment -alignment. - - -0.95 released July 1997 ------------------------ - -Fixed yet another ELF bug. This one manifested if the user relied on -the default segment, and attempted to define global symbols without -first explicitly declaring the target segment. - -Added makefiles (for NASM and the RDF tools) to build Win32 console -apps under Symantec C++. Donated by Mark Junker. - -Added `macros.bas' and `insns.bas', QBasic versions of the Perl -scripts that convert `standard.mac' to `macros.c' and convert -`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark -Junker. - -Changed the diassembled forms of the conditional instructions so -that JB is now emitted as JC, and other similar changes. Suggested -list by Ulrich Doewich. - -Added `@' to the list of valid characters to begin an identifier -with. - -Documentary changes, notably the addition of the `Common Problems' -section in nasm.doc. - -Fixed a bug relating to 32-bit PC-relative fixups in OBJ. - -Fixed a bug in perm_copy() in labels.c which was causing exceptions -in cleanup_labels() on some systems. - -Positivity sanity check in TIMES argument changed from a warning to -an error following a further complaint. - -Changed the acceptable limits on byte and word operands to allow -things like `~10111001b' to work. - -Fixed a major problem in the preprocessor which caused seg-faults if -macro definitions contained blank lines or comment-only lines. - -Fixed inadequate error checking on the commas separating the -arguments to `db', `dw' etc. - -Fixed a crippling bug in the handling of macros with operand counts -defined with a `+' modifier. - -Fixed a bug whereby object file formats which stored the input file -name in the output file (such as OBJ and COFF) weren't doing so -correctly when the output file name was specified on the command -line. - -Removed [INC] and [INCLUDE] support for good, since they were -obsolete anyway. - -Fixed a bug in OBJ which caused all fixups to be output in 16-bit -(old-format) FIXUPP records, rather than putting the 32-bit ones in -FIXUPP32 (new-format) records. - -Added, tentatively, OS/2 object file support (as a minor variant on -OBJ). - -Updates to Fox Cutter's Borland C makefile, Makefile.bc2. - -Removed a spurious second fclose() on the output file. - -Added the `-s' command line option to redirect all messages which -would go to stderr (errors, help text) to stdout instead. - -Added the `-w' command line option to selectively suppress some -classes of assembly warning messages. - -Added the `-p' pre-include and `-d' pre-define command-line options. - -Added an include file search path: the `-i' command line option. - -Fixed a silly little preprocessor bug whereby starting a line with a -`%!' environment-variable reference caused an `unknown directive' -error. - -Added the long-awaited listing file support: the `-l' command line -option. - -Fixed a problem with OBJ format whereby, in the absence of any -explicit segment definition, non-global symbols declared in the -implicit default segment generated spurious EXTDEF records in the -output. - -Added the NASM environment variable. - -From this version forward, Win32 console-mode binaries will be -included in the DOS distribution in addition to the 16-bit binaries. -Added Makefile.vc for this purpose. - -Added `return 0;' to test/objlink.c to prevent compiler warnings. - -Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines. - -Added an alternative memory-reference syntax in which prefixing an -operand with `&' is equivalent to enclosing it in square brackets, -at the request of Fox Cutter. - -Errors in pass two now cause the program to return a non-zero error -code, which they didn't before. - -Fixed the single-line macro cycle detection, which didn't work at -all on macros with no parameters (caused an infinite loop). Also -changed the behaviour of single-line macro cycle detection to work -like cpp, so that macros like `extrn' as given in the documentation -can be implemented. - -Fixed the implementation of WRT, which was too restrictive in that -you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't -a relocatable reference. - - -0.94 released April 1997 ------------------------- - -Major item: added the macro processor. - -Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also -reorganised CMPXCHG instruction into early-486 and Pentium forms. -Thanks to Thobias Jones for the information. - -Fixed two more stupid bugs in ELF, which were causing `ld' to -continue to seg-fault in a lot of non-trivial cases. - -Fixed a seg-fault in the label manager. - -Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is -the only option for BCD loads/stores in any case. - -Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if -anyone bothers to provide it. Previously they complained unless no -keyword at all was present. - -Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a -vestige of a bug that I thought had been fixed in 0.92. This was -fixed, hopefully for good this time... - -Another minor phase error (insofar as a phase error can _ever_ be -minor) fixed, this one occurring in code of the form - rol ax,forward_reference - forward_reference equ 1 - -The number supplied to TIMES is now sanity-checked for positivity, -and also may be greater than 64K (which previously didn't work on -16-bit systems). - -Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr. - -Added the INCBIN pseudo-opcode. - -Due to the advent of the preprocessor, the [INCLUDE] and [INC] -directives have become obsolete. They are still supported in this -version, with a warning, but won't be in the next. - -Fixed a bug in OBJ format, which caused incorrect object records to -be output when absolute labels were made global. - -Updates to RDOFF subdirectory, and changes to outrdf.c. - - -0.93 released January 1997 --------------------------- - -This release went out in a great hurry after semi-crippling bugs -were found in 0.92. - -Really _did_ fix the stack overflows this time. *blush* - -Had problems with EA instruction sizes changing between passes, when -an offset contained a forward reference and so 4 bytes were -allocated for the offset in pass one; by pass two the symbol had -been defined and happened to be a small absolute value, so only 1 -byte got allocated, causing instruction size mismatch between passes -and hence incorrect address calculations. Fixed. - -Stupid bug in the revised ELF section generation fixed (associated -string-table section for .symtab was hard-coded as 7, even when this -didn't fit with the real section table). Was causing `ld' to -seg-fault under Linux. - -Included a new Borland C makefile, Makefile.bc2, donated by Fox -Cutter . - - -0.92 released January 1997 --------------------------- - -The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was -fixed. This also affected the LCC driver. - -Fixed a bug regarding 32-bit effective addresses of the form -[other_register+ESP]. - -Documentary changes, notably documentation of the fact that Borland -Win32 compilers use `obj' rather than `win32' object format. - -Fixed the COMENT record in OBJ files, which was formatted -incorrectly. - -Fixed a bug causing segfaults in large RDF files. - -OBJ format now strips initial periods from segment and group -definitions, in order to avoid complications with the local label -syntax. - -Fixed a bug in disassembling far calls and jumps in NDISASM. - -Added support for user-defined sections in COFF and ELF files. - -Compiled the DOS binaries with a sensible amount of stack, to -prevent stack overflows on any arithmetic expression containing -parentheses. - -Fixed a bug in handling of files that do not terminate in a newline. - - -0.91 released November 1996 ---------------------------- - -Loads of bug fixes. -Support for RDF added. -Support for DBG debugging format added. -Support for 32-bit extensions to Microsoft OBJ format added. -Revised for Borland C: some variable names changed, makefile added. -LCC support revised to actually work. -JMP/CALL NEAR/FAR notation added. -`a16', `o16', `a32' and `o32' prefixes added. -Range checking on short jumps implemented. -MMX instruction support added. -Negative floating point constant support added. -Memory handling improved to bypass 64K barrier under DOS. -$ prefix to force treatment of reserved words as identifiers added. -Default-size mechanism for object formats added. -Compile-time configurability added. -`#', `@', `~' and `?' are now valid characters in labels. -`-e' and `-k' options in NDISASM added. - - -0.90 released October 1996 --------------------------- - -First release version. First support for object file output. Other -changes from previous version (0.3x) too numerous to document. +The revision history has moved to the file doc/changes.src, and +is now included in the documentation as Appendix C. -- cgit v1.2.3