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