]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Darwin: Make sanitizer local vars linker-visible.
authorIain Sandoe <iain@sandoe.co.uk>
Sun, 24 May 2020 11:18:19 +0000 (12:18 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Sun, 24 May 2020 11:27:44 +0000 (12:27 +0100)
Another case where we need a linker-visible symbol 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.

This is a short-term fix for the problem - ideally we need a more
generic handling for all the relevant cases.

Backport 804254edb48f87d726a1bc9e95af04076c030e35

gcc/ChangeLog:

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

gcc/ChangeLog
gcc/config/darwin.h

index d848d3f1cecef17d627e0f6769596135b7dd0026..c047aaf9f11cb3bea0c70549016aaa79bf96801d 100644 (file)
@@ -1,3 +1,11 @@
+2020-05-24  Iain Sandoe  <iain@sandoe.co.uk>
+
+       Backported from master.
+       2020-05-22  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin.h (ASM_GENERATE_INTERNAL_LABEL):
+       Make ubsan_{data,type},ASAN linker-visible.
+
 2020-05-24  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/95258
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)