/* -*- mode: C; c-basic-offset: 3; indent-tabs-mode: nil; -*- */
/*
  This file is part of drd, a thread error detector.

  Copyright (C) 2006-2011 Bart Van Assche <bvanassche@acm.org>.

  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., 59 Temple Place, Suite 330, Boston, MA
  02111-1307, USA.

  The GNU General Public License is contained in the file COPYING.
*/


/*
 * This header file contains the tool-internal interface for the code that
 * processes client requests.
 */


#ifndef __DRD_CLIENTREQ_H
#define __DRD_CLIENTREQ_H


#include "drd.h"
#include "drd_basics.h" /* DRD_() */


/*
 * While the client requests defined in the header file "drd.h" define a
 * public interface between client programs and the DRD tool, the client
 * requests defined below are a tool-internal interface. These last client
 * requests must only be used by the source code in the various *_intercepts.c
 * source files.
 */
enum {
   /* Declare the address and size of a variable with value
    * PTHREAD_COND_INITIALIZER.
    */
   VG_USERREQ__SET_PTHREAD_COND_INITIALIZER = VG_USERREQ_TOOL_BASE('D', 'r'),
   /* args: address, size. */

   /* To ask the drd tool to start a new segment in the specified thread. */
   VG_USERREQ__DRD_START_NEW_SEGMENT,
   /* args: POSIX thread ID. */

   /* Tell drd the pthread_t of the running thread. */
   VG_USERREQ__SET_PTHREADID,
   /* args: pthread_t. */
   /* Ask drd that a the thread's state transition from */
   /* VgTs_Zombie to VgTs_Empty is delayed until */
   /* VG_USERREQ__POST_THREAD_JOIN is performed. */
   VG_USERREQ__SET_JOINABLE,
   /* args: pthread_t, Bool */

   /* Tell DRD that the calling thread is about to enter pthread_create(). */
   VG_USERREQ__ENTERING_PTHREAD_CREATE,
   /* args: (none) */
   /* Tell DRD that the calling thread has left pthread_create(). */
   VG_USERREQ__LEFT_PTHREAD_CREATE,
   /* args: (none) */

   /* To notify drd that a thread finished because */
   /* pthread_thread_join() was called on it. */
   VG_USERREQ__POST_THREAD_JOIN,
   /* args: pthread_t (joinee) */

   /* To notify drd before a pthread_cancel call. */
   VG_USERREQ__PRE_THREAD_CANCEL,
   /* args: pthread_t */
   /* To notify drd after a pthread_cancel call. */
   VG_USERREQ__POST_THREAD_CANCEL,
   /* args: pthread_t, Bool */

   /* to notify the drd tool of a pthread_mutex_init call. */
   VG_USERREQ__PRE_MUTEX_INIT,
   /* args: Addr, MutexT */
   /* to notify the drd tool of a pthread_mutex_init call. */
   VG_USERREQ__POST_MUTEX_INIT,
   /* args: Addr */
   /* to notify the drd tool of a pthread_mutex_destroy call. */
   VG_USERREQ__PRE_MUTEX_DESTROY,
   /* args: Addr */
   /* to notify the drd tool of a pthread_mutex_destroy call. */
   VG_USERREQ__POST_MUTEX_DESTROY,
   /* args: Addr, MutexT */
   /* to notify the drd tool of pthread_mutex_lock calls */
   VG_USERREQ__PRE_MUTEX_LOCK,
   /* args: Addr, MutexT, Bool */
   /* to notify the drd tool of pthread_mutex_lock calls */
   VG_USERREQ__POST_MUTEX_LOCK,
   /* args: Addr, Bool */
   /* to notify the drd tool of pthread_mutex_unlock calls */
   VG_USERREQ__PRE_MUTEX_UNLOCK,
   /* args: Addr */
   /* to notify the drd tool of pthread_mutex_unlock calls */
   VG_USERREQ__POST_MUTEX_UNLOCK,
   /* args: Addr */
   /* to notify the drd tool of a pthread_spin_init/pthread_spin_unlock call */
   VG_USERREQ__PRE_SPIN_INIT_OR_UNLOCK,
   /* args: Addr */
   /* to notify the drd tool of a pthread_spin_init/pthread_spin_unlock call */
   VG_USERREQ__POST_SPIN_INIT_OR_UNLOCK,
   /* args: Addr */


   /* to notify the drd tool of a pthread_cond_init call. */
   VG_USERREQ__PRE_COND_INIT,
   /* args: Addr */
   /* to notify the drd tool of a pthread_cond_init call. */
   VG_USERREQ__POST_COND_INIT,
   /* args: Addr */
   /* to notify the drd tool of a pthread_cond_destroy call. */
   VG_USERREQ__PRE_COND_DESTROY,
   /* args: Addr */
   /* to notify the drd tool of a pthread_cond_destroy call. */
   VG_USERREQ__POST_COND_DESTROY,
   /* args: Addr */
   VG_USERREQ__PRE_COND_WAIT,
   /* args: Addr cond, Addr mutex, MutexT mt */
   VG_USERREQ__POST_COND_WAIT,
   /* args: Addr cond, Addr mutex, Bool took_lock*/
   VG_USERREQ__PRE_COND_SIGNAL,
   /* args: Addr cond */
   VG_USERREQ__POST_COND_SIGNAL,
   /* args: Addr cond */
   VG_USERREQ__PRE_COND_BROADCAST,
   /* args: Addr cond */
   VG_USERREQ__POST_COND_BROADCAST,
   /* args: Addr cond */

   /* To notify the drd tool of a sem_init call. */
   VG_USERREQ__PRE_SEM_INIT,
   /* args: Addr sem, Word pshared, Word value */
   /* To notify the drd tool of a sem_init call. */
   VG_USERREQ__POST_SEM_INIT,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_destroy call. */
   VG_USERREQ__PRE_SEM_DESTROY,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_destroy call. */
   VG_USERREQ__POST_SEM_DESTROY,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_open call. */
   VG_USERREQ__PRE_SEM_OPEN,
   /* args: Addr name, Word oflag, Word mode, Word value */
   /* To notify the drd tool of a sem_open call. */
   VG_USERREQ__POST_SEM_OPEN,
   /* args: Addr sem, Word oflag, Word mode, Word value */
   /* To notify the drd tool of a sem_close call. */
   VG_USERREQ__PRE_SEM_CLOSE,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_close call. */
   VG_USERREQ__POST_SEM_CLOSE,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_wait call. */
   VG_USERREQ__PRE_SEM_WAIT,
   /* args: Addr sem */
   /* To notify the drd tool of a sem_wait call. */
   VG_USERREQ__POST_SEM_WAIT,
   /* args: Addr sem, Bool waited */
   /* To notify the drd tool before a sem_post call. */
   VG_USERREQ__PRE_SEM_POST,
   /* args: Addr sem */
   /* To notify the drd tool after a sem_post call. */
   VG_USERREQ__POST_SEM_POST,
   /* args: Addr sem, Bool waited */

   /* To notify the drd tool of a pthread_barrier_init call. */
   VG_USERREQ__PRE_BARRIER_INIT,
   /* args: Addr barrier, BarrierT type, Word count, Bool reinit */
   /* To notify the drd tool of a pthread_barrier_init call. */
   VG_USERREQ__POST_BARRIER_INIT,
   /* args: Addr barrier, BarrierT type */
   /* To notify the drd tool of a pthread_barrier_destroy call. */
   VG_USERREQ__PRE_BARRIER_DESTROY,
   /* args: Addr barrier, BarrierT type. */
   /* To notify the drd tool of a pthread_barrier_destroy call. */
   VG_USERREQ__POST_BARRIER_DESTROY,
   /* args: Addr barrier, BarrierT type. */
   /* To notify the drd tool of a pthread_barrier_wait call. */
   VG_USERREQ__PRE_BARRIER_WAIT,
   /* args: Addr barrier, BarrierT type. */
   /* To notify the drd tool of a pthread_barrier_wait call. */
   VG_USERREQ__POST_BARRIER_WAIT,
   /* args: Addr barrier, BarrierT type, Word has_waited, Word serializing */

   /* To notify the drd tool of a pthread_rwlock_init call. */
   VG_USERREQ__PRE_RWLOCK_INIT,
   /* args: Addr rwlock, RwLockT */
   /* To notify the drd tool of a pthread_rwlock_destroy call. */
   VG_USERREQ__POST_RWLOCK_DESTROY,
   /* args: Addr rwlock, RwLockT */
   /* To notify the drd tool of a pthread_rwlock_rdlock call. */
   VG_USERREQ__PRE_RWLOCK_RDLOCK,
   /* args: Addr rwlock, RwLockT */
   /* To notify the drd tool of a pthread_rwlock_rdlock call. */
   VG_USERREQ__POST_RWLOCK_RDLOCK,
   /* args: Addr rwlock, RwLockT, Bool took_lock */
   /* To notify the drd tool of a pthread_rwlock_wrlock call. */
   VG_USERREQ__PRE_RWLOCK_WRLOCK,
   /* args: Addr rwlock, RwLockT */
   /* To notify the drd tool of a pthread_rwlock_wrlock call. */
   VG_USERREQ__POST_RWLOCK_WRLOCK,
   /* args: Addr rwlock, RwLockT, Bool took_lock */
   /* To notify the drd tool of a pthread_rwlock_unlock call. */
   VG_USERREQ__PRE_RWLOCK_UNLOCK,
   /* args: Addr rwlock, RwLockT */
   /* To notify the drd tool of a pthread_rwlock_unlock call. */
   VG_USERREQ__POST_RWLOCK_UNLOCK
   /* args: Addr rwlock, RwLockT, Bool unlocked */

};

/**
 * Error checking on POSIX recursive mutexes, POSIX error checking mutexes,
 * POSIX default mutexes and POSIX spinlocks happens the code in drd_mutex.c.
 * The values defined below specify the mutex type.
 */
typedef enum {
   mutex_type_unknown          = -1,
   mutex_type_invalid_mutex    = 0,
   mutex_type_recursive_mutex  = 1,
   mutex_type_errorcheck_mutex = 2,
   mutex_type_default_mutex    = 3,
   mutex_type_spinlock         = 4,
} MutexT;

/**
 * Error checking on POSIX reader/writer locks and user-defined reader/writer
 * locks happens by the code in drd_rwlock.c. The values defined below specify
 * the rwlock type.
 */
typedef enum {
   pthread_rwlock = 1,
   user_rwlock    = 2,
} RwLockT;

/*
 * Error checking on POSIX barriers and GOMP barriers happens by the same
 * code. The integer values defined below specify the type of a barrier with
 * a given client address.
 */
typedef enum {
   pthread_barrier = 1,
   gomp_barrier    = 2,
} BarrierT;


extern Bool DRD_(g_free_is_write);

void DRD_(clientreq_init)(void);


#endif //  __DRD_CLIENTREQ_H
