Mercurial > hg > CbC > CbC_gcc
diff libvtv/vtv_malloc.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libvtv/vtv_malloc.h Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,104 @@ +// Copyright (C) 2012-2017 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. + +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +#ifndef _VTV_MALLOC_H +#define _VTV_MALLOC_H 1 + +#include <stdlib.h> + +/* Alignment mask for any object returned by the VTV memory pool */ +#ifdef __LP64__ +#define VTV_ALIGNMENT_MASK (0x7) +#else +#define VTV_ALIGNMENT_MASK (0x3) +#endif + +/* The following function is used to instrument the compiler and find + out how many cycles are being spent in various vtable verification + runtime library functions. */ + +#ifdef __x86_64__ +static inline unsigned long +rdtsc () +{ + unsigned long long hi, lo; + + asm volatile ("rdtsc" : "=a" (lo), "=d" (hi)); + return hi << 32 | lo; +} +#elif defined (__i386__) +static inline unsigned long long +rdtsc () +{ + unsigned long long var; + + asm volatile ("rdtsc" : "=A" (var)); + + return var; +} +#else +static inline unsigned long long +rdtsc () +{ + /* Create an empty function for unknown architectures, so that the + calls to this function in vtv_malloc.cc and vtv_rts.cc do not cause + compilation errors. */ + return ((unsigned long long) 0); +} +#endif + + +/* The following variables are used only for debugging and performance tuning + purposes. Therefore they do not need to be "protected". They cannot be used + to attack the vtable verification system and if they become corrupted it will + not affect the correctness or security of any of the rest of the vtable + verification feature. */ + +extern unsigned int num_calls_to_mprotect; +extern unsigned int num_pages_protected; +extern unsigned int num_calls_to_regset; +extern unsigned int num_calls_to_regpair; +extern unsigned long long mprotect_cycles; +extern unsigned long long regset_cycles; +extern unsigned long long regpair_cycles; + + +/* Function declarations. */ + +extern void __vtv_malloc_init (void); +extern void *__vtv_malloc (size_t size) __attribute__ ((malloc)); +extern void __vtv_free (void * ptr); +extern void __vtv_malloc_protect (void); +extern void __vtv_malloc_unprotect (void); +extern void __vtv_malloc_stats (void); +extern void __vtv_malloc_dump_stats (void); +extern int __vtv_count_mmapped_pages (void); + +#if defined (__CYGWIN__) || defined (__MINGW32__) +extern "C" int mprotect (void *addr, int len, int prot); + + #define PROT_READ 0x1 + #define PROT_WRITE 0x2 +#endif + +#endif /* vtv_malloc.h */