Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 691 → Rev 692

/programs/develop/fasm/trunk/SYMBDUMP.INC
File deleted
/programs/develop/fasm/trunk/errors.inc
4,128 → 4,168
; All rights reserved.
 
out_of_memory:
call fatal_error
db 'out of memory',0
push _out_of_memory
jmp fatal_error
stack_overflow:
call fatal_error
db 'out of stack space',0
push _stack_overflow
jmp fatal_error
main_file_not_found:
call fatal_error
db 'source file not found',0
push _main_file_not_found
jmp fatal_error
unexpected_end_of_file:
call fatal_error
db 'unexpected end of file',0
push _unexpected_end_of_file
jmp fatal_error
code_cannot_be_generated:
call fatal_error
db 'code cannot be generated',0
push _code_cannot_be_generated
jmp fatal_error
format_limitations_exceeded:
call fatal_error
db 'format limitations exceeded',0
push _format_limitations_exceeded
jmp fatal_error
invalid_definition:
push _invalid_definition
jmp fatal_error
write_failed:
call fatal_error
db 'write failed',0
push _write_failed
jmp fatal_error
 
file_not_found:
call assembler_error
db 'file not found',0
push _file_not_found
jmp assembler_error
error_reading_file:
call assembler_error
db 'error reading file',0
push _error_reading_file
jmp assembler_error
invalid_file_format:
call assembler_error
db 'invalid file format',0
push _invalid_file_format
jmp assembler_error
invalid_macro_arguments:
call assembler_error
db 'invalid macro arguments',0
push _invalid_macro_arguments
jmp assembler_error
incomplete_macro:
call assembler_error
db 'incomplete macro',0
push _incomplete_macro
jmp assembler_error
unexpected_characters:
call assembler_error
db 'unexpected characters',0
push _unexpected_characters
jmp assembler_error
invalid_argument:
call assembler_error
db 'invalid argument',0
push _invalid_argument
jmp assembler_error
illegal_instruction:
call assembler_error
db 'illegal instruction',0
push _illegal_instruction
jmp assembler_error
invalid_operand:
call assembler_error
db 'invalid operand',0
push _invalid_operand
jmp assembler_error
invalid_operand_size:
call assembler_error
db 'invalid size of operand',0
push _invalid_operand_size
jmp assembler_error
operand_size_not_specified:
call assembler_error
db 'operand size not specified',0
push _operand_size_not_specified
jmp assembler_error
operand_sizes_do_not_match:
call assembler_error
db 'operand sizes do not match',0
push _operand_sizes_do_not_match
jmp assembler_error
invalid_address_size:
call assembler_error
db 'invalid size of address value',0
push _invalid_address_size
jmp assembler_error
address_sizes_do_not_agree:
call assembler_error
db 'address sizes do not agree',0
push _address_sizes_do_not_agree
jmp assembler_error
prefix_conflict:
call assembler_error
db 'disallowed combination of registers',0
push _prefix_conflict
jmp assembler_error
long_immediate_not_encodable:
call assembler_error
db 'not encodable with long immediate',0
push _long_immediate_not_encodable
jmp assembler_error
relative_jump_out_of_range:
call assembler_error
db 'relative jump out of range',0
push _relative_jump_out_of_range
jmp assembler_error
invalid_expression:
call assembler_error
db 'invalid expression',0
push _invalid_expression
jmp assembler_error
invalid_address:
call assembler_error
db 'invalid address',0
push _invalid_address
jmp assembler_error
invalid_value:
call assembler_error
db 'invalid value',0
push _invalid_value
jmp assembler_error
value_out_of_range:
call assembler_error
db 'value out of range',0
push _value_out_of_range
jmp assembler_error
undefined_symbol:
call assembler_error
db 'undefined symbol',0
mov edi,message
mov esi,_undefined_symbol
call copy_asciiz
push message
cmp [error_info],0
je assembler_error
mov byte [edi-1],20h
call write_quoted_symbol_name
jmp assembler_error
copy_asciiz:
lods byte [esi]
stos byte [edi]
test al,al
jnz copy_asciiz
ret
write_quoted_symbol_name:
mov al,27h
stosb
mov esi,[error_info]
movzx ecx,byte [esi-1]
rep movs byte [edi],[esi]
mov ax,27h
stosw
ret
symbol_out_of_scope:
mov edi,message
mov esi,_symbol_out_of_scope_1
call copy_asciiz
cmp [error_info],0
je finish_symbol_out_of_scope_message
mov byte [edi-1],20h
call write_quoted_symbol_name
finish_symbol_out_of_scope_message:
mov byte [edi-1],20h
mov esi,_symbol_out_of_scope_2
call copy_asciiz
push message
jmp assembler_error
invalid_use_of_symbol:
call assembler_error
db 'invalid use of symbol',0
push _invalid_use_of_symbol
jmp assembler_error
name_too_long:
call assembler_error
db 'name too long',0
push _name_too_long
jmp assembler_error
invalid_name:
call assembler_error
db 'invalid name',0
push _invalid_name
jmp assembler_error
reserved_word_used_as_symbol:
call assembler_error
db 'reserved word used as symbol',0
push _reserved_word_used_as_symbol
jmp assembler_error
symbol_already_defined:
call assembler_error
db 'symbol already defined',0
push _symbol_already_defined
jmp assembler_error
missing_end_quote:
call assembler_error
db 'missing end quote',0
push _missing_end_quote
jmp assembler_error
missing_end_directive:
call assembler_error
db 'missing end directive',0
push _missing_end_directive
jmp assembler_error
unexpected_instruction:
call assembler_error
db 'unexpected instruction',0
push _unexpected_instruction
jmp assembler_error
extra_characters_on_line:
call assembler_error
db 'extra characters on line',0
push _extra_characters_on_line
jmp assembler_error
section_not_aligned_enough:
call assembler_error
db 'section is not aligned enough',0
push _section_not_aligned_enough
jmp assembler_error
setting_already_specified:
call assembler_error
db 'setting already specified',0
push _setting_already_specified
jmp assembler_error
data_already_defined:
call assembler_error
db 'data already defined',0
push _data_already_defined
jmp assembler_error
too_many_repeats:
call assembler_error
db 'too many repeats',0
push _too_many_repeats
jmp assembler_error
/programs/develop/fasm/trunk/expressi.inc
956,7 → 956,7
cmp ax,[ebx+16]
je label_defined
test byte [ebx+8],4
jnz label_undefined
jnz label_out_of_scope
test byte [ebx+9],1
jz label_defined
mov eax,[ebx]
1053,7 → 1053,22
je timestamp_label
cmp eax,3
je org_origin_label
mov edx,invalid_value
jmp error_undefined
label_out_of_scope:
mov edx,symbol_out_of_scope
mov eax,[ebx+24]
cmp [error_line],0
jne error_undefined
mov [error_info],eax
jmp error_undefined
label_undefined:
mov edx,undefined_symbol
cmp [error_line],0
jne error_undefined
mov eax,[ebx+24]
mov [error_info],eax
error_undefined:
cmp [current_pass],1
ja undefined_value
force_next_pass:
1069,7 → 1084,7
jne calculation_loop
mov eax,[current_line]
mov [error_line],eax
mov [error],undefined_symbol
mov [error],edx
jmp calculation_loop
calculate_add:
mov ecx,[ebx+16]
/programs/develop/fasm/trunk/fasm.asm
544,6 → 544,7
include 'x86_64.inc'
include 'tables.inc'
include 'symbdump.inc'
include 'messages.inc'
 
title db appname,VERSION_STRING,0
 
586,6 → 587,8
memory_setting dd ?
start_time dd ?
 
predefinitions rb 1000h
 
dbgfilename rb MAX_PATH+4
 
sc system_colors
/programs/develop/fasm/trunk/formats.inc
2666,10 → 2666,10
mov [current_line],eax
mov eax,[esi+8]
test byte [eax+8],1
jz undefined_symbol
jz undefined_coff_public
mov cx,[current_pass]
cmp cx,[eax+16]
jne undefined_symbol
jne undefined_coff_public
mov cl,[eax+11]
or cl,cl
jz public_constant
2678,6 → 2678,10
cmp cl,2
je public_symbol_type_ok
jmp invalid_use_of_symbol
undefined_coff_public:
mov eax,[eax+24]
mov [error_info],eax
jmp undefined_symbol
check_64bit_public_symbol:
cmp cl,4
jne invalid_use_of_symbol
3092,10 → 3096,10
jne invalid_argument
mov ebx,[esi+8]
test byte [ebx+8],1
jz undefined_symbol
jz undefined_public
mov ax,[current_pass]
cmp ax,[ebx+16]
jne undefined_symbol
jne undefined_public
mov dl,[ebx+11]
or dl,dl
jz public_absolute
3109,6 → 3113,10
jne invalid_use_of_symbol
mov dx,[eax+0Eh]
jmp section_for_public_ok
undefined_public:
mov eax,[ebx+24]
mov [error_info],eax
jmp undefined_symbol
elf64_public:
cmp dl,4
jne invalid_use_of_symbol
/programs/develop/fasm/trunk/messages.inc
0,0 → 1,51
 
; flat assembler core
; Copyright (c) 1999-2007, Tomasz Grysztar.
; All rights reserved.
 
_out_of_memory db 'out of memory',0
_stack_overflow db 'out of stack space',0
_main_file_not_found db 'source file not found',0
_unexpected_end_of_file db 'unexpected end of file',0
_code_cannot_be_generated db 'code cannot be generated',0
_format_limitations_exceeded db 'format limitations exceeded',0
_invalid_definition db 'invalid definition provided',0
_write_failed db 'write failed',0
_file_not_found db 'file not found',0
_error_reading_file db 'error reading file',0
_invalid_file_format db 'invalid file format',0
_invalid_macro_arguments db 'invalid macro arguments',0
_incomplete_macro db 'incomplete macro',0
_unexpected_characters db 'unexpected characters',0
_invalid_argument db 'invalid argument',0
_illegal_instruction db 'illegal instruction',0
_invalid_operand db 'invalid operand',0
_invalid_operand_size db 'invalid size of operand',0
_operand_size_not_specified db 'operand size not specified',0
_operand_sizes_do_not_match db 'operand sizes do not match',0
_invalid_address_size db 'invalid size of address value',0
_address_sizes_do_not_agree db 'address sizes do not agree',0
_prefix_conflict db 'disallowed combination of registers',0
_long_immediate_not_encodable db 'not encodable with long immediate',0
_relative_jump_out_of_range db 'relative jump out of range',0
_invalid_expression db 'invalid expression',0
_invalid_address db 'invalid address',0
_invalid_value db 'invalid value',0
_value_out_of_range db 'value out of range',0
_undefined_symbol db 'undefined symbol',0
_symbol_out_of_scope_1 db 'symbol',0
_symbol_out_of_scope_2 db 'out of scope',0
_invalid_use_of_symbol db 'invalid use of symbol',0
_name_too_long db 'name too long',0
_invalid_name db 'invalid name',0
_reserved_word_used_as_symbol db 'reserved word used as symbol',0
_symbol_already_defined db 'symbol already defined',0
_missing_end_quote db 'missing end quote',0
_missing_end_directive db 'missing end directive',0
_unexpected_instruction db 'unexpected instruction',0
_extra_characters_on_line db 'extra characters on line',0
_section_not_aligned_enough db 'section is not aligned enough',0
_setting_already_specified db 'setting already specified',0
_data_already_defined db 'data already defined',0
_too_many_repeats db 'too many repeats',0
/programs/develop/fasm/trunk/preproce.inc
23,11 → 23,8
mov byte [edi+eax],0
loop mark_symbol_characters
mov edi,locals_counter
mov al,7
stos byte [edi]
movzx ecx,al
mov al,'0'
rep stos byte [edi]
mov ax,1 + '0' shl 8
stos word [edi]
mov edi,[memory_start]
mov [include_paths],edi
mov esi,include_variable
43,6 → 40,149
mov [display_buffer],eax
mov [hash_tree],eax
mov [macro_status],al
 
mov esi,predefinitions
process_predefinitions:
movzx ecx,byte [esi]
test ecx,ecx
jz predefinitions_ok
inc esi
lea eax,[esi+ecx]
push eax
mov ch,10b
call add_preprocessor_symbol
pop esi
mov edi,[memory_start]
mov [edx+8],edi
convert_predefinition:
cmp edi,[memory_end]
jae out_of_memory
lods byte [esi]
or al,al
jz predefinition_converted
cmp al,20h
je convert_predefinition
mov ah,al
mov ebx,characters
xlat byte [ebx]
or al,al
jz predefinition_separator
cmp ah,27h
je predefinition_string
cmp ah,22h
je predefinition_string
mov byte [edi],1Ah
scas word [edi]
xchg al,ah
stos byte [edi]
mov ebx,characters
xor ecx,ecx
predefinition_symbol:
lods byte [esi]
stos byte [edi]
xlat byte [ebx]
or al,al
loopnzd predefinition_symbol
neg ecx
cmp ecx,255
ja invalid_definition
mov ebx,edi
sub ebx,ecx
mov byte [ebx-2],cl
found_predefinition_separator:
dec edi
mov ah,[esi-1]
predefinition_separator:
xchg al,ah
or al,al
jz predefinition_converted
cmp al,20h
je convert_line_data
cmp al,3Bh
je invalid_definition
cmp al,5Ch
je predefinition_backslash
stos byte [edi]
jmp convert_predefinition
predefinition_string:
mov al,22h
stos byte [edi]
scas dword [edi]
mov ebx,edi
copy_predefinition_string:
lods byte [esi]
stos byte [edi]
or al,al
jz invalid_definition
cmp al,ah
jne copy_predefinition_string
lods byte [esi]
cmp al,ah
je copy_predefinition_string
dec esi
dec edi
mov eax,edi
sub eax,ebx
mov [ebx-4],eax
jmp convert_predefinition
predefinition_backslash:
mov byte [edi],0
lods byte [esi]
or al,al
jz invalid_definition
cmp al,20h
je invalid_definition
cmp al,3Bh
je invalid_definition
mov al,1Ah
stos byte [edi]
mov ecx,edi
mov ax,5C01h
stos word [edi]
dec esi
group_predefinition_backslashes:
lods byte [esi]
cmp al,5Ch
jne predefinition_backslashed_symbol
stos byte [edi]
inc byte [ecx]
jmp group_predefinition_backslashes
predefinition_backslashed_symbol:
cmp al,20h
je invalid_definition
cmp al,22h
je invalid_definition
cmp al,27h
je invalid_definition
cmp al,3Bh
je invalid_definition
mov ah,al
mov ebx,characters
xlat byte [ebx]
or al,al
jz predefinition_backslashed_symbol_character
mov al,ah
convert_predefinition_backslashed_symbol:
stos byte [edi]
xlat byte [ebx]
or al,al
jz found_predefinition_separator
inc byte [ecx]
jz invalid_definition
lods byte [esi]
jmp convert_predefinition_backslashed_symbol
predefinition_backslashed_symbol_character:
mov al,ah
stos byte [edi]
inc byte [ecx]
jmp convert_predefinition
predefinition_converted:
mov [memory_start],edi
sub edi,[edx+8]
mov [edx+12],edi
jmp process_predefinitions
predefinitions_ok:
 
mov esi,[input_file]
mov edx,esi
call open
2220,16 → 2360,25
movzx ecx,byte [eax]
counter_loop:
inc byte [eax+ecx]
cmp byte [eax+ecx],':'
cmp byte [eax+ecx],'9'+1
jb counter_ok
jne letter_digit
mov byte [eax+ecx],'A'
jmp counter_ok
letter_digit:
cmp byte [eax+ecx],'F'
jbe counter_ok
cmp byte [eax+ecx],'Z'+1
jb counter_ok
jne small_letter_digit
mov byte [eax+ecx],'a'
jmp counter_ok
small_letter_digit:
cmp byte [eax+ecx],'z'+1
jb counter_ok
mov byte [eax+ecx],'0'
loop counter_loop
inc byte [eax]
movzx ecx,byte [eax]
mov byte [eax+ecx],'0'
counter_ok:
pop ecx
lods byte [esi]
/programs/develop/fasm/trunk/symbdump.inc
0,0 → 1,110
symbol_dump:
 
push edi
mov edx,[memory_end]
dump_symbols:
cmp edx,[labels_list]
jbe symbols_dumped
sub edx,LABEL_STRUCTURE_SIZE
cmp dword [edx+24],0
je dump_symbols ; do not dump anonymous symbols
test byte [edx+8],1
jz dump_symbols ; do not dump symbols that didn't get defined
mov ax,[current_pass]
cmp ax,[edx+16]
jne dump_symbols
test byte [edx+8],4 or 2
jnz dump_symbols ; do not dump assembly-time variables
; do not dump variables defined with '='
cmp word [edx+12], 0
jnz dump_symbols ; do not dump register-based variables
 
mov al, '0'
stosb
mov al, 'x'
stosb
mov eax, [edx+4]
mov ecx, 8
@@:
rol eax, 4
test al, 0xF
loopz @b
jz .nohigh
inc ecx
@@:
push eax
and al, 0xF
cmp al, 10
sbb al, 69h
das
stosb
pop eax
rol eax, 4
loop @b
mov eax, [edx]
mov ecx, 8
jmp .low
.nohigh:
mov eax, [edx]
mov ecx, 8
@@:
rol eax, 4
test al, 0xF
loopz @b
inc ecx
.low:
push eax
and al, 0xF
cmp al, 10
sbb al, 69h
das
stosb
pop eax
rol eax, 4
loop .low
 
mov al, ' '
stosb
 
mov esi,[edx+24]
movzx ecx,byte [esi-1]
rep movsb
 
mov ax,0A0Dh
stosw
 
jmp dump_symbols
 
symbols_dumped:
mov edx,dbgfilename
push esi edi
mov esi, outfile
mov edi, edx
@@:
lodsb
stosb
test al, al
jnz @b
lea ecx, [edi-1]
@@:
dec edi
cmp edi, edx
jb @f
cmp byte [edi], '/'
jz @f
cmp byte [edi], '.'
jnz @b
mov ecx, edi
@@:
mov dword [ecx], '.dbg'
mov byte [ecx+4], 0
pop edi esi
call create
mov edx,[esp]
mov ecx,edi
sub ecx,edx
call write
call close
pop edi
 
ret
/programs/develop/fasm/trunk/variable.inc
57,6 → 57,7
undefined_data_end dd ?
counter dd ?
counter_limit dd ?
error_info dd ?
error_line dd ?
error dd ?
display_buffer dd ?
122,3 → 123,4
 
characters rb 100h
converted rb 100h
message rb 200h
/programs/develop/fasm/trunk/version.inc
33,7 → 33,7
; cannot simply be copied and put under another distribution licence
; (including the GNU Public Licence).
 
VERSION_STRING equ "1.67.23"
VERSION_STRING equ "1.67.25"
 
VERSION_MAJOR = 1
VERSION_MINOR = 67