1 /* -*- mode: C -*- 2 * 3 * Copyright (c) 2008 The University of Utah 4 * All rights reserved. 5 * 6 * This file is part of `csmith', a random generator of C programs. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are met: 10 * 11 * * Redistributions of source code must retain the above copyright notice, 12 * this list of conditions and the following disclaimer. 13 * 14 * * Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef VOLATILE_RUNTIME_H 32 #define VOLATILE_RUNTIME_H 33 34 /*****************************************************************************/ 35 36 #ifndef WRAP_VOLATILES 37 # define WRAP_VOLATILES 0 38 #endif 39 40 #if WRAP_VOLATILES 41 /* 42 * Wrap accesses to volatile variables with function calls. 43 */ 44 # include <stdint.h> 45 46 # define DECLARE_VOLATILE_WRAPPERS(type) \ 47 type volatile_##type##_ptr_read(volatile type *p); \ 48 volatile type *volatile_##type##_ptr_id(volatile type *p); 49 50 DECLARE_VOLATILE_WRAPPERS(int8_t) 51 DECLARE_VOLATILE_WRAPPERS(int16_t) 52 DECLARE_VOLATILE_WRAPPERS(int32_t) 53 DECLARE_VOLATILE_WRAPPERS(int64_t) 54 DECLARE_VOLATILE_WRAPPERS(uint8_t) 55 DECLARE_VOLATILE_WRAPPERS(uint16_t) 56 DECLARE_VOLATILE_WRAPPERS(uint32_t) 57 DECLARE_VOLATILE_WRAPPERS(uint64_t) 58 59 # undef DECLARE_VOLATILE_WRAPPERS 60 61 # define VOL_LVAL(var, type) (*(volatile_##type##_ptr_id(&(var)))) 62 # define VOL_RVAL(var, type) (volatile_##type##_ptr_read(&(var))) 63 64 #else 65 /* 66 * Access volatile variables directly. 67 */ 68 # define VOL_LVAL(var, type) (var) 69 # define VOL_RVAL(var, type) (var) 70 71 #endif /* WRAP_VOLATILES */ 72 73 /*****************************************************************************/ 74 75 #endif /* VOLATILE_RUNTIME_H */ 76 77 /* 78 * Local Variables: 79 * c-basic-offset: 4 80 * tab-width: 4 81 * End: 82 */ 83 84 /* End of file. */ 85