AddressSanitizer: fix for SPARC with GCC
authorVitaly Buka <vitalybuka@google.com>
Tue, 12 Mar 2019 21:02:15 +0000 (21:02 +0000)
committerVitaly Buka <vitalybuka@google.com>
Tue, 12 Mar 2019 21:02:15 +0000 (21:02 +0000)
Summary:
This patch contains a fixlet for the AddressSanitizer on the SPARC with GCC, which would otherwise generate a problematic call to the intercepted memcpy routine.  It was tested with GCC on SPARC/Solaris and SPARC/Linux.

Patch by Eric Botcazou.

Reviewers: #sanitizers, vitalybuka

Reviewed By: #sanitizers, vitalybuka

Subscribers: vitalybuka, ro, jyknight, kubamracek, fedor.sergeev, jdoerfert, llvm-commits, #sanitizers

Tags: #sanitizers, #llvm

Differential Revision: https://reviews.llvm.org/D58433

llvm-svn: 355979

compiler-rt/lib/asan/asan_globals.cc

index d9c875550b93f5f29c53f4b2a2317d533f286fce..8b2fdb214fe851c1597f6f1e5b81f40bade05479 100644 (file)
@@ -115,7 +115,11 @@ int GetGlobalsForAddress(uptr addr, Global *globals, u32 *reg_sites,
     if (flags()->report_globals >= 2)
       ReportGlobal(g, "Search");
     if (IsAddressNearGlobal(addr, g)) {
+#if defined(__GNUC__) && defined(__sparc__)
+      internal_memcpy(&globals[res], &g, sizeof(g));
+#else
       globals[res] = g;
+#endif
       if (reg_sites)
         reg_sites[res] = FindRegistrationSite(&g);
       res++;