Browse Source

Resolve address of a symbol defined as absolute of another symbol, in assembler code.

ccrause 3 years ago
parent
commit
44094dba2f
1 changed files with 10 additions and 0 deletions
  1. 10 0
      compiler/rautils.pas

+ 10 - 0
compiler/rautils.pas

@@ -862,6 +862,16 @@ Begin
                 setvarsize(tabstractvarsym(sym));
                 setvarsize(tabstractvarsym(sym));
                 size_set_from_absolute:=true;
                 size_set_from_absolute:=true;
                 sym:=plist^.sym;
                 sym:=plist^.sym;
+                { Check if address can be resolved, but only if not an array }
+                if (tabsolutevarsym(sym).abstyp=toaddr) and not
+                  (assigned(plist^.next) and (plist^.next^.sltype=sl_vec)) then
+                  begin
+                    initref;
+                    opr.ref.offset:=tabsolutevarsym(sym).addroffset;
+                    hasvar:=true;
+                    Result:=true;
+                    exit;
+                  end;
                 { resolve the chain of array indexes (if there are any) }
                 { resolve the chain of array indexes (if there are any) }
                 harrdef:=nil;
                 harrdef:=nil;
                 while assigned(plist^.next) do
                 while assigned(plist^.next) do