diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-03-07 22:28:17 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-03-07 22:28:17 +0000 |
commit | a7fc993faeff98ddfc46a8561619e3e7215791c0 (patch) | |
tree | 5fc49c008d64f92eaf79edd7e03b89ad7dfb1a37 | |
parent | 1f980b7a957f4112dff8d1f7bf0d15bab32c3c11 (diff) | |
download | fpc-a7fc993faeff98ddfc46a8561619e3e7215791c0.tar.gz |
+ support for .dc.a directive
* read multiple section flags
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48903 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | compiler/raatt.pas | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/compiler/raatt.pas b/compiler/raatt.pas index 92d1e8c6ad..0bb96d9ec5 100644 --- a/compiler/raatt.pas +++ b/compiler/raatt.pas @@ -53,7 +53,7 @@ unit raatt; AS_DB,AS_DW,AS_DD,AS_DQ,AS_GLOBAL, AS_ALIGN,AS_BALIGN,AS_P2ALIGN,AS_ASCII, 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, {------------------ 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, @@ -80,7 +80,7 @@ unit raatt; '.byte','.word','.long','.quad','.globl', '.align','.balign','.p2align','.ascii', '.asciz','.lcomm','.comm','.single','.double','.tfloat','.tcfloat', - '.data','.text','.init','.fini','.rva', + '.data','.text','.init','.fini','.rva','.dc.a', '.set','.weak','.section','END', 'TYPE','SIZEOF','VMTOFFSET','%','<<','>>','!','&','|','^','~','@','reltype', 'directive'); @@ -227,7 +227,7 @@ unit raatt; actasmpattern[len]:=c; { Let us point to the next character } 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 inc(len); actasmpattern[len]:=c; @@ -1076,6 +1076,7 @@ unit raatt; section : tai_section; secflags : TSectionFlags; secprogbits : TSectionProgbits; + i: Integer; Begin Message1(asmr_d_start_reading,'GNU AS'); firsttoken:=TRUE; @@ -1163,6 +1164,12 @@ unit raatt; BuildConstant(4); end; + AS_DC_A: + Begin + Consume(AS_DC_A); + BuildConstant(sizeof(aint)); + end; + AS_DQ: Begin Consume(AS_DQ); @@ -1342,18 +1349,17 @@ unit raatt; Consume(AS_COMMA); if actasmtoken=AS_STRING then begin - case actasmpattern of - 'a': - Include(secflags,SF_A); - 'w': - Include(secflags,SF_W); - 'x': - Include(secflags,SF_X); - '': - ; - else - Message(asmr_e_syntax_error); - end; + for i:=1 to length(actasmpattern) do + case actasmpattern[i] of + 'a': + Include(secflags,SF_A); + 'w': + Include(secflags,SF_W); + 'x': + Include(secflags,SF_X); + else + Message(asmr_e_syntax_error); + end; Consume(AS_STRING); if actasmtoken=AS_COMMA then begin |