Explorar o código

* due to an apparent bug in the clang assembler for COFF when assembling ADRP instructions we can't use symbols that are offset into their section

git-svn-id: trunk@44948 -
svenbarth %!s(int64=5) %!d(string=hai) anos
pai
achega
b88107fa1d
Modificáronse 1 ficheiros con 6 adicións e 2 borrados
  1. 6 2
      compiler/aasmcnst.pas

+ 6 - 2
compiler/aasmcnst.pas

@@ -1148,7 +1148,9 @@ implementation
    class function ttai_typedconstbuilder.get_string_symofs(typ: tstringtype; winlikewidestring: boolean): pint;
    class function ttai_typedconstbuilder.get_string_symofs(typ: tstringtype; winlikewidestring: boolean): pint;
      begin
      begin
        { darwin's linker does not support negative offsets }
        { darwin's linker does not support negative offsets }
-       if not(target_info.system in systems_darwin) then
+       if not(target_info.system in systems_darwin) and
+          { it seems that clang's assembler has a bug with the ADRP instruction... }
+          (target_info.system<>system_aarch64_win64) then
          result:=0
          result:=0
        else
        else
          result:=get_string_header_size(typ,winlikewidestring);
          result:=get_string_header_size(typ,winlikewidestring);
@@ -1158,7 +1160,9 @@ implementation
    class function ttai_typedconstbuilder.get_dynarray_symofs:pint;
    class function ttai_typedconstbuilder.get_dynarray_symofs:pint;
      begin
      begin
        { darwin's linker does not support negative offsets }
        { darwin's linker does not support negative offsets }
-       if not (target_info.system in systems_darwin) then
+       if not (target_info.system in systems_darwin) and
+          { it seems that clang's assembler has a bug with the ADRP instruction... }
+          (target_info.system<>system_aarch64_win64) then
          result:=0
          result:=0
        else
        else
          result:=get_dynarray_header_size;
          result:=get_dynarray_header_size;