[Darwin, machopic 4/n] Arrange to indirect IVARs when needed.
authorIain Sandoe <iain@sandoe.co.uk>
Thu, 10 Oct 2019 19:14:07 +0000 (19:14 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Thu, 10 Oct 2019 19:14:07 +0000 (19:14 +0000)
Objective C V2 (m64) IVAR offset refs from Apple GCC-4.x have an indirection
for m64 code on PPC (which is the only 64b user for Mach-O PIC).  Apple GCC
4.x places the indirections in the .data section, however this seems to have
been unintentional - and we are placing the indirections in the non-lazy
symbol pointers section.

gcc/ChangeLog:

2019-10-10  Iain Sandoe  <iain@sandoe.co.uk>

* config/darwin.c: Lookup Objective C metadata and force indirection
for IVAR refs.

From-SVN: r276848

gcc/ChangeLog
gcc/config/darwin.c

index fea008537025bf463e37a1f9355ddcf6a74e109a..f91ff7ec8c41624ab70a811f2d08eb0cc08d0c59 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-10  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin.c: Lookup Objective C metadata and force indirection
+       for IVAR refs.
+
 2019-10-10  Michael Meissner  <meissner@linux.ibm.com>
 
        * config/rs6000/rs6000.c (quad_address_p): Add check for prefixed
index f490f622fc32202d580dc95a1ba553a4737d1097..539ef759d31ea6bfacaf5edc06ef949761974a3a 100644 (file)
@@ -1270,6 +1270,17 @@ darwin_encode_section_info (tree decl, rtx rtl, int first)
       || (DECL_WEAK (decl) && ! MACHO_SYMBOL_HIDDEN_VIS_P (sym_ref))
       || lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
      SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_MUST_INDIRECT;
+
+#if DARWIN_PPC
+  /* Objective C V2 (m64) IVAR offset refs from Apple GCC-4.x have an
+     indirection for m64 code on PPC.  Historically, these indirections
+     also appear in the .data section.  */
+  tree o2meta = lookup_attribute ("OBJC2META", DECL_ATTRIBUTES (decl));
+  o2meta = o2meta ? TREE_VALUE (o2meta) : NULL_TREE;
+
+  if (o2meta && strncmp (IDENTIFIER_POINTER (o2meta), "V2_IVRF",7) == 0)
+    SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_MUST_INDIRECT;
+#endif
 }
 
 void