xref: /aosp_15_r20/external/elfutils/libebl/eblauxvinfo.c (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
1*7304104dSAndroid Build Coastguard Worker /* Describe known auxv types.
2*7304104dSAndroid Build Coastguard Worker    Copyright (C) 2007, 2008, 2009 Red Hat, Inc.
3*7304104dSAndroid Build Coastguard Worker    This file is part of elfutils.
4*7304104dSAndroid Build Coastguard Worker 
5*7304104dSAndroid Build Coastguard Worker    This file is free software; you can redistribute it and/or modify
6*7304104dSAndroid Build Coastguard Worker    it under the terms of either
7*7304104dSAndroid Build Coastguard Worker 
8*7304104dSAndroid Build Coastguard Worker      * the GNU Lesser General Public License as published by the Free
9*7304104dSAndroid Build Coastguard Worker        Software Foundation; either version 3 of the License, or (at
10*7304104dSAndroid Build Coastguard Worker        your option) any later version
11*7304104dSAndroid Build Coastguard Worker 
12*7304104dSAndroid Build Coastguard Worker    or
13*7304104dSAndroid Build Coastguard Worker 
14*7304104dSAndroid Build Coastguard Worker      * the GNU General Public License as published by the Free
15*7304104dSAndroid Build Coastguard Worker        Software Foundation; either version 2 of the License, or (at
16*7304104dSAndroid Build Coastguard Worker        your option) any later version
17*7304104dSAndroid Build Coastguard Worker 
18*7304104dSAndroid Build Coastguard Worker    or both in parallel, as here.
19*7304104dSAndroid Build Coastguard Worker 
20*7304104dSAndroid Build Coastguard Worker    elfutils is distributed in the hope that it will be useful, but
21*7304104dSAndroid Build Coastguard Worker    WITHOUT ANY WARRANTY; without even the implied warranty of
22*7304104dSAndroid Build Coastguard Worker    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23*7304104dSAndroid Build Coastguard Worker    General Public License for more details.
24*7304104dSAndroid Build Coastguard Worker 
25*7304104dSAndroid Build Coastguard Worker    You should have received copies of the GNU General Public License and
26*7304104dSAndroid Build Coastguard Worker    the GNU Lesser General Public License along with this program.  If
27*7304104dSAndroid Build Coastguard Worker    not, see <http://www.gnu.org/licenses/>.  */
28*7304104dSAndroid Build Coastguard Worker 
29*7304104dSAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
30*7304104dSAndroid Build Coastguard Worker # include <config.h>
31*7304104dSAndroid Build Coastguard Worker #endif
32*7304104dSAndroid Build Coastguard Worker 
33*7304104dSAndroid Build Coastguard Worker #include <assert.h>
34*7304104dSAndroid Build Coastguard Worker #include <byteswap.h>
35*7304104dSAndroid Build Coastguard Worker #include <endian.h>
36*7304104dSAndroid Build Coastguard Worker #include <inttypes.h>
37*7304104dSAndroid Build Coastguard Worker #include <stdio.h>
38*7304104dSAndroid Build Coastguard Worker #include <stddef.h>
39*7304104dSAndroid Build Coastguard Worker #include <libeblP.h>
40*7304104dSAndroid Build Coastguard Worker 
41*7304104dSAndroid Build Coastguard Worker #define AUXV_TYPES							      \
42*7304104dSAndroid Build Coastguard Worker   TYPE (NULL, "")							      \
43*7304104dSAndroid Build Coastguard Worker   TYPE (IGNORE, "")							      \
44*7304104dSAndroid Build Coastguard Worker   TYPE (EXECFD, "d")							      \
45*7304104dSAndroid Build Coastguard Worker   TYPE (EXECFN, "s")							      \
46*7304104dSAndroid Build Coastguard Worker   TYPE (PHDR, "p")							      \
47*7304104dSAndroid Build Coastguard Worker   TYPE (PHENT, "u")							      \
48*7304104dSAndroid Build Coastguard Worker   TYPE (PHNUM, "u")							      \
49*7304104dSAndroid Build Coastguard Worker   TYPE (PAGESZ, "u")							      \
50*7304104dSAndroid Build Coastguard Worker   TYPE (BASE, "p")							      \
51*7304104dSAndroid Build Coastguard Worker   TYPE (FLAGS, "x")							      \
52*7304104dSAndroid Build Coastguard Worker   TYPE (ENTRY, "p")							      \
53*7304104dSAndroid Build Coastguard Worker   TYPE (NOTELF, "")							      \
54*7304104dSAndroid Build Coastguard Worker   TYPE (UID, "u")							      \
55*7304104dSAndroid Build Coastguard Worker   TYPE (EUID, "u")							      \
56*7304104dSAndroid Build Coastguard Worker   TYPE (GID, "u")							      \
57*7304104dSAndroid Build Coastguard Worker   TYPE (EGID, "u")							      \
58*7304104dSAndroid Build Coastguard Worker   TYPE (CLKTCK, "u")							      \
59*7304104dSAndroid Build Coastguard Worker   TYPE (PLATFORM, "s")							      \
60*7304104dSAndroid Build Coastguard Worker   TYPE (BASE_PLATFORM, "s")						      \
61*7304104dSAndroid Build Coastguard Worker   TYPE (HWCAP, "x")							      \
62*7304104dSAndroid Build Coastguard Worker   TYPE (FPUCW, "x")							      \
63*7304104dSAndroid Build Coastguard Worker   TYPE (DCACHEBSIZE, "d")						      \
64*7304104dSAndroid Build Coastguard Worker   TYPE (ICACHEBSIZE, "d")						      \
65*7304104dSAndroid Build Coastguard Worker   TYPE (UCACHEBSIZE, "d")						      \
66*7304104dSAndroid Build Coastguard Worker   TYPE (IGNOREPPC, "")							      \
67*7304104dSAndroid Build Coastguard Worker   TYPE (SECURE, "u")							      \
68*7304104dSAndroid Build Coastguard Worker   TYPE (SYSINFO, "p")							      \
69*7304104dSAndroid Build Coastguard Worker   TYPE (SYSINFO_EHDR, "p")						      \
70*7304104dSAndroid Build Coastguard Worker   TYPE (L1I_CACHESHAPE, "d")						      \
71*7304104dSAndroid Build Coastguard Worker   TYPE (L1D_CACHESHAPE, "d")						      \
72*7304104dSAndroid Build Coastguard Worker   TYPE (L2_CACHESHAPE, "d")						      \
73*7304104dSAndroid Build Coastguard Worker   TYPE (L3_CACHESHAPE, "d")						      \
74*7304104dSAndroid Build Coastguard Worker   TYPE (RANDOM, "p")
75*7304104dSAndroid Build Coastguard Worker 
76*7304104dSAndroid Build Coastguard Worker static const struct
77*7304104dSAndroid Build Coastguard Worker {
78*7304104dSAndroid Build Coastguard Worker   const char *name, *format;
79*7304104dSAndroid Build Coastguard Worker } auxv_types[] =
80*7304104dSAndroid Build Coastguard Worker   {
81*7304104dSAndroid Build Coastguard Worker #define TYPE(name, fmt) [AT_##name] = { #name, fmt },
82*7304104dSAndroid Build Coastguard Worker     AUXV_TYPES
83*7304104dSAndroid Build Coastguard Worker #undef	TYPE
84*7304104dSAndroid Build Coastguard Worker   };
85*7304104dSAndroid Build Coastguard Worker #define nauxv_types (sizeof auxv_types / sizeof auxv_types[0])
86*7304104dSAndroid Build Coastguard Worker 
87*7304104dSAndroid Build Coastguard Worker int
ebl_auxv_info(Ebl * ebl,GElf_Xword a_type,const char ** name,const char ** format)88*7304104dSAndroid Build Coastguard Worker ebl_auxv_info (Ebl *ebl, GElf_Xword a_type, const char **name,
89*7304104dSAndroid Build Coastguard Worker 	       const char **format)
90*7304104dSAndroid Build Coastguard Worker {
91*7304104dSAndroid Build Coastguard Worker   int result = ebl->auxv_info (a_type, name, format);
92*7304104dSAndroid Build Coastguard Worker   if (result == 0 && a_type < nauxv_types && auxv_types[a_type].name != NULL)
93*7304104dSAndroid Build Coastguard Worker     {
94*7304104dSAndroid Build Coastguard Worker       /* The machine specific function did not know this type.  */
95*7304104dSAndroid Build Coastguard Worker       *name = auxv_types[a_type].name;
96*7304104dSAndroid Build Coastguard Worker       *format = auxv_types[a_type].format;
97*7304104dSAndroid Build Coastguard Worker       result = 1;
98*7304104dSAndroid Build Coastguard Worker     }
99*7304104dSAndroid Build Coastguard Worker   return result;
100*7304104dSAndroid Build Coastguard Worker }
101