aboutsummaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
authorIain Sandoe <iains@gcc.gnu.org>2010-09-06 09:27:55 +0000
committerIain Sandoe <iains@gcc.gnu.org>2010-09-06 09:27:55 +0000
commit265a000dbbb824228a757d81c1887ccea41acc5d (patch)
treeaa5181cdfcdde72823af4e0a75258a205247dd0a /libobjc
parent324d3f4525e9c1c6e57970652e43fa9cd83fed9b (diff)
downloadgcc-265a000dbbb824228a757d81c1887ccea41acc5d.zip
gcc-265a000dbbb824228a757d81c1887ccea41acc5d.tar.gz
gcc-265a000dbbb824228a757d81c1887ccea41acc5d.tar.bz2
fix libobjc ppc64 abi for darwin.
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. From-SVN: r163906
Diffstat (limited to 'libobjc')
-rw-r--r--libobjc/ChangeLog5
-rw-r--r--libobjc/encoding.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 763420e..c82b08d 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -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.
diff --git a/libobjc/encoding.c b/libobjc/encoding.c
index 4ae29a7..c743d86 100644
--- a/libobjc/encoding.c
+++ b/libobjc/encoding.c
@@ -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) \