# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
  # TODO(davemoore): Remove this entire mechanism once standalone scudo is the
  # default (DNO-442)
  # Enable the [Scudo](https://llvm.org/docs/ScudoHardenedAllocator.html)
  # memory allocator.
  use_scudo = false

  # Default [Scudo](https://llvm.org/docs/ScudoHardenedAllocator.html)
  # options (before the `SCUDO_OPTIONS` environment variable is read at
  # runtime).  *NOTE:* This affects only components using the `scudo`
  # variant (see GN build argument `select_variant`), and does not affect
  # anything when the `use_scudo` build flag is set instead.
  scudo_default_options = [
    "abort_on_error=1",  # get stacktrace on error
    "QuarantineSizeKb=0",  # disables quarantine
    "ThreadLocalQuarantineSizeKb=0",  # disables quarantine
    "DeallocationTypeMismatch=false",  # TODO(flowerhack) re-enable when US-495
                                       # is resolved

    "DeleteSizeMismatch=false",  # TODO(flowerhack) re-enable when US-495
                                 # is resolved

    "allocator_may_return_null=true",
  ]
}
