From: Florian Krohm Date: Mon, 6 Oct 2014 16:41:14 +0000 (+0000) Subject: Entangle header files a bit. Specifically, pub_core_basics.h no longer X-Git-Tag: svn/VALGRIND_3_11_0~942 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9eb0cdb015d742b40d160c2e7d86f77d26b6f5ca;p=thirdparty%2Fvalgrind.git Entangle header files a bit. Specifically, pub_core_basics.h no longer includes libvex.h. It isn't needed to successfully compile pub_core_basics.h standalone and the declarations libvex.h provides aren't used as broadly as the comment in the code implied. Move the guest-specific includes and some ifdeffery to the new file pub_core_guest.h For the curious reader: The change above avoids a problem when linking the linux-launcher which previously included libvex.h indirectly. libvex.h also defines the inline function LibVEX_Alloc which, when emitted, causes the link step to fail due to unresoled references (as the launcher does not link against libvex.a). See also BZ #339542. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14600 --- diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am index fe2a031444..0d5bec9908 100644 --- a/coregrind/Makefile.am +++ b/coregrind/Makefile.am @@ -170,6 +170,7 @@ noinst_HEADERS = \ pub_core_errormgr.h \ pub_core_execontext.h \ pub_core_gdbserver.h \ + pub_core_guest.h \ pub_core_hashtable.h \ pub_core_initimg.h \ pub_core_inner.h \ diff --git a/coregrind/pub_core_basics.h b/coregrind/pub_core_basics.h index 05b3d66099..7ac5a728e6 100644 --- a/coregrind/pub_core_basics.h +++ b/coregrind/pub_core_basics.h @@ -39,38 +39,6 @@ #include "pub_tool_basics.h" -/* --------------------------------------------------------------------- - Other headers to include - ------------------------------------------------------------------ */ - -// Might as well have the following two in here, their contents are used so -// broadly (eg. in pub_core_threadstate.h). - -#include "libvex.h" - -#if defined(VGA_x86) -# include "libvex_guest_x86.h" -#elif defined(VGA_amd64) -# include "libvex_guest_amd64.h" -#elif defined(VGA_ppc32) -# include "libvex_guest_ppc32.h" -#elif defined(VGA_ppc64be) || defined(VGA_ppc64le) -# include "libvex_guest_ppc64.h" -#elif defined(VGA_arm) -# include "libvex_guest_arm.h" -#elif defined(VGA_arm64) -# include "libvex_guest_arm64.h" -#elif defined(VGA_s390x) -# include "libvex_guest_s390x.h" -#elif defined(VGA_mips32) -# include "libvex_guest_mips32.h" -#elif defined(VGA_mips64) -# include "libvex_guest_mips64.h" -#else -# error Unknown arch -#endif - - /* --------------------------------------------------------------------- A struct to hold starting values for stack unwinding. ------------------------------------------------------------------ */ diff --git a/coregrind/pub_core_guest.h b/coregrind/pub_core_guest.h new file mode 100644 index 0000000000..3e12d41ef6 --- /dev/null +++ b/coregrind/pub_core_guest.h @@ -0,0 +1,75 @@ +/* -*- mode: C; c-basic-offset: 3; -*- */ + +/*---------------------------------------------------------------*/ +/*--- Provides guest state definition. pub_core_guest.h ---*/ +/*---------------------------------------------------------------*/ + +/* + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2014-2014 OpenWorks LLP + info@open-works.net + + This program 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 2 of the + License, or (at your option) any later version. + + This program 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + The GNU General Public License is contained in the file COPYING. + + Neither the names of the U.S. Department of Energy nor the + University of California nor the names of its contributors may be + used to endorse or promote products derived from this software + without prior written permission. +*/ + +#ifndef __PUB_CORE_GUEST_H +#define __PUB_CORE_GUEST_H + +#if defined(VGA_x86) +# include "libvex_guest_x86.h" + typedef VexGuestX86State VexGuestArchState; +#elif defined(VGA_amd64) +# include "libvex_guest_amd64.h" + typedef VexGuestAMD64State VexGuestArchState; +#elif defined(VGA_ppc32) +# include "libvex_guest_ppc32.h" + typedef VexGuestPPC32State VexGuestArchState; +#elif defined(VGA_ppc64be) || defined(VGA_ppc64le) +# include "libvex_guest_ppc64.h" + typedef VexGuestPPC64State VexGuestArchState; +#elif defined(VGA_arm) +# include "libvex_guest_arm.h" + typedef VexGuestARMState VexGuestArchState; +#elif defined(VGA_arm64) +# include "libvex_guest_arm64.h" + typedef VexGuestARM64State VexGuestArchState; +#elif defined(VGA_s390x) +# include "libvex_guest_s390x.h" + typedef VexGuestS390XState VexGuestArchState; +#elif defined(VGA_mips32) +# include "libvex_guest_mips32.h" + typedef VexGuestMIPS32State VexGuestArchState; +#elif defined(VGA_mips64) +# include "libvex_guest_mips64.h" + typedef VexGuestMIPS64State VexGuestArchState; +#else +# error Unknown arch +#endif + +#endif // __PUB_CORE_GUEST_H + +/*--------------------------------------------------------------------*/ +/*--- end ---*/ +/*--------------------------------------------------------------------*/ diff --git a/coregrind/pub_core_threadstate.h b/coregrind/pub_core_threadstate.h index bd1bc06ed9..2f322597db 100644 --- a/coregrind/pub_core_threadstate.h +++ b/coregrind/pub_core_threadstate.h @@ -42,6 +42,9 @@ #include "pub_tool_threadstate.h" #include "pub_core_libcsetjmp.h" // VG_MINIMAL_JMP_BUF #include "pub_core_vki.h" // vki_sigset_t +#include "pub_core_guest.h" // VexGuestAMD64State etc. +#include "libvex.h" // LibVEX_N_SPILL_BYTES + /*------------------------------------------------------------*/ /*--- Types ---*/ @@ -78,28 +81,6 @@ typedef VgSchedReturnCode; -#if defined(VGA_x86) - typedef VexGuestX86State VexGuestArchState; -#elif defined(VGA_amd64) - typedef VexGuestAMD64State VexGuestArchState; -#elif defined(VGA_ppc32) - typedef VexGuestPPC32State VexGuestArchState; -#elif defined(VGA_ppc64be) || defined(VGA_ppc64le) - typedef VexGuestPPC64State VexGuestArchState; -#elif defined(VGA_arm) - typedef VexGuestARMState VexGuestArchState; -#elif defined(VGA_arm64) - typedef VexGuestARM64State VexGuestArchState; -#elif defined(VGA_s390x) - typedef VexGuestS390XState VexGuestArchState; -#elif defined(VGA_mips32) - typedef VexGuestMIPS32State VexGuestArchState; -#elif defined(VGA_mips64) - typedef VexGuestMIPS64State VexGuestArchState; -#else -# error Unknown architecture -#endif - /* Forward declarations */ struct SyscallStatus; struct SyscallArgs; diff --git a/coregrind/pub_core_transtab.h b/coregrind/pub_core_transtab.h index 79fe5f8988..6f810f84fe 100644 --- a/coregrind/pub_core_transtab.h +++ b/coregrind/pub_core_transtab.h @@ -38,6 +38,7 @@ //-------------------------------------------------------------------- #include "pub_core_transtab_asm.h" +#include "libvex.h" // VexGuestExtents /* The fast-cache for tt-lookup. Unused entries are denoted by .guest == 1, which is assumed to be a bogus address for all guest code. */