1f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov//===-- sanitizer_flags.h ---------------------------------------*- C++ -*-===// 2f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// 3f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// The LLVM Compiler Infrastructure 4f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// 5f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// This file is distributed under the University of Illinois Open Source 6f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// License. See LICENSE.TXT for details. 7f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// 8f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov//===----------------------------------------------------------------------===// 9f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// 10f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// This file is a part of ThreadSanitizer/AddressSanitizer runtime. 11f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov// 12f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov//===----------------------------------------------------------------------===// 13f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov 14f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov#ifndef SANITIZER_FLAGS_H 15f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov#define SANITIZER_FLAGS_H 16f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov 179b1b10193420f5adc769eda0d5bd548e429e0ce2Alexey Samsonov#include "sanitizer_internal_defs.h" 18f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov 19f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonovnamespace __sanitizer { 20f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov 21ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveevstruct CommonFlags { 2286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#define COMMON_FLAG(Type, Name, DefaultValue, Description) Type Name; 2386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#include "sanitizer_flags.inc" 2486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#undef COMMON_FLAG 2586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 2686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines void SetDefaults(); 2786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines void CopyFrom(const CommonFlags &other); 28ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveev}; 29ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveev 3086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Functions to get/set global CommonFlags shared by all sanitizer runtimes: 3186277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesextern CommonFlags common_flags_dont_use; 3286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesinline const CommonFlags *common_flags() { 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return &common_flags_dont_use; 34ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveev} 35ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveev 3686277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesinline void SetCommonFlagsDefaults() { 3786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines common_flags_dont_use.SetDefaults(); 3886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 3986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 4086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// This function can only be used to setup tool-specific overrides for 4186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// CommonFlags defaults. Generally, it should only be used right after 4286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// SetCommonFlagsDefaults(), but before ParseCommonFlagsFromString(), and 4386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// only during the flags initialization (i.e. before they are used for 4486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// the first time). 4586277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesinline void OverrideCommonFlags(const CommonFlags &cf) { 4686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines common_flags_dont_use.CopyFrom(cf); 4786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 48ed20ebe35c64b8c7043447f6a48b0e5adc89adedSergey Matveev 49c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainarvoid SubstituteForFlagValue(const char *s, char *out, uptr out_size); 50c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar 5186277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesclass FlagParser; 5286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesvoid RegisterCommonFlags(FlagParser *parser, 5386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines CommonFlags *cf = &common_flags_dont_use); 54799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarvoid RegisterIncludeFlags(FlagParser *parser, CommonFlags *cf); 55c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar 56c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// Should be called after parsing all flags. Sets up common flag values 57c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// and perform initializations common to all sanitizers (e.g. setting 58c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// verbosity). 59c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainarvoid InitializeCommonFlags(CommonFlags *cf = &common_flags_dont_use); 60f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov} // namespace __sanitizer 61f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov 62f3be7069465c15b4c3f6719423d6075b0cf5a871Alexey Samsonov#endif // SANITIZER_FLAGS_H 63