Darwin: Make sanitizer local vars linker-visible.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 23 May 2020 07:25:10 +0000 (08:25 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sat, 23 May 2020 07:25:46 +0000 (08:25 +0100)
Another case where we need a linker-visible symbols in order to
preserve the ld64 atom model.  If these symbols are emitted as
'local' the linker cannot see that they are separate from any
global weak entry that precedes them.  This will cause the linker
to complain that there is (apparently) direct access to such a
weak global, preventing it from being replaced.

This is a short-term fix for the problem - we need generic
handling for relevant cases (that also does not pessimise objects
by emitting unnecessary symbols and relocations).

gcc/ChangeLog:

2020-05-23  Iain Sandoe  <iain@sandoe.co.uk>

* config/darwin.h (ASM_GENERATE_INTERNAL_LABEL):
Make ubsan_{data,type},ASAN symbols linker-visible.

gcc/ChangeLog
gcc/config/darwin.h

index 7a7b599ff939fe9c2724161dceed108afcc3b8da..ede1f15eb7a1786f57452ff9b1015f7cddd9571d 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-23 Iain Sandoe <iain@sandoe.co.uk>
+
+       * config/darwin.h (ASM_GENERATE_INTERNAL_LABEL): Make
+       ubsan_{data,type},ASAN symbols linker-visible.
+
 2020-05-22  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto-streamer-out.c (DFS::DFS): Silence warning.
index 27665b34a18612f5d48e93c34630488679409be5..f528b1766bf2fc51fec7519882c8eb34d4ad5173 100644 (file)
@@ -808,6 +808,12 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
   do {                                                 \
     if (strcmp ("LC", PREFIX) == 0)                    \
       sprintf (LABEL, "*%s%ld", "lC", (long)(NUM));    \
+    else if (strcmp ("Lubsan_data", PREFIX) == 0)      \
+      sprintf (LABEL, "*%s%ld", "lubsan_data", (long)(NUM));\
+    else if (strcmp ("Lubsan_type", PREFIX) == 0)      \
+      sprintf (LABEL, "*%s%ld", "lubsan_type", (long)(NUM));\
+    else if (strcmp ("LASAN", PREFIX) == 0)    \
+      sprintf (LABEL, "*%s%ld", "lASAN", (long)(NUM));\
     else                                               \
       sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM));  \
   } while (0)