
/*--------------------------------------------------------------------*/
/*--- PPC32/Linux-specific kernel interface: posix types.          ---*/
/*---                                 vki_posixtypes-ppc32-linux.h ---*/
/*--------------------------------------------------------------------*/

/*
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.

   Copyright (C) 2005 Julian Seward
      jseward@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.
*/

#ifndef __PPC32_LINUX_VKI_ARCH_POSIXTYPES_H
#define __PPC32_LINUX_VKI_ARCH_POSIXTYPES_H

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/posix_types.h
//----------------------------------------------------------------------

typedef unsigned int __vki_kernel_mode_t;
typedef long         __vki_kernel_off_t;
typedef int          __vki_kernel_pid_t;
typedef unsigned short __vki_kernel_ipc_pid_t;
typedef unsigned int __vki_kernel_uid_t;
typedef unsigned int __vki_kernel_gid_t;
typedef unsigned int __vki_kernel_size_t;
typedef long         __vki_kernel_time_t;
typedef long         __vki_kernel_suseconds_t;
typedef long         __vki_kernel_clock_t;
typedef int          __vki_kernel_timer_t;
typedef int          __vki_kernel_clockid_t;
typedef char *       __vki_kernel_caddr_t;
typedef unsigned int __vki_kernel_uid32_t;
typedef unsigned int __vki_kernel_gid32_t;

typedef unsigned int __vki_kernel_old_uid_t;
typedef unsigned int __vki_kernel_old_gid_t;

typedef long long    __vki_kernel_loff_t;

typedef struct {
   int val[2];
} __vki_kernel_fsid_t;

#endif // __PPC32_LINUX_VKI_ARCH_POSIXTYPES_H

/*--------------------------------------------------------------------*/
/*--- end                                                          ---*/
/*--------------------------------------------------------------------*/
