Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9050cd6d authored by Florian Mayer's avatar Florian Mayer Committed by Gerrit Code Review
Browse files

Merge "Revert "Revert "[make] Add memtag-stack sanitizer, switch to linker-generated notes."""

parents 522df859 548a2ada
Loading
Loading
Loading
Loading
+25 −14
Original line number Diff line number Diff line
@@ -161,17 +161,19 @@ ifeq ($(strip $(ENABLE_CFI)),false)
  my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag))
endif

# Also disable CFI if ASAN is enabled.
# Also disable CFI and MTE if ASAN is enabled.
ifneq ($(filter address,$(my_sanitize)),)
  my_sanitize := $(filter-out cfi,$(my_sanitize))
  my_sanitize := $(filter-out memtag_stack,$(my_sanitize))
  my_sanitize := $(filter-out memtag_heap,$(my_sanitize))
  my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag))
endif

# Disable memtag for host targets. Host executables in AndroidMk files are
# deprecated, but some partners still have them floating around.
ifdef LOCAL_IS_HOST_MODULE
  my_sanitize := $(filter-out memtag_heap,$(my_sanitize))
  my_sanitize_diag := $(filter-out memtag_heap,$(my_sanitize_diag))
  my_sanitize := $(filter-out memtag_heap memtag_stack,$(my_sanitize))
  my_sanitize_diag := $(filter-out memtag_heap memtag_stack,$(my_sanitize_diag))
endif

# Disable sanitizers which need the UBSan runtime for host targets.
@@ -205,10 +207,13 @@ endif
ifneq ($(filter arm x86 x86_64,$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)),)
  my_sanitize := $(filter-out hwaddress,$(my_sanitize))
  my_sanitize := $(filter-out memtag_heap,$(my_sanitize))
  my_sanitize := $(filter-out memtag_stack,$(my_sanitize))
endif

ifneq ($(filter hwaddress,$(my_sanitize)),)
  my_sanitize := $(filter-out address,$(my_sanitize))
  my_sanitize := $(filter-out memtag_stack,$(my_sanitize))
  my_sanitize := $(filter-out memtag_heap,$(my_sanitize))
  my_sanitize := $(filter-out thread,$(my_sanitize))
  my_sanitize := $(filter-out cfi,$(my_sanitize))
endif
@@ -224,21 +229,27 @@ ifneq ($(filter hwaddress,$(my_sanitize)),)
  endif
endif

ifneq ($(filter memtag_heap,$(my_sanitize)),)
  # Add memtag ELF note.
  ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
ifneq ($(filter memtag_heap memtag_stack,$(my_sanitize)),)
  ifneq ($(filter memtag_heap,$(my_sanitize_diag)),)
      my_whole_static_libraries += note_memtag_heap_sync
    my_cflags += -fsanitize-memtag-mode=sync
    my_sanitize_diag := $(filter-out memtag_heap,$(my_sanitize_diag))
  else
      my_whole_static_libraries += note_memtag_heap_async
    my_cflags += -fsanitize-memtag-mode=async
  endif
endif
  # This is all that memtag_heap does - it is not an actual -fsanitize argument.
  # Remove it from the list.

ifneq ($(filter memtag_heap,$(my_sanitize)),)
  my_cflags += -fsanitize=memtag-heap
  my_sanitize := $(filter-out memtag_heap,$(my_sanitize))
endif

my_sanitize_diag := $(filter-out memtag_heap,$(my_sanitize_diag))
ifneq ($(filter memtag_stack,$(my_sanitize)),)
  my_cflags += -fsanitize=memtag-stack
  my_cflags += -march=armv8a+memtag
  my_ldflags += -march=armv8a+memtag
  my_asflags += -march=armv8a+memtag
  my_sanitize := $(filter-out memtag_stack,$(my_sanitize))
endif

# TSAN is not supported on 32-bit architectures. For non-multilib cases, make
# its use an error. For multilib cases, don't use it for the 32-bit case.