From e27dd0bf7c05dcb8c5a23abc8a3109439bb213a2 Mon Sep 17 00:00:00 2001 From: Tomasz Grysztar Date: Fri, 20 Oct 2017 12:00:00 +0000 Subject: [PATCH] release 1.72 --- FASM.TXT | 10 +- LICENSE.TXT | 2 +- SOURCE/LIBC/SYSTEM.INC | 7 + SOURCE/LINUX/SYSTEM.INC | 3 + SOURCE/LINUX/X64/SYSTEM.INC | 3 + SOURCE/VERSION.INC | 6 +- SOURCE/WIN32/SYSTEM.INC | 3 + WHATSNEW.TXT | 431 +++--------------------------------- 8 files changed, 51 insertions(+), 414 deletions(-) diff --git a/FASM.TXT b/FASM.TXT index fed8158..69319e1 100644 --- a/FASM.TXT +++ b/FASM.TXT @@ -5,7 +5,7 @@ Û ÜßßßßÛ ßßßßÜ Û Û Û Û ßÜÜÜÜÛÜ ÜÜÜÜÜß Û Û Û - flat assembler 1.71 + flat assembler 1.72 Programmer's Manual @@ -146,21 +146,21 @@ done, how much time it took, and how many bytes were written into the destination file. The following is an example of the compilation summary: -flat assembler version 1.70 (16384 kilobytes memory) +flat assembler version 1.72 (16384 kilobytes memory) 38 passes, 5.3 seconds, 77824 bytes. In case of error during the compilation process, the program will display an error message. For example, when compiler can't find the input file, it will display the following message: -flat assembler version 1.70 (16384 kilobytes memory) +flat assembler version 1.72 (16384 kilobytes memory) error: source file not found. If the error is connected with a specific part of source code, the source line that caused the error will be also displayed. Also placement of this line in the source is given to help you finding this error, for example: -flat assembler version 1.70 (16384 kilobytes memory) +flat assembler version 1.72 (16384 kilobytes memory) example.asm [3]: mob ax,1 error: illegal instruction. @@ -170,7 +170,7 @@ encountered an unrecognized instruction. When the line that caused error contains a macroinstruction, also the line in macroinstruction definition that generated the erroneous instruction is displayed: -flat assembler version 1.70 (16384 kilobytes memory) +flat assembler version 1.72 (16384 kilobytes memory) example.asm [6]: stoschar 7 example.asm [3] stoschar [1]: diff --git a/LICENSE.TXT b/LICENSE.TXT index ed1992a..2b2fc7b 100644 --- a/LICENSE.TXT +++ b/LICENSE.TXT @@ -1,5 +1,5 @@ -flat assembler version 1.71 +flat assembler version 1.72 Copyright (c) 1999-2017, Tomasz Grysztar. All rights reserved. diff --git a/SOURCE/LIBC/SYSTEM.INC b/SOURCE/LIBC/SYSTEM.INC index 88251e6..f16f92a 100644 --- a/SOURCE/LIBC/SYSTEM.INC +++ b/SOURCE/LIBC/SYSTEM.INC @@ -131,9 +131,16 @@ lseek: push ebx movzx eax,al ccall fseek,ebx,edx,eax + test eax,eax + jnz lseek_error mov ebx,[esp] ccall ftell,ebx pop ebx + clc + ret + lseek_error: + pop ebx + stc ret display_string: diff --git a/SOURCE/LINUX/SYSTEM.INC b/SOURCE/LINUX/SYSTEM.INC index d91df4e..eec75fd 100644 --- a/SOURCE/LINUX/SYSTEM.INC +++ b/SOURCE/LINUX/SYSTEM.INC @@ -186,6 +186,9 @@ lseek: mov dl,al mov eax,19 int 0x80 + cmp eax,-1 + je file_error + clc ret display_string: diff --git a/SOURCE/LINUX/X64/SYSTEM.INC b/SOURCE/LINUX/X64/SYSTEM.INC index 1a9087a..fe7b60d 100644 --- a/SOURCE/LINUX/X64/SYSTEM.INC +++ b/SOURCE/LINUX/X64/SYSTEM.INC @@ -220,6 +220,9 @@ lseek: syscall mov esi,r12d mov edi,r13d + cmp eax,-1 + je file_error + clc ret display_string: diff --git a/SOURCE/VERSION.INC b/SOURCE/VERSION.INC index a34a026..5028e29 100644 --- a/SOURCE/VERSION.INC +++ b/SOURCE/VERSION.INC @@ -1,5 +1,5 @@ -; flat assembler version 1.71 +; flat assembler version 1.72 ; Copyright (c) 1999-2017, Tomasz Grysztar. ; All rights reserved. ; @@ -33,7 +33,7 @@ ; cannot simply be copied and put under another distribution licence ; (including the GNU Public Licence). -VERSION_STRING equ "1.71.63" +VERSION_STRING equ "1.72" VERSION_MAJOR = 1 -VERSION_MINOR = 71 +VERSION_MINOR = 72 diff --git a/SOURCE/WIN32/SYSTEM.INC b/SOURCE/WIN32/SYSTEM.INC index 0ac64c7..6d519c0 100644 --- a/SOURCE/WIN32/SYSTEM.INC +++ b/SOURCE/WIN32/SYSTEM.INC @@ -187,6 +187,9 @@ lseek: push edx push ebx call [SetFilePointer] + cmp eax,-1 + je file_error + clc ret display_string: diff --git a/WHATSNEW.TXT b/WHATSNEW.TXT index fd7df93..1dfca61 100644 --- a/WHATSNEW.TXT +++ b/WHATSNEW.TXT @@ -2,401 +2,12 @@ Visit http://flatassembler.net/ for more information. -version 1.71.63 (Jun 21, 2017) +version 1.72 (Oct 10, 2017) -[-] Minor fixes in formatter. +[+] Support for Intel AVX-512, SHA, CLFLUSHOPT, CLWB, PCOMMIT, ADX, RDSEED, SMAP + and MPX instruction sets. - -version 1.71.62 (May 08, 2017) - -[-] Minor correction in "kmovq" error checking. - -[-] Minor fix in the encoding of some absolute addresses in long mode. - - -version 1.71.61 (May 04, 2017) - -[-] Minor correction in "vcvtpd2dq" error checking. - - -version 1.71.60 (Feb 05, 2017) - -[+] Updated documentation. - -[-] Minor corrections in error detection of some AVX instruction handlers. - - -version 1.71.59 (Jan 20,2017) - -[-] Corrected range-checking for minimal denormal floating-point values. - -[-] Other minor fixes. - - -version 1.71.58 (Dec 08, 2016) - -[+] Added a 64-bit ELF executable version of flat assembler for Linux. It has - no extended capabilities compared to regular versions, it just simulates - the 32-bit environment to allow running the assembler on systems that - support only 64-bit executables. - - -version 1.71.57 (Sep 26, 2016) - -[+] Added "gnustack" and "gnuehframe" segment types to ELF executable formatter. - -[+] Console versions now display preprocessed instruction that caused an error - (previously only displayed by Windows GUI interface). - - -version 1.71.56 (Sep 19, 2016) - -[+] Allowed underscore character to be put inside the number value. - -[+] Allowed octal numbers ending with "q". - - -version 1.71.55 (Sep 18, 2016) - -[-] Fixed generation of PLT relocations in ELF64 output. - - -version 1.71.54 (Jun 09, 2016) - -[-] Corrected syntax options of "pextrb", "pextrd", "extractps" and "crc32" - instructions in long mode to be consistent with how "pextrw" behaved already. - They all now allow either 32-bit or 64-bit register as destination and this - choice does not affect the result of the operation. - -[-] The error message trigerred by "mov [eax],1.0" was misleading. - - -version 1.71.53 (May 21, 2016) - -[+] Added missing "vmfunc" instruction. - -[-] Fixed recently introduced bug in "swapgs" instruction. - - -version 1.71.52 (May 13, 2016) - -[+] Added "rdpkru" and "wrpkru" instructions. - -[-] Fixed a bug in processing the "-d" switch. - - -version 1.71.51 (Feb 08, 2016) - -[-] Corrected the signalling of "operand size not specified" error with - AVX instructions. - - -version 1.71.50 (Jan 30, 2016) - -[-] Overflow error in the RIP-relative addresses has been made recoverable. - - -version 1.71.49 (Dec 06, 2015) - -[-] Few small fixes. - - -version 1.71.48 (Nov 18, 2015) - -[-] Fixed recently introduced bug in MOV instruction with debug register - as target. - - -version 1.71.47 (Nov 09, 2015) - -[+] Added support for Intel MPX instructions. - - -version 1.71.46 (Oct 31, 2015) - -[-] Another minor bug fixed. - - -version 1.71.45 (Oct 31, 2015) - -[-] Few more bugs fixed in AVX encodings. - - -version 1.71.44 (Oct 27, 2015) - -[-] Minor bug fixes. - - -version 1.71.43 (Oct 26, 2015) - -[+] Added two missing instructions. - -[-] Fixed few minor bugs in AVX-512 encodings. - - -version 1.71.42 (Oct 22, 2015) - -[-] Fixed a couple of regression bugs. - - -version 1.71.41 (Oct 21, 2015) - -[-] Fixed a bug that caused the "word" operator inside square brackets to - have no effect. - - -version 1.71.40 (Oct 19, 2015) - -[+] Added support for Intel AVX-512, SHA, CLFLUSHOPT, CLWB and - PCOMMIT instruction sets. - - -version 1.71.39 (Mar 11, 2015) - -[-] Minor bug fix. - - -version 1.71.38 (Mar 09, 2015) - -[-] Minor bug fixes. - - -version 1.71.37 (Mar 03, 2015) - -[-] Fixed a crash caused by incorrect handling of any error in definition - provided through "-d" switch. - - -version 1.71.36 (Feb 26, 2015) - -[-] Fixed a small bug with "irp" directive. - - -version 1.71.35 (Feb 25, 2015) - -[-] Corrected a flaw that caused a crash when processing incomplete macro - definitions within the "postpone" block. - - -version 1.71.34 (Feb 17, 2015) - -[-] Fixed a recently introduced bug that caused assembler to hang when a - missing closing parenthesis error was encountered. - - -version 1.71.33 (Jan 09, 2015) - -[+] Default value for macroinstruction parameter can now be defined with ":" - character as an alternative to "=". - - -version 1.71.32 (Jan 04, 2015) - -[+] Brought back the "-d" switch for command line. - - -version 1.71.31 (Dec 08, 2014) - -[-] Removed dependence on size context for expression operators like NOT and XOR. - -[-] Relaxed range checking to allow extended negative range for all sizes. - - -version 1.71.30 (Dec 07, 2014) - -[-] Clearing the instruction data field when filling the addend for 64-bit ELF - relocaiton. - - -version 1.71.29 (Dec 05, 2014) - -[-] Supressed error message when parsing some malformed expressions that do not - get evaluated. - - -version 1.71.28 (Dec 01, 2014) - -[-] The addend field of relocation structure for 64-bit ELF format is now filled with - correct information. - - -version 1.71.27 (Nov 18, 2014) - -[-] Corrected initial predictions of immediate size for "mov" and "test" instructions - (this may sometimes help to generate smaller code). - - -version 1.71.26 (Nov 12, 2014) - -[-] Fixed a bug introduced by previous version that allowed address values to - bypass range checks. - - -version 1.71.25 (Nov 03, 2014) - -[-] Fixed a bug that cause valued of argument starting with "<" character to be - incorrectly processed when the parameter in question was marked with "&" - character. - - -version 1.71.24 (Oct 27, 2014) - -[+] In the definition of macroinstruction the last argument can now be followed by - "&" character to indicate that this argument can be filled with all the remaining - contents of line that called the macro. This feature cannot be combined with a - multi-value arguments. - - -version 1.71.23 (Oct 21, 2014) - -[+] Added "bsf" and "bsr" operators to numerical expressions. - -[-] Removed the restriction that disallowed numerical constant to - forward-reference its own value. - - -version 1.71.22 (Sep 28, 2014) - -[-] Format MZ no longer allows the table of relocations to overflow. - - -version 1.71.21 (May 27, 2014) - -[-] Fixed a bug in the 64-bit floating points value converter. - - -version 1.71.20 (Feb 27, 2014) - -[-] Fixed a bug in the backward patching of PE fixups. - - -version 1.71.19 (Feb 09, 2014) - -[-] Corrected some of the range errors in intermediate passes to be correctly - resolvable. - - -version 1.71.18 (Feb 02, 2014) - -[+] Added "irpv" directive. - - -version 1.71.17 (Jan 27, 2014) - -[-] Minor corrections. - - -version 1.71.16 (Oct 30, 2013) - -[-] Fixed some bugs in the ELF executable formatter. - - -version 1.71.15 (Oct 26, 2013) - -[-] Fixed some bugs inadvertently introduced in the previous release. - - -version 1.71.14 (Oct 25, 2013) - -[+] Added "postpone" directive to preprocessor. - - -version 1.71.13 (Sep 09, 2013) - -[-] Fixed a bug that caused the expressions containing external symbols - to overflow from time to time. - - -version 1.71.12 (Aug 04, 2013) - -[-] Expressions in square brackets were incorrectly treated as valid numerical - values when used in some logical expressions. - -[-] A previous fix to "store" directive did not apply to all the cases when it - was incorrectly leaving the data marked as uninitialized. The new fix - addresses this issue. - - -version 1.71.11 (Jul 09, 2013) - -[-] Modifying a value in uninitialized data block with "store" directive will - now correctly mark this data as initialized when it is in a different - addressing space. - -[-] Missing quote will no longer cause the symbols generator to hang or crash. - -[-] Address range restrictions for addressing modes no longer apply to addresses - provided to assembler directives like "label", "virtual" or "load". - - -version 1.71.10 (Apr 03, 2013) - -[-] Fixed a crashing "heap" directive in 64-bit PE format. - - -version 1.71.09 (Mar 30, 2013) - -[-] "use16", "use32" and "use64" no longer allow to put another instruction in - the same line. - -[-] Fixed a bug in parser that caused it to hang while processing some - specific ill-structured preprocessed lines. - -[-] Modified memory allocation algorithm on Windows machines with large RAM. - - -version 1.71.08 (Mar 08, 2013) - -[-] Fixed a bug that caused "irp" to skip processing a list with one empty - element when default value for iterating variable was specified. - - -version 1.71.07 (Dec 23, 2012) - -[-] Fixed a bug that was causing "used" operator to give incorrect results - in some very specific cases. - - -version 1.71.06 (Nov 22, 2012) - -[-] Fixed a few bugs caused by unnecesarily strong restrictions on allowed - types of relocatable values in some places (like "label" directive). - - -version 1.71.05 (Oct 15, 2012) - -[-] Fixed a bug which caused "load" and "store" directives to sometimes - fail when assembler had preallocated very large amount of memory. - - -version 1.71.04 (Oct 10, 2012) - -[-] Fixed another bug in "org" directive, which was causing it to deal - incorrectly with negative addresses. - - -version 1.71.03 (Sep 27, 2012) - -[-] Fixed a bug in "org" directive introduced by recent changes, which - was manifesting with bases larger than 31-bit. - - -version 1.71.02 (Sep 26, 2012) - -[-] Expression calculator now allows to calculate the difference of - relocatable addresses in a reverse order (first substracting/negating - and then adding the other one). - - -version 1.71.01 (Sep 23, 2012) - -[+] Added support for ADX, RDSEED and SMAP instruction sets. - -[-] Fixed the bugs related to creating a new addressing space inside the - virtual block with "org" directive. - - -version 1.71.00 (Sep 21, 2012) +[+] Added "irpv" and "postpone" directives. [+] Added ability to define a special kind of label identifying the addressing space. This label can the be used with "load" or "store" @@ -407,26 +18,36 @@ version 1.71.00 (Sep 21, 2012) first the adressing space label, then the colon and then the address inside that addressing space. +[+] In the definition of macroinstruction the last argument can now be followed by + "&" character to indicate that this argument can be filled with all the remaining + contents of line that called the macro. This feature cannot be combined with a + multi-value arguments. -version 1.70.03 (Jun 29, 2012) +[+] Default value for macroinstruction parameter can now be defined with ":" + character as an alternative to "=". -[-] Allowed to freely upgrade or downgrade the relocatable addresses in - object format between the 32-bit or 64-bit size. +[+] Added a 64-bit ELF executable version of flat assembler for Linux. It has + no extended capabilities compared to regular versions, it just simulates + the 32-bit environment to allow running the assembler on systems that + support only 64-bit executables. +[+] Added "gnustack" and "gnuehframe" segment types to ELF executable formatter. -version 1.70.02 (May 22, 2012) +[+] Console versions now display preprocessed instruction that caused an error + (previously only displayed by Windows GUI interface). -[-] Corrected the optimization of segment prefixes when the extended syntax - of some string instructions ("cmps", "lods", "movs" and "outs") is - used in long mode. Now it is consistent with optimizations done with - all the other instructions. +[+] Brought back the "-d" switch for command line. +[-] Removed dependence on size context for expression operators like NOT and XOR. -version 1.70.01 (Apr 30, 2012) +[+] Added "bsf" and "bsr" operators to numerical expressions. -[-] Corrected a recently introduced bug that caused some illegal - address expressions to cause an error prematurely during the - parsing stage. +[+] Allowed underscore character to be put inside a number value. + +[+] Allowed octal numbers ending with "q". + +[-] Removed the restriction that disallowed numerical constant to + forward-reference its own value. version 1.70 (Apr 17, 2012)