diff options
author | Iain Sandoe <iains@gcc.gnu.org> | 2010-09-06 09:27:55 +0000 |
---|---|---|
committer | Iain Sandoe <iains@gcc.gnu.org> | 2010-09-06 09:27:55 +0000 |
commit | 265a000dbbb824228a757d81c1887ccea41acc5d (patch) | |
tree | aa5181cdfcdde72823af4e0a75258a205247dd0a /libobjc | |
parent | 324d3f4525e9c1c6e57970652e43fa9cd83fed9b (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | libobjc/encoding.c | 15 |
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) \ |