12521d32807363e7b993631cdee52b34303c96e3anjn 22521d32807363e7b993631cdee52b34303c96e3anjn/*--------------------------------------------------------------------*/ 3c1b0181cbd6f296401daa6ff0e6e14d3a8ab91a0njn/*--- System call wrappers, etc. pub_core_syswrap.h ---*/ 42521d32807363e7b993631cdee52b34303c96e3anjn/*--------------------------------------------------------------------*/ 52521d32807363e7b993631cdee52b34303c96e3anjn 62521d32807363e7b993631cdee52b34303c96e3anjn/* 72521d32807363e7b993631cdee52b34303c96e3anjn This file is part of Valgrind, a dynamic binary instrumentation 82521d32807363e7b993631cdee52b34303c96e3anjn framework. 92521d32807363e7b993631cdee52b34303c96e3anjn 10ed39800a83baf5bffbe391f3974eb2af0f415f80Elliott Hughes Copyright (C) 2000-2017 Julian Seward 112521d32807363e7b993631cdee52b34303c96e3anjn jseward@acm.org 122521d32807363e7b993631cdee52b34303c96e3anjn 132521d32807363e7b993631cdee52b34303c96e3anjn This program is free software; you can redistribute it and/or 142521d32807363e7b993631cdee52b34303c96e3anjn modify it under the terms of the GNU General Public License as 152521d32807363e7b993631cdee52b34303c96e3anjn published by the Free Software Foundation; either version 2 of the 162521d32807363e7b993631cdee52b34303c96e3anjn License, or (at your option) any later version. 172521d32807363e7b993631cdee52b34303c96e3anjn 182521d32807363e7b993631cdee52b34303c96e3anjn This program is distributed in the hope that it will be useful, but 192521d32807363e7b993631cdee52b34303c96e3anjn WITHOUT ANY WARRANTY; without even the implied warranty of 202521d32807363e7b993631cdee52b34303c96e3anjn MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 212521d32807363e7b993631cdee52b34303c96e3anjn General Public License for more details. 222521d32807363e7b993631cdee52b34303c96e3anjn 232521d32807363e7b993631cdee52b34303c96e3anjn You should have received a copy of the GNU General Public License 242521d32807363e7b993631cdee52b34303c96e3anjn along with this program; if not, write to the Free Software 252521d32807363e7b993631cdee52b34303c96e3anjn Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 262521d32807363e7b993631cdee52b34303c96e3anjn 02111-1307, USA. 272521d32807363e7b993631cdee52b34303c96e3anjn 282521d32807363e7b993631cdee52b34303c96e3anjn The GNU General Public License is contained in the file COPYING. 292521d32807363e7b993631cdee52b34303c96e3anjn*/ 302521d32807363e7b993631cdee52b34303c96e3anjn 31c1b0181cbd6f296401daa6ff0e6e14d3a8ab91a0njn#ifndef __PUB_CORE_SYSWRAP_H 32c1b0181cbd6f296401daa6ff0e6e14d3a8ab91a0njn#define __PUB_CORE_SYSWRAP_H 332521d32807363e7b993631cdee52b34303c96e3anjn 34535fb1b49a80f2e880f755ee618381de3e222ddfflorian#include "pub_core_basics.h" // VG_ macro 35535fb1b49a80f2e880f755ee618381de3e222ddfflorian#include "pub_core_threadstate.h" // ThreadArchState 368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include "pub_core_tooliface.h" // CorePart 37535fb1b49a80f2e880f755ee618381de3e222ddfflorian 382521d32807363e7b993631cdee52b34303c96e3anjn//-------------------------------------------------------------------- 39899ce73b9eb1f679562e93f8e5c162aa049413f1njn// PURPOSE: This module contains all the syscall junk: mostly PRE/POST 40899ce73b9eb1f679562e93f8e5c162aa049413f1njn// wrappers, but also the main syscall jacketing code. 412521d32807363e7b993631cdee52b34303c96e3anjn//-------------------------------------------------------------------- 422521d32807363e7b993631cdee52b34303c96e3anjn 438c2e1530decb6cc857fa24890d02faf7efdb3312njn// Allocates a stack for the first thread, then runs it, 448c2e1530decb6cc857fa24890d02faf7efdb3312njn// as if the thread had been set up by clone() 45af839f52d74df156d655201a889954133ab01be7njnextern void VG_(main_thread_wrapper_NORETURN)(ThreadId tid); 468c2e1530decb6cc857fa24890d02faf7efdb3312njn 47f76d27a697a7b0bf3b84490baf60623fc96a23afnjnextern void VG_(client_syscall) ( ThreadId tid, UInt trc ); 482521d32807363e7b993631cdee52b34303c96e3anjn 492521d32807363e7b993631cdee52b34303c96e3anjnextern void VG_(post_syscall) ( ThreadId tid ); 502521d32807363e7b993631cdee52b34303c96e3anjn 51a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj/* Clear this module's private state for thread 'tid' */ 52a8d8e239876796bc194636b8bb4b3b3c86db8528sewardjextern void VG_(clear_syscallInfo) ( Int tid ); 53a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj 54bc3770e4f6c8fe86d5baee6e874df5bb6dbe1292rhyskidd// Returns True if the given thread is currently in a system call 55bc3770e4f6c8fe86d5baee6e874df5bb6dbe1292rhyskiddextern Bool VG_(is_in_syscall) ( Int tid ); 56bc3770e4f6c8fe86d5baee6e874df5bb6dbe1292rhyskidd 57a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj// Fix up a thread's state when syscall is interrupted by a signal. 58a8d8e239876796bc194636b8bb4b3b3c86db8528sewardjextern void VG_(fixup_guest_state_after_syscall_interrupted)( 59a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj ThreadId tid, 60a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj Addr ip, 61a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj SysRes sysret, 628eb8bab992e3998c33770b0cdb16059a8b918a06sewardj Bool restart, 638eb8bab992e3998c33770b0cdb16059a8b918a06sewardj struct vki_ucontext *uc 64a8d8e239876796bc194636b8bb4b3b3c86db8528sewardj ); 652521d32807363e7b993631cdee52b34303c96e3anjn 668eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#if defined(VGO_solaris) 678eb8bab992e3998c33770b0cdb16059a8b918a06sewardj// Determine if in a blocking syscall. 688eb8bab992e3998c33770b0cdb16059a8b918a06sewardjextern Bool VG_(is_ip_in_blocking_syscall)(ThreadId tid, Addr ip); 698eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#endif 708eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 717b85dd57f12f86a03f51f7cedea46147ef937f82njn// Wait until all other threads are dead 727b85dd57f12f86a03f51f7cedea46147ef937f82njnextern void VG_(reap_threads)(ThreadId self); 737b85dd57f12f86a03f51f7cedea46147ef937f82njn 742335d11da6922461f1481fedb5a19350391b895dnjn// Release resources held by this thread 75af839f52d74df156d655201a889954133ab01be7njnextern void VG_(cleanup_thread) ( ThreadArchState* ); 762335d11da6922461f1481fedb5a19350391b895dnjn 772521d32807363e7b993631cdee52b34303c96e3anjn/* fd leakage calls. */ 782521d32807363e7b993631cdee52b34303c96e3anjnextern void VG_(init_preopened_fds) ( void ); 79e543f3024ace2925a0fb81985e9fcfc95b8c555aflorianextern void VG_(show_open_fds) ( const HChar* when ); 802521d32807363e7b993631cdee52b34303c96e3anjn 811ae3f3ae5188a7da990be18406c7920b89f19043sewardj// When the final thread is done, where shall I call to shutdown the 821ae3f3ae5188a7da990be18406c7920b89f19043sewardj// system cleanly? Is set once at startup (in m_main) and never 831ae3f3ae5188a7da990be18406c7920b89f19043sewardj// changes after that. Is basically a pointer to the exit 841ae3f3ae5188a7da990be18406c7920b89f19043sewardj// continuation. This is all just a nasty hack to avoid calling 851ae3f3ae5188a7da990be18406c7920b89f19043sewardj// directly from m_syswrap to m_main at exit, since that would cause 861ae3f3ae5188a7da990be18406c7920b89f19043sewardj// m_main to become part of a module cycle, which is silly. 871ae3f3ae5188a7da990be18406c7920b89f19043sewardjextern void (* VG_(address_of_m_main_shutdown_actions_NORETURN) ) 881ae3f3ae5188a7da990be18406c7920b89f19043sewardj (ThreadId,VgSchedReturnCode); 891ae3f3ae5188a7da990be18406c7920b89f19043sewardj 908eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#if defined(VGO_solaris) 918eb8bab992e3998c33770b0cdb16059a8b918a06sewardjextern void VG_(save_context)(ThreadId tid, vki_ucontext_t *uc, 928eb8bab992e3998c33770b0cdb16059a8b918a06sewardj CorePart part); 938eb8bab992e3998c33770b0cdb16059a8b918a06sewardjextern void VG_(restore_context)(ThreadId tid, vki_ucontext_t *uc, 948eb8bab992e3998c33770b0cdb16059a8b918a06sewardj CorePart part, Bool esp_is_thrptr); 958eb8bab992e3998c33770b0cdb16059a8b918a06sewardjextern void VG_(syswrap_init)(void); 96e03654002556aa3ece73c344ec8c8cbe15754df1iraisrextern void VG_(change_mapping_ownership)(Addr addr, Bool once_only); 97bcfaeedb1e1ac2625eea81951a785a777834321ciraisrextern Bool VG_(setup_client_dataseg)(void); 98bcfaeedb1e1ac2625eea81951a785a777834321ciraisrextern void VG_(track_client_dataseg)(ThreadId tid); 998eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#endif 1008eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 101c1b0181cbd6f296401daa6ff0e6e14d3a8ab91a0njn#endif // __PUB_CORE_SYSWRAP_H 1022521d32807363e7b993631cdee52b34303c96e3anjn 1032521d32807363e7b993631cdee52b34303c96e3anjn/*--------------------------------------------------------------------*/ 1042521d32807363e7b993631cdee52b34303c96e3anjn/*--- end ---*/ 1052521d32807363e7b993631cdee52b34303c96e3anjn/*--------------------------------------------------------------------*/ 1062521d32807363e7b993631cdee52b34303c96e3anjn 107