mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 03:09:11 +02:00
+ support for .dc.a directive
* read multiple section flags git-svn-id: trunk@48903 -
This commit is contained in:
parent
5149e58525
commit
4be5f07f27
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user