1/* GNU/Linux/aarch64 specific target description, for the remote server 2 for GDB. 3 Copyright (C) 2017-2020 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20#include "server.h" 21 22#include "linux-aarch64-tdesc.h" 23 24#include "tdesc.h" 25#include "arch/aarch64.h" 26#include "linux-aarch32-low.h" 27#include <inttypes.h> 28 29/* All possible aarch64 target descriptors. */ 30struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/]; 31 32/* Create the aarch64 target description. */ 33 34const target_desc * 35aarch64_linux_read_description (uint64_t vq, bool pauth_p) 36{ 37 if (vq > AARCH64_MAX_SVE_VQ) 38 error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq, 39 AARCH64_MAX_SVE_VQ); 40 41 struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p]; 42 43 if (tdesc == NULL) 44 { 45 tdesc = aarch64_create_target_description (vq, pauth_p); 46 47 static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; 48 static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc", 49 "vg", NULL }; 50 51 if (vq == 0) 52 init_target_desc (tdesc, expedite_regs_aarch64); 53 else 54 init_target_desc (tdesc, expedite_regs_aarch64_sve); 55 56 tdesc_aarch64_list[vq][pauth_p] = tdesc; 57 } 58 59 return tdesc; 60} 61