[Darwin, machopic 1/n] Consider visibility in indirections.
authorIain Sandoe <iain@sandoe.co.uk>
Mon, 7 Oct 2019 20:21:50 +0000 (20:21 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Mon, 7 Oct 2019 20:21:50 +0000 (20:21 +0000)
For weak, hidden vars the indirection should just be as normal, that
is that the indirections for such symbols should appear in the non-lazy
symbol pointers table, not in the .data section.

gcc/ChangeLog:

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

* config/darwin.c (machopic_output_indirection): Don't put
hidden symbol indirections into the .data section, use the
non-lazy symbol pointers section as normal.
(darwin_encode_section_info): Record if a symbol is hidden.
* config/darwin.h (MACHO_SYMBOL_FLAG_HIDDEN_VIS): New.
(MACHO_SYMBOL_HIDDEN_VIS_P): New.

From-SVN: r276675

gcc/ChangeLog
gcc/config/darwin.c
gcc/config/darwin.h

index 021d406039792f9ba1bd1e877fdd084ddc0d03db..af5ac090810a07b8698f6fc27741b16ab2b52b50 100644 (file)
@@ -1,3 +1,12 @@
+2019-10-07  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin.c (machopic_output_indirection): Don't put
+       hidden symbol indirections into the .data section, use the
+       non-lazy symbol pointers section as normal.
+       (darwin_encode_section_info): Record if a symbol is hidden.
+       * config/darwin.h (MACHO_SYMBOL_FLAG_HIDDEN_VIS): New.
+       (MACHO_SYMBOL_HIDDEN_VIS_P): New.
+
 2019-10-07  Iain Sandoe  <iain@sandoe.co.uk>
 
        * config/darwin.c (machopic_symbol_defined_p): Use symbol flag
index 45e0d744adb4137a64d4274635dcab0c6ff2e9c3..869e850c5753a642b108def4053ebe93cbe35c80 100644 (file)
@@ -1120,6 +1120,7 @@ machopic_output_indirection (machopic_indirection **slot, FILE *asm_out_file)
       machopic_output_stub (asm_out_file, sym, stub);
     }
   else if (! indirect_data (symbol)
+          && ! MACHO_SYMBOL_HIDDEN_VIS_P (symbol)
           && (machopic_symbol_defined_p (symbol)
               || SYMBOL_REF_LOCAL_P (symbol)))
     {
@@ -1237,6 +1238,12 @@ darwin_encode_section_info (tree decl, rtx rtl, int first)
   if (VAR_P (decl))
     SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_VARIABLE;
 
+  /* For Darwin, if we have specified visibility and it's not the default
+     that's counted 'hidden'.  */
+  if (DECL_VISIBILITY_SPECIFIED (decl)
+      && DECL_VISIBILITY (decl) != VISIBILITY_DEFAULT)
+     SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_HIDDEN_VIS;
+
   if (!DECL_EXTERNAL (decl)
       && (!TREE_PUBLIC (decl) || !DECL_WEAK (decl))
       && ! lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))
index 39c54cc7208a27d4a745ffb68cf66cac7eaafb5d..87e1eb63b1c9531f2ab98f9c6244e1c39925c4f3 100644 (file)
@@ -828,6 +828,12 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
 #define MACHO_SYMBOL_DEFINED_P(RTX) \
   ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_DEFINED) != 0)
 
+/* Set on a symbol that has specified non-default visibility.  */
+
+#define MACHO_SYMBOL_FLAG_HIDDEN_VIS ((SYMBOL_FLAG_SUBT_DEP) << 3)
+#define MACHO_SYMBOL_HIDDEN_VIS_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_HIDDEN_VIS) != 0)
+
 /* Set on a symbol to indicate when fix-and-continue style code
    generation is being used and the symbol refers to a static symbol
    that should be rebound from new instances of a translation unit to