浏览代码

* Updated internal declarations of RTTI structures to match their counterparts in typinfo unit and actual data generated by compiler. It went unnoticed this far because fields whose location differ with and without 'packed' record attribute are not used by internal routines, and tests use declarations from typinfo unit (the declarations in question are not in interface, so tests cannot be done against them).
This eliminates a lot of unaligned code on SPARC and ARM.

git-svn-id: trunk@26845 -

sergei 11 年之前
父节点
当前提交
ae81e0889b
共有 1 个文件被更改,包括 15 次插入3 次删除
  1. 15 3
      rtl/inc/rtti.inc

+ 15 - 3
rtl/inc/rtti.inc

@@ -18,7 +18,11 @@
 
 type
   PRecordElement=^TRecordElement;
-  TRecordElement=packed record
+  TRecordElement=
+{$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
+  packed
+{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
+  record
     TypeInfo: Pointer;
     {$ifdef VER2_6}
     Offset: Longint;
@@ -28,14 +32,22 @@ type
   end;
 
   PRecordInfo=^TRecordInfo;
-  TRecordInfo=packed record
+  TRecordInfo=
+{$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
+  packed
+{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
+  record
     Size: Longint;
     Count: Longint;
     { Elements: array[count] of TRecordElement }
   end;
 
   PArrayInfo=^TArrayInfo;
-  TArrayInfo=packed record
+  TArrayInfo=
+{$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
+  packed
+{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
+  record
     Size: SizeInt;
     ElCount: SizeInt;
     ElInfo: Pointer;