1309124Sdim//===-- ABISysV_arm64.cpp ---------------------------------------*- C++ -*-===// 2285101Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6285101Semaste// 7285101Semaste//===----------------------------------------------------------------------===// 8285101Semaste 9285101Semaste#include "ABISysV_arm64.h" 10285101Semaste 11309124Sdim#include <vector> 12309124Sdim 13309124Sdim#include "llvm/ADT/STLExtras.h" 14309124Sdim#include "llvm/ADT/Triple.h" 15309124Sdim 16285101Semaste#include "lldb/Core/Module.h" 17285101Semaste#include "lldb/Core/PluginManager.h" 18285101Semaste#include "lldb/Core/Value.h" 19285101Semaste#include "lldb/Core/ValueObjectConstResult.h" 20285101Semaste#include "lldb/Symbol/UnwindPlan.h" 21285101Semaste#include "lldb/Target/Process.h" 22285101Semaste#include "lldb/Target/RegisterContext.h" 23285101Semaste#include "lldb/Target/Target.h" 24285101Semaste#include "lldb/Target/Thread.h" 25321369Sdim#include "lldb/Utility/ConstString.h" 26321369Sdim#include "lldb/Utility/Log.h" 27344779Sdim#include "lldb/Utility/RegisterValue.h" 28344779Sdim#include "lldb/Utility/Scalar.h" 29321369Sdim#include "lldb/Utility/Status.h" 30285101Semaste 31285101Semaste#include "Utility/ARM64_DWARF_Registers.h" 32285101Semaste 33285101Semasteusing namespace lldb; 34285101Semasteusing namespace lldb_private; 35285101Semaste 36314564Sdimstatic RegisterInfo g_register_infos[] = { 37314564Sdim // NAME ALT SZ OFF ENCODING FORMAT 38314564Sdim // EH_FRAME DWARF GENERIC 39314564Sdim // PROCESS PLUGIN LLDB NATIVE 40314564Sdim // ========== ======= == === ============= =================== 41314564Sdim // =================== ====================== =========================== 42314564Sdim // ======================= ====================== 43314564Sdim {"x0", 44314564Sdim nullptr, 45314564Sdim 8, 46314564Sdim 0, 47314564Sdim eEncodingUint, 48314564Sdim eFormatHex, 49314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x0, LLDB_REGNUM_GENERIC_ARG1, 50314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 51314564Sdim nullptr, 52314564Sdim nullptr, 53314564Sdim nullptr, 54314564Sdim 0}, 55314564Sdim {"x1", 56314564Sdim nullptr, 57314564Sdim 8, 58314564Sdim 0, 59314564Sdim eEncodingUint, 60314564Sdim eFormatHex, 61314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x1, LLDB_REGNUM_GENERIC_ARG2, 62314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 63314564Sdim nullptr, 64314564Sdim nullptr, 65314564Sdim nullptr, 66314564Sdim 0}, 67314564Sdim {"x2", 68314564Sdim nullptr, 69314564Sdim 8, 70314564Sdim 0, 71314564Sdim eEncodingUint, 72314564Sdim eFormatHex, 73314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x2, LLDB_REGNUM_GENERIC_ARG3, 74314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 75314564Sdim nullptr, 76314564Sdim nullptr, 77314564Sdim nullptr, 78314564Sdim 0}, 79314564Sdim {"x3", 80314564Sdim nullptr, 81314564Sdim 8, 82314564Sdim 0, 83314564Sdim eEncodingUint, 84314564Sdim eFormatHex, 85314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x3, LLDB_REGNUM_GENERIC_ARG4, 86314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 87314564Sdim nullptr, 88314564Sdim nullptr, 89314564Sdim nullptr, 90314564Sdim 0}, 91314564Sdim {"x4", 92314564Sdim nullptr, 93314564Sdim 8, 94314564Sdim 0, 95314564Sdim eEncodingUint, 96314564Sdim eFormatHex, 97314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x4, LLDB_REGNUM_GENERIC_ARG5, 98314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 99314564Sdim nullptr, 100314564Sdim nullptr, 101314564Sdim nullptr, 102314564Sdim 0}, 103314564Sdim {"x5", 104314564Sdim nullptr, 105314564Sdim 8, 106314564Sdim 0, 107314564Sdim eEncodingUint, 108314564Sdim eFormatHex, 109314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x5, LLDB_REGNUM_GENERIC_ARG6, 110314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 111314564Sdim nullptr, 112314564Sdim nullptr, 113314564Sdim nullptr, 114314564Sdim 0}, 115314564Sdim {"x6", 116314564Sdim nullptr, 117314564Sdim 8, 118314564Sdim 0, 119314564Sdim eEncodingUint, 120314564Sdim eFormatHex, 121314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x6, LLDB_REGNUM_GENERIC_ARG7, 122314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 123314564Sdim nullptr, 124314564Sdim nullptr, 125314564Sdim nullptr, 126314564Sdim 0}, 127314564Sdim {"x7", 128314564Sdim nullptr, 129314564Sdim 8, 130314564Sdim 0, 131314564Sdim eEncodingUint, 132314564Sdim eFormatHex, 133314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x7, LLDB_REGNUM_GENERIC_ARG8, 134314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 135314564Sdim nullptr, 136314564Sdim nullptr, 137314564Sdim nullptr, 138314564Sdim 0}, 139314564Sdim {"x8", 140314564Sdim nullptr, 141314564Sdim 8, 142314564Sdim 0, 143314564Sdim eEncodingUint, 144314564Sdim eFormatHex, 145314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x8, LLDB_INVALID_REGNUM, 146314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 147314564Sdim nullptr, 148314564Sdim nullptr, 149314564Sdim nullptr, 150314564Sdim 0}, 151314564Sdim {"x9", 152314564Sdim nullptr, 153314564Sdim 8, 154314564Sdim 0, 155314564Sdim eEncodingUint, 156314564Sdim eFormatHex, 157314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x9, LLDB_INVALID_REGNUM, 158314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 159314564Sdim nullptr, 160314564Sdim nullptr, 161314564Sdim nullptr, 162314564Sdim 0}, 163314564Sdim {"x10", 164314564Sdim nullptr, 165314564Sdim 8, 166314564Sdim 0, 167314564Sdim eEncodingUint, 168314564Sdim eFormatHex, 169314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x10, LLDB_INVALID_REGNUM, 170314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 171314564Sdim nullptr, 172314564Sdim nullptr, 173314564Sdim nullptr, 174314564Sdim 0}, 175314564Sdim {"x11", 176314564Sdim nullptr, 177314564Sdim 8, 178314564Sdim 0, 179314564Sdim eEncodingUint, 180314564Sdim eFormatHex, 181314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x11, LLDB_INVALID_REGNUM, 182314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 183314564Sdim nullptr, 184314564Sdim nullptr, 185314564Sdim nullptr, 186314564Sdim 0}, 187314564Sdim {"x12", 188314564Sdim nullptr, 189314564Sdim 8, 190314564Sdim 0, 191314564Sdim eEncodingUint, 192314564Sdim eFormatHex, 193314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x12, LLDB_INVALID_REGNUM, 194314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 195314564Sdim nullptr, 196314564Sdim nullptr, 197314564Sdim nullptr, 198314564Sdim 0}, 199314564Sdim {"x13", 200314564Sdim nullptr, 201314564Sdim 8, 202314564Sdim 0, 203314564Sdim eEncodingUint, 204314564Sdim eFormatHex, 205314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x13, LLDB_INVALID_REGNUM, 206314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 207314564Sdim nullptr, 208314564Sdim nullptr, 209314564Sdim nullptr, 210314564Sdim 0}, 211314564Sdim {"x14", 212314564Sdim nullptr, 213314564Sdim 8, 214314564Sdim 0, 215314564Sdim eEncodingUint, 216314564Sdim eFormatHex, 217314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x14, LLDB_INVALID_REGNUM, 218314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 219314564Sdim nullptr, 220314564Sdim nullptr, 221314564Sdim nullptr, 222314564Sdim 0}, 223314564Sdim {"x15", 224314564Sdim nullptr, 225314564Sdim 8, 226314564Sdim 0, 227314564Sdim eEncodingUint, 228314564Sdim eFormatHex, 229314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x15, LLDB_INVALID_REGNUM, 230314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 231314564Sdim nullptr, 232314564Sdim nullptr, 233314564Sdim nullptr, 234314564Sdim 0}, 235314564Sdim {"x16", 236314564Sdim nullptr, 237314564Sdim 8, 238314564Sdim 0, 239314564Sdim eEncodingUint, 240314564Sdim eFormatHex, 241314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x16, LLDB_INVALID_REGNUM, 242314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 243314564Sdim nullptr, 244314564Sdim nullptr, 245314564Sdim nullptr, 246314564Sdim 0}, 247314564Sdim {"x17", 248314564Sdim nullptr, 249314564Sdim 8, 250314564Sdim 0, 251314564Sdim eEncodingUint, 252314564Sdim eFormatHex, 253314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x17, LLDB_INVALID_REGNUM, 254314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 255314564Sdim nullptr, 256314564Sdim nullptr, 257314564Sdim nullptr, 258314564Sdim 0}, 259314564Sdim {"x18", 260314564Sdim nullptr, 261314564Sdim 8, 262314564Sdim 0, 263314564Sdim eEncodingUint, 264314564Sdim eFormatHex, 265314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x18, LLDB_INVALID_REGNUM, 266314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 267314564Sdim nullptr, 268314564Sdim nullptr, 269314564Sdim nullptr, 270314564Sdim 0}, 271314564Sdim {"x19", 272314564Sdim nullptr, 273314564Sdim 8, 274314564Sdim 0, 275314564Sdim eEncodingUint, 276314564Sdim eFormatHex, 277314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x19, LLDB_INVALID_REGNUM, 278314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 279314564Sdim nullptr, 280314564Sdim nullptr, 281314564Sdim nullptr, 282314564Sdim 0}, 283314564Sdim {"x20", 284314564Sdim nullptr, 285314564Sdim 8, 286314564Sdim 0, 287314564Sdim eEncodingUint, 288314564Sdim eFormatHex, 289314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x20, LLDB_INVALID_REGNUM, 290314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 291314564Sdim nullptr, 292314564Sdim nullptr, 293314564Sdim nullptr, 294314564Sdim 0}, 295314564Sdim {"x21", 296314564Sdim nullptr, 297314564Sdim 8, 298314564Sdim 0, 299314564Sdim eEncodingUint, 300314564Sdim eFormatHex, 301314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x21, LLDB_INVALID_REGNUM, 302314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 303314564Sdim nullptr, 304314564Sdim nullptr, 305314564Sdim nullptr, 306314564Sdim 0}, 307314564Sdim {"x22", 308314564Sdim nullptr, 309314564Sdim 8, 310314564Sdim 0, 311314564Sdim eEncodingUint, 312314564Sdim eFormatHex, 313314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x22, LLDB_INVALID_REGNUM, 314314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 315314564Sdim nullptr, 316314564Sdim nullptr, 317314564Sdim nullptr, 318314564Sdim 0}, 319314564Sdim {"x23", 320314564Sdim nullptr, 321314564Sdim 8, 322314564Sdim 0, 323314564Sdim eEncodingUint, 324314564Sdim eFormatHex, 325314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x23, LLDB_INVALID_REGNUM, 326314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 327314564Sdim nullptr, 328314564Sdim nullptr, 329314564Sdim nullptr, 330314564Sdim 0}, 331314564Sdim {"x24", 332314564Sdim nullptr, 333314564Sdim 8, 334314564Sdim 0, 335314564Sdim eEncodingUint, 336314564Sdim eFormatHex, 337314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x24, LLDB_INVALID_REGNUM, 338314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 339314564Sdim nullptr, 340314564Sdim nullptr, 341314564Sdim nullptr, 342314564Sdim 0}, 343314564Sdim {"x25", 344314564Sdim nullptr, 345314564Sdim 8, 346314564Sdim 0, 347314564Sdim eEncodingUint, 348314564Sdim eFormatHex, 349314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x25, LLDB_INVALID_REGNUM, 350314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 351314564Sdim nullptr, 352314564Sdim nullptr, 353314564Sdim nullptr, 354314564Sdim 0}, 355314564Sdim {"x26", 356314564Sdim nullptr, 357314564Sdim 8, 358314564Sdim 0, 359314564Sdim eEncodingUint, 360314564Sdim eFormatHex, 361314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x26, LLDB_INVALID_REGNUM, 362314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 363314564Sdim nullptr, 364314564Sdim nullptr, 365314564Sdim nullptr, 366314564Sdim 0}, 367314564Sdim {"x27", 368314564Sdim nullptr, 369314564Sdim 8, 370314564Sdim 0, 371314564Sdim eEncodingUint, 372314564Sdim eFormatHex, 373314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x27, LLDB_INVALID_REGNUM, 374314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 375314564Sdim nullptr, 376314564Sdim nullptr, 377314564Sdim nullptr, 378314564Sdim 0}, 379314564Sdim {"x28", 380314564Sdim nullptr, 381314564Sdim 8, 382314564Sdim 0, 383314564Sdim eEncodingUint, 384314564Sdim eFormatHex, 385314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x28, LLDB_INVALID_REGNUM, 386314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 387314564Sdim nullptr, 388314564Sdim nullptr, 389314564Sdim nullptr, 390314564Sdim 0}, 391314564Sdim {"fp", 392314564Sdim "x29", 393314564Sdim 8, 394314564Sdim 0, 395314564Sdim eEncodingUint, 396314564Sdim eFormatHex, 397314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x29, LLDB_REGNUM_GENERIC_FP, 398314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 399314564Sdim nullptr, 400314564Sdim nullptr, 401314564Sdim nullptr, 402314564Sdim 0}, 403314564Sdim {"lr", 404314564Sdim "x30", 405314564Sdim 8, 406314564Sdim 0, 407314564Sdim eEncodingUint, 408314564Sdim eFormatHex, 409314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x30, LLDB_REGNUM_GENERIC_RA, 410314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 411314564Sdim nullptr, 412314564Sdim nullptr, 413314564Sdim nullptr, 414314564Sdim 0}, 415314564Sdim {"sp", 416314564Sdim "x31", 417314564Sdim 8, 418314564Sdim 0, 419314564Sdim eEncodingUint, 420314564Sdim eFormatHex, 421314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x31, LLDB_REGNUM_GENERIC_SP, 422314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 423314564Sdim nullptr, 424314564Sdim nullptr, 425314564Sdim nullptr, 426314564Sdim 0}, 427314564Sdim {"pc", 428314564Sdim nullptr, 429314564Sdim 8, 430314564Sdim 0, 431314564Sdim eEncodingUint, 432314564Sdim eFormatHex, 433314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::pc, LLDB_REGNUM_GENERIC_PC, 434314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 435314564Sdim nullptr, 436314564Sdim nullptr, 437314564Sdim nullptr, 438314564Sdim 0}, 439314564Sdim {"cpsr", 440314564Sdim "psr", 441314564Sdim 4, 442314564Sdim 0, 443314564Sdim eEncodingUint, 444314564Sdim eFormatHex, 445314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS, 446314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 447314564Sdim nullptr, 448314564Sdim nullptr, 449314564Sdim nullptr, 450314564Sdim 0}, 451285101Semaste 452314564Sdim {"v0", 453314564Sdim nullptr, 454314564Sdim 16, 455314564Sdim 0, 456314564Sdim eEncodingVector, 457314564Sdim eFormatVectorOfUInt8, 458314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v0, LLDB_INVALID_REGNUM, 459314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 460314564Sdim nullptr, 461314564Sdim nullptr, 462314564Sdim nullptr, 463314564Sdim 0}, 464314564Sdim {"v1", 465314564Sdim nullptr, 466314564Sdim 16, 467314564Sdim 0, 468314564Sdim eEncodingVector, 469314564Sdim eFormatVectorOfUInt8, 470314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v1, LLDB_INVALID_REGNUM, 471314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 472314564Sdim nullptr, 473314564Sdim nullptr, 474314564Sdim nullptr, 475314564Sdim 0}, 476314564Sdim {"v2", 477314564Sdim nullptr, 478314564Sdim 16, 479314564Sdim 0, 480314564Sdim eEncodingVector, 481314564Sdim eFormatVectorOfUInt8, 482314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v2, LLDB_INVALID_REGNUM, 483314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 484314564Sdim nullptr, 485314564Sdim nullptr, 486314564Sdim nullptr, 487314564Sdim 0}, 488314564Sdim {"v3", 489314564Sdim nullptr, 490314564Sdim 16, 491314564Sdim 0, 492314564Sdim eEncodingVector, 493314564Sdim eFormatVectorOfUInt8, 494314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v3, LLDB_INVALID_REGNUM, 495314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 496314564Sdim nullptr, 497314564Sdim nullptr, 498314564Sdim nullptr, 499314564Sdim 0}, 500314564Sdim {"v4", 501314564Sdim nullptr, 502314564Sdim 16, 503314564Sdim 0, 504314564Sdim eEncodingVector, 505314564Sdim eFormatVectorOfUInt8, 506314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v4, LLDB_INVALID_REGNUM, 507314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 508314564Sdim nullptr, 509314564Sdim nullptr, 510314564Sdim nullptr, 511314564Sdim 0}, 512314564Sdim {"v5", 513314564Sdim nullptr, 514314564Sdim 16, 515314564Sdim 0, 516314564Sdim eEncodingVector, 517314564Sdim eFormatVectorOfUInt8, 518314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v5, LLDB_INVALID_REGNUM, 519314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 520314564Sdim nullptr, 521314564Sdim nullptr, 522314564Sdim nullptr, 523314564Sdim 0}, 524314564Sdim {"v6", 525314564Sdim nullptr, 526314564Sdim 16, 527314564Sdim 0, 528314564Sdim eEncodingVector, 529314564Sdim eFormatVectorOfUInt8, 530314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v6, LLDB_INVALID_REGNUM, 531314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 532314564Sdim nullptr, 533314564Sdim nullptr, 534314564Sdim nullptr, 535314564Sdim 0}, 536314564Sdim {"v7", 537314564Sdim nullptr, 538314564Sdim 16, 539314564Sdim 0, 540314564Sdim eEncodingVector, 541314564Sdim eFormatVectorOfUInt8, 542314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v7, LLDB_INVALID_REGNUM, 543314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 544314564Sdim nullptr, 545314564Sdim nullptr, 546314564Sdim nullptr, 547314564Sdim 0}, 548314564Sdim {"v8", 549314564Sdim nullptr, 550314564Sdim 16, 551314564Sdim 0, 552314564Sdim eEncodingVector, 553314564Sdim eFormatVectorOfUInt8, 554314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v8, LLDB_INVALID_REGNUM, 555314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 556314564Sdim nullptr, 557314564Sdim nullptr, 558314564Sdim nullptr, 559314564Sdim 0}, 560314564Sdim {"v9", 561314564Sdim nullptr, 562314564Sdim 16, 563314564Sdim 0, 564314564Sdim eEncodingVector, 565314564Sdim eFormatVectorOfUInt8, 566314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v9, LLDB_INVALID_REGNUM, 567314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 568314564Sdim nullptr, 569314564Sdim nullptr, 570314564Sdim nullptr, 571314564Sdim 0}, 572314564Sdim {"v10", 573314564Sdim nullptr, 574314564Sdim 16, 575314564Sdim 0, 576314564Sdim eEncodingVector, 577314564Sdim eFormatVectorOfUInt8, 578314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v10, LLDB_INVALID_REGNUM, 579314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 580314564Sdim nullptr, 581314564Sdim nullptr, 582314564Sdim nullptr, 583314564Sdim 0}, 584314564Sdim {"v11", 585314564Sdim nullptr, 586314564Sdim 16, 587314564Sdim 0, 588314564Sdim eEncodingVector, 589314564Sdim eFormatVectorOfUInt8, 590314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v11, LLDB_INVALID_REGNUM, 591314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 592314564Sdim nullptr, 593314564Sdim nullptr, 594314564Sdim nullptr, 595314564Sdim 0}, 596314564Sdim {"v12", 597314564Sdim nullptr, 598314564Sdim 16, 599314564Sdim 0, 600314564Sdim eEncodingVector, 601314564Sdim eFormatVectorOfUInt8, 602314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v12, LLDB_INVALID_REGNUM, 603314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 604314564Sdim nullptr, 605314564Sdim nullptr, 606314564Sdim nullptr, 607314564Sdim 0}, 608314564Sdim {"v13", 609314564Sdim nullptr, 610314564Sdim 16, 611314564Sdim 0, 612314564Sdim eEncodingVector, 613314564Sdim eFormatVectorOfUInt8, 614314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v13, LLDB_INVALID_REGNUM, 615314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 616314564Sdim nullptr, 617314564Sdim nullptr, 618314564Sdim nullptr, 619314564Sdim 0}, 620314564Sdim {"v14", 621314564Sdim nullptr, 622314564Sdim 16, 623314564Sdim 0, 624314564Sdim eEncodingVector, 625314564Sdim eFormatVectorOfUInt8, 626314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v14, LLDB_INVALID_REGNUM, 627314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 628314564Sdim nullptr, 629314564Sdim nullptr, 630314564Sdim nullptr, 631314564Sdim 0}, 632314564Sdim {"v15", 633314564Sdim nullptr, 634314564Sdim 16, 635314564Sdim 0, 636314564Sdim eEncodingVector, 637314564Sdim eFormatVectorOfUInt8, 638314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v15, LLDB_INVALID_REGNUM, 639314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 640314564Sdim nullptr, 641314564Sdim nullptr, 642314564Sdim nullptr, 643314564Sdim 0}, 644314564Sdim {"v16", 645314564Sdim nullptr, 646314564Sdim 16, 647314564Sdim 0, 648314564Sdim eEncodingVector, 649314564Sdim eFormatVectorOfUInt8, 650314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v16, LLDB_INVALID_REGNUM, 651314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 652314564Sdim nullptr, 653314564Sdim nullptr, 654314564Sdim nullptr, 655314564Sdim 0}, 656314564Sdim {"v17", 657314564Sdim nullptr, 658314564Sdim 16, 659314564Sdim 0, 660314564Sdim eEncodingVector, 661314564Sdim eFormatVectorOfUInt8, 662314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v17, LLDB_INVALID_REGNUM, 663314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 664314564Sdim nullptr, 665314564Sdim nullptr, 666314564Sdim nullptr, 667314564Sdim 0}, 668314564Sdim {"v18", 669314564Sdim nullptr, 670314564Sdim 16, 671314564Sdim 0, 672314564Sdim eEncodingVector, 673314564Sdim eFormatVectorOfUInt8, 674314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v18, LLDB_INVALID_REGNUM, 675314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 676314564Sdim nullptr, 677314564Sdim nullptr, 678314564Sdim nullptr, 679314564Sdim 0}, 680314564Sdim {"v19", 681314564Sdim nullptr, 682314564Sdim 16, 683314564Sdim 0, 684314564Sdim eEncodingVector, 685314564Sdim eFormatVectorOfUInt8, 686314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v19, LLDB_INVALID_REGNUM, 687314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 688314564Sdim nullptr, 689314564Sdim nullptr, 690314564Sdim nullptr, 691314564Sdim 0}, 692314564Sdim {"v20", 693314564Sdim nullptr, 694314564Sdim 16, 695314564Sdim 0, 696314564Sdim eEncodingVector, 697314564Sdim eFormatVectorOfUInt8, 698314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v20, LLDB_INVALID_REGNUM, 699314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 700314564Sdim nullptr, 701314564Sdim nullptr, 702314564Sdim nullptr, 703314564Sdim 0}, 704314564Sdim {"v21", 705314564Sdim nullptr, 706314564Sdim 16, 707314564Sdim 0, 708314564Sdim eEncodingVector, 709314564Sdim eFormatVectorOfUInt8, 710314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v21, LLDB_INVALID_REGNUM, 711314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 712314564Sdim nullptr, 713314564Sdim nullptr, 714314564Sdim nullptr, 715314564Sdim 0}, 716314564Sdim {"v22", 717314564Sdim nullptr, 718314564Sdim 16, 719314564Sdim 0, 720314564Sdim eEncodingVector, 721314564Sdim eFormatVectorOfUInt8, 722314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v22, LLDB_INVALID_REGNUM, 723314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 724314564Sdim nullptr, 725314564Sdim nullptr, 726314564Sdim nullptr, 727314564Sdim 0}, 728314564Sdim {"v23", 729314564Sdim nullptr, 730314564Sdim 16, 731314564Sdim 0, 732314564Sdim eEncodingVector, 733314564Sdim eFormatVectorOfUInt8, 734314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v23, LLDB_INVALID_REGNUM, 735314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 736314564Sdim nullptr, 737314564Sdim nullptr, 738314564Sdim nullptr, 739314564Sdim 0}, 740314564Sdim {"v24", 741314564Sdim nullptr, 742314564Sdim 16, 743314564Sdim 0, 744314564Sdim eEncodingVector, 745314564Sdim eFormatVectorOfUInt8, 746314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v24, LLDB_INVALID_REGNUM, 747314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 748314564Sdim nullptr, 749314564Sdim nullptr, 750314564Sdim nullptr, 751314564Sdim 0}, 752314564Sdim {"v25", 753314564Sdim nullptr, 754314564Sdim 16, 755314564Sdim 0, 756314564Sdim eEncodingVector, 757314564Sdim eFormatVectorOfUInt8, 758314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v25, LLDB_INVALID_REGNUM, 759314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 760314564Sdim nullptr, 761314564Sdim nullptr, 762314564Sdim nullptr, 763314564Sdim 0}, 764314564Sdim {"v26", 765314564Sdim nullptr, 766314564Sdim 16, 767314564Sdim 0, 768314564Sdim eEncodingVector, 769314564Sdim eFormatVectorOfUInt8, 770314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v26, LLDB_INVALID_REGNUM, 771314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 772314564Sdim nullptr, 773314564Sdim nullptr, 774314564Sdim nullptr, 775314564Sdim 0}, 776314564Sdim {"v27", 777314564Sdim nullptr, 778314564Sdim 16, 779314564Sdim 0, 780314564Sdim eEncodingVector, 781314564Sdim eFormatVectorOfUInt8, 782314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v27, LLDB_INVALID_REGNUM, 783314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 784314564Sdim nullptr, 785314564Sdim nullptr, 786314564Sdim nullptr, 787314564Sdim 0}, 788314564Sdim {"v28", 789314564Sdim nullptr, 790314564Sdim 16, 791314564Sdim 0, 792314564Sdim eEncodingVector, 793314564Sdim eFormatVectorOfUInt8, 794314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v28, LLDB_INVALID_REGNUM, 795314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 796314564Sdim nullptr, 797314564Sdim nullptr, 798314564Sdim nullptr, 799314564Sdim 0}, 800314564Sdim {"v29", 801314564Sdim nullptr, 802314564Sdim 16, 803314564Sdim 0, 804314564Sdim eEncodingVector, 805314564Sdim eFormatVectorOfUInt8, 806314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v29, LLDB_INVALID_REGNUM, 807314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 808314564Sdim nullptr, 809314564Sdim nullptr, 810314564Sdim nullptr, 811314564Sdim 0}, 812314564Sdim {"v30", 813314564Sdim nullptr, 814314564Sdim 16, 815314564Sdim 0, 816314564Sdim eEncodingVector, 817314564Sdim eFormatVectorOfUInt8, 818314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v30, LLDB_INVALID_REGNUM, 819314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 820314564Sdim nullptr, 821314564Sdim nullptr, 822314564Sdim nullptr, 823314564Sdim 0}, 824314564Sdim {"v31", 825314564Sdim nullptr, 826314564Sdim 16, 827314564Sdim 0, 828314564Sdim eEncodingVector, 829314564Sdim eFormatVectorOfUInt8, 830314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v31, LLDB_INVALID_REGNUM, 831314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 832314564Sdim nullptr, 833314564Sdim nullptr, 834314564Sdim nullptr, 835314564Sdim 0}, 836285101Semaste 837314564Sdim {"fpsr", 838314564Sdim nullptr, 839314564Sdim 4, 840314564Sdim 0, 841314564Sdim eEncodingUint, 842314564Sdim eFormatHex, 843314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 844314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 845314564Sdim nullptr, 846314564Sdim nullptr, 847314564Sdim nullptr, 848314564Sdim 0}, 849314564Sdim {"fpcr", 850314564Sdim nullptr, 851314564Sdim 4, 852314564Sdim 0, 853314564Sdim eEncodingUint, 854314564Sdim eFormatHex, 855314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 856314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 857314564Sdim nullptr, 858314564Sdim nullptr, 859314564Sdim nullptr, 860314564Sdim 0}, 861285101Semaste 862314564Sdim {"s0", 863314564Sdim nullptr, 864314564Sdim 4, 865314564Sdim 0, 866314564Sdim eEncodingIEEE754, 867314564Sdim eFormatFloat, 868314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 869314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 870314564Sdim nullptr, 871314564Sdim nullptr, 872314564Sdim nullptr, 873314564Sdim 0}, 874314564Sdim {"s1", 875314564Sdim nullptr, 876314564Sdim 4, 877314564Sdim 0, 878314564Sdim eEncodingIEEE754, 879314564Sdim eFormatFloat, 880314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 881314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 882314564Sdim nullptr, 883314564Sdim nullptr, 884314564Sdim nullptr, 885314564Sdim 0}, 886314564Sdim {"s2", 887314564Sdim nullptr, 888314564Sdim 4, 889314564Sdim 0, 890314564Sdim eEncodingIEEE754, 891314564Sdim eFormatFloat, 892314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 893314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 894314564Sdim nullptr, 895314564Sdim nullptr, 896314564Sdim nullptr, 897314564Sdim 0}, 898314564Sdim {"s3", 899314564Sdim nullptr, 900314564Sdim 4, 901314564Sdim 0, 902314564Sdim eEncodingIEEE754, 903314564Sdim eFormatFloat, 904314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 905314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 906314564Sdim nullptr, 907314564Sdim nullptr, 908314564Sdim nullptr, 909314564Sdim 0}, 910314564Sdim {"s4", 911314564Sdim nullptr, 912314564Sdim 4, 913314564Sdim 0, 914314564Sdim eEncodingIEEE754, 915314564Sdim eFormatFloat, 916314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 917314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 918314564Sdim nullptr, 919314564Sdim nullptr, 920314564Sdim nullptr, 921314564Sdim 0}, 922314564Sdim {"s5", 923314564Sdim nullptr, 924314564Sdim 4, 925314564Sdim 0, 926314564Sdim eEncodingIEEE754, 927314564Sdim eFormatFloat, 928314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 929314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 930314564Sdim nullptr, 931314564Sdim nullptr, 932314564Sdim nullptr, 933314564Sdim 0}, 934314564Sdim {"s6", 935314564Sdim nullptr, 936314564Sdim 4, 937314564Sdim 0, 938314564Sdim eEncodingIEEE754, 939314564Sdim eFormatFloat, 940314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 941314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 942314564Sdim nullptr, 943314564Sdim nullptr, 944314564Sdim nullptr, 945314564Sdim 0}, 946314564Sdim {"s7", 947314564Sdim nullptr, 948314564Sdim 4, 949314564Sdim 0, 950314564Sdim eEncodingIEEE754, 951314564Sdim eFormatFloat, 952314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 953314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 954314564Sdim nullptr, 955314564Sdim nullptr, 956314564Sdim nullptr, 957314564Sdim 0}, 958314564Sdim {"s8", 959314564Sdim nullptr, 960314564Sdim 4, 961314564Sdim 0, 962314564Sdim eEncodingIEEE754, 963314564Sdim eFormatFloat, 964314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 965314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 966314564Sdim nullptr, 967314564Sdim nullptr, 968314564Sdim nullptr, 969314564Sdim 0}, 970314564Sdim {"s9", 971314564Sdim nullptr, 972314564Sdim 4, 973314564Sdim 0, 974314564Sdim eEncodingIEEE754, 975314564Sdim eFormatFloat, 976314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 977314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 978314564Sdim nullptr, 979314564Sdim nullptr, 980314564Sdim nullptr, 981314564Sdim 0}, 982314564Sdim {"s10", 983314564Sdim nullptr, 984314564Sdim 4, 985314564Sdim 0, 986314564Sdim eEncodingIEEE754, 987314564Sdim eFormatFloat, 988314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 989314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 990314564Sdim nullptr, 991314564Sdim nullptr, 992314564Sdim nullptr, 993314564Sdim 0}, 994314564Sdim {"s11", 995314564Sdim nullptr, 996314564Sdim 4, 997314564Sdim 0, 998314564Sdim eEncodingIEEE754, 999314564Sdim eFormatFloat, 1000314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1001314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1002314564Sdim nullptr, 1003314564Sdim nullptr, 1004314564Sdim nullptr, 1005314564Sdim 0}, 1006314564Sdim {"s12", 1007314564Sdim nullptr, 1008314564Sdim 4, 1009314564Sdim 0, 1010314564Sdim eEncodingIEEE754, 1011314564Sdim eFormatFloat, 1012314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1013314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1014314564Sdim nullptr, 1015314564Sdim nullptr, 1016314564Sdim nullptr, 1017314564Sdim 0}, 1018314564Sdim {"s13", 1019314564Sdim nullptr, 1020314564Sdim 4, 1021314564Sdim 0, 1022314564Sdim eEncodingIEEE754, 1023314564Sdim eFormatFloat, 1024314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1025314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1026314564Sdim nullptr, 1027314564Sdim nullptr, 1028314564Sdim nullptr, 1029314564Sdim 0}, 1030314564Sdim {"s14", 1031314564Sdim nullptr, 1032314564Sdim 4, 1033314564Sdim 0, 1034314564Sdim eEncodingIEEE754, 1035314564Sdim eFormatFloat, 1036314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1037314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1038314564Sdim nullptr, 1039314564Sdim nullptr, 1040314564Sdim nullptr, 1041314564Sdim 0}, 1042314564Sdim {"s15", 1043314564Sdim nullptr, 1044314564Sdim 4, 1045314564Sdim 0, 1046314564Sdim eEncodingIEEE754, 1047314564Sdim eFormatFloat, 1048314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1049314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1050314564Sdim nullptr, 1051314564Sdim nullptr, 1052314564Sdim nullptr, 1053314564Sdim 0}, 1054314564Sdim {"s16", 1055314564Sdim nullptr, 1056314564Sdim 4, 1057314564Sdim 0, 1058314564Sdim eEncodingIEEE754, 1059314564Sdim eFormatFloat, 1060314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1061314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1062314564Sdim nullptr, 1063314564Sdim nullptr, 1064314564Sdim nullptr, 1065314564Sdim 0}, 1066314564Sdim {"s17", 1067314564Sdim nullptr, 1068314564Sdim 4, 1069314564Sdim 0, 1070314564Sdim eEncodingIEEE754, 1071314564Sdim eFormatFloat, 1072314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1073314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1074314564Sdim nullptr, 1075314564Sdim nullptr, 1076314564Sdim nullptr, 1077314564Sdim 0}, 1078314564Sdim {"s18", 1079314564Sdim nullptr, 1080314564Sdim 4, 1081314564Sdim 0, 1082314564Sdim eEncodingIEEE754, 1083314564Sdim eFormatFloat, 1084314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1085314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1086314564Sdim nullptr, 1087314564Sdim nullptr, 1088314564Sdim nullptr, 1089314564Sdim 0}, 1090314564Sdim {"s19", 1091314564Sdim nullptr, 1092314564Sdim 4, 1093314564Sdim 0, 1094314564Sdim eEncodingIEEE754, 1095314564Sdim eFormatFloat, 1096314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1097314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1098314564Sdim nullptr, 1099314564Sdim nullptr, 1100314564Sdim nullptr, 1101314564Sdim 0}, 1102314564Sdim {"s20", 1103314564Sdim nullptr, 1104314564Sdim 4, 1105314564Sdim 0, 1106314564Sdim eEncodingIEEE754, 1107314564Sdim eFormatFloat, 1108314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1109314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1110314564Sdim nullptr, 1111314564Sdim nullptr, 1112314564Sdim nullptr, 1113314564Sdim 0}, 1114314564Sdim {"s21", 1115314564Sdim nullptr, 1116314564Sdim 4, 1117314564Sdim 0, 1118314564Sdim eEncodingIEEE754, 1119314564Sdim eFormatFloat, 1120314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1121314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1122314564Sdim nullptr, 1123314564Sdim nullptr, 1124314564Sdim nullptr, 1125314564Sdim 0}, 1126314564Sdim {"s22", 1127314564Sdim nullptr, 1128314564Sdim 4, 1129314564Sdim 0, 1130314564Sdim eEncodingIEEE754, 1131314564Sdim eFormatFloat, 1132314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1133314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1134314564Sdim nullptr, 1135314564Sdim nullptr, 1136314564Sdim nullptr, 1137314564Sdim 0}, 1138314564Sdim {"s23", 1139314564Sdim nullptr, 1140314564Sdim 4, 1141314564Sdim 0, 1142314564Sdim eEncodingIEEE754, 1143314564Sdim eFormatFloat, 1144314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1145314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1146314564Sdim nullptr, 1147314564Sdim nullptr, 1148314564Sdim nullptr, 1149314564Sdim 0}, 1150314564Sdim {"s24", 1151314564Sdim nullptr, 1152314564Sdim 4, 1153314564Sdim 0, 1154314564Sdim eEncodingIEEE754, 1155314564Sdim eFormatFloat, 1156314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1157314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1158314564Sdim nullptr, 1159314564Sdim nullptr, 1160314564Sdim nullptr, 1161314564Sdim 0}, 1162314564Sdim {"s25", 1163314564Sdim nullptr, 1164314564Sdim 4, 1165314564Sdim 0, 1166314564Sdim eEncodingIEEE754, 1167314564Sdim eFormatFloat, 1168314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1169314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1170314564Sdim nullptr, 1171314564Sdim nullptr, 1172314564Sdim nullptr, 1173314564Sdim 0}, 1174314564Sdim {"s26", 1175314564Sdim nullptr, 1176314564Sdim 4, 1177314564Sdim 0, 1178314564Sdim eEncodingIEEE754, 1179314564Sdim eFormatFloat, 1180314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1181314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1182314564Sdim nullptr, 1183314564Sdim nullptr, 1184314564Sdim nullptr, 1185314564Sdim 0}, 1186314564Sdim {"s27", 1187314564Sdim nullptr, 1188314564Sdim 4, 1189314564Sdim 0, 1190314564Sdim eEncodingIEEE754, 1191314564Sdim eFormatFloat, 1192314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1193314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1194314564Sdim nullptr, 1195314564Sdim nullptr, 1196314564Sdim nullptr, 1197314564Sdim 0}, 1198314564Sdim {"s28", 1199314564Sdim nullptr, 1200314564Sdim 4, 1201314564Sdim 0, 1202314564Sdim eEncodingIEEE754, 1203314564Sdim eFormatFloat, 1204314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1205314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1206314564Sdim nullptr, 1207314564Sdim nullptr, 1208314564Sdim nullptr, 1209314564Sdim 0}, 1210314564Sdim {"s29", 1211314564Sdim nullptr, 1212314564Sdim 4, 1213314564Sdim 0, 1214314564Sdim eEncodingIEEE754, 1215314564Sdim eFormatFloat, 1216314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1217314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1218314564Sdim nullptr, 1219314564Sdim nullptr, 1220314564Sdim nullptr, 1221314564Sdim 0}, 1222314564Sdim {"s30", 1223314564Sdim nullptr, 1224314564Sdim 4, 1225314564Sdim 0, 1226314564Sdim eEncodingIEEE754, 1227314564Sdim eFormatFloat, 1228314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1229314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1230314564Sdim nullptr, 1231314564Sdim nullptr, 1232314564Sdim nullptr, 1233314564Sdim 0}, 1234314564Sdim {"s31", 1235314564Sdim nullptr, 1236314564Sdim 4, 1237314564Sdim 0, 1238314564Sdim eEncodingIEEE754, 1239314564Sdim eFormatFloat, 1240314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1241314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1242314564Sdim nullptr, 1243314564Sdim nullptr, 1244314564Sdim nullptr, 1245314564Sdim 0}, 1246285101Semaste 1247314564Sdim {"d0", 1248314564Sdim nullptr, 1249314564Sdim 8, 1250314564Sdim 0, 1251314564Sdim eEncodingIEEE754, 1252314564Sdim eFormatFloat, 1253314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1254314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1255314564Sdim nullptr, 1256314564Sdim nullptr, 1257314564Sdim nullptr, 1258314564Sdim 0}, 1259314564Sdim {"d1", 1260314564Sdim nullptr, 1261314564Sdim 8, 1262314564Sdim 0, 1263314564Sdim eEncodingIEEE754, 1264314564Sdim eFormatFloat, 1265314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1266314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1267314564Sdim nullptr, 1268314564Sdim nullptr, 1269314564Sdim nullptr, 1270314564Sdim 0}, 1271314564Sdim {"d2", 1272314564Sdim nullptr, 1273314564Sdim 8, 1274314564Sdim 0, 1275314564Sdim eEncodingIEEE754, 1276314564Sdim eFormatFloat, 1277314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1278314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1279314564Sdim nullptr, 1280314564Sdim nullptr, 1281314564Sdim nullptr, 1282314564Sdim 0}, 1283314564Sdim {"d3", 1284314564Sdim nullptr, 1285314564Sdim 8, 1286314564Sdim 0, 1287314564Sdim eEncodingIEEE754, 1288314564Sdim eFormatFloat, 1289314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1290314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1291314564Sdim nullptr, 1292314564Sdim nullptr, 1293314564Sdim nullptr, 1294314564Sdim 0}, 1295314564Sdim {"d4", 1296314564Sdim nullptr, 1297314564Sdim 8, 1298314564Sdim 0, 1299314564Sdim eEncodingIEEE754, 1300314564Sdim eFormatFloat, 1301314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1302314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1303314564Sdim nullptr, 1304314564Sdim nullptr, 1305314564Sdim nullptr, 1306314564Sdim 0}, 1307314564Sdim {"d5", 1308314564Sdim nullptr, 1309314564Sdim 8, 1310314564Sdim 0, 1311314564Sdim eEncodingIEEE754, 1312314564Sdim eFormatFloat, 1313314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1314314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1315314564Sdim nullptr, 1316314564Sdim nullptr, 1317314564Sdim nullptr, 1318314564Sdim 0}, 1319314564Sdim {"d6", 1320314564Sdim nullptr, 1321314564Sdim 8, 1322314564Sdim 0, 1323314564Sdim eEncodingIEEE754, 1324314564Sdim eFormatFloat, 1325314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1326314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1327314564Sdim nullptr, 1328314564Sdim nullptr, 1329314564Sdim nullptr, 1330314564Sdim 0}, 1331314564Sdim {"d7", 1332314564Sdim nullptr, 1333314564Sdim 8, 1334314564Sdim 0, 1335314564Sdim eEncodingIEEE754, 1336314564Sdim eFormatFloat, 1337314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1338314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1339314564Sdim nullptr, 1340314564Sdim nullptr, 1341314564Sdim nullptr, 1342314564Sdim 0}, 1343314564Sdim {"d8", 1344314564Sdim nullptr, 1345314564Sdim 8, 1346314564Sdim 0, 1347314564Sdim eEncodingIEEE754, 1348314564Sdim eFormatFloat, 1349314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1350314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1351314564Sdim nullptr, 1352314564Sdim nullptr, 1353314564Sdim nullptr, 1354314564Sdim 0}, 1355314564Sdim {"d9", 1356314564Sdim nullptr, 1357314564Sdim 8, 1358314564Sdim 0, 1359314564Sdim eEncodingIEEE754, 1360314564Sdim eFormatFloat, 1361314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1362314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1363314564Sdim nullptr, 1364314564Sdim nullptr, 1365314564Sdim nullptr, 1366314564Sdim 0}, 1367314564Sdim {"d10", 1368314564Sdim nullptr, 1369314564Sdim 8, 1370314564Sdim 0, 1371314564Sdim eEncodingIEEE754, 1372314564Sdim eFormatFloat, 1373314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1374314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1375314564Sdim nullptr, 1376314564Sdim nullptr, 1377314564Sdim nullptr, 1378314564Sdim 0}, 1379314564Sdim {"d11", 1380314564Sdim nullptr, 1381314564Sdim 8, 1382314564Sdim 0, 1383314564Sdim eEncodingIEEE754, 1384314564Sdim eFormatFloat, 1385314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1386314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1387314564Sdim nullptr, 1388314564Sdim nullptr, 1389314564Sdim nullptr, 1390314564Sdim 0}, 1391314564Sdim {"d12", 1392314564Sdim nullptr, 1393314564Sdim 8, 1394314564Sdim 0, 1395314564Sdim eEncodingIEEE754, 1396314564Sdim eFormatFloat, 1397314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1398314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1399314564Sdim nullptr, 1400314564Sdim nullptr, 1401314564Sdim nullptr, 1402314564Sdim 0}, 1403314564Sdim {"d13", 1404314564Sdim nullptr, 1405314564Sdim 8, 1406314564Sdim 0, 1407314564Sdim eEncodingIEEE754, 1408314564Sdim eFormatFloat, 1409314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1410314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1411314564Sdim nullptr, 1412314564Sdim nullptr, 1413314564Sdim nullptr, 1414314564Sdim 0}, 1415314564Sdim {"d14", 1416314564Sdim nullptr, 1417314564Sdim 8, 1418314564Sdim 0, 1419314564Sdim eEncodingIEEE754, 1420314564Sdim eFormatFloat, 1421314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1422314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1423314564Sdim nullptr, 1424314564Sdim nullptr, 1425314564Sdim nullptr, 1426314564Sdim 0}, 1427314564Sdim {"d15", 1428314564Sdim nullptr, 1429314564Sdim 8, 1430314564Sdim 0, 1431314564Sdim eEncodingIEEE754, 1432314564Sdim eFormatFloat, 1433314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1434314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1435314564Sdim nullptr, 1436314564Sdim nullptr, 1437314564Sdim nullptr, 1438314564Sdim 0}, 1439314564Sdim {"d16", 1440314564Sdim nullptr, 1441314564Sdim 8, 1442314564Sdim 0, 1443314564Sdim eEncodingIEEE754, 1444314564Sdim eFormatFloat, 1445314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1446314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1447314564Sdim nullptr, 1448314564Sdim nullptr, 1449314564Sdim nullptr, 1450314564Sdim 0}, 1451314564Sdim {"d17", 1452314564Sdim nullptr, 1453314564Sdim 8, 1454314564Sdim 0, 1455314564Sdim eEncodingIEEE754, 1456314564Sdim eFormatFloat, 1457314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1458314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1459314564Sdim nullptr, 1460314564Sdim nullptr, 1461314564Sdim nullptr, 1462314564Sdim 0}, 1463314564Sdim {"d18", 1464314564Sdim nullptr, 1465314564Sdim 8, 1466314564Sdim 0, 1467314564Sdim eEncodingIEEE754, 1468314564Sdim eFormatFloat, 1469314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1470314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1471314564Sdim nullptr, 1472314564Sdim nullptr, 1473314564Sdim nullptr, 1474314564Sdim 0}, 1475314564Sdim {"d19", 1476314564Sdim nullptr, 1477314564Sdim 8, 1478314564Sdim 0, 1479314564Sdim eEncodingIEEE754, 1480314564Sdim eFormatFloat, 1481314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1482314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1483314564Sdim nullptr, 1484314564Sdim nullptr, 1485314564Sdim nullptr, 1486314564Sdim 0}, 1487314564Sdim {"d20", 1488314564Sdim nullptr, 1489314564Sdim 8, 1490314564Sdim 0, 1491314564Sdim eEncodingIEEE754, 1492314564Sdim eFormatFloat, 1493314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1494314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1495314564Sdim nullptr, 1496314564Sdim nullptr, 1497314564Sdim nullptr, 1498314564Sdim 0}, 1499314564Sdim {"d21", 1500314564Sdim nullptr, 1501314564Sdim 8, 1502314564Sdim 0, 1503314564Sdim eEncodingIEEE754, 1504314564Sdim eFormatFloat, 1505314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1506314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1507314564Sdim nullptr, 1508314564Sdim nullptr, 1509314564Sdim nullptr, 1510314564Sdim 0}, 1511314564Sdim {"d22", 1512314564Sdim nullptr, 1513314564Sdim 8, 1514314564Sdim 0, 1515314564Sdim eEncodingIEEE754, 1516314564Sdim eFormatFloat, 1517314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1518314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1519314564Sdim nullptr, 1520314564Sdim nullptr, 1521314564Sdim nullptr, 1522314564Sdim 0}, 1523314564Sdim {"d23", 1524314564Sdim nullptr, 1525314564Sdim 8, 1526314564Sdim 0, 1527314564Sdim eEncodingIEEE754, 1528314564Sdim eFormatFloat, 1529314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1530314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1531314564Sdim nullptr, 1532314564Sdim nullptr, 1533314564Sdim nullptr, 1534314564Sdim 0}, 1535314564Sdim {"d24", 1536314564Sdim nullptr, 1537314564Sdim 8, 1538314564Sdim 0, 1539314564Sdim eEncodingIEEE754, 1540314564Sdim eFormatFloat, 1541314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1542314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1543314564Sdim nullptr, 1544314564Sdim nullptr, 1545314564Sdim nullptr, 1546314564Sdim 0}, 1547314564Sdim {"d25", 1548314564Sdim nullptr, 1549314564Sdim 8, 1550314564Sdim 0, 1551314564Sdim eEncodingIEEE754, 1552314564Sdim eFormatFloat, 1553314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1554314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1555314564Sdim nullptr, 1556314564Sdim nullptr, 1557314564Sdim nullptr, 1558314564Sdim 0}, 1559314564Sdim {"d26", 1560314564Sdim nullptr, 1561314564Sdim 8, 1562314564Sdim 0, 1563314564Sdim eEncodingIEEE754, 1564314564Sdim eFormatFloat, 1565314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1566314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1567314564Sdim nullptr, 1568314564Sdim nullptr, 1569314564Sdim nullptr, 1570314564Sdim 0}, 1571314564Sdim {"d27", 1572314564Sdim nullptr, 1573314564Sdim 8, 1574314564Sdim 0, 1575314564Sdim eEncodingIEEE754, 1576314564Sdim eFormatFloat, 1577314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1578314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1579314564Sdim nullptr, 1580314564Sdim nullptr, 1581314564Sdim nullptr, 1582314564Sdim 0}, 1583314564Sdim {"d28", 1584314564Sdim nullptr, 1585314564Sdim 8, 1586314564Sdim 0, 1587314564Sdim eEncodingIEEE754, 1588314564Sdim eFormatFloat, 1589314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1590314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1591314564Sdim nullptr, 1592314564Sdim nullptr, 1593314564Sdim nullptr, 1594314564Sdim 0}, 1595314564Sdim {"d29", 1596314564Sdim nullptr, 1597314564Sdim 8, 1598314564Sdim 0, 1599314564Sdim eEncodingIEEE754, 1600314564Sdim eFormatFloat, 1601314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1602314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1603314564Sdim nullptr, 1604314564Sdim nullptr, 1605314564Sdim nullptr, 1606314564Sdim 0}, 1607314564Sdim {"d30", 1608314564Sdim nullptr, 1609314564Sdim 8, 1610314564Sdim 0, 1611314564Sdim eEncodingIEEE754, 1612314564Sdim eFormatFloat, 1613314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1614314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1615314564Sdim nullptr, 1616314564Sdim nullptr, 1617314564Sdim nullptr, 1618314564Sdim 0}, 1619314564Sdim {"d31", 1620314564Sdim nullptr, 1621314564Sdim 8, 1622314564Sdim 0, 1623314564Sdim eEncodingIEEE754, 1624314564Sdim eFormatFloat, 1625314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1626314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1627314564Sdim nullptr, 1628314564Sdim nullptr, 1629314564Sdim nullptr, 1630314564Sdim 0}}; 1631285101Semaste 1632314564Sdimstatic const uint32_t k_num_register_infos = 1633314564Sdim llvm::array_lengthof(g_register_infos); 1634285101Semastestatic bool g_register_info_names_constified = false; 1635285101Semaste 1636285101Semasteconst lldb_private::RegisterInfo * 1637314564SdimABISysV_arm64::GetRegisterInfoArray(uint32_t &count) { 1638314564Sdim // Make the C-string names and alt_names for the register infos into const 1639314564Sdim // C-string values by having the ConstString unique the names in the global 1640314564Sdim // constant C-string pool. 1641314564Sdim if (!g_register_info_names_constified) { 1642314564Sdim g_register_info_names_constified = true; 1643314564Sdim for (uint32_t i = 0; i < k_num_register_infos; ++i) { 1644314564Sdim if (g_register_infos[i].name) 1645314564Sdim g_register_infos[i].name = 1646314564Sdim ConstString(g_register_infos[i].name).GetCString(); 1647314564Sdim if (g_register_infos[i].alt_name) 1648314564Sdim g_register_infos[i].alt_name = 1649314564Sdim ConstString(g_register_infos[i].alt_name).GetCString(); 1650285101Semaste } 1651314564Sdim } 1652314564Sdim count = k_num_register_infos; 1653314564Sdim return g_register_infos; 1654285101Semaste} 1655285101Semaste 1656314564Sdimbool ABISysV_arm64::GetPointerReturnRegister(const char *&name) { 1657314564Sdim name = "x0"; 1658314564Sdim return true; 1659285101Semaste} 1660285101Semaste 1661314564Sdimsize_t ABISysV_arm64::GetRedZoneSize() const { return 128; } 1662314564Sdim 1663285101Semaste// Static Functions 1664309124Sdim 1665285101SemasteABISP 1666321369SdimABISysV_arm64::CreateInstance(lldb::ProcessSP process_sp, const ArchSpec &arch) { 1667314564Sdim const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch(); 1668314564Sdim const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor(); 1669285101Semaste 1670314564Sdim if (vendor_type != llvm::Triple::Apple) { 1671360784Sdim if (arch_type == llvm::Triple::aarch64 || 1672360784Sdim arch_type == llvm::Triple::aarch64_32) { 1673360784Sdim return ABISP( 1674360784Sdim new ABISysV_arm64(std::move(process_sp), MakeMCRegisterInfo(arch))); 1675285101Semaste } 1676314564Sdim } 1677285101Semaste 1678314564Sdim return ABISP(); 1679285101Semaste} 1680285101Semaste 1681314564Sdimbool ABISysV_arm64::PrepareTrivialCall(Thread &thread, addr_t sp, 1682314564Sdim addr_t func_addr, addr_t return_addr, 1683314564Sdim llvm::ArrayRef<addr_t> args) const { 1684314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1685314564Sdim if (!reg_ctx) 1686314564Sdim return false; 1687285101Semaste 1688314564Sdim Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); 1689285101Semaste 1690314564Sdim if (log) { 1691314564Sdim StreamString s; 1692321369Sdim s.Printf("ABISysV_arm64::PrepareTrivialCall (tid = 0x%" PRIx64 1693314564Sdim ", sp = 0x%" PRIx64 ", func_addr = 0x%" PRIx64 1694314564Sdim ", return_addr = 0x%" PRIx64, 1695314564Sdim thread.GetID(), (uint64_t)sp, (uint64_t)func_addr, 1696314564Sdim (uint64_t)return_addr); 1697285101Semaste 1698314564Sdim for (size_t i = 0; i < args.size(); ++i) 1699314564Sdim s.Printf(", arg%d = 0x%" PRIx64, static_cast<int>(i + 1), args[i]); 1700314564Sdim s.PutCString(")"); 1701314564Sdim log->PutString(s.GetString()); 1702314564Sdim } 1703285101Semaste 1704314564Sdim // x0 - x7 contain first 8 simple args 1705314564Sdim if (args.size() > 8) 1706314564Sdim return false; 1707285101Semaste 1708314564Sdim for (size_t i = 0; i < args.size(); ++i) { 1709314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo( 1710314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + i); 1711360784Sdim LLDB_LOGF(log, "About to write arg%d (0x%" PRIx64 ") into %s", 1712360784Sdim static_cast<int>(i + 1), args[i], reg_info->name); 1713314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(reg_info, args[i])) 1714314564Sdim return false; 1715314564Sdim } 1716285101Semaste 1717314564Sdim // Set "lr" to the return address 1718314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1719314564Sdim reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 1720314564Sdim LLDB_REGNUM_GENERIC_RA), 1721314564Sdim return_addr)) 1722314564Sdim return false; 1723285101Semaste 1724314564Sdim // Set "sp" to the requested value 1725314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1726314564Sdim reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 1727314564Sdim LLDB_REGNUM_GENERIC_SP), 1728314564Sdim sp)) 1729314564Sdim return false; 1730285101Semaste 1731314564Sdim // Set "pc" to the address requested 1732314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1733314564Sdim reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 1734314564Sdim LLDB_REGNUM_GENERIC_PC), 1735314564Sdim func_addr)) 1736314564Sdim return false; 1737285101Semaste 1738314564Sdim return true; 1739285101Semaste} 1740285101Semaste 1741314564Sdim// TODO: We dont support fp/SIMD arguments in v0-v7 1742314564Sdimbool ABISysV_arm64::GetArgumentValues(Thread &thread, ValueList &values) const { 1743314564Sdim uint32_t num_values = values.GetSize(); 1744314564Sdim 1745314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 1746314564Sdim 1747314564Sdim // Extract the register context so we can read arguments from registers 1748314564Sdim 1749314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1750314564Sdim 1751314564Sdim if (!reg_ctx) 1752314564Sdim return false; 1753314564Sdim 1754314564Sdim addr_t sp = 0; 1755314564Sdim 1756314564Sdim for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { 1757341825Sdim // We currently only support extracting values with Clang QualTypes. Do we 1758341825Sdim // care about others? 1759314564Sdim Value *value = values.GetValueAtIndex(value_idx); 1760314564Sdim 1761314564Sdim if (!value) 1762314564Sdim return false; 1763314564Sdim 1764314564Sdim CompilerType value_type = value->GetCompilerType(); 1765314564Sdim if (value_type) { 1766314564Sdim bool is_signed = false; 1767314564Sdim size_t bit_width = 0; 1768344779Sdim llvm::Optional<uint64_t> bit_size = value_type.GetBitSize(&thread); 1769344779Sdim if (!bit_size) 1770344779Sdim return false; 1771314564Sdim if (value_type.IsIntegerOrEnumerationType(is_signed)) { 1772344779Sdim bit_width = *bit_size; 1773314564Sdim } else if (value_type.IsPointerOrReferenceType()) { 1774344779Sdim bit_width = *bit_size; 1775314564Sdim } else { 1776314564Sdim // We only handle integer, pointer and reference types currently... 1777285101Semaste return false; 1778314564Sdim } 1779285101Semaste 1780314564Sdim if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) { 1781314564Sdim if (value_idx < 8) { 1782314564Sdim // Arguments 1-8 are in x0-x7... 1783314564Sdim const RegisterInfo *reg_info = nullptr; 1784314564Sdim reg_info = reg_ctx->GetRegisterInfo( 1785314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx); 1786285101Semaste 1787314564Sdim if (reg_info) { 1788314564Sdim RegisterValue reg_value; 1789314564Sdim 1790314564Sdim if (reg_ctx->ReadRegister(reg_info, reg_value)) { 1791314564Sdim if (is_signed) 1792314564Sdim reg_value.SignExtend(bit_width); 1793314564Sdim if (!reg_value.GetScalarValue(value->GetScalar())) 1794285101Semaste return false; 1795314564Sdim continue; 1796285101Semaste } 1797314564Sdim } 1798314564Sdim return false; 1799314564Sdim } else { 1800314564Sdim // TODO: Verify for stack layout for SysV 1801314564Sdim if (sp == 0) { 1802314564Sdim // Read the stack pointer if we already haven't read it 1803314564Sdim sp = reg_ctx->GetSP(0); 1804314564Sdim if (sp == 0) 1805314564Sdim return false; 1806314564Sdim } 1807285101Semaste 1808314564Sdim // Arguments 5 on up are on the stack 1809314564Sdim const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8; 1810321369Sdim Status error; 1811314564Sdim if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory( 1812314564Sdim sp, arg_byte_size, is_signed, value->GetScalar(), error)) 1813314564Sdim return false; 1814314564Sdim 1815314564Sdim sp += arg_byte_size; 1816314564Sdim // Align up to the next 8 byte boundary if needed 1817314564Sdim if (sp % 8) { 1818314564Sdim sp >>= 3; 1819314564Sdim sp += 1; 1820314564Sdim sp <<= 3; 1821314564Sdim } 1822285101Semaste } 1823314564Sdim } 1824285101Semaste } 1825314564Sdim } 1826314564Sdim return true; 1827285101Semaste} 1828285101Semaste 1829321369SdimStatus ABISysV_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp, 1830321369Sdim lldb::ValueObjectSP &new_value_sp) { 1831321369Sdim Status error; 1832314564Sdim if (!new_value_sp) { 1833314564Sdim error.SetErrorString("Empty value object for return value."); 1834314564Sdim return error; 1835314564Sdim } 1836314564Sdim 1837314564Sdim CompilerType return_value_type = new_value_sp->GetCompilerType(); 1838314564Sdim if (!return_value_type) { 1839314564Sdim error.SetErrorString("Null clang type for return value."); 1840314564Sdim return error; 1841314564Sdim } 1842314564Sdim 1843314564Sdim Thread *thread = frame_sp->GetThread().get(); 1844314564Sdim 1845314564Sdim RegisterContext *reg_ctx = thread->GetRegisterContext().get(); 1846314564Sdim 1847314564Sdim if (reg_ctx) { 1848314564Sdim DataExtractor data; 1849321369Sdim Status data_error; 1850314564Sdim const uint64_t byte_size = new_value_sp->GetData(data, data_error); 1851314564Sdim if (data_error.Fail()) { 1852314564Sdim error.SetErrorStringWithFormat( 1853314564Sdim "Couldn't convert return value to raw data: %s", 1854314564Sdim data_error.AsCString()); 1855314564Sdim return error; 1856285101Semaste } 1857285101Semaste 1858314564Sdim const uint32_t type_flags = return_value_type.GetTypeInfo(nullptr); 1859314564Sdim if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) { 1860314564Sdim if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) { 1861314564Sdim // Extract the register context so we can read arguments from registers 1862314564Sdim lldb::offset_t offset = 0; 1863314564Sdim if (byte_size <= 16) { 1864314564Sdim const RegisterInfo *x0_info = reg_ctx->GetRegisterInfo( 1865314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1); 1866314564Sdim if (byte_size <= 8) { 1867314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, byte_size); 1868285101Semaste 1869314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) 1870314564Sdim error.SetErrorString("failed to write register x0"); 1871314564Sdim } else { 1872314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, 8); 1873314564Sdim 1874314564Sdim if (reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) { 1875314564Sdim const RegisterInfo *x1_info = reg_ctx->GetRegisterInfo( 1876314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG2); 1877314564Sdim raw_value = data.GetMaxU64(&offset, byte_size - offset); 1878314564Sdim 1879314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x1_info, raw_value)) 1880314564Sdim error.SetErrorString("failed to write register x1"); 1881285101Semaste } 1882314564Sdim } 1883314564Sdim } else { 1884314564Sdim error.SetErrorString("We don't support returning longer than 128 bit " 1885314564Sdim "integer values at present."); 1886314564Sdim } 1887314564Sdim } else if (type_flags & eTypeIsFloat) { 1888314564Sdim if (type_flags & eTypeIsComplex) { 1889314564Sdim // Don't handle complex yet. 1890314564Sdim error.SetErrorString( 1891314564Sdim "returning complex float values are not supported"); 1892314564Sdim } else { 1893314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1894285101Semaste 1895314564Sdim if (v0_info) { 1896314564Sdim if (byte_size <= 16) { 1897314564Sdim if (byte_size <= RegisterValue::GetMaxByteSize()) { 1898314564Sdim RegisterValue reg_value; 1899314564Sdim error = reg_value.SetValueFromData(v0_info, data, 0, true); 1900314564Sdim if (error.Success()) { 1901314564Sdim if (!reg_ctx->WriteRegister(v0_info, reg_value)) 1902314564Sdim error.SetErrorString("failed to write register v0"); 1903285101Semaste } 1904314564Sdim } else { 1905314564Sdim error.SetErrorStringWithFormat( 1906314564Sdim "returning float values with a byte size of %" PRIu64 1907314564Sdim " are not supported", 1908314564Sdim byte_size); 1909314564Sdim } 1910314564Sdim } else { 1911314564Sdim error.SetErrorString("returning float values longer than 128 " 1912314564Sdim "bits are not supported"); 1913285101Semaste } 1914314564Sdim } else { 1915314564Sdim error.SetErrorString("v0 register is not available on this target"); 1916314564Sdim } 1917285101Semaste } 1918314564Sdim } 1919314564Sdim } else if (type_flags & eTypeIsVector) { 1920314564Sdim if (byte_size > 0) { 1921314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1922314564Sdim 1923314564Sdim if (v0_info) { 1924314564Sdim if (byte_size <= v0_info->byte_size) { 1925314564Sdim RegisterValue reg_value; 1926314564Sdim error = reg_value.SetValueFromData(v0_info, data, 0, true); 1927314564Sdim if (error.Success()) { 1928314564Sdim if (!reg_ctx->WriteRegister(v0_info, reg_value)) 1929314564Sdim error.SetErrorString("failed to write register v0"); 1930285101Semaste } 1931314564Sdim } 1932285101Semaste } 1933314564Sdim } 1934285101Semaste } 1935314564Sdim } else { 1936314564Sdim error.SetErrorString("no registers are available"); 1937314564Sdim } 1938314564Sdim 1939314564Sdim return error; 1940285101Semaste} 1941285101Semaste 1942314564Sdimbool ABISysV_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) { 1943314564Sdim unwind_plan.Clear(); 1944314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 1945285101Semaste 1946314564Sdim uint32_t lr_reg_num = arm64_dwarf::lr; 1947314564Sdim uint32_t sp_reg_num = arm64_dwarf::sp; 1948314564Sdim 1949314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 1950314564Sdim 1951314564Sdim // Our previous Call Frame Address is the stack pointer 1952314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0); 1953314564Sdim 1954314564Sdim unwind_plan.AppendRow(row); 1955321369Sdim unwind_plan.SetReturnAddressRegister(lr_reg_num); 1956314564Sdim 1957314564Sdim // All other registers are the same. 1958314564Sdim 1959314564Sdim unwind_plan.SetSourceName("arm64 at-func-entry default"); 1960314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 1961321369Sdim unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo); 1962360784Sdim unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo); 1963314564Sdim 1964314564Sdim return true; 1965285101Semaste} 1966285101Semaste 1967314564Sdimbool ABISysV_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { 1968314564Sdim unwind_plan.Clear(); 1969314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 1970285101Semaste 1971314564Sdim uint32_t fp_reg_num = arm64_dwarf::fp; 1972314564Sdim uint32_t pc_reg_num = arm64_dwarf::pc; 1973285101Semaste 1974314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 1975314564Sdim const int32_t ptr_size = 8; 1976314564Sdim 1977314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size); 1978314564Sdim row->SetOffset(0); 1979314564Sdim 1980314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true); 1981314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true); 1982314564Sdim 1983314564Sdim unwind_plan.AppendRow(row); 1984314564Sdim unwind_plan.SetSourceName("arm64 default unwind plan"); 1985314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 1986314564Sdim unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo); 1987360784Sdim unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo); 1988314564Sdim 1989314564Sdim return true; 1990285101Semaste} 1991285101Semaste 1992314564Sdim// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says 1993341825Sdim// registers x19 through x28 and sp are callee preserved. v8-v15 are non- 1994341825Sdim// volatile (and specifically only the lower 8 bytes of these regs), the rest 1995341825Sdim// of the fp/SIMD registers are volatile. 1996285101Semaste 1997285101Semaste// We treat x29 as callee preserved also, else the unwinder won't try to 1998285101Semaste// retrieve fp saves. 1999285101Semaste 2000314564Sdimbool ABISysV_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) { 2001314564Sdim if (reg_info) { 2002314564Sdim const char *name = reg_info->name; 2003285101Semaste 2004314564Sdim // Sometimes we'll be called with the "alternate" name for these registers; 2005314564Sdim // recognize them as non-volatile. 2006285101Semaste 2007314564Sdim if (name[0] == 'p' && name[1] == 'c') // pc 2008314564Sdim return false; 2009314564Sdim if (name[0] == 'f' && name[1] == 'p') // fp 2010314564Sdim return false; 2011314564Sdim if (name[0] == 's' && name[1] == 'p') // sp 2012314564Sdim return false; 2013314564Sdim if (name[0] == 'l' && name[1] == 'r') // lr 2014314564Sdim return false; 2015285101Semaste 2016327952Sdim if (name[0] == 'x' || name[0] == 'r') { 2017314564Sdim // Volatile registers: x0-x18 2018341825Sdim // Although documentation says only x19-28 + sp are callee saved We ll 2019341825Sdim // also have to treat x30 as non-volatile. Each dwarf frame has its own 2020341825Sdim // value of lr. Return false for the non-volatile gpr regs, true for 2021341825Sdim // everything else 2022314564Sdim switch (name[1]) { 2023314564Sdim case '1': 2024314564Sdim switch (name[2]) { 2025314564Sdim case '9': 2026314564Sdim return false; // x19 is non-volatile 2027314564Sdim default: 2028314564Sdim return true; 2029285101Semaste } 2030314564Sdim break; 2031314564Sdim case '2': 2032314564Sdim switch (name[2]) { 2033314564Sdim case '0': 2034314564Sdim case '1': 2035314564Sdim case '2': 2036314564Sdim case '3': 2037314564Sdim case '4': 2038314564Sdim case '5': 2039314564Sdim case '6': 2040314564Sdim case '7': 2041314564Sdim case '8': 2042314564Sdim return false; // x20 - 28 are non-volatile 2043314564Sdim case '9': 2044314564Sdim return false; // x29 aka fp treat as non-volatile 2045314564Sdim default: 2046314564Sdim return true; 2047285101Semaste } 2048314564Sdim case '3': // x30 (lr) and x31 (sp) treat as non-volatile 2049314564Sdim if (name[2] == '0' || name[2] == '1') 2050314564Sdim return false; 2051314564Sdim break; 2052314564Sdim default: 2053314564Sdim return true; // all volatile cases not handled above fall here. 2054314564Sdim } 2055314564Sdim } else if (name[0] == 'v' || name[0] == 's' || name[0] == 'd') { 2056314564Sdim // Volatile registers: v0-7, v16-v31 2057314564Sdim // Return false for non-volatile fp/SIMD regs, true for everything else 2058314564Sdim switch (name[1]) { 2059314564Sdim case '8': 2060314564Sdim case '9': 2061314564Sdim return false; // v8-v9 are non-volatile 2062314564Sdim case '1': 2063314564Sdim switch (name[2]) { 2064314564Sdim case '0': 2065314564Sdim case '1': 2066314564Sdim case '2': 2067314564Sdim case '3': 2068314564Sdim case '4': 2069314564Sdim case '5': 2070314564Sdim return false; // v10-v15 are non-volatile 2071314564Sdim default: 2072314564Sdim return true; 2073314564Sdim } 2074314564Sdim default: 2075314564Sdim return true; 2076314564Sdim } 2077285101Semaste } 2078314564Sdim } 2079314564Sdim return true; 2080285101Semaste} 2081285101Semaste 2082314564Sdimstatic bool LoadValueFromConsecutiveGPRRegisters( 2083314564Sdim ExecutionContext &exe_ctx, RegisterContext *reg_ctx, 2084314564Sdim const CompilerType &value_type, 2085314564Sdim bool is_return_value, // false => parameter, true => return value 2086314564Sdim uint32_t &NGRN, // NGRN (see ABI documentation) 2087314564Sdim uint32_t &NSRN, // NSRN (see ABI documentation) 2088314564Sdim DataExtractor &data) { 2089344779Sdim llvm::Optional<uint64_t> byte_size = value_type.GetByteSize(nullptr); 2090314564Sdim 2091344779Sdim if (byte_size || *byte_size == 0) 2092314564Sdim return false; 2093314564Sdim 2094353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2095344779Sdim new DataBufferHeap(*byte_size, 0)); 2096314564Sdim const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder(); 2097321369Sdim Status error; 2098314564Sdim 2099314564Sdim CompilerType base_type; 2100314564Sdim const uint32_t homogeneous_count = 2101314564Sdim value_type.IsHomogeneousAggregate(&base_type); 2102314564Sdim if (homogeneous_count > 0 && homogeneous_count <= 8) { 2103314564Sdim // Make sure we have enough registers 2104314564Sdim if (NSRN < 8 && (8 - NSRN) >= homogeneous_count) { 2105314564Sdim if (!base_type) 2106285101Semaste return false; 2107344779Sdim llvm::Optional<uint64_t> base_byte_size = base_type.GetByteSize(nullptr); 2108344779Sdim if (!base_byte_size) 2109344779Sdim return false; 2110314564Sdim uint32_t data_offset = 0; 2111285101Semaste 2112314564Sdim for (uint32_t i = 0; i < homogeneous_count; ++i) { 2113314564Sdim char v_name[8]; 2114314564Sdim ::snprintf(v_name, sizeof(v_name), "v%u", NSRN); 2115314564Sdim const RegisterInfo *reg_info = 2116314564Sdim reg_ctx->GetRegisterInfoByName(v_name, 0); 2117314564Sdim if (reg_info == nullptr) 2118314564Sdim return false; 2119285101Semaste 2120344779Sdim if (*base_byte_size > reg_info->byte_size) 2121314564Sdim return false; 2122285101Semaste 2123314564Sdim RegisterValue reg_value; 2124314564Sdim 2125314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2126314564Sdim return false; 2127314564Sdim 2128353358Sdim // Make sure we have enough room in "heap_data_up" 2129353358Sdim if ((data_offset + *base_byte_size) <= heap_data_up->GetByteSize()) { 2130314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2131353358Sdim reg_info, heap_data_up->GetBytes() + data_offset, *base_byte_size, 2132314564Sdim byte_order, error); 2133344779Sdim if (bytes_copied != *base_byte_size) 2134314564Sdim return false; 2135314564Sdim data_offset += bytes_copied; 2136314564Sdim ++NSRN; 2137314564Sdim } else 2138314564Sdim return false; 2139314564Sdim } 2140314564Sdim data.SetByteOrder(byte_order); 2141314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2142353358Sdim data.SetData(DataBufferSP(heap_data_up.release())); 2143314564Sdim return true; 2144285101Semaste } 2145314564Sdim } 2146285101Semaste 2147314564Sdim const size_t max_reg_byte_size = 16; 2148344779Sdim if (*byte_size <= max_reg_byte_size) { 2149344779Sdim size_t bytes_left = *byte_size; 2150314564Sdim uint32_t data_offset = 0; 2151344779Sdim while (data_offset < *byte_size) { 2152314564Sdim if (NGRN >= 8) 2153314564Sdim return false; 2154285101Semaste 2155314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo( 2156314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2157314564Sdim if (reg_info == nullptr) 2158314564Sdim return false; 2159285101Semaste 2160314564Sdim RegisterValue reg_value; 2161314564Sdim 2162314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2163314564Sdim return false; 2164314564Sdim 2165314564Sdim const size_t curr_byte_size = std::min<size_t>(8, bytes_left); 2166314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2167353358Sdim reg_info, heap_data_up->GetBytes() + data_offset, curr_byte_size, 2168314564Sdim byte_order, error); 2169314564Sdim if (bytes_copied == 0) 2170314564Sdim return false; 2171314564Sdim if (bytes_copied >= bytes_left) 2172314564Sdim break; 2173314564Sdim data_offset += bytes_copied; 2174314564Sdim bytes_left -= bytes_copied; 2175314564Sdim ++NGRN; 2176285101Semaste } 2177314564Sdim } else { 2178314564Sdim const RegisterInfo *reg_info = nullptr; 2179314564Sdim if (is_return_value) { 2180341825Sdim // We are assuming we are decoding this immediately after returning from 2181341825Sdim // a function call and that the address of the structure is in x8 2182314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); 2183314564Sdim } else { 2184314564Sdim // We are assuming we are stopped at the first instruction in a function 2185341825Sdim // and that the ABI is being respected so all parameters appear where 2186341825Sdim // they should be (functions with no external linkage can legally violate 2187341825Sdim // the ABI). 2188314564Sdim if (NGRN >= 8) 2189314564Sdim return false; 2190285101Semaste 2191314564Sdim reg_info = reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 2192314564Sdim LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2193314564Sdim if (reg_info == nullptr) 2194314564Sdim return false; 2195314564Sdim ++NGRN; 2196314564Sdim } 2197285101Semaste 2198314564Sdim if (reg_info == nullptr) 2199314564Sdim return false; 2200285101Semaste 2201314564Sdim const lldb::addr_t value_addr = 2202314564Sdim reg_ctx->ReadRegisterAsUnsigned(reg_info, LLDB_INVALID_ADDRESS); 2203285101Semaste 2204314564Sdim if (value_addr == LLDB_INVALID_ADDRESS) 2205314564Sdim return false; 2206314564Sdim 2207314564Sdim if (exe_ctx.GetProcessRef().ReadMemory( 2208353358Sdim value_addr, heap_data_up->GetBytes(), heap_data_up->GetByteSize(), 2209353358Sdim error) != heap_data_up->GetByteSize()) { 2210314564Sdim return false; 2211285101Semaste } 2212314564Sdim } 2213285101Semaste 2214314564Sdim data.SetByteOrder(byte_order); 2215314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2216353358Sdim data.SetData(DataBufferSP(heap_data_up.release())); 2217314564Sdim return true; 2218285101Semaste} 2219285101Semaste 2220314564SdimValueObjectSP ABISysV_arm64::GetReturnValueObjectImpl( 2221314564Sdim Thread &thread, CompilerType &return_compiler_type) const { 2222314564Sdim ValueObjectSP return_valobj_sp; 2223314564Sdim Value value; 2224285101Semaste 2225314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 2226314564Sdim if (exe_ctx.GetTargetPtr() == nullptr || exe_ctx.GetProcessPtr() == nullptr) 2227314564Sdim return return_valobj_sp; 2228285101Semaste 2229314564Sdim // value.SetContext (Value::eContextTypeClangType, return_compiler_type); 2230314564Sdim value.SetCompilerType(return_compiler_type); 2231314564Sdim 2232314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 2233314564Sdim if (!reg_ctx) 2234314564Sdim return return_valobj_sp; 2235314564Sdim 2236344779Sdim llvm::Optional<uint64_t> byte_size = 2237344779Sdim return_compiler_type.GetByteSize(nullptr); 2238344779Sdim if (!byte_size) 2239344779Sdim return return_valobj_sp; 2240314564Sdim 2241314564Sdim const uint32_t type_flags = return_compiler_type.GetTypeInfo(nullptr); 2242314564Sdim if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) { 2243314564Sdim value.SetValueType(Value::eValueTypeScalar); 2244314564Sdim 2245314564Sdim bool success = false; 2246314564Sdim if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) { 2247314564Sdim // Extract the register context so we can read arguments from registers 2248344779Sdim if (*byte_size <= 8) { 2249314564Sdim const RegisterInfo *x0_reg_info = nullptr; 2250314564Sdim x0_reg_info = reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 2251314564Sdim LLDB_REGNUM_GENERIC_ARG1); 2252314564Sdim if (x0_reg_info) { 2253314564Sdim uint64_t raw_value = 2254314564Sdim thread.GetRegisterContext()->ReadRegisterAsUnsigned(x0_reg_info, 2255314564Sdim 0); 2256314564Sdim const bool is_signed = (type_flags & eTypeIsSigned) != 0; 2257344779Sdim switch (*byte_size) { 2258314564Sdim default: 2259314564Sdim break; 2260314564Sdim case 16: // uint128_t 2261314564Sdim // In register x0 and x1 2262285101Semaste { 2263314564Sdim const RegisterInfo *x1_reg_info = nullptr; 2264314564Sdim x1_reg_info = reg_ctx->GetRegisterInfo(eRegisterKindGeneric, 2265314564Sdim LLDB_REGNUM_GENERIC_ARG2); 2266285101Semaste 2267314564Sdim if (x1_reg_info) { 2268344779Sdim if (*byte_size <= 2269314564Sdim x0_reg_info->byte_size + x1_reg_info->byte_size) { 2270353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2271344779Sdim new DataBufferHeap(*byte_size, 0)); 2272314564Sdim const ByteOrder byte_order = 2273314564Sdim exe_ctx.GetProcessRef().GetByteOrder(); 2274314564Sdim RegisterValue x0_reg_value; 2275314564Sdim RegisterValue x1_reg_value; 2276314564Sdim if (reg_ctx->ReadRegister(x0_reg_info, x0_reg_value) && 2277314564Sdim reg_ctx->ReadRegister(x1_reg_info, x1_reg_value)) { 2278321369Sdim Status error; 2279314564Sdim if (x0_reg_value.GetAsMemoryData( 2280353358Sdim x0_reg_info, heap_data_up->GetBytes() + 0, 8, 2281314564Sdim byte_order, error) && 2282314564Sdim x1_reg_value.GetAsMemoryData( 2283353358Sdim x1_reg_info, heap_data_up->GetBytes() + 8, 8, 2284314564Sdim byte_order, error)) { 2285314564Sdim DataExtractor data( 2286353358Sdim DataBufferSP(heap_data_up.release()), byte_order, 2287314564Sdim exe_ctx.GetProcessRef().GetAddressByteSize()); 2288314564Sdim 2289314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2290314564Sdim &thread, return_compiler_type, ConstString(""), data); 2291314564Sdim return return_valobj_sp; 2292285101Semaste } 2293314564Sdim } 2294285101Semaste } 2295314564Sdim } 2296285101Semaste } 2297314564Sdim break; 2298314564Sdim case sizeof(uint64_t): 2299314564Sdim if (is_signed) 2300314564Sdim value.GetScalar() = (int64_t)(raw_value); 2301314564Sdim else 2302314564Sdim value.GetScalar() = (uint64_t)(raw_value); 2303314564Sdim success = true; 2304314564Sdim break; 2305314564Sdim 2306314564Sdim case sizeof(uint32_t): 2307314564Sdim if (is_signed) 2308314564Sdim value.GetScalar() = (int32_t)(raw_value & UINT32_MAX); 2309314564Sdim else 2310314564Sdim value.GetScalar() = (uint32_t)(raw_value & UINT32_MAX); 2311314564Sdim success = true; 2312314564Sdim break; 2313314564Sdim 2314314564Sdim case sizeof(uint16_t): 2315314564Sdim if (is_signed) 2316314564Sdim value.GetScalar() = (int16_t)(raw_value & UINT16_MAX); 2317314564Sdim else 2318314564Sdim value.GetScalar() = (uint16_t)(raw_value & UINT16_MAX); 2319314564Sdim success = true; 2320314564Sdim break; 2321314564Sdim 2322314564Sdim case sizeof(uint8_t): 2323314564Sdim if (is_signed) 2324314564Sdim value.GetScalar() = (int8_t)(raw_value & UINT8_MAX); 2325314564Sdim else 2326314564Sdim value.GetScalar() = (uint8_t)(raw_value & UINT8_MAX); 2327314564Sdim success = true; 2328314564Sdim break; 2329314564Sdim } 2330285101Semaste } 2331314564Sdim } 2332314564Sdim } else if (type_flags & eTypeIsFloat) { 2333314564Sdim if (type_flags & eTypeIsComplex) { 2334314564Sdim // Don't handle complex yet. 2335314564Sdim } else { 2336344779Sdim if (*byte_size <= sizeof(long double)) { 2337314564Sdim const RegisterInfo *v0_reg_info = 2338314564Sdim reg_ctx->GetRegisterInfoByName("v0", 0); 2339314564Sdim RegisterValue v0_value; 2340314564Sdim if (reg_ctx->ReadRegister(v0_reg_info, v0_value)) { 2341314564Sdim DataExtractor data; 2342314564Sdim if (v0_value.GetData(data)) { 2343314564Sdim lldb::offset_t offset = 0; 2344344779Sdim if (*byte_size == sizeof(float)) { 2345314564Sdim value.GetScalar() = data.GetFloat(&offset); 2346314564Sdim success = true; 2347344779Sdim } else if (*byte_size == sizeof(double)) { 2348314564Sdim value.GetScalar() = data.GetDouble(&offset); 2349314564Sdim success = true; 2350344779Sdim } else if (*byte_size == sizeof(long double)) { 2351314564Sdim value.GetScalar() = data.GetLongDouble(&offset); 2352314564Sdim success = true; 2353314564Sdim } 2354285101Semaste } 2355314564Sdim } 2356285101Semaste } 2357314564Sdim } 2358285101Semaste } 2359314564Sdim 2360314564Sdim if (success) 2361314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2362314564Sdim thread.GetStackFrameAtIndex(0).get(), value, ConstString("")); 2363344779Sdim } else if (type_flags & eTypeIsVector && *byte_size <= 16) { 2364344779Sdim if (*byte_size > 0) { 2365314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 2366314564Sdim 2367314564Sdim if (v0_info) { 2368353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2369344779Sdim new DataBufferHeap(*byte_size, 0)); 2370321369Sdim const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder(); 2371321369Sdim RegisterValue reg_value; 2372321369Sdim if (reg_ctx->ReadRegister(v0_info, reg_value)) { 2373321369Sdim Status error; 2374353358Sdim if (reg_value.GetAsMemoryData(v0_info, heap_data_up->GetBytes(), 2375353358Sdim heap_data_up->GetByteSize(), byte_order, 2376321369Sdim error)) { 2377353358Sdim DataExtractor data(DataBufferSP(heap_data_up.release()), byte_order, 2378321369Sdim exe_ctx.GetProcessRef().GetAddressByteSize()); 2379321369Sdim return_valobj_sp = ValueObjectConstResult::Create( 2380321369Sdim &thread, return_compiler_type, ConstString(""), data); 2381314564Sdim } 2382285101Semaste } 2383314564Sdim } 2384285101Semaste } 2385321369Sdim } else if (type_flags & eTypeIsStructUnion || type_flags & eTypeIsClass || 2386344779Sdim (type_flags & eTypeIsVector && *byte_size > 16)) { 2387314564Sdim DataExtractor data; 2388314564Sdim 2389314564Sdim uint32_t NGRN = 0; // Search ABI docs for NGRN 2390314564Sdim uint32_t NSRN = 0; // Search ABI docs for NSRN 2391314564Sdim const bool is_return_value = true; 2392314564Sdim if (LoadValueFromConsecutiveGPRRegisters( 2393314564Sdim exe_ctx, reg_ctx, return_compiler_type, is_return_value, NGRN, NSRN, 2394314564Sdim data)) { 2395314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2396314564Sdim &thread, return_compiler_type, ConstString(""), data); 2397285101Semaste } 2398314564Sdim } 2399314564Sdim return return_valobj_sp; 2400285101Semaste} 2401285101Semaste 2402314564Sdimvoid ABISysV_arm64::Initialize() { 2403314564Sdim PluginManager::RegisterPlugin(GetPluginNameStatic(), 2404314564Sdim "SysV ABI for AArch64 targets", CreateInstance); 2405285101Semaste} 2406285101Semaste 2407314564Sdimvoid ABISysV_arm64::Terminate() { 2408314564Sdim PluginManager::UnregisterPlugin(CreateInstance); 2409285101Semaste} 2410285101Semaste 2411314564Sdimlldb_private::ConstString ABISysV_arm64::GetPluginNameStatic() { 2412314564Sdim static ConstString g_name("SysV-arm64"); 2413314564Sdim return g_name; 2414285101Semaste} 2415285101Semaste 2416285101Semaste// PluginInterface protocol 2417309124Sdim 2418314564SdimConstString ABISysV_arm64::GetPluginName() { return GetPluginNameStatic(); } 2419285101Semaste 2420314564Sdimuint32_t ABISysV_arm64::GetPluginVersion() { return 1; } 2421