diff options
Diffstat (limited to 'compiler/raatt.pas')
-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 |