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-2017 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