+ support for .dc.a directive

* read multiple section flags

git-svn-id: trunk@48903 -
This commit is contained in:
florian 2021-03-07 22:28:17 +00:00
parent 5149e58525
commit 4be5f07f27

View File

@ -53,7 +53,7 @@ unit raatt;
AS_DB,AS_DW,AS_DD,AS_DQ,AS_GLOBAL, AS_DB,AS_DW,AS_DD,AS_DQ,AS_GLOBAL,
AS_ALIGN,AS_BALIGN,AS_P2ALIGN,AS_ASCII, AS_ALIGN,AS_BALIGN,AS_P2ALIGN,AS_ASCII,
AS_ASCIIZ,AS_LCOMM,AS_COMM,AS_SINGLE,AS_DOUBLE,AS_EXTENDED,AS_CEXTENDED, AS_ASCIIZ,AS_LCOMM,AS_COMM,AS_SINGLE,AS_DOUBLE,AS_EXTENDED,AS_CEXTENDED,
AS_DATA,AS_TEXT,AS_INIT,AS_FINI,AS_RVA, AS_DATA,AS_TEXT,AS_INIT,AS_FINI,AS_RVA,AS_DC_A,
AS_SET,AS_WEAK,AS_SECTION,AS_END, AS_SET,AS_WEAK,AS_SECTION,AS_END,
{------------------ Assembler Operators --------------------} {------------------ Assembler Operators --------------------}
AS_TYPE,AS_SIZEOF,AS_VMTOFFSET,AS_MOD,AS_SHL,AS_SHR,AS_NOT,AS_AND,AS_OR,AS_XOR,AS_NOR,AS_AT, AS_TYPE,AS_SIZEOF,AS_VMTOFFSET,AS_MOD,AS_SHL,AS_SHR,AS_NOT,AS_AND,AS_OR,AS_XOR,AS_NOR,AS_AT,
@ -80,7 +80,7 @@ unit raatt;
'.byte','.word','.long','.quad','.globl', '.byte','.word','.long','.quad','.globl',
'.align','.balign','.p2align','.ascii', '.align','.balign','.p2align','.ascii',
'.asciz','.lcomm','.comm','.single','.double','.tfloat','.tcfloat', '.asciz','.lcomm','.comm','.single','.double','.tfloat','.tcfloat',
'.data','.text','.init','.fini','.rva', '.data','.text','.init','.fini','.rva','.dc.a',
'.set','.weak','.section','END', '.set','.weak','.section','END',
'TYPE','SIZEOF','VMTOFFSET','%','<<','>>','!','&','|','^','~','@','reltype', 'TYPE','SIZEOF','VMTOFFSET','%','<<','>>','!','&','|','^','~','@','reltype',
'directive'); 'directive');
@ -227,7 +227,7 @@ unit raatt;
actasmpattern[len]:=c; actasmpattern[len]:=c;
{ Let us point to the next character } { Let us point to the next character }
c:=current_scanner.asmgetchar; c:=current_scanner.asmgetchar;
while c in ['A'..'Z','a'..'z','0'..'9','_','$'] do while c in ['A'..'Z','a'..'z','0'..'9','_','$','.'] do
begin begin
inc(len); inc(len);
actasmpattern[len]:=c; actasmpattern[len]:=c;
@ -1076,6 +1076,7 @@ unit raatt;
section : tai_section; section : tai_section;
secflags : TSectionFlags; secflags : TSectionFlags;
secprogbits : TSectionProgbits; secprogbits : TSectionProgbits;
i: Integer;
Begin Begin
Message1(asmr_d_start_reading,'GNU AS'); Message1(asmr_d_start_reading,'GNU AS');
firsttoken:=TRUE; firsttoken:=TRUE;
@ -1163,6 +1164,12 @@ unit raatt;
BuildConstant(4); BuildConstant(4);
end; end;
AS_DC_A:
Begin
Consume(AS_DC_A);
BuildConstant(sizeof(aint));
end;
AS_DQ: AS_DQ:
Begin Begin
Consume(AS_DQ); Consume(AS_DQ);
@ -1342,18 +1349,17 @@ unit raatt;
Consume(AS_COMMA); Consume(AS_COMMA);
if actasmtoken=AS_STRING then if actasmtoken=AS_STRING then
begin begin
case actasmpattern of for i:=1 to length(actasmpattern) do
'a': case actasmpattern[i] of
Include(secflags,SF_A); 'a':
'w': Include(secflags,SF_A);
Include(secflags,SF_W); 'w':
'x': Include(secflags,SF_W);
Include(secflags,SF_X); 'x':
'': Include(secflags,SF_X);
; else
else Message(asmr_e_syntax_error);
Message(asmr_e_syntax_error); end;
end;
Consume(AS_STRING); Consume(AS_STRING);
if actasmtoken=AS_COMMA then if actasmtoken=AS_COMMA then
begin begin