1a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi/* SPARC specific core note handling.
2b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper   Copyright (C) 2007 Red Hat, Inc.
3a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi   Copyright (C) 2015 Oracle, Inc.
4de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is part of elfutils.
5b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
6de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is free software; you can redistribute it and/or modify
7de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   it under the terms of either
8b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
9de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard     * the GNU Lesser General Public License as published by the Free
10de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard       Software Foundation; either version 3 of the License, or (at
11de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard       your option) any later version
12de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard
13de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   or
14de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard
15de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard     * the GNU General Public License as published by the Free
16de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard       Software Foundation; either version 2 of the License, or (at
17de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard       your option) any later version
18de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard
19de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   or both in parallel, as here.
20de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard
21de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   elfutils is distributed in the hope that it will be useful, but
22b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper   WITHOUT ANY WARRANTY; without even the implied warranty of
23b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper   General Public License for more details.
25b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
26de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   You should have received copies of the GNU General Public License and
27de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   the GNU Lesser General Public License along with this program.  If
28de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   not, see <http://www.gnu.org/licenses/>.  */
29b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
30b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#ifdef HAVE_CONFIG_H
31b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# include <config.h>
32b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#endif
33b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
34b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include <elf.h>
35b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include <inttypes.h>
36b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include <stddef.h>
37b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include <stdio.h>
38b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include <sys/time.h>
39b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
40b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#ifndef BITS
41b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define BITS 		32
42b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define BACKEND	sparc_
43b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#else
44b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define BITS 		64
45b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define BACKEND	sparc64_
46b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#endif
47b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include "libebl_CPU.h"
48b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
49b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#define GR(at, n, dwreg)						\
50b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    { .offset = at * BITS/8, .regno = dwreg, .count = n, .bits = BITS }
51b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
52b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepperstatic const Ebl_Register_Location prstatus_regs[] =
53b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper  {
54b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (0, 32, 0),		/* %g0-%g7, %o0-%o7, %i0-%i7 */
55b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#if BITS == 32
56b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (32, 1, 65),		/* %psr */
57b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (33, 2, 68),		/* %pc, %npc */
58b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (35, 1, 64),		/* %y */
59b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (36, 1, 66),		/* %wim, %tbr */
60b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#else
61b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (32, 1, 82),		/* %state */
62b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (33, 2, 80),		/* %pc, %npc */
63b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (35, 1, 85),		/* %y */
64b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#endif
65b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper  };
66b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#define PRSTATUS_REGS_SIZE	(BITS / 8 * (32 + (BITS == 32 ? 6 : 4)))
67b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
68b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepperstatic const Ebl_Register_Location fpregset_regs[] =
69b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper  {
70b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#if BITS == 32
71b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (0, 32, 32),		/* %f0-%f31 */
72b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    /* 				   padding word */
73b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (33, 1, 70),		/* %fsr */
74b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    /* 	       			   qcnt, q_entrysize, en, q, padding */
75b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define FPREGSET_SIZE		(34 * 4 + 4 + 64 * 4 + 4)
76b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#else
77b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (0, 32, 32),		/* %f0-%f31 */
78b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (32, 1, 83),		/* %fsr */
79b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    /*  33, 1, 			   %gsr */
80b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper    GR (34, 1, 84),		/* %fprs */
81b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define FPREGSET_SIZE		(35 * 8)
82b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#endif
83b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper  };
84b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
85b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#if BITS == 32
86b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ULONG			uint32_t
87b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_ULONG		4
88b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_ULONG		ELF_T_WORD
89b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_LONG		ELF_T_SWORD
90b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define UID_T			uint16_t
91b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define GID_T			uint16_t
92b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_UID_T		2
93b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_GID_T		2
94b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_UID_T		ELF_T_HALF
95b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_GID_T		ELF_T_HALF
96b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#else
97b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ULONG			uint64_t
98b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_ULONG		8
99b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_ULONG		ELF_T_XWORD
100b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_LONG		ELF_T_SXWORD
101b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define UID_T			uint32_t
102b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define GID_T			uint32_t
103b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_UID_T		4
104b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define ALIGN_GID_T		4
105b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_UID_T		ELF_T_WORD
106b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define TYPE_GID_T		ELF_T_WORD
107b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper# define SUSECONDS_HALF		1
108b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#endif
109b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#define PID_T			int32_t
110b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#define ALIGN_PID_T		4
111b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#define TYPE_PID_T		ELF_T_SWORD
112b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper
113a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi#define PRSTATUS_REGSET_ITEMS						      \
114a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi  {									      \
115a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi    .name = "pc", .type = ELF_T_ADDR, .format = 'x',			      \
116a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi    .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[33]),		      \
117a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi    .group = "register", .pc_register = true				      \
118a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi  }
119a8a22a33a8c5886d6818bd8377f11dd8f38fdc2bJose E. Marchesi
120b597dfad924980dede10d7c19d87900b6172e599Ulrich Drepper#include "linux-core-note.c"
121