1) Options->Compiler->Assembler assembler output options has not bees working properly (asm_output_options_ide.patch)
2) make available Assembler reader options for x86_64 (asm_reader_options_x86_64_ide.patch)
3) make asm output options for x86_64 look like they do for i386 (asm_output_options_strings_ide_v2.patch)
missing strings not implemented
4) video have to be "done" same way as it was initialized (udrivers_doneenhancedvideo_fpc331.patch)
5) In linux solves problem when Ide have weird visual glitches (if fp.ans is present and opening / closing menu leaves trails behind) (legacy_video_refresh_unix_fpc331_v2.patch)
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas
--- u/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000
+++ v/packages/ide/fpswitch.pas 2024-06-07 22:12:56.278957000 +0000
@@ -1145,7 +1150,7 @@
st:='Asm '+asminfos[ta]^.idtxt;
if asminfos[ta]^.idtxt='AS' then
st:=opt_usegnuas;
-{$ifdef I386}
+{$if defined(i386) or defined(x86_64)}
if asminfos[ta]^.idtxt='NASMCOFF' then
st:=opt_usenasmcoff;
if asminfos[ta]^.idtxt='NASMOBJ' then
@@ -1172,7 +1177,7 @@
st:=opt_usepecoffwdosx;
if asminfos[ta]^.idtxt='ELF' then
st:=opt_useelf;
-{$endif I386}
+{$endif defined(i386) or defined(x86_64)}
AddSelectItem(st,asminfos[ta]^.idtxt,idNone);
end;
end;
diff -ru a/packages/rtl-console/src/unix/video.pp b/packages/rtl-console/src/unix/video.pp
--- a/packages/rtl-console/src/unix/video.pp 2024-05-30 23:04:11.000000000 +0000
+++ b/packages/rtl-console/src/unix/video.pp 2024-06-07 21:18:14.423422423 +0000
@@ -1233,8 +1233,14 @@
else
{$endif}
updateTTY(force);
- for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do
- OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I];
+ if VideoInitialized then
+ begin
+ move(VideoBuf^,OldVideoBuf^,VideoBufSize);
+ end else
+ begin
+ for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do
+ OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I];
+ end;
end;
diff -ru u/packages/fv/src/drivers.inc v/packages/fv/src/drivers.inc
--- u/packages/fv/src/drivers.inc 2024-05-30 23:04:11.000000000 +0000
+++ v/packages/fv/src/drivers.inc 2024-06-07 15:14:20.627191205 +0000
@@ -1614,7 +1614,11 @@
{$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetVideoMode(StartupScreenMode);
{$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.ClearScreen;
{$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetCursorPos(0,0);
+{$ifdef FV_UNICODE}
+ {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneEnhancedVideo;
+{$else FV_UNICODE}
{$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneVideo;
+{$endif FV_UNICODE}
VideoInitialized:=false;
END;
diff -ru a/packages/ide/fpmcomp.inc b/packages/ide/fpmcomp.inc
--- a/packages/ide/fpmcomp.inc 2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpmcomp.inc 2024-06-06 02:15:11.738646000 +0000
@@ -50,6 +50,7 @@
if L<>RB^.Value then
PrevMainFile:='';
UpdateTarget;
+ UpdateAsmOutputSwitches;
end;
Dispose(D, Done);
end;
diff -ru a/packages/ide/fpmopts.inc b/packages/ide/fpmopts.inc
--- a/packages/ide/fpmopts.inc 2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpmopts.inc 2024-06-06 02:37:15.185815000 +0000
@@ -255,17 +255,17 @@
R2.B.Y:=R2.A.Y+1;
New(Label52, Init(R2, label_compiler_assemblerinfo, CB5));
- Count:=AsmOutputSwitches^.ItemCount;
+ UpdateAsmOutputSwitches;
+ Count:=AsmOutputSwitches[SwitchesMode]^.ItemCount;
R2.Copy(TabIR);
R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
Dec(R2.B.X,4);
R2.B.Y:=R2.A.Y+Count;
Items:=nil;
- UpdateAsmOutputSwitches;
for I:=Count-1 downto 0 do
- Items:=NewSItem(AsmOutputSwitches^.ItemName(I), Items);
+ Items:=NewSItem(AsmOutputSwitches[SwitchesMode]^.ItemName(I), Items);
New(RB6, Init(R2, Items));
- L:=AsmOutputSwitches^.GetCurrSel;
+ L:=AsmOutputSwitches[SwitchesMode]^.GetCurrSel;
RB6^.SetData(L);
Dec(R2.A.Y);
R2.B.Y:=R2.A.Y+1;
@@ -348,7 +348,7 @@
AsmReaderSwitches^.SetCurrSel(RB5^.Value);
for I:=0 to AsmInfoSwitches^.ItemCount-1 do
AsmInfoSwitches^.SetBooleanItem(I,CB5^.Mark(I));
- AsmOutputSwitches^.SetCurrSel(RB6^.Value);
+ AsmOutputSwitches[SwitchesMode]^.SetCurrSel(RB6^.Value);
BrowserSwitches^.SetCurrSel(RB4^.Value);
ConditionalSwitches^.SetStringItem(0,IL^.Data^);
CustomArg[SwitchesMode]:=IL2^.Data^;
@@ -464,11 +464,11 @@
OtherLinkerSwitches^.SetBooleanItem(1,CB2^.Mark(0));
if LibLinkerSwitches^.GetCurrSelParam='X' then
if CompareText(TargetSwitches^.GetCurrSelParam,'Windows')=0 then
- if CompareText(AsmOutputSwitches^.GetCurrSelParam,'pecoff')<>0 then
+ if CompareText(AsmOutputSwitches[SwitchesMode]^.GetCurrSelParam,'pecoff')<>0 then
if ConfirmBox(
FormatStrStr3(msg_xmustbesettoyforz_doyouwanttochangethis,
label_compiler_assembleroutput,'pecoff','smartlinking'),nil,false)=cmYes then
- AsmOutputSwitches^.SetCurrSelParam('pecoff');
+ AsmOutputSwitches[SwitchesMode]^.SetCurrSelParam('pecoff');
for I:=0 to LinkAfterSwitches^.ItemCount-1 do
LinkAfterSwitches^.SetBooleanItem(I,CB^.Mark(I));
end;
diff -ru a/packages/ide/fpswitch.pas b/packages/ide/fpswitch.pas
--- a/packages/ide/fpswitch.pas 2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000
@@ -173,13 +173,15 @@
ProcessorOptimizationSwitches,
AsmReaderSwitches,
AsmInfoSwitches,
- AsmOutputSwitches,
TargetSwitches,
ConditionalSwitches,
MemorySwitches,
BrowserSwitches,
DirectorySwitches : PSwitches;
+ {Every mode can have different target, thus have its own AsmOutput}
+ AsmOutputSwitches: array [TSwitchMode] of PSwitches;
+
{ write/read the Switches to fpc.cfg file }
procedure WriteSwitches(const fn:string);
procedure ReadSwitches(const fn:string);
@@ -961,7 +963,8 @@
ProcessorOptimizationSwitches^.WriteItemsCfg;
AsmReaderSwitches^.WriteItemsCfg;
AsmInfoSwitches^.WriteItemsCfg;
- AsmOutputSwitches^.WriteItemsCfg;
+ if assigned(AsmOutputSwitches[SwitchesMode]) then
+ AsmOutputSwitches[SwitchesMode]^.WriteItemsCfg;
DirectorySwitches^.WriteItemsCfg;
MemorySwitches^.WriteItemsCfg;
ConditionalSwitches^.WriteItemsCfg;
@@ -988,6 +991,7 @@
res : boolean;
OldSwitchesMode,i : TSwitchMode;
begin
+
assign(CfgFile,fn);
{$I-}
reset(CfgFile);
@@ -1010,7 +1014,10 @@
Delete(s,1,2);
case c of
'a' : res:=AsmInfoSwitches^.ReadItemsCfg(s);
- 'A' : res:=AsmOutputSwitches^.ReadItemsCfg(s);
+ 'A' : begin
+ UpdateAsmOutputSwitches;
+ res:=AsmOutputSwitches[SwitchesMode]^.ReadItemsCfg(s);
+ end;
'b' : res:=BrowserSwitches^.ReadItemsCfg(s);
'C' : begin
res:=CodegenSwitches^.ReadItemsCfg(s);
@@ -1095,18 +1102,44 @@
procedure UpdateAsmOutputSwitches;
var
ta : tasm;
+ zt : tsystem;
+ sy : tsystem;
+ sw : TSwitchMode;
st : string;
+ L : String;
+ t : string;
begin
- if assigned(AsmOutputSwitches) then
- dispose(AsmOutputSwitches,Done);
- New(AsmOutputSwitches,InitSelect('A'));
- with AsmOutputSwitches^ do
+ sw:=SwitchesMode;
+ t:='';
+ if assigned(TargetSwitches) then
+ t:=TargetSwitches^.ItemName(TargetSwitches^.GetCurrSel);
+
+ sy:=target_info.system;
+ for zt:=low(tsystem) to high(tsystem) do
+ if assigned(targetinfos[zt]) then
+ begin
+ if targetinfos[zt]^.name = t then
+ begin
+ sy:=zt;
+ break;
+ end;
+ end;
+
+ L:='';
+ if assigned(AsmOutputSwitches[sw]) then
+ begin
+ L:=AsmOutputSwitches[sw]^.GetCurrSelParam;
+ dispose(AsmOutputSwitches[sw],Done);
+ end;
+
+ New(AsmOutputSwitches[sw],InitSelect('A'));
+ with AsmOutputSwitches[sw]^ do
begin
AddDefaultSelect(opt_usedefaultas);
for ta:=low(tasm) to high(tasm) do
if assigned(asminfos[ta]) and
- ((target_info.system in asminfos[ta]^.supported_targets) or
+ ((sy in asminfos[ta]^.supported_targets) or
(system_any in asminfos[ta]^.supported_targets)) then
begin
st:='Asm '+asminfos[ta]^.idtxt;
@@ -1143,6 +1176,7 @@
AddSelectItem(st,asminfos[ta]^.idtxt,idNone);
end;
end;
+ AsmOutputSwitches[sw]^.SetCurrSelParam(L);
end;
{*****************************************************************************
@@ -1471,7 +1505,7 @@
end;
procedure DoneSwitches;
-
+var sw : TSwitchMode;
begin
dispose(SyntaxSwitches,Done);
dispose(CompilerModeSwitches,Done);
@@ -1483,7 +1517,6 @@
dispose(BrowserSwitches,Done);
dispose(TargetSwitches,Done);
dispose(AsmReaderSwitches,Done);
- dispose(AsmOutputSwitches,Done);
dispose(AsmInfoSwitches,Done);
dispose(ConditionalSwitches,Done);
dispose(MemorySwitches,Done);
@@ -1494,6 +1527,9 @@
dispose(LinkAfterSwitches,Done);
dispose(OtherLinkerSwitches,Done);
dispose(ProfileInfoSwitches,Done);
+ for sw:=low(TSwitchMode) to high(TSwitchMode) do
+ if assigned(AsmOutputSwitches[sw]) then
+ dispose(AsmOutputSwitches[sw],Done);
end;
procedure GetCompilerOptionLines(C: PUnsortedStringCollection);
@@ -1570,7 +1606,7 @@
EnumSwitches(ProcessorCodeGenerationSwitches);
EnumSwitches(AsmReaderSwitches);
EnumSwitches(AsmInfoSwitches);
- EnumSwitches(AsmOutputSwitches);
+ EnumSwitches(AsmOutputSwitches[SM]);
EnumSwitches(TargetSwitches);
EnumSwitches(ConditionalSwitches);
EnumSwitches(MemorySwitches);
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas
--- u/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000
+++ v/packages/ide/fpswitch.pas 2024-06-06 09:03:30.961527000 +0000
@@ -1340,6 +1340,11 @@
AddSelectItem(opt_attassembler,'att',idAsmATT);
AddSelectItem(opt_intelassembler,'intel',idAsmIntel);
{$endif I386}
+{$ifdef x86_64}
+ AddSelectItem(opt_defaultassembler,'default',idNone);
+ AddSelectItem(opt_attassembler,'att',idAsmATT);
+ AddSelectItem(opt_intelassembler,'intel',idAsmIntel);
+{$endif x86_64}
{$ifdef M68K}
AddSelectItem(opt_defaultassembler,'default',idNone);
//AddSelectItem(opt_standardassembler,'standard',idAsmStandard);
_______________________________________________ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
