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