fasm: 1.71.16

git-svn-id: svn://kolibrios.org@4478 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Ivan Baravy 2014-01-18 17:28:37 +00:00
parent b2e030871f
commit 69834ba166
13 changed files with 9528 additions and 9330 deletions

View File

@ -3707,6 +3707,7 @@ format_elf_exe:
add eax,edi add eax,edi
adc ebp,0 adc ebp,0
adc cl,0 adc cl,0
mov edx,ebp
elf_exe_addressing_setup: elf_exe_addressing_setup:
push eax push eax
call init_addressing_space call init_addressing_space
@ -3938,6 +3939,7 @@ elf_segment:
add eax,edi add eax,edi
sub eax,edx sub eax,edx
mov [ebx+10h],eax mov [ebx+10h],eax
and [undefined_data_end],0
mov eax,[ebx+8] mov eax,[ebx+8]
cmp byte [ebx],1 cmp byte [ebx],1
jne elf_segment_position_ok jne elf_segment_position_ok
@ -4067,6 +4069,7 @@ elf_segment:
add eax,edi add eax,edi
sub eax,edx sub eax,edx
mov [ebx+20h],eax mov [ebx+20h],eax
and [undefined_data_end],0
mov eax,[ebx+10h] mov eax,[ebx+10h]
mov edx,[ebx+10h+4] mov edx,[ebx+10h+4]
cmp byte [ebx],1 cmp byte [ebx],1

View File

@ -1,6 +1,6 @@
flat assembler version 1.70 flat assembler version 1.71
Copyright (c) 1999-2012, Tomasz Grysztar. Copyright (c) 1999-2013, Tomasz Grysztar.
All rights reserved. All rights reserved.
This program is free for commercial and non-commercial use as long as This program is free for commercial and non-commercial use as long as

View File

@ -48,12 +48,45 @@ preprocessor:
jc main_file_not_found jc main_file_not_found
mov edi,[memory_start] mov edi,[memory_start]
call preprocess_file call preprocess_file
cmp [macro_status],0
je process_postponed
mov eax,[error_line] mov eax,[error_line]
mov [current_line],eax mov [current_line],eax
cmp [macro_status],0 jmp incomplete_macro
jne incomplete_macro process_postponed:
mov edx,hash_tree
mov ecx,32
find_postponed_list:
mov edx,[edx]
or edx,edx
loopnz find_postponed_list
jz preprocessing_finished
process_postponed_list:
mov eax,[edx]
or eax,eax
jz preprocessing_finished
push edx
mov ebx,edx
find_earliest_postponed:
mov eax,[edx]
or eax,eax
jz earliest_postponed_found
mov ebx,edx
mov edx,eax
jmp find_earliest_postponed
earliest_postponed_found:
mov [ebx],eax
call use_postponed_macro
pop edx
jmp process_postponed_list
preprocessing_finished:
mov [source_start],edi mov [source_start],edi
ret ret
use_postponed_macro:
lea esi,[edi-1]
push ecx esi
mov [struc_name],0
jmp use_macro
preprocess_file: preprocess_file:
push [memory_end] push [memory_end]
@ -691,6 +724,9 @@ get_preprocessor_symbol:
ret ret
add_preprocessor_symbol: add_preprocessor_symbol:
push edi esi push edi esi
xor eax,eax
or cl,cl
jz reshape_hash
cmp ch,11b cmp ch,11b
je preprocessor_symbol_name_ok je preprocessor_symbol_name_ok
push ecx push ecx
@ -701,6 +737,7 @@ add_preprocessor_symbol:
pop ecx pop ecx
preprocessor_symbol_name_ok: preprocessor_symbol_name_ok:
call calculate_hash call calculate_hash
reshape_hash:
mov ebp,eax mov ebp,eax
and ebp,3FFh and ebp,3FFh
shr eax,10 shr eax,10
@ -1013,6 +1050,27 @@ define_macro:
lods dword [esi] lods dword [esi]
add esi,eax add esi,eax
jmp skip_macro_block jmp skip_macro_block
postpone_directive:
push esi
mov esi,edx
xor ecx,ecx
call add_preprocessor_symbol
mov eax,[current_line]
mov [edx+12],eax
pop esi
mov [edx+8],esi
mov al,[macro_status]
and al,0F0h
or al,1
mov [macro_status],al
mov eax,[current_line]
mov [error_line],eax
lods byte [esi]
or al,al
jz line_preprocessed
cmp al,'{'
jne unexpected_characters
jmp found_macro_block
rept_directive: rept_directive:
mov [base_code],0 mov [base_code],0
jmp define_instant_macro jmp define_instant_macro
@ -1987,8 +2045,21 @@ process_macro:
stos dword [edi] stos dword [edi]
jmp macro_line_header_ok jmp macro_line_header_ok
instant_macro_line_header: instant_macro_line_header:
mov eax,[macro_line] mov eax,[esp]
add eax,16+1 add eax,16
find_defining_directive:
inc eax
cmp byte [eax-1],3Bh
je defining_directive_ok
cmp byte [eax-1],1Ah
jne find_defining_directive
push eax
movzx eax,byte [eax]
inc eax
add [esp],eax
pop eax
jmp find_defining_directive
defining_directive_ok:
stos dword [edi] stos dword [edi]
mov eax,ecx mov eax,ecx
stos dword [edi] stos dword [edi]

View File

@ -21,6 +21,8 @@ preprocessor_directives:
dw define_macro-directive_handler dw define_macro-directive_handler
db 5,'match' db 5,'match'
dw match_directive-directive_handler dw match_directive-directive_handler
db 8,'postpone'
dw postpone_directive-directive_handler
db 5,'purge' db 5,'purge'
dw purge_macro-directive_handler dw purge_macro-directive_handler
db 4,'rept' db 4,'rept'

View File

@ -33,7 +33,7 @@
; cannot simply be copied and put under another distribution licence ; cannot simply be copied and put under another distribution licence
; (including the GNU Public Licence). ; (including the GNU Public Licence).
VERSION_STRING equ "1.71.13" VERSION_STRING equ "1.71.16"
VERSION_MAJOR = 1 VERSION_MAJOR = 1
VERSION_MINOR = 71 VERSION_MINOR = 71

View File

@ -2,6 +2,128 @@
Visit http://flatassembler.net/ for more information. Visit http://flatassembler.net/ for more information.
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 ability to define a special kind of label identifying the
addressing space. This label can the be used with "load" or "store"
directives to allow operations on bytes in any addressing space,
not just the current one. This special label is defined by following
its name with double colon, and can only be used with "load" and
"store" directive, where address can now be specified in two parts,
first the adressing space label, then the colon and then the
address inside that addressing space.
version 1.70.03 (Jun 29, 2012) version 1.70.03 (Jun 29, 2012)
[-] Allowed to freely upgrade or downgrade the relocatable addresses in [-] Allowed to freely upgrade or downgrade the relocatable addresses in