1 2 /*--------------------------------------------------------------------*/ 3 /*--- Header imported directly by every tool asm file. ---*/ 4 /*--- pub_tool_basics_asm.h ---*/ 5 /*--------------------------------------------------------------------*/ 6 7 /* 8 This file is part of Valgrind, a dynamic binary instrumentation 9 framework. 10 11 Copyright (C) 2000-2015 Julian Seward 12 jseward@acm.org 13 14 This program is free software; you can redistribute it and/or 15 modify it under the terms of the GNU General Public License as 16 published by the Free Software Foundation; either version 2 of the 17 License, or (at your option) any later version. 18 19 This program is distributed in the hope that it will be useful, but 20 WITHOUT ANY WARRANTY; without even the implied warranty of 21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22 General Public License for more details. 23 24 You should have received a copy of the GNU General Public License 25 along with this program; if not, write to the Free Software 26 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 27 02111-1307, USA. 28 29 The GNU General Public License is contained in the file COPYING. 30 */ 31 32 #ifndef __PUB_TOOL_BASICS_ASM_H 33 #define __PUB_TOOL_BASICS_ASM_H 34 35 // See pub_tool_basics.h for the purpose of these macros. 36 // 37 // Note that although the macros here (which are used in asm files) have the 38 // same name as those in pub_tool_basics.h (which are used in C files), they 39 // have different definitions. Actually, on Linux the definitions are the 40 // same, but on Darwin they are different. The reason is that C names on 41 // Darwin always get a '_' prepended to them by the compiler. But in order to 42 // refer to them from asm code, we have to add the '_' ourselves. Having two 43 // versions of these macros makes that difference transparent, so we can use 44 // VG_/ML_ in both asm and C files. 45 // 46 // Note also that the exact prefixes used have to match those used in 47 // pub_tool_basics.h. 48 49 #define VGAPPEND(str1,str2) str1##str2 50 51 #if defined(VGO_linux) || defined(VGO_solaris) 52 # define VG_(str) VGAPPEND( vgPlain_, str) 53 # define ML_(str) VGAPPEND( vgModuleLocal_, str) 54 #elif defined(VGO_darwin) 55 # define VG_(str) VGAPPEND(_vgPlain_, str) 56 # define ML_(str) VGAPPEND(_vgModuleLocal_, str) 57 #else 58 # error Unknown OS 59 #endif 60 61 /* Let the linker know we don't need an executable stack. 62 The call to MARK_STACK_NO_EXEC should be put unconditionally 63 at the end of all asm source files. 64 */ 65 #if defined(VGO_linux) 66 # if defined(VGA_arm) 67 # define MARK_STACK_NO_EXEC .section .note.GNU-stack,"",%progbits 68 # else 69 # define MARK_STACK_NO_EXEC .section .note.GNU-stack,"",@progbits 70 # endif 71 #else 72 # define MARK_STACK_NO_EXEC 73 #endif 74 75 #endif /* __PUB_TOOL_BASICS_ASM_H */ 76 77 /*--------------------------------------------------------------------*/ 78 /*--- end ---*/ 79 /*--------------------------------------------------------------------*/ 80