fix libobjc ppc64 abi for darwin.
authoriains <iains@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Sep 2010 09:27:55 +0000 (09:27 +0000)
committeriains <iains@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Sep 2010 09:27:55 +0000 (09:27 +0000)
libobjc:

* encoding.c: Add TARGET_ALIGN_NATURAL definition for m64 powerpc darwin.
Add a comment as to why, update FIXME comments.

testsuite:

* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c:
Update XFAILs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163906 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c
libobjc/ChangeLog
libobjc/encoding.c

index c3d92fc..c077339 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-06  Iain Sandoe  <iains@gcc.gnu.org>
+
+       * objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c:
+       Update XFAILs.
+
 2010-09-06  Alexander Monakov  <amonakov@ispras.ru>
 
        PR rtl-optimization/44919
index 361cf7a..3ac4179 100644 (file)
@@ -236,7 +236,7 @@ switchfiles (int fields)
       || filecnt == 22)
      {
       fprintf (outfile, "\
-/* { dg-do run { xfail powerpc*-*-darwin* powerpc*-*-aix* } } */\n\
+/* { dg-do run { xfail { { \"powerpc*-*-darwin*\" && { ! lp64 } } || { \"powerpc*-*-aix*\" } } } } */\n\
 /* { dg-options \"-w -I%s -fgnu-runtime\" } */\n", srcdir);
      }
   /* FIXME: these should not be xfailed but they are because
index 763420e..c82b08d 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-06  Iain Sandoe  <iains@gcc.gnu.org>
+
+       * encoding.c: Add TARGET_ALIGN_NATURAL definition for m64 powerpc darwin.
+       Add a comment as to why, update FIXME comments.
+
 2010-09-06  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * makefile.dos: Obsolete file removed.
index 4ae29a7..c743d86 100644 (file)
@@ -105,13 +105,24 @@ static int __attribute__ ((__unused__)) not_target_flags = 0;
 #undef ALTIVEC_VECTOR_MODE
 #define ALTIVEC_VECTOR_MODE(MODE) (0)
 
+/* Furthermore, some (powerpc) targets also use TARGET_ALIGN_NATURAL
+ in their alignment macros. Currently[4.5/6], rs6000.h points this
+ to a static variable, initialized by target overrides. This is reset
+ in linux64.h but not in darwin64.h.  The macro is not used by *86*.  */
+
+#if __MACH__ && __LP64__
+# undef TARGET_ALIGN_NATURAL
+# define TARGET_ALIGN_NATURAL 1
+#endif
 
 /*  FIXME: while this file has no business including tm.h, this
     definitely has no business defining this macro but it
     is only way around without really rewritting this file,
-    should look after the branch of 3.4 to fix this.  */
+    should look after the branch of 3.4 to fix this.
+    FIXME1: It's also out of date, darwin no longer has the same alignment
+    'special' as aix - this is probably the origin of the m32 breakage.  */
 #define rs6000_special_round_type_align(STRUCT, COMPUTED, SPECIFIED)   \
-  ({ const char *_fields = TYPE_FIELDS (STRUCT);                               \
+  ({ const char *_fields = TYPE_FIELDS (STRUCT);                       \
   ((_fields != 0                                                       \
     && TYPE_MODE (strip_array_types (TREE_TYPE (_fields))) == DFmode)  \
    ? MAX (MAX (COMPUTED, SPECIFIED), 64)                               \