aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2019-10-09 18:43:36 +0000
committerIain Sandoe <iains@gcc.gnu.org>2019-10-09 18:43:36 +0000
commita0e887be6147edcd14a5b95af17456d0a01575d4 (patch)
tree614da0f4385ce7194462750a99f97fb117b32032 /gcc
parente295e3d981355c61b72eca2ee58864958655cc31 (diff)
downloadgcc-a0e887be6147edcd14a5b95af17456d0a01575d4.zip
gcc-a0e887be6147edcd14a5b95af17456d0a01575d4.tar.gz
gcc-a0e887be6147edcd14a5b95af17456d0a01575d4.tar.bz2
[Darwin, machopic 3/n] Set a SYMBOL flag for indirections.
We are able to treat these specially where needed in legitimate address tests (specifically, they are guaranteed to be pointer-aligned). gcc/ChangeLog: 2019-10-09 Iain Sandoe <iain@sandoe.co.uk> * config/darwin.c (machopic_indirect_data_reference): Set flag to indicate that the new symbol is an indirection. (machopic_indirect_call_target): Likewise. * config/darwin.h (MACHO_SYMBOL_FLAG_INDIRECTION): New. (MACHO_SYMBOL_INDIRECTION_P): New. (MACHO_SYMBOL_FLAG_STATIC): Adjust bit number. From-SVN: r276767
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/darwin.c2
-rw-r--r--gcc/config/darwin.h9
3 files changed, 19 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a02d211..e66d065 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2019-10-09 Iain Sandoe <iain@sandoe.co.uk>
+
+ * config/darwin.c (machopic_indirect_data_reference): Set flag to
+ indicate that the new symbol is an indirection.
+ (machopic_indirect_call_target): Likewise.
+ * config/darwin.h (MACHO_SYMBOL_FLAG_INDIRECTION): New.
+ (MACHO_SYMBOL_INDIRECTION_P): New.
+ (MACHO_SYMBOL_FLAG_STATIC): Adjust bit number.
+
2019-10-08 Jason Merrill <jason@redhat.com>
* doc/invoke.texi: Document -fconcepts-ts.
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 679e0c2..35d0444 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -707,6 +707,7 @@ machopic_indirect_data_reference (rtx orig, rtx reg)
machopic_indirection_name (orig, /*stub_p=*/false)));
SYMBOL_REF_DATA (ptr_ref) = SYMBOL_REF_DATA (orig);
+ SYMBOL_REF_FLAGS (ptr_ref) |= MACHO_SYMBOL_FLAG_INDIRECTION;
ptr_ref = gen_const_mem (Pmode, ptr_ref);
machopic_define_symbol (ptr_ref);
@@ -806,6 +807,7 @@ machopic_indirect_call_target (rtx target)
XEXP (target, 0) = gen_rtx_SYMBOL_REF (mode, stub_name);
SYMBOL_REF_DATA (XEXP (target, 0)) = SYMBOL_REF_DATA (sym_ref);
+ SYMBOL_REF_FLAGS (XEXP (target, 0)) |= MACHO_SYMBOL_FLAG_INDIRECTION;
MEM_READONLY_P (target) = 1;
MEM_NOTRAP_P (target) = 1;
}
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 7fab869..f331fa1 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -843,12 +843,19 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
#define MACHO_SYMBOL_HIDDEN_VIS_P(RTX) \
((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_HIDDEN_VIS) != 0)
+/* Set on a symbol that is a pic stub or symbol indirection (i.e. the
+ L_xxxxx${stub,non_lazy_ptr,lazy_ptr}. */
+
+#define MACHO_SYMBOL_FLAG_INDIRECTION ((SYMBOL_FLAG_SUBT_DEP) << 5)
+#define MACHO_SYMBOL_INDIRECTION_P(RTX) \
+ ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_INDIRECTION) != 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
the original instance of the data. */
-#define MACHO_SYMBOL_FLAG_STATIC ((SYMBOL_FLAG_SUBT_DEP) << 5)
+#define MACHO_SYMBOL_FLAG_STATIC ((SYMBOL_FLAG_SUBT_DEP) << 6)
#define MACHO_SYMBOL_STATIC_P(RTX) \
((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_STATIC) != 0)