mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 14:29:34 +02:00
+ Patch from Wiktor Sywula for watcom support
This commit is contained in:
parent
0dda0a07c5
commit
953269fcff
@ -169,21 +169,6 @@ implementation
|
||||
AsmWrite(symbol.name);
|
||||
first:=false;
|
||||
end;
|
||||
if (aktoutputformat = as_i386_wasm) then
|
||||
begin
|
||||
if offset<0 then
|
||||
begin
|
||||
AsmWrite(tostr(offset));
|
||||
first:=false;
|
||||
end
|
||||
else if (offset>0) then
|
||||
begin
|
||||
if not first then
|
||||
AsmWrite('+');
|
||||
AsmWrite(tostr(offset));
|
||||
first:=false;
|
||||
end;
|
||||
end;
|
||||
if (base<>NR_NO) then
|
||||
begin
|
||||
if not(first) then
|
||||
@ -202,8 +187,6 @@ implementation
|
||||
if scalefactor<>0 then
|
||||
AsmWrite('*'+tostr(scalefactor));
|
||||
end;
|
||||
if (aktoutputformat <> as_i386_wasm) then
|
||||
begin
|
||||
if offset<0 then
|
||||
begin
|
||||
AsmWrite(tostr(offset));
|
||||
@ -214,7 +197,6 @@ implementation
|
||||
AsmWrite('+'+tostr(offset));
|
||||
first:=false;
|
||||
end;
|
||||
end;
|
||||
if first then
|
||||
AsmWrite('0');
|
||||
AsmWrite(']');
|
||||
@ -617,7 +599,6 @@ implementation
|
||||
word prefix to get selectors
|
||||
to be pushed in 2 bytes PM }
|
||||
if (taicpu(hp).opsize=S_W) and
|
||||
(
|
||||
(
|
||||
(
|
||||
(taicpu(hp).opcode=A_PUSH) or
|
||||
@ -625,12 +606,7 @@ implementation
|
||||
) and
|
||||
(taicpu(hp).oper[0].typ=top_reg) and
|
||||
is_segment_reg(taicpu(hp).oper[0].reg)
|
||||
) or
|
||||
(
|
||||
(taicpu(hp).opcode=A_PUSH) and
|
||||
(taicpu(hp).oper[0].typ=top_const)
|
||||
)
|
||||
) then
|
||||
) then
|
||||
AsmWriteln(#9#9'DB'#9'066h');
|
||||
|
||||
{ added prefix instructions, must be on same line as opcode }
|
||||
@ -661,7 +637,16 @@ implementation
|
||||
end
|
||||
else
|
||||
prefix:= '';
|
||||
AsmWrite(#9#9+prefix+std_op2str[taicpu(hp).opcode]+cond2str[taicpu(hp).condition]+suffix);
|
||||
if (aktoutputformat = as_i386_wasm) and
|
||||
(taicpu(hp).opsize=S_W) and
|
||||
(taicpu(hp).opcode=A_PUSH) and
|
||||
(taicpu(hp).oper[0].typ=top_const) then
|
||||
begin
|
||||
AsmWriteln(#9#9'DB 66h,68h ; pushw imm16');
|
||||
AsmWrite(#9#9'DW');
|
||||
end
|
||||
else
|
||||
AsmWrite(#9#9+prefix+std_op2str[taicpu(hp).opcode]+cond2str[taicpu(hp).condition]+suffix);
|
||||
if taicpu(hp).ops<>0 then
|
||||
begin
|
||||
if is_calljmp(taicpu(hp).opcode) then
|
||||
@ -890,7 +875,10 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.39 2003-09-23 17:56:06 peter
|
||||
Revision 1.40 2003-09-30 08:39:50 michael
|
||||
+ Patch from Wiktor Sywula for watcom support
|
||||
|
||||
Revision 1.39 2003/09/23 17:56:06 peter
|
||||
* locals and paras are allocated in the code generation
|
||||
* tvarsym.localloc contains the location of para/local when
|
||||
generating code for the current procedure
|
||||
|
@ -359,6 +359,8 @@ implementation
|
||||
;
|
||||
system_powerpc_macos:
|
||||
;
|
||||
system_i386_watcom:
|
||||
;
|
||||
system_alpha_linux:
|
||||
;
|
||||
system_m68k_Mac:
|
||||
@ -1441,7 +1443,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.126 2003-09-23 18:03:08 peter
|
||||
Revision 1.127 2003-09-30 08:39:50 michael
|
||||
+ Patch from Wiktor Sywula for watcom support
|
||||
|
||||
Revision 1.126 2003/09/23 18:03:08 peter
|
||||
* add missing release of main_proc
|
||||
|
||||
Revision 1.125 2003/09/23 17:56:05 peter
|
||||
|
@ -2,7 +2,7 @@
|
||||
$Id$
|
||||
Copyright (c) 1998-2002 by Peter Vreman
|
||||
|
||||
This unit implements support information structures for go32v2
|
||||
This unit implements support information structures for Watcom
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -19,7 +19,7 @@
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
****************************************************************************
|
||||
}
|
||||
{ This unit implements support information structures for go32v2. }
|
||||
{ This unit implements support information structures for Watcom. }
|
||||
unit i_watcom;
|
||||
|
||||
{$i fpcdefs.inc}
|
||||
@ -63,7 +63,7 @@ unit i_watcom;
|
||||
newline : #13#10;
|
||||
dirsep : '\';
|
||||
files_case_relevent : false;
|
||||
assem : as_i386_coff;
|
||||
assem : as_i386_wasm;
|
||||
assemextern : as_gas;
|
||||
link : nil;
|
||||
linkextern : nil;
|
||||
@ -105,6 +105,9 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2003-09-06 10:01:11 florian
|
||||
Revision 1.2 2003-09-30 08:39:50 michael
|
||||
+ Patch from Wiktor Sywula for watcom support
|
||||
|
||||
Revision 1.1 2003/09/06 10:01:11 florian
|
||||
+ added *_watcom units
|
||||
}
|
||||
|
@ -25,30 +25,29 @@ unit t_watcom;
|
||||
|
||||
{$i fpcdefs.inc}
|
||||
|
||||
interface
|
||||
interface
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
link,
|
||||
cclasses,cutils,strings,globtype,globals,
|
||||
systems,verbose,script,fmodule,i_watcom;
|
||||
|
||||
uses
|
||||
link;
|
||||
|
||||
type
|
||||
plinkerwatcom=^tlinkerwatcom;
|
||||
tlinkerwatcom=class(texternallinker)
|
||||
private
|
||||
Function WriteResponseFile(isdll:boolean) : Boolean;
|
||||
public
|
||||
constructor create;override;
|
||||
procedure SetDefaultInfo;virtual;
|
||||
function MakeExecutable:boolean;virtual;
|
||||
{ function MakeSharedLibrary:boolean;virtual;}
|
||||
constructor Create;override;
|
||||
procedure SetDefaultInfo;override;
|
||||
function MakeExecutable:boolean;override;
|
||||
{ function MakeSharedLibrary:boolean;override;}
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
cclasses,cutils,strings,globtype,globals,systems,verbose,script,fmodule,i_watcom;
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
TLinkerWatcom
|
||||
****************************************************************************}
|
||||
@ -64,7 +63,7 @@ end;
|
||||
procedure TLinkerWatcom.SetDefaultInfo;
|
||||
begin
|
||||
with Info do
|
||||
ExeCmd[1]:='wlink system causeway option quiet $OPT $STRIP name $EXE @$RES';
|
||||
ExeCmd[1]:='wlink system causeway option quiet option nocaseexact $OPT $STRIP name $EXE @$RES';
|
||||
end;
|
||||
|
||||
Function TLinkerWatcom.WriteResponseFile(isdll:boolean) : Boolean;
|
||||
@ -79,12 +78,21 @@ begin
|
||||
{ Open link.res file }
|
||||
LinkRes:=TLinkRes.Create(outputexedir+Info.ResName);
|
||||
|
||||
{ Write object files, start with prt0 }
|
||||
LinkRes.Add('file '+GetShortName(FindObjectFile('prt0','',false)));
|
||||
if not ObjectFiles.Empty then
|
||||
While not ObjectFiles.Empty do
|
||||
begin
|
||||
S:=ObjectFiles.GetFirst;
|
||||
LinkRes.AddFileName('file '+GetShortName(s));
|
||||
end;
|
||||
|
||||
{ Write staticlibraries }
|
||||
if not StaticLibFiles.Empty then
|
||||
While not StaticLibFiles.Empty do
|
||||
begin
|
||||
S:=StaticLibFiles.GetFirst;
|
||||
LinkRes.AddFileName('file '+GetShortName(s))
|
||||
LinkRes.AddFileName('file '+GetShortName(s));
|
||||
end;
|
||||
|
||||
(*
|
||||
@ -143,12 +151,9 @@ begin
|
||||
|
||||
{ Call linker }
|
||||
SplitBinCmd(Info.ExeCmd[1],binstr,cmdstr);
|
||||
if pos(' ',current_module.exefilename^)>0 then
|
||||
Replace(cmdstr,'$EXE','"'+current_module.exefilename^+'"')
|
||||
else
|
||||
Replace(cmdstr,'$EXE',current_module.exefilename^);
|
||||
Replace(cmdstr,'$EXE',maybequoted(current_module.exefilename^));
|
||||
Replace(cmdstr,'$OPT',Info.ExtraOptions);
|
||||
Replace(cmdstr,'$RES',outputexedir+Info.ResName);
|
||||
Replace(cmdstr,'$RES',maybequoted(outputexedir+Info.ResName));
|
||||
Replace(cmdstr,'$STRIP',StripStr);
|
||||
success:=DoExec(FindUtil(BinStr),cmdstr,true,false);
|
||||
|
||||
@ -164,12 +169,19 @@ begin
|
||||
MakeSharedLibrary:=false;
|
||||
end;}
|
||||
|
||||
{*****************************************************************************
|
||||
Initialize
|
||||
*****************************************************************************}
|
||||
|
||||
initialization
|
||||
RegisterExternalLinker(system_i386_watcom_info,TLinkerWatcom);
|
||||
RegisterTarget(system_i386_watcom_info);
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2003-09-06 10:01:11 florian
|
||||
Revision 1.2 2003-09-30 08:39:50 michael
|
||||
+ Patch from Wiktor Sywula for watcom support
|
||||
|
||||
Revision 1.1 2003/09/06 10:01:11 florian
|
||||
+ added *_watcom units
|
||||
}
|
||||
|
@ -5,50 +5,57 @@
|
||||
.387
|
||||
.386p
|
||||
|
||||
name prt0
|
||||
assume nothing
|
||||
extrn PASCALMAIN : near
|
||||
public start
|
||||
public ___exit
|
||||
public ___sbrk
|
||||
name prt0
|
||||
assume nothing
|
||||
extrn PASCALMAIN : near
|
||||
extrn HEAPSIZE : dword
|
||||
public start
|
||||
public ___exit
|
||||
public ___sbrk
|
||||
public HEAP
|
||||
|
||||
.STACK 1000h
|
||||
.CODE
|
||||
|
||||
start proc near
|
||||
jmp short main
|
||||
db "WATCOM"
|
||||
main:
|
||||
push ds
|
||||
pop es
|
||||
push ds
|
||||
pop fs
|
||||
call PASCALMAIN
|
||||
mov ah,4Ch
|
||||
int 21h
|
||||
jmp short main
|
||||
db "WATCOM"
|
||||
main:
|
||||
push ds
|
||||
pop es
|
||||
push ds
|
||||
pop fs
|
||||
mov eax,HEAPSIZE
|
||||
push eax
|
||||
call ___sbrk
|
||||
mov HEAP,eax
|
||||
pop eax
|
||||
call PASCALMAIN
|
||||
start endp
|
||||
|
||||
___exit proc near
|
||||
pop eax
|
||||
mov ah,4Ch
|
||||
int 21h
|
||||
pop eax
|
||||
mov ah,4Ch
|
||||
int 21h
|
||||
___exit endp
|
||||
|
||||
___sbrk proc near
|
||||
mov ebx,dword ptr [esp+4] ; size
|
||||
mov cx,bx
|
||||
shr ebx,16
|
||||
mov ax,501h
|
||||
int 31h
|
||||
jnc sbrk_ok
|
||||
sbrk_failed:
|
||||
xor eax,eax
|
||||
ret
|
||||
sbrk_ok:
|
||||
shl ebx,16
|
||||
mov bx,cx
|
||||
mov eax,ebx
|
||||
ret
|
||||
mov ebx,dword ptr [esp+4]
|
||||
mov ecx,ebx
|
||||
shr ebx,16
|
||||
mov ax,501h
|
||||
int 31h
|
||||
jnc sbrk_ok
|
||||
xor eax,eax
|
||||
ret
|
||||
sbrk_ok:
|
||||
shl ebx,16
|
||||
mov bx,cx
|
||||
mov eax,ebx
|
||||
ret
|
||||
___sbrk endp
|
||||
|
||||
.DATA
|
||||
HEAP dd 0
|
||||
|
||||
end start
|
||||
|
Loading…
Reference in New Issue
Block a user