]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/elf-linux-core.h
[PATCH] fix windmc typedef bug
[thirdparty/binutils-gdb.git] / bfd / elf-linux-core.h
CommitLineData
70a38d42 1/* Definitions for PRPSINFO structures under ELF on GNU/Linux.
b3adc24a 2 Copyright (C) 2013-2020 Free Software Foundation, Inc.
70a38d42
SDJ
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
aeb70569
AM
21#ifndef ELF_LINUX_CORE_H
22#define ELF_LINUX_CORE_H
70a38d42 23
a2f63b2e
MR
24/* External 32-bit structure for PRPSINFO. This structure is
25 ABI-defined, thus we choose to use char arrays here in order to
26 avoid dealing with different types in different architectures.
27
28 This is the variant for targets which use a 32-bit data type for
29 UID and GID, as all modern Linux ports do. Some older ports use
30 a 16-bit data type instead; see below for the alternative variant.
31
32 This structure will ultimately be written in the corefile's note
33 section, as the PRPSINFO. */
34
35struct elf_external_linux_prpsinfo32_ugid32
36 {
37 char pr_state; /* Numeric process state. */
38 char pr_sname; /* Char for pr_state. */
39 char pr_zomb; /* Zombie. */
40 char pr_nice; /* Nice val. */
41 char pr_flag[4]; /* Flags. */
42 char pr_uid[4];
43 char pr_gid[4];
44 char pr_pid[4];
45 char pr_ppid[4];
46 char pr_pgrp[4];
47 char pr_sid[4];
602f1657
AM
48 char pr_fname[16] ATTRIBUTE_NONSTRING; /* Filename of executable. */
49 char pr_psargs[80] ATTRIBUTE_NONSTRING; /* Initial part of arg list. */
a2f63b2e
MR
50 };
51
52/* Helper function to copy an elf_internal_linux_prpsinfo in host
53 endian to an elf_external_linux_prpsinfo32_ugid32 in target endian. */
54
55static inline void
56swap_linux_prpsinfo32_ugid32_out
57 (bfd *obfd,
58 const struct elf_internal_linux_prpsinfo *from,
59 struct elf_external_linux_prpsinfo32_ugid32 *to)
60{
61 bfd_put_8 (obfd, from->pr_state, &to->pr_state);
62 bfd_put_8 (obfd, from->pr_sname, &to->pr_sname);
63 bfd_put_8 (obfd, from->pr_zomb, &to->pr_zomb);
64 bfd_put_8 (obfd, from->pr_nice, &to->pr_nice);
65 bfd_put_32 (obfd, from->pr_flag, to->pr_flag);
66 bfd_put_32 (obfd, from->pr_uid, to->pr_uid);
67 bfd_put_32 (obfd, from->pr_gid, to->pr_gid);
68 bfd_put_32 (obfd, from->pr_pid, to->pr_pid);
69 bfd_put_32 (obfd, from->pr_ppid, to->pr_ppid);
70 bfd_put_32 (obfd, from->pr_pgrp, to->pr_pgrp);
71 bfd_put_32 (obfd, from->pr_sid, to->pr_sid);
72 strncpy (to->pr_fname, from->pr_fname, sizeof (to->pr_fname));
73 strncpy (to->pr_psargs, from->pr_psargs, sizeof (to->pr_psargs));
74}
70a38d42
SDJ
75
76/* External 32-bit structure for PRPSINFO. This structure is
77 ABI-defined, thus we choose to use char arrays here in order to
78 avoid dealing with different types in different architectures.
79
a2f63b2e
MR
80 This is the variant for targets which use a 16-bit data type for
81 UID and GID, as some older Linux ports do. All modern ports use
82 a 32-bit data type instead; see above for the alternative variant.
83
70a38d42
SDJ
84 This structure will ultimately be written in the corefile's note
85 section, as the PRPSINFO. */
86
a2f63b2e 87struct elf_external_linux_prpsinfo32_ugid16
70a38d42
SDJ
88 {
89 char pr_state; /* Numeric process state. */
90 char pr_sname; /* Char for pr_state. */
91 char pr_zomb; /* Zombie. */
92 char pr_nice; /* Nice val. */
93 char pr_flag[4]; /* Flags. */
94 char pr_uid[2];
95 char pr_gid[2];
96 char pr_pid[4];
97 char pr_ppid[4];
98 char pr_pgrp[4];
99 char pr_sid[4];
602f1657
AM
100 char pr_fname[16] ATTRIBUTE_NONSTRING; /* Filename of executable. */
101 char pr_psargs[80] ATTRIBUTE_NONSTRING; /* Initial part of arg list. */
70a38d42
SDJ
102 };
103
aeb70569 104/* Helper function to copy an elf_internal_linux_prpsinfo in host
a2f63b2e 105 endian to an elf_external_linux_prpsinfo32_ugid16 in target endian. */
aeb70569
AM
106
107static inline void
a2f63b2e
MR
108swap_linux_prpsinfo32_ugid16_out
109 (bfd *obfd,
110 const struct elf_internal_linux_prpsinfo *from,
111 struct elf_external_linux_prpsinfo32_ugid16 *to)
aeb70569
AM
112{
113 bfd_put_8 (obfd, from->pr_state, &to->pr_state);
114 bfd_put_8 (obfd, from->pr_sname, &to->pr_sname);
115 bfd_put_8 (obfd, from->pr_zomb, &to->pr_zomb);
116 bfd_put_8 (obfd, from->pr_nice, &to->pr_nice);
117 bfd_put_32 (obfd, from->pr_flag, to->pr_flag);
118 bfd_put_16 (obfd, from->pr_uid, to->pr_uid);
119 bfd_put_16 (obfd, from->pr_gid, to->pr_gid);
120 bfd_put_32 (obfd, from->pr_pid, to->pr_pid);
121 bfd_put_32 (obfd, from->pr_ppid, to->pr_ppid);
122 bfd_put_32 (obfd, from->pr_pgrp, to->pr_pgrp);
123 bfd_put_32 (obfd, from->pr_sid, to->pr_sid);
124 strncpy (to->pr_fname, from->pr_fname, sizeof (to->pr_fname));
125 strncpy (to->pr_psargs, from->pr_psargs, sizeof (to->pr_psargs));
126}
70a38d42
SDJ
127
128/* External 64-bit structure for PRPSINFO. This structure is
129 ABI-defined, thus we choose to use char arrays here in order to
130 avoid dealing with different types in different architectures.
131
3c9a7b0d
MR
132 This is the variant for targets which use a 32-bit data type for
133 UID and GID, as most Linux ports do. The SH64 port uses a 16-bit
134 data type instead; see below for the alternative variant.
135
70a38d42
SDJ
136 This structure will ultimately be written in the corefile's note
137 section, as the PRPSINFO. */
138
3c9a7b0d 139struct elf_external_linux_prpsinfo64_ugid32
70a38d42
SDJ
140 {
141 char pr_state; /* Numeric process state. */
142 char pr_sname; /* Char for pr_state. */
143 char pr_zomb; /* Zombie. */
144 char pr_nice; /* Nice val. */
70a38d42 145 char gap[4];
72bc1bb9 146 char pr_flag[8]; /* Flags. */
70a38d42
SDJ
147 char pr_uid[4];
148 char pr_gid[4];
149 char pr_pid[4];
150 char pr_ppid[4];
151 char pr_pgrp[4];
152 char pr_sid[4];
602f1657
AM
153 char pr_fname[16] ATTRIBUTE_NONSTRING; /* Filename of executable. */
154 char pr_psargs[80] ATTRIBUTE_NONSTRING; /* Initial part of arg list. */
70a38d42
SDJ
155 };
156
aeb70569 157/* Helper function to copy an elf_internal_linux_prpsinfo in host
3c9a7b0d 158 endian to an elf_external_linux_prpsinfo64_ugid32 in target endian. */
aeb70569
AM
159
160static inline void
3c9a7b0d
MR
161swap_linux_prpsinfo64_ugid32_out
162 (bfd *obfd,
163 const struct elf_internal_linux_prpsinfo *from,
164 struct elf_external_linux_prpsinfo64_ugid32 *to)
aeb70569
AM
165{
166 bfd_put_8 (obfd, from->pr_state, &to->pr_state);
167 bfd_put_8 (obfd, from->pr_sname, &to->pr_sname);
168 bfd_put_8 (obfd, from->pr_zomb, &to->pr_zomb);
169 bfd_put_8 (obfd, from->pr_nice, &to->pr_nice);
170 bfd_put_64 (obfd, from->pr_flag, to->pr_flag);
171 bfd_put_32 (obfd, from->pr_uid, to->pr_uid);
172 bfd_put_32 (obfd, from->pr_gid, to->pr_gid);
173 bfd_put_32 (obfd, from->pr_pid, to->pr_pid);
174 bfd_put_32 (obfd, from->pr_ppid, to->pr_ppid);
175 bfd_put_32 (obfd, from->pr_pgrp, to->pr_pgrp);
176 bfd_put_32 (obfd, from->pr_sid, to->pr_sid);
177 strncpy (to->pr_fname, from->pr_fname, sizeof (to->pr_fname));
178 strncpy (to->pr_psargs, from->pr_psargs, sizeof (to->pr_psargs));
179}
70a38d42 180
3c9a7b0d
MR
181/* External 64-bit structure for PRPSINFO. This structure is
182 ABI-defined, thus we choose to use char arrays here in order to
183 avoid dealing with different types in different architectures.
184
185 This is the variant for the SH64 port which uses a 16-bit data
186 type for UID and GID. Most Linux ports use a 32-bit data type
187 instead; see above for the alternative variant.
188
189 This structure will ultimately be written in the corefile's note
190 section, as the PRPSINFO. */
191
192struct elf_external_linux_prpsinfo64_ugid16
193 {
194 char pr_state; /* Numeric process state. */
195 char pr_sname; /* Char for pr_state. */
196 char pr_zomb; /* Zombie. */
197 char pr_nice; /* Nice val. */
198 char gap[4];
199 char pr_flag[8]; /* Flags. */
200 char pr_uid[2];
201 char pr_gid[2];
202 char pr_pid[4];
203 char pr_ppid[4];
204 char pr_pgrp[4];
205 char pr_sid[4];
602f1657
AM
206 char pr_fname[16] ATTRIBUTE_NONSTRING; /* Filename of executable. */
207 char pr_psargs[80] ATTRIBUTE_NONSTRING; /* Initial part of arg list. */
3c9a7b0d
MR
208 };
209
210/* Helper function to copy an elf_internal_linux_prpsinfo in host
211 endian to an elf_external_linux_prpsinfo64_ugid16 in target endian. */
212
213static inline void
214swap_linux_prpsinfo64_ugid16_out
215 (bfd *obfd,
216 const struct elf_internal_linux_prpsinfo *from,
217 struct elf_external_linux_prpsinfo64_ugid16 *to)
218{
219 bfd_put_8 (obfd, from->pr_state, &to->pr_state);
220 bfd_put_8 (obfd, from->pr_sname, &to->pr_sname);
221 bfd_put_8 (obfd, from->pr_zomb, &to->pr_zomb);
222 bfd_put_8 (obfd, from->pr_nice, &to->pr_nice);
223 bfd_put_64 (obfd, from->pr_flag, to->pr_flag);
224 bfd_put_16 (obfd, from->pr_uid, to->pr_uid);
225 bfd_put_16 (obfd, from->pr_gid, to->pr_gid);
226 bfd_put_32 (obfd, from->pr_pid, to->pr_pid);
227 bfd_put_32 (obfd, from->pr_ppid, to->pr_ppid);
228 bfd_put_32 (obfd, from->pr_pgrp, to->pr_pgrp);
229 bfd_put_32 (obfd, from->pr_sid, to->pr_sid);
230 strncpy (to->pr_fname, from->pr_fname, sizeof (to->pr_fname));
231 strncpy (to->pr_psargs, from->pr_psargs, sizeof (to->pr_psargs));
232}
233
70a38d42 234#endif