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