Subversion Repositories Kolibri OS

Rev

Rev 692 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 692 Rev 992
Line 891... Line 891...
891
	mov	[edi+12],al
891
	mov	[edi+12],al
892
      expression_value_ok:
892
      expression_value_ok:
893
	ret
893
	ret
894
      get_byte_number:
894
      get_byte_number:
895
	mov	word [edi+8],0
895
	xor	eax,eax
896
	mov	byte [edi+12],0
-
 
897
	xor	eax,eax
-
 
898
	lods	byte [esi]
896
	lods	byte [esi]
899
	stos	dword [edi]
897
	stos	dword [edi]
900
	xor	al,al
898
	xor	al,al
901
	stos	dword [edi]
899
	stos	dword [edi]
902
	add	edi,0Ch
900
      got_number:
-
 
901
	mov	word [edi-8+8],0
-
 
902
	mov	byte [edi-8+12],0
-
 
903
	mov	dword [edi-8+16],0
-
 
904
	add	edi,0Ch
903
	jmp	calculation_loop
905
	jmp	calculation_loop
904
      get_word_number:
906
      get_word_number:
905
	mov	word [edi+8],0
907
	xor	eax,eax
906
	mov	byte [edi+12],0
-
 
907
	xor	eax,eax
-
 
908
	lods	word [esi]
908
	lods	word [esi]
909
	stos	dword [edi]
909
	stos	dword [edi]
910
	xor	ax,ax
910
	xor	ax,ax
911
	stos	dword [edi]
911
	stos	dword [edi]
912
	add	edi,0Ch
912
	jmp	got_number
913
	jmp	calculation_loop
-
 
914
      get_dword_number:
913
      get_dword_number:
915
	mov	word [edi+8],0
914
	movs	dword [edi],[esi]
916
	mov	byte [edi+12],0
-
 
917
	movs	dword [edi],[esi]
-
 
918
	xor	eax,eax
915
	xor	eax,eax
919
	stos	dword [edi]
916
	stos	dword [edi]
920
	add	edi,0Ch
917
	jmp	got_number
921
	jmp	calculation_loop
-
 
922
      get_qword_number:
918
      get_qword_number:
923
	mov	word [edi+8],0
919
	movs	dword [edi],[esi]
924
	mov	byte [edi+12],0
-
 
925
	movs	dword [edi],[esi]
-
 
926
	movs	dword [edi],[esi]
920
	movs	dword [edi],[esi]
927
	add	edi,0Ch
921
	jmp	got_number
928
	jmp	calculation_loop
-
 
929
      get_register:
922
      get_register:
930
	mov	byte [edi+9],0
923
	mov	byte [edi+9],0
931
	mov	byte [edi+12],0
924
	mov	byte [edi+12],0
932
	lods	byte [esi]
925
	lods	byte [esi]
933
	mov	[edi+8],al
926
	mov	[edi+8],al
934
	mov	byte [edi+10],1
927
	mov	byte [edi+10],1
935
	xor	eax,eax
928
	xor	eax,eax
936
	stos	dword [edi]
929
	mov	[edi+16],eax
-
 
930
	stos	dword [edi]
937
	stos	dword [edi]
931
	stos	dword [edi]
938
	add	edi,0Ch
932
	add	edi,0Ch
939
	jmp	calculation_loop
933
	jmp	calculation_loop
940
      get_label:
934
      get_label:
941
	xor	eax,eax
935
	xor	eax,eax
Line 1523... Line 1517...
1523
	cmp	word [edi+8],0
1517
	cmp	word [edi+8],0
1524
	jne	invalid_expression
1518
	jne	invalid_expression
1525
	cmp	[output_format],5
1519
	cmp	[output_format],5
1526
	je	calculate_gotoff
1520
	je	calculate_gotoff
1527
	cmp	[output_format],3
1521
	cmp	[output_format],4
-
 
1522
	je	calculate_coff_rva
-
 
1523
	cmp	[output_format],3
1528
	jne	invalid_expression
1524
	jne	invalid_expression
1529
	test	[format_flags],8
1525
	test	[format_flags],8
1530
	jnz	pe64_rva
1526
	jnz	pe64_rva
1531
	mov	al,2
1527
	mov	al,2
1532
	bt	[resolver_flags],0
1528
	bt	[resolver_flags],0
Line 1573... Line 1569...
1573
	jmp	calculation_loop
1569
	jmp	calculation_loop
1574
      calculate_gotoff:
1570
      calculate_gotoff:
1575
	test	[format_flags],8+1
1571
	test	[format_flags],8+1
1576
	jnz	invalid_expression
1572
	jnz	invalid_expression
1577
	mov	dl,5
1573
      calculate_coff_rva:
-
 
1574
	mov	dl,5
1578
	cmp	byte [edi+12],2
1575
	cmp	byte [edi+12],2
1579
	je	change_value_type
1576
	je	change_value_type
1580
      incorrect_change_of_value_type:
1577
      incorrect_change_of_value_type:
1581
	cmp	[error_line],0
1578
	cmp	[error_line],0
1582
	jne	change_value_type
1579
	jne	change_value_type
Line 1605... Line 1602...
1605
	jnz	incorrect_change_of_value_type
1602
	jnz	incorrect_change_of_value_type
1606
	cmp	byte [edi+12],dh
1603
	cmp	byte [edi+12],dh
1607
	jne	incorrect_change_of_value_type
1604
	jne	incorrect_change_of_value_type
1608
	mov	eax,[edi+16]
1605
	mov	eax,[edi+16]
1609
	cmp	byte [eax],81h
1606
	cmp	byte [eax],80h
1610
	jne	incorrect_change_of_value_type
1607
	jne	incorrect_change_of_value_type
1611
	jmp	change_value_type
1608
	jmp	change_value_type
1612
      div_64:
1609
      div_64:
1613
	xor	ebx,ebx
1610
	xor	ebx,ebx
1614
	cmp	dword [edi],0
1611
	cmp	dword [edi],0
1615
	jne	divider_ok
1612
	jne	divider_ok
Line 2007... Line 2004...
2007
	mov	[address_symbol],eax
2004
	mov	[address_symbol],eax
2008
	mov	al,[edi+12]
2005
	mov	al,[edi+12]
2009
	mov	[value_type],al
2006
	mov	[value_type],al
2010
	cmp	al,6
2007
	cmp	al,6
2011
	je	plt_address
2008
	je	special_address_type_32bit
2012
	cmp	al,5
2009
	cmp	al,5
2013
	je	gotoff_address
2010
	je	special_address_type_32bit
2014
	ja	invalid_use_of_symbol
2011
	ja	invalid_use_of_symbol
2015
	test	al,1
2012
	test	al,1
2016
	jnz	invalid_use_of_symbol
2013
	jnz	invalid_use_of_symbol
2017
	or	al,al
2014
	or	al,al
2018
	jz	address_size_ok
2015
	jz	address_size_ok
2019
	shl	al,5
2016
	shl	al,5
2020
	jmp	address_symbol_ok
2017
	jmp	address_symbol_ok
2021
      gotoff_address:
2018
      special_address_type_32bit:
2022
      plt_address:
-
 
2023
	mov	al,40h
2019
	mov	al,40h
2024
      address_symbol_ok:
2020
      address_symbol_ok:
2025
	mov	ah,[address_size]
2021
	mov	ah,[address_size]
2026
	or	[address_size],al
2022
	or	[address_size],al
2027
	shr	al,4
2023
	shr	al,4
2028
	or	ah,ah
2024
	or	ah,ah
Line 2030... Line 2026...
2030
	cmp	al,ah
2026
	cmp	al,ah
2031
	je	address_size_ok
2027
	je	address_size_ok
2032
	cmp	ax,0804h
2028
	cmp	ax,0804h
2033
	jne	address_sizes_do_not_agree
2029
	jne	address_sizes_do_not_agree
2034
	mov	[value_type],2
2030
	cmp	[value_type],2
-
 
2031
	ja	value_type_correction_ok
-
 
2032
	mov	[value_type],2
2035
	mov	eax,[edi]
2033
      value_type_correction_ok:
-
 
2034
	mov	eax,[edi]
2036
	cdq
2035
	cdq
2037
	cmp	edx,[edi+4]
2036
	cmp	edx,[edi+4]
2038
	je	address_size_ok
2037
	je	address_size_ok
2039
	cmp	[error_line],0
2038
	cmp	[error_line],0
2040
	jne	address_size_ok
2039
	jne	address_size_ok
Line 2178... Line 2177...
2178
	or	bl,bl
2177
	or	bl,bl
2179
	je	relative_offset_ok
2178
	je	relative_offset_ok
2180
	test	bl,1
2179
	test	bl,1
2181
	jnz	invalid_use_of_symbol
2180
	jnz	invalid_use_of_symbol
2182
	cmp	bl,6
2181
	mov	ecx,[address_symbol]
-
 
2182
	mov	[symbol_identifier],ecx
-
 
2183
	cmp	bl,6
2183
	je	plt_relative_offset
2184
	je	plt_relative_offset
2184
	cmp	bl,[labels_type]
2185
	cmp	bl,[labels_type]
2185
	jne	invalid_use_of_symbol
2186
	jne	invalid_use_of_symbol
2186
	mov	[value_type],0
2187
	mov	[value_type],0
2187
	mov	ecx,[address_symbol]
2188
	cmp	ecx,[org_symbol]
2188
	mov	[symbol_identifier],ecx
-
 
2189
	cmp	ecx,[org_symbol]
-
 
2190
	je	relative_offset_ok
2189
	je	relative_offset_ok
2191
	mov	[value_type],3
2190
	mov	[value_type],3
2192
      relative_offset_ok:
2191
      relative_offset_ok:
2193
	ret
2192
	ret
2194
      plt_relative_offset:
2193
      plt_relative_offset: