1f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 2f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--------------------------------------------------------------------*/ 3f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--- Basic definitions for all of Helgrind. ---*/ 4f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--- hg_basics.h ---*/ 5f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--------------------------------------------------------------------*/ 6f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 7f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* 8f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj This file is part of Helgrind, a Valgrind tool for detecting errors 9f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj in threaded programs. 10f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 11b3a1e4bffbdbbf38304f216af405009868f43628sewardj Copyright (C) 2007-2015 OpenWorks Ltd 12f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj info@open-works.co.uk 13f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 14f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj This program is free software; you can redistribute it and/or 15f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj modify it under the terms of the GNU General Public License as 16f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj published by the Free Software Foundation; either version 2 of the 17f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj License, or (at your option) any later version. 18f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 19f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj This program is distributed in the hope that it will be useful, but 20f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj WITHOUT ANY WARRANTY; without even the implied warranty of 21f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj General Public License for more details. 23f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 24f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj You should have received a copy of the GNU General Public License 25f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj along with this program; if not, write to the Free Software 26f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 27f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 02111-1307, USA. 28f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 29f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj The GNU General Public License is contained in the file COPYING. 30f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj*/ 31f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 32f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#ifndef __HG_BASICS_H 33f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define __HG_BASICS_H 34f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 35f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 36f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*----------------------------------------------------------------*/ 37f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--- Very basic stuff ---*/ 38f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*----------------------------------------------------------------*/ 39f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 40f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define HG_(str) VGAPPEND(vgHelgrind_,str) 41f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 4219f91bbaedb4caef8a60ce94b0f507193cc0bc10florianvoid* HG_(zalloc) ( const HChar* cc, SizeT n ); 4319f91bbaedb4caef8a60ce94b0f507193cc0bc10florianvoid HG_(free) ( void* p ); 4419f91bbaedb4caef8a60ce94b0f507193cc0bc10florianHChar* HG_(strdup) ( const HChar* cc, const HChar* s ); 45f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 46f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardjstatic inline Bool HG_(is_sane_ThreadId) ( ThreadId coretid ) { 47f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj return coretid >= 0 && coretid < VG_N_THREADS; 48f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj} 49f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 50f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 51f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*----------------------------------------------------------------*/ 52f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--- Command line options ---*/ 53f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*----------------------------------------------------------------*/ 54f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 55f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* Flags for controlling for which events sanity checking is done */ 56f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_THREADS (1<<0) // Sanity check at thread create/join 57f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_LOCKS (1<<1) // Sanity check at lock events 58f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_BIGRANGE (1<<2) // Sanity check at big mem range events 59f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_ACCESS (1<<3) // Sanity check at mem accesses 60f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_LAOG (1<<4) // Sanity check at significant LAOG events 61f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 62f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#define SCE_BIGRANGE_T 256 // big mem range minimum size 63f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 64f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 65f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* Enable/disable lock order checking. Sometimes it produces a lot of 66f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj errors, possibly genuine, which nevertheless can be very 67f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj annoying. */ 68f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardjextern Bool HG_(clo_track_lockorders); 69f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 70f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* When comparing race errors for equality, should the race address be 71f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj taken into account? For users, no, but for verification purposes 72f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj (regtesting) this is sometimes important. */ 73f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardjextern Bool HG_(clo_cmp_race_err_addrs); 74f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 7523f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj/* Controls how much history to collect, in order to show conflicting 7623f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj accesses. There are three levels: 7723f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 7823f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 0: "none": don't collect any history. Fastest, but means we can 7923f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj only show one of the two stacks in a race. 8023f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 81f386139a0c24629ecf3dbaa8825a02f499d177e1sewardj 1: "approx": collect one stack trace per (notional) segment, that 8223f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj is, collect a stack trace for a thread every time its vector 83ad4e979f408239dabbaae955d8ffcb84a51a5c85florian clock changes. This facilitates showing the bounds of the 8423f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj conflicting segment(s), with relatively small overhead. 8523f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 8623f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 2: "full": collect a stack trace every time the constraints for a 8723f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj location change. This facilitates showing both stack traces in 8823f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj a race, although can be very expensive in time and space 8923f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj (depends on the rate that threads "drag" locations across 9023f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj vector-clock-change boundaries ("dragovers"). This involves 9123f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj collecting and storing large numbers of call stacks just in case 9223f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj we might need to show them later, and so is expensive (although 9323f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj very useful). */ 9423f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardjextern UWord HG_(clo_history_level); 9523f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj 9623f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj/* When doing "full" history collection, this determines the size of 9723f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj the conflicting-access cache, measured in terms of maximum possible 9823f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj number of elements in the previous-access map. Must be between 10k 9923f1200ba3aa3d8dbb484626ba1bdb7cfcf3b3a9sewardj amd 10 million. Default is 1 million. */ 100849b0ed71673805c5bdc3e44b1743a3d2c1b513dsewardjextern UWord HG_(clo_conflict_cache_size); 101f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 102f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* Sanity check level. This is an or-ing of 103f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj SCE_{THREADS,LOCKS,BIGRANGE,ACCESS,LAOG}. */ 1045e5cb009574352880f1bc530e1a73ddaae5003fcflorianextern UWord HG_(clo_sanity_flags); 105f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 106622fe49b55cb60d6132bb100236f591de1515146sewardj/* Treat heap frees as if the memory was written immediately prior to 107622fe49b55cb60d6132bb100236f591de1515146sewardj the free. This shakes out races in which memory is referenced by 108622fe49b55cb60d6132bb100236f591de1515146sewardj one thread, and freed by another, and there's no observable 109622fe49b55cb60d6132bb100236f591de1515146sewardj synchronisation event to guarantee that the reference happens 110622fe49b55cb60d6132bb100236f591de1515146sewardj before the free. */ 111622fe49b55cb60d6132bb100236f591de1515146sewardjextern Bool HG_(clo_free_is_write); 112f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 113ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj/* Controls the application of VTS pruning. There are three levels: 114ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 115ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 0: "never": VTS pruning is never done 116ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 117ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 1: "auto": (the default): VTS pruning is sometimes done after VTS 118ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj GCs, just frequently enough to keep space use under control, as 119ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj determined by heuristics in libhb_core.c. 120ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 121ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 2: "always": VTS pruning is done after every VTS GC. This is 122ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj mostly a big time waster, but minimises space use. */ 123ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardjextern UWord HG_(clo_vts_pruning); 124ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 125ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj/* When False, race checking ignores memory references which are to 126ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj the stack, which speeds things up a bit. Default: True. */ 127ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardjextern Bool HG_(clo_check_stack_refs); 128ffce8159a95134f0a2bc1cea3c3e6e265f096d9fsewardj 129f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj#endif /* ! __HG_BASICS_H */ 130f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj 131f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--------------------------------------------------------------------*/ 132f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--- end hg_basics.h ---*/ 133f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/*--------------------------------------------------------------------*/ 134