mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 08:39:10 +02:00
z80: fix global symbols and section attributes in the vasm writer
git-svn-id: trunk@45163 -
This commit is contained in:
parent
50c221670f
commit
04bd105cf5
@ -44,6 +44,7 @@ unit agz80vasm;
|
|||||||
procedure WriteDecodedSleb128(a: int64);
|
procedure WriteDecodedSleb128(a: int64);
|
||||||
procedure WriteDecodedUleb128(a: qword);
|
procedure WriteDecodedUleb128(a: qword);
|
||||||
procedure WriteRealConstAsBytes(hp: tai_realconst; const dbdir: string; do_line: boolean);
|
procedure WriteRealConstAsBytes(hp: tai_realconst; const dbdir: string; do_line: boolean);
|
||||||
|
function sectionattrs(atype:TAsmSectiontype):string;
|
||||||
function sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
|
function sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
|
||||||
procedure WriteSection(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder;secalign:longint;
|
procedure WriteSection(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder;secalign:longint;
|
||||||
secflags:TSectionFlags=[];secprogbits:TSectionProgbits=SPB_None);
|
secflags:TSectionFlags=[];secprogbits:TSectionProgbits=SPB_None);
|
||||||
@ -245,6 +246,21 @@ unit agz80vasm;
|
|||||||
writer.AsmLn;
|
writer.AsmLn;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TZ80vasm.sectionattrs(atype:TAsmSectiontype):string;
|
||||||
|
begin
|
||||||
|
case atype of
|
||||||
|
sec_code, sec_fpc, sec_init, sec_fini:
|
||||||
|
result:='acrx';
|
||||||
|
sec_data, sec_rodata, sec_rodata_norel, sec_bss, sec_threadvar:
|
||||||
|
result:='adrw';
|
||||||
|
sec_stab, sec_stabstr:
|
||||||
|
result:='dr';
|
||||||
|
else
|
||||||
|
result:='';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TZ80vasm.sectionname(atype: TAsmSectiontype;
|
function TZ80vasm.sectionname(atype: TAsmSectiontype;
|
||||||
const aname: string; aorder: TAsmSectionOrder): string;
|
const aname: string; aorder: TAsmSectionOrder): string;
|
||||||
const
|
const
|
||||||
@ -352,6 +368,9 @@ unit agz80vasm;
|
|||||||
end;
|
end;
|
||||||
s:=sectionname(atype,aname,aorder);
|
s:=sectionname(atype,aname,aorder);
|
||||||
writer.AsmWrite(s);
|
writer.AsmWrite(s);
|
||||||
|
s:=sectionattrs(atype);
|
||||||
|
if (s<>'') then
|
||||||
|
writer.AsmWrite(',"'+s+'"');
|
||||||
writer.AsmLn;
|
writer.AsmLn;
|
||||||
LastSecType:=atype;
|
LastSecType:=atype;
|
||||||
end;
|
end;
|
||||||
@ -646,16 +665,14 @@ unit agz80vasm;
|
|||||||
if not(tai_symbol(hp).has_value) then
|
if not(tai_symbol(hp).has_value) then
|
||||||
begin
|
begin
|
||||||
if tai_symbol(hp).is_global then
|
if tai_symbol(hp).is_global then
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + ':')
|
writer.AsmWriteLn(#9'.globl '+ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name));
|
||||||
else
|
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + ':');
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + ':');
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if tai_symbol(hp).is_global then
|
if tai_symbol(hp).is_global then
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + '=' + tostr(tai_symbol(hp).value))
|
writer.AsmWriteLn(#9'.globl '+ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name))
|
||||||
else
|
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + '=' + tostr(tai_symbol(hp).value));
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_symbol(hp).sym.name) + '=' + tostr(tai_symbol(hp).value));
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
ait_symbol_end :
|
ait_symbol_end :
|
||||||
@ -664,9 +681,8 @@ unit agz80vasm;
|
|||||||
ait_datablock :
|
ait_datablock :
|
||||||
begin
|
begin
|
||||||
if tai_datablock(hp).is_global or SmartAsm then
|
if tai_datablock(hp).is_global or SmartAsm then
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_datablock(hp).sym.name) + ':')
|
writer.AsmWriteLn(#9'.globl '+ApplyAsmSymbolRestrictions(tai_datablock(hp).sym.name));
|
||||||
else
|
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_datablock(hp).sym.name) + ':');
|
||||||
writer.AsmWriteLn(ApplyAsmSymbolRestrictions(tai_datablock(hp).sym.name) + ':');
|
|
||||||
{if SmartAsm then
|
{if SmartAsm then
|
||||||
AddSymbol(tai_datablock(hp).sym.name,true);}
|
AddSymbol(tai_datablock(hp).sym.name,true);}
|
||||||
writer.AsmWriteLn(#9'.zero'#9+tostr(tai_datablock(hp).size));
|
writer.AsmWriteLn(#9'.zero'#9+tostr(tai_datablock(hp).size));
|
||||||
|
Loading…
Reference in New Issue
Block a user