1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Copyright (c) 2012, Google Inc. 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// All rights reserved. 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Redistribution and use in source and binary forms, with or without 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// modification, are permitted provided that the following conditions are 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// met: 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * Redistributions of source code must retain the above copyright 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// notice, this list of conditions and the following disclaimer. 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * Redistributions in binary form must reproduce the above 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// copyright notice, this list of conditions and the following disclaimer 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// in the documentation and/or other materials provided with the 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// distribution. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * Neither the name of Google Inc. nor the names of its 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// contributors may be used to endorse or promote products derived from 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// this software without specific prior written permission. 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 332f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes#ifdef __BIONIC_HAVE_SYS_PROCFS_H 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include_next <sys/procfs.h> 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#else 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <asm/ptrace.h> 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <sys/cdefs.h> 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <sys/user.h> 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <unistd.h> 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#ifdef __cplusplus 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectextern "C" { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#endif // __cplusplus 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#if defined(__x86_64__) || defined(__aarch64__) 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projecttypedef unsigned long long elf_greg_t; 502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes#else 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projecttypedef unsigned long elf_greg_t; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#endif 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#ifdef __arm__ 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define ELF_NGREG (sizeof(struct user_regs) / sizeof(elf_greg_t)) 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#elif defined(__aarch64__) 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define ELF_NGREG (sizeof(struct user_pt_regs) / sizeof(elf_greg_t)) 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#elif defined(__mips__) 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define ELF_NGREG 45 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#else 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) 622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes#endif 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projecttypedef elf_greg_t elf_gregset_t[ELF_NGREG]; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstruct elf_siginfo { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int si_signo; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int si_code; 692f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes int si_errno; 70}; 71 72struct elf_prstatus { 73 struct elf_siginfo pr_info; 74 short pr_cursig; 75 unsigned long pr_sigpend; 76 unsigned long pr_sighold; 77 pid_t pr_pid; 78 pid_t pr_ppid; 79 pid_t pr_pgrp; 80 pid_t pd_sid; 81 struct timeval pr_utime; 82 struct timeval pr_stime; 83 struct timeval pr_cutime; 84 struct timeval pr_cstime; 85 elf_gregset_t pr_reg; 86 int pr_fpvalid; 87}; 88 89#define ELF_PRARGSZ 80 90 91struct elf_prpsinfo { 92 char pr_state; 93 char pr_sname; 94 char pr_zomb; 95 char pr_nice; 96 unsigned long pr_flags; 97#ifdef __x86_64__ 98 unsigned int pr_uid; 99 unsigned int pr_gid; 100#elif defined(__mips__) 101 unsigned long pr_uid; 102 unsigned long pr_gid; 103#else 104 unsigned short pr_uid; 105 unsigned short pr_gid; 106#endif 107 int pr_pid; 108 int pr_ppid; 109 int pr_pgrp; 110 int pr_sid; 111 char pr_fname[16]; 112 char pr_psargs[ELF_PRARGSZ]; 113}; 114 115#ifdef __cplusplus 116} // extern "C" 117#endif // __cplusplus 118 119#endif // __BIONIC_HAVE_SYS_PROCFS_H 120 121#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H 122