+ added nil pointer assignment test at the end of program for i8086-msdos

(works only for small and medium memory model)

git-svn-id: trunk@26888 -
This commit is contained in:
nickysn 2014-02-26 19:28:57 +00:00
parent 47b4a52c8f
commit 90c04fef80
2 changed files with 27 additions and 0 deletions

View File

@ -361,6 +361,29 @@ int_number:
ret 4
%endif
global FPC_CHECK_NULLAREA
FPC_CHECK_NULLAREA:
%ifdef __TINY__
; tiny model has no nil pointer assignment checking; always return true.
mov al, 1
%else
push ds
pop es
xor di, di
mov cx, 32
mov al, 1
cld
repe scasb
je .skip
dec ax ; 1 byte shorter than dec al
.skip:
%endif
%ifdef __FAR_CODE__
retf
%else
ret
%endif
segment data
mem_realloc_err_msg:
db 'Memory allocation error', 13, 10, '$'

View File

@ -116,6 +116,8 @@ procedure MsDos_Carry(var Regs: Registers); external name 'FPC_MSDOS_CARRY';
procedure InstallInterruptHandlers; external name 'FPC_INSTALL_INTERRUPT_HANDLERS';
procedure RestoreInterruptHandlers; external name 'FPC_RESTORE_INTERRUPT_HANDLERS';
function CheckNullArea: Boolean; external name 'FPC_CHECK_NULLAREA';
{$I system.inc}
{$I tinyheap.inc}
@ -279,6 +281,8 @@ begin
if h>=5 then
do_close(h);
end;
if not CheckNullArea then
writeln(stderr, 'Nil pointer assignment');
asm
mov al, byte [exitcode]
mov ah, 4Ch