This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch libobjc] Fix Darwin powerpc m64 breakage.

it's nice when 4 lines of code fixes 4 dozen test-suite fails ..
.. and disappointing that it's probably taken more than 4 years for someone to have time to look ..

Andrew, I realize that this doesn't in any way alter the 'broken-ness' of the current design - but, on the other hand, it does make powerpc- apple-darwin9 work @m64 within that current design. [... and gets rid of a bunch of test-suite fail output for those of us who test powerpc @m64].

FWIW, actually fixing m32 might be somewhat more taxing since that involves replication of the xxx_special_round_type_align () functions (which have drifted away from the implementation in encode.c.).

I had a quick scan but didn't see any specific PR to put this against...

OK for trunk?


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


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

Index: libobjc/encoding.c =================================================================== --- libobjc/encoding.c (revision 161768) +++ libobjc/encoding.c (working copy) @@ -105,10 +105,22 @@ static int __attribute__ ((__unused__)) not_target #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 and therefore, all the darwin64
+ stuff is broken. This echoes the comments above and below about
+ the badness of the approach. Other powerpc64 targets might also
+ be affected. */
+#if defined(DEFAULT_ABI) && (DEFAULT_ABI==ABI_DARWIN) && __LP64__

/* 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,
+ is only way around without really rewriting this file,
should look after the branch of 3.4 to fix this. */
#define rs6000_special_round_type_align(STRUCT, COMPUTED, SPECIFIED) \
({ const char *_fields = TYPE_FIELDS (STRUCT); \
@@ -116,8 +128,12 @@ static int __attribute__ ((__unused__)) not_target
&& TYPE_MODE (strip_array_types (TREE_TYPE (_fields))) == DFmode) \
/* FIXME: The word 'fixme' is insufficient to explain the wrong-ness
- of this next macro definition. */
+ of this next macro definition.
+ 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, since
+ the 'special' routine is not used at m64 with TARGET_ALIGN_NATURAL=1. */
#define darwin_rs6000_special_round_type_align(S,C,S2) \

Index: gcc/testsuite/objc.dg/gnu-encoding/struct-layout- encoding-1_generate.c
--- gcc/testsuite/objc.dg/gnu-encoding/struct-layout- encoding-1_generate.c (revision 161768)
+++ gcc/testsuite/objc.dg/gnu-encoding/struct-layout- encoding-1_generate.c (working copy)
@@ -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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]