1275072Semaste//===-- ABIMacOSX_arm64.cpp -------------------------------------*- C++ -*-===// 2275072Semaste// 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 6275072Semaste// 7275072Semaste//===----------------------------------------------------------------------===// 8275072Semaste 9275072Semaste#include "ABIMacOSX_arm64.h" 10275072Semaste 11309124Sdim#include <vector> 12309124Sdim 13309124Sdim#include "llvm/ADT/STLExtras.h" 14309124Sdim#include "llvm/ADT/Triple.h" 15309124Sdim 16275072Semaste#include "lldb/Core/Module.h" 17275072Semaste#include "lldb/Core/PluginManager.h" 18275072Semaste#include "lldb/Core/Value.h" 19275072Semaste#include "lldb/Core/ValueObjectConstResult.h" 20275072Semaste#include "lldb/Symbol/UnwindPlan.h" 21275072Semaste#include "lldb/Target/Process.h" 22275072Semaste#include "lldb/Target/RegisterContext.h" 23275072Semaste#include "lldb/Target/Target.h" 24275072Semaste#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" 30275072Semaste 31275072Semaste#include "Utility/ARM64_DWARF_Registers.h" 32275072Semaste 33275072Semasteusing namespace lldb; 34275072Semasteusing namespace lldb_private; 35275072Semaste 36275072Semastestatic const char *pluginDesc = "Mac OS X ABI for arm64 targets"; 37275072Semaste 38314564Sdimstatic RegisterInfo g_register_infos[] = { 39314564Sdim // NAME ALT SZ OFF ENCODING FORMAT 40314564Sdim // EH_FRAME DWARF GENERIC 41314564Sdim // PROCESS PLUGIN LLDB NATIVE 42314564Sdim // ========== ======= == === ============= =================== 43314564Sdim // =================== ====================== =========================== 44314564Sdim // ======================= ====================== 45314564Sdim {"x0", 46314564Sdim nullptr, 47314564Sdim 8, 48314564Sdim 0, 49314564Sdim eEncodingUint, 50314564Sdim eFormatHex, 51314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x0, LLDB_REGNUM_GENERIC_ARG1, 52314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 53314564Sdim nullptr, 54314564Sdim nullptr, 55314564Sdim nullptr, 56314564Sdim 0}, 57314564Sdim {"x1", 58314564Sdim nullptr, 59314564Sdim 8, 60314564Sdim 0, 61314564Sdim eEncodingUint, 62314564Sdim eFormatHex, 63314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x1, LLDB_REGNUM_GENERIC_ARG2, 64314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 65314564Sdim nullptr, 66314564Sdim nullptr, 67314564Sdim nullptr, 68314564Sdim 0}, 69314564Sdim {"x2", 70314564Sdim nullptr, 71314564Sdim 8, 72314564Sdim 0, 73314564Sdim eEncodingUint, 74314564Sdim eFormatHex, 75314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x2, LLDB_REGNUM_GENERIC_ARG3, 76314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 77314564Sdim nullptr, 78314564Sdim nullptr, 79314564Sdim nullptr, 80314564Sdim 0}, 81314564Sdim {"x3", 82314564Sdim nullptr, 83314564Sdim 8, 84314564Sdim 0, 85314564Sdim eEncodingUint, 86314564Sdim eFormatHex, 87314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x3, LLDB_REGNUM_GENERIC_ARG4, 88314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 89314564Sdim nullptr, 90314564Sdim nullptr, 91314564Sdim nullptr, 92314564Sdim 0}, 93314564Sdim {"x4", 94314564Sdim nullptr, 95314564Sdim 8, 96314564Sdim 0, 97314564Sdim eEncodingUint, 98314564Sdim eFormatHex, 99314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x4, LLDB_REGNUM_GENERIC_ARG5, 100314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 101314564Sdim nullptr, 102314564Sdim nullptr, 103314564Sdim nullptr, 104314564Sdim 0}, 105314564Sdim {"x5", 106314564Sdim nullptr, 107314564Sdim 8, 108314564Sdim 0, 109314564Sdim eEncodingUint, 110314564Sdim eFormatHex, 111314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x5, LLDB_REGNUM_GENERIC_ARG6, 112314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 113314564Sdim nullptr, 114314564Sdim nullptr, 115314564Sdim nullptr, 116314564Sdim 0}, 117314564Sdim {"x6", 118314564Sdim nullptr, 119314564Sdim 8, 120314564Sdim 0, 121314564Sdim eEncodingUint, 122314564Sdim eFormatHex, 123314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x6, LLDB_REGNUM_GENERIC_ARG7, 124314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 125314564Sdim nullptr, 126314564Sdim nullptr, 127314564Sdim nullptr, 128314564Sdim 0}, 129314564Sdim {"x7", 130314564Sdim nullptr, 131314564Sdim 8, 132314564Sdim 0, 133314564Sdim eEncodingUint, 134314564Sdim eFormatHex, 135314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x7, LLDB_REGNUM_GENERIC_ARG8, 136314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 137314564Sdim nullptr, 138314564Sdim nullptr, 139314564Sdim nullptr, 140314564Sdim 0}, 141314564Sdim {"x8", 142314564Sdim nullptr, 143314564Sdim 8, 144314564Sdim 0, 145314564Sdim eEncodingUint, 146314564Sdim eFormatHex, 147314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x8, LLDB_INVALID_REGNUM, 148314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 149314564Sdim nullptr, 150314564Sdim nullptr, 151314564Sdim nullptr, 152314564Sdim 0}, 153314564Sdim {"x9", 154314564Sdim nullptr, 155314564Sdim 8, 156314564Sdim 0, 157314564Sdim eEncodingUint, 158314564Sdim eFormatHex, 159314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x9, LLDB_INVALID_REGNUM, 160314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 161314564Sdim nullptr, 162314564Sdim nullptr, 163314564Sdim nullptr, 164314564Sdim 0}, 165314564Sdim {"x10", 166314564Sdim nullptr, 167314564Sdim 8, 168314564Sdim 0, 169314564Sdim eEncodingUint, 170314564Sdim eFormatHex, 171314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x10, LLDB_INVALID_REGNUM, 172314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 173314564Sdim nullptr, 174314564Sdim nullptr, 175314564Sdim nullptr, 176314564Sdim 0}, 177314564Sdim {"x11", 178314564Sdim nullptr, 179314564Sdim 8, 180314564Sdim 0, 181314564Sdim eEncodingUint, 182314564Sdim eFormatHex, 183314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x11, LLDB_INVALID_REGNUM, 184314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 185314564Sdim nullptr, 186314564Sdim nullptr, 187314564Sdim nullptr, 188314564Sdim 0}, 189314564Sdim {"x12", 190314564Sdim nullptr, 191314564Sdim 8, 192314564Sdim 0, 193314564Sdim eEncodingUint, 194314564Sdim eFormatHex, 195314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x12, LLDB_INVALID_REGNUM, 196314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 197314564Sdim nullptr, 198314564Sdim nullptr, 199314564Sdim nullptr, 200314564Sdim 0}, 201314564Sdim {"x13", 202314564Sdim nullptr, 203314564Sdim 8, 204314564Sdim 0, 205314564Sdim eEncodingUint, 206314564Sdim eFormatHex, 207314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x13, LLDB_INVALID_REGNUM, 208314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 209314564Sdim nullptr, 210314564Sdim nullptr, 211314564Sdim nullptr, 212314564Sdim 0}, 213314564Sdim {"x14", 214314564Sdim nullptr, 215314564Sdim 8, 216314564Sdim 0, 217314564Sdim eEncodingUint, 218314564Sdim eFormatHex, 219314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x14, LLDB_INVALID_REGNUM, 220314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 221314564Sdim nullptr, 222314564Sdim nullptr, 223314564Sdim nullptr, 224314564Sdim 0}, 225314564Sdim {"x15", 226314564Sdim nullptr, 227314564Sdim 8, 228314564Sdim 0, 229314564Sdim eEncodingUint, 230314564Sdim eFormatHex, 231314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x15, LLDB_INVALID_REGNUM, 232314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 233314564Sdim nullptr, 234314564Sdim nullptr, 235314564Sdim nullptr, 236314564Sdim 0}, 237314564Sdim {"x16", 238314564Sdim nullptr, 239314564Sdim 8, 240314564Sdim 0, 241314564Sdim eEncodingUint, 242314564Sdim eFormatHex, 243314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x16, LLDB_INVALID_REGNUM, 244314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 245314564Sdim nullptr, 246314564Sdim nullptr, 247314564Sdim nullptr, 248314564Sdim 0}, 249314564Sdim {"x17", 250314564Sdim nullptr, 251314564Sdim 8, 252314564Sdim 0, 253314564Sdim eEncodingUint, 254314564Sdim eFormatHex, 255314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x17, LLDB_INVALID_REGNUM, 256314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 257314564Sdim nullptr, 258314564Sdim nullptr, 259314564Sdim nullptr, 260314564Sdim 0}, 261314564Sdim {"x18", 262314564Sdim nullptr, 263314564Sdim 8, 264314564Sdim 0, 265314564Sdim eEncodingUint, 266314564Sdim eFormatHex, 267314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x18, LLDB_INVALID_REGNUM, 268314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 269314564Sdim nullptr, 270314564Sdim nullptr, 271314564Sdim nullptr, 272314564Sdim 0}, 273314564Sdim {"x19", 274314564Sdim nullptr, 275314564Sdim 8, 276314564Sdim 0, 277314564Sdim eEncodingUint, 278314564Sdim eFormatHex, 279314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x19, LLDB_INVALID_REGNUM, 280314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 281314564Sdim nullptr, 282314564Sdim nullptr, 283314564Sdim nullptr, 284314564Sdim 0}, 285314564Sdim {"x20", 286314564Sdim nullptr, 287314564Sdim 8, 288314564Sdim 0, 289314564Sdim eEncodingUint, 290314564Sdim eFormatHex, 291314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x20, LLDB_INVALID_REGNUM, 292314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 293314564Sdim nullptr, 294314564Sdim nullptr, 295314564Sdim nullptr, 296314564Sdim 0}, 297314564Sdim {"x21", 298314564Sdim nullptr, 299314564Sdim 8, 300314564Sdim 0, 301314564Sdim eEncodingUint, 302314564Sdim eFormatHex, 303314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x21, LLDB_INVALID_REGNUM, 304314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 305314564Sdim nullptr, 306314564Sdim nullptr, 307314564Sdim nullptr, 308314564Sdim 0}, 309314564Sdim {"x22", 310314564Sdim nullptr, 311314564Sdim 8, 312314564Sdim 0, 313314564Sdim eEncodingUint, 314314564Sdim eFormatHex, 315314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x22, LLDB_INVALID_REGNUM, 316314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 317314564Sdim nullptr, 318314564Sdim nullptr, 319314564Sdim nullptr, 320314564Sdim 0}, 321314564Sdim {"x23", 322314564Sdim nullptr, 323314564Sdim 8, 324314564Sdim 0, 325314564Sdim eEncodingUint, 326314564Sdim eFormatHex, 327314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x23, LLDB_INVALID_REGNUM, 328314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 329314564Sdim nullptr, 330314564Sdim nullptr, 331314564Sdim nullptr, 332314564Sdim 0}, 333314564Sdim {"x24", 334314564Sdim nullptr, 335314564Sdim 8, 336314564Sdim 0, 337314564Sdim eEncodingUint, 338314564Sdim eFormatHex, 339314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x24, LLDB_INVALID_REGNUM, 340314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 341314564Sdim nullptr, 342314564Sdim nullptr, 343314564Sdim nullptr, 344314564Sdim 0}, 345314564Sdim {"x25", 346314564Sdim nullptr, 347314564Sdim 8, 348314564Sdim 0, 349314564Sdim eEncodingUint, 350314564Sdim eFormatHex, 351314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x25, LLDB_INVALID_REGNUM, 352314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 353314564Sdim nullptr, 354314564Sdim nullptr, 355314564Sdim nullptr, 356314564Sdim 0}, 357314564Sdim {"x26", 358314564Sdim nullptr, 359314564Sdim 8, 360314564Sdim 0, 361314564Sdim eEncodingUint, 362314564Sdim eFormatHex, 363314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x26, LLDB_INVALID_REGNUM, 364314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 365314564Sdim nullptr, 366314564Sdim nullptr, 367314564Sdim nullptr, 368314564Sdim 0}, 369314564Sdim {"x27", 370314564Sdim nullptr, 371314564Sdim 8, 372314564Sdim 0, 373314564Sdim eEncodingUint, 374314564Sdim eFormatHex, 375314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x27, LLDB_INVALID_REGNUM, 376314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 377314564Sdim nullptr, 378314564Sdim nullptr, 379314564Sdim nullptr, 380314564Sdim 0}, 381314564Sdim {"x28", 382314564Sdim nullptr, 383314564Sdim 8, 384314564Sdim 0, 385314564Sdim eEncodingUint, 386314564Sdim eFormatHex, 387314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x28, LLDB_INVALID_REGNUM, 388314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 389314564Sdim nullptr, 390314564Sdim nullptr, 391314564Sdim nullptr, 392314564Sdim 0}, 393314564Sdim {"fp", 394314564Sdim "x29", 395314564Sdim 8, 396314564Sdim 0, 397314564Sdim eEncodingUint, 398314564Sdim eFormatHex, 399314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x29, LLDB_REGNUM_GENERIC_FP, 400314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 401314564Sdim nullptr, 402314564Sdim nullptr, 403314564Sdim nullptr, 404314564Sdim 0}, 405314564Sdim {"lr", 406314564Sdim "x30", 407314564Sdim 8, 408314564Sdim 0, 409314564Sdim eEncodingUint, 410314564Sdim eFormatHex, 411314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x30, LLDB_REGNUM_GENERIC_RA, 412314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 413314564Sdim nullptr, 414314564Sdim nullptr, 415314564Sdim nullptr, 416314564Sdim 0}, 417314564Sdim {"sp", 418314564Sdim "x31", 419314564Sdim 8, 420314564Sdim 0, 421314564Sdim eEncodingUint, 422314564Sdim eFormatHex, 423314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x31, LLDB_REGNUM_GENERIC_SP, 424314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 425314564Sdim nullptr, 426314564Sdim nullptr, 427314564Sdim nullptr, 428314564Sdim 0}, 429314564Sdim {"pc", 430314564Sdim nullptr, 431314564Sdim 8, 432314564Sdim 0, 433314564Sdim eEncodingUint, 434314564Sdim eFormatHex, 435314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::pc, LLDB_REGNUM_GENERIC_PC, 436314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 437314564Sdim nullptr, 438314564Sdim nullptr, 439314564Sdim nullptr, 440314564Sdim 0}, 441314564Sdim {"cpsr", 442314564Sdim "psr", 443314564Sdim 4, 444314564Sdim 0, 445314564Sdim eEncodingUint, 446314564Sdim eFormatHex, 447314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS, 448314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 449314564Sdim nullptr, 450314564Sdim nullptr, 451314564Sdim nullptr, 452314564Sdim 0}, 453275072Semaste 454314564Sdim {"v0", 455314564Sdim nullptr, 456314564Sdim 16, 457314564Sdim 0, 458314564Sdim eEncodingVector, 459314564Sdim eFormatVectorOfUInt8, 460314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v0, LLDB_INVALID_REGNUM, 461314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 462314564Sdim nullptr, 463314564Sdim nullptr, 464314564Sdim nullptr, 465314564Sdim 0}, 466314564Sdim {"v1", 467314564Sdim nullptr, 468314564Sdim 16, 469314564Sdim 0, 470314564Sdim eEncodingVector, 471314564Sdim eFormatVectorOfUInt8, 472314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v1, LLDB_INVALID_REGNUM, 473314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 474314564Sdim nullptr, 475314564Sdim nullptr, 476314564Sdim nullptr, 477314564Sdim 0}, 478314564Sdim {"v2", 479314564Sdim nullptr, 480314564Sdim 16, 481314564Sdim 0, 482314564Sdim eEncodingVector, 483314564Sdim eFormatVectorOfUInt8, 484314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v2, LLDB_INVALID_REGNUM, 485314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 486314564Sdim nullptr, 487314564Sdim nullptr, 488314564Sdim nullptr, 489314564Sdim 0}, 490314564Sdim {"v3", 491314564Sdim nullptr, 492314564Sdim 16, 493314564Sdim 0, 494314564Sdim eEncodingVector, 495314564Sdim eFormatVectorOfUInt8, 496314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v3, LLDB_INVALID_REGNUM, 497314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 498314564Sdim nullptr, 499314564Sdim nullptr, 500314564Sdim nullptr, 501314564Sdim 0}, 502314564Sdim {"v4", 503314564Sdim nullptr, 504314564Sdim 16, 505314564Sdim 0, 506314564Sdim eEncodingVector, 507314564Sdim eFormatVectorOfUInt8, 508314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v4, LLDB_INVALID_REGNUM, 509314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 510314564Sdim nullptr, 511314564Sdim nullptr, 512314564Sdim nullptr, 513314564Sdim 0}, 514314564Sdim {"v5", 515314564Sdim nullptr, 516314564Sdim 16, 517314564Sdim 0, 518314564Sdim eEncodingVector, 519314564Sdim eFormatVectorOfUInt8, 520314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v5, LLDB_INVALID_REGNUM, 521314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 522314564Sdim nullptr, 523314564Sdim nullptr, 524314564Sdim nullptr, 525314564Sdim 0}, 526314564Sdim {"v6", 527314564Sdim nullptr, 528314564Sdim 16, 529314564Sdim 0, 530314564Sdim eEncodingVector, 531314564Sdim eFormatVectorOfUInt8, 532314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v6, LLDB_INVALID_REGNUM, 533314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 534314564Sdim nullptr, 535314564Sdim nullptr, 536314564Sdim nullptr, 537314564Sdim 0}, 538314564Sdim {"v7", 539314564Sdim nullptr, 540314564Sdim 16, 541314564Sdim 0, 542314564Sdim eEncodingVector, 543314564Sdim eFormatVectorOfUInt8, 544314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v7, LLDB_INVALID_REGNUM, 545314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 546314564Sdim nullptr, 547314564Sdim nullptr, 548314564Sdim nullptr, 549314564Sdim 0}, 550314564Sdim {"v8", 551314564Sdim nullptr, 552314564Sdim 16, 553314564Sdim 0, 554314564Sdim eEncodingVector, 555314564Sdim eFormatVectorOfUInt8, 556314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v8, LLDB_INVALID_REGNUM, 557314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 558314564Sdim nullptr, 559314564Sdim nullptr, 560314564Sdim nullptr, 561314564Sdim 0}, 562314564Sdim {"v9", 563314564Sdim nullptr, 564314564Sdim 16, 565314564Sdim 0, 566314564Sdim eEncodingVector, 567314564Sdim eFormatVectorOfUInt8, 568314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v9, LLDB_INVALID_REGNUM, 569314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 570314564Sdim nullptr, 571314564Sdim nullptr, 572314564Sdim nullptr, 573314564Sdim 0}, 574314564Sdim {"v10", 575314564Sdim nullptr, 576314564Sdim 16, 577314564Sdim 0, 578314564Sdim eEncodingVector, 579314564Sdim eFormatVectorOfUInt8, 580314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v10, LLDB_INVALID_REGNUM, 581314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 582314564Sdim nullptr, 583314564Sdim nullptr, 584314564Sdim nullptr, 585314564Sdim 0}, 586314564Sdim {"v11", 587314564Sdim nullptr, 588314564Sdim 16, 589314564Sdim 0, 590314564Sdim eEncodingVector, 591314564Sdim eFormatVectorOfUInt8, 592314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v11, LLDB_INVALID_REGNUM, 593314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 594314564Sdim nullptr, 595314564Sdim nullptr, 596314564Sdim nullptr, 597314564Sdim 0}, 598314564Sdim {"v12", 599314564Sdim nullptr, 600314564Sdim 16, 601314564Sdim 0, 602314564Sdim eEncodingVector, 603314564Sdim eFormatVectorOfUInt8, 604314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v12, LLDB_INVALID_REGNUM, 605314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 606314564Sdim nullptr, 607314564Sdim nullptr, 608314564Sdim nullptr, 609314564Sdim 0}, 610314564Sdim {"v13", 611314564Sdim nullptr, 612314564Sdim 16, 613314564Sdim 0, 614314564Sdim eEncodingVector, 615314564Sdim eFormatVectorOfUInt8, 616314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v13, LLDB_INVALID_REGNUM, 617314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 618314564Sdim nullptr, 619314564Sdim nullptr, 620314564Sdim nullptr, 621314564Sdim 0}, 622314564Sdim {"v14", 623314564Sdim nullptr, 624314564Sdim 16, 625314564Sdim 0, 626314564Sdim eEncodingVector, 627314564Sdim eFormatVectorOfUInt8, 628314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v14, LLDB_INVALID_REGNUM, 629314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 630314564Sdim nullptr, 631314564Sdim nullptr, 632314564Sdim nullptr, 633314564Sdim 0}, 634314564Sdim {"v15", 635314564Sdim nullptr, 636314564Sdim 16, 637314564Sdim 0, 638314564Sdim eEncodingVector, 639314564Sdim eFormatVectorOfUInt8, 640314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v15, LLDB_INVALID_REGNUM, 641314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 642314564Sdim nullptr, 643314564Sdim nullptr, 644314564Sdim nullptr, 645314564Sdim 0}, 646314564Sdim {"v16", 647314564Sdim nullptr, 648314564Sdim 16, 649314564Sdim 0, 650314564Sdim eEncodingVector, 651314564Sdim eFormatVectorOfUInt8, 652314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v16, LLDB_INVALID_REGNUM, 653314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 654314564Sdim nullptr, 655314564Sdim nullptr, 656314564Sdim nullptr, 657314564Sdim 0}, 658314564Sdim {"v17", 659314564Sdim nullptr, 660314564Sdim 16, 661314564Sdim 0, 662314564Sdim eEncodingVector, 663314564Sdim eFormatVectorOfUInt8, 664314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v17, LLDB_INVALID_REGNUM, 665314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 666314564Sdim nullptr, 667314564Sdim nullptr, 668314564Sdim nullptr, 669314564Sdim 0}, 670314564Sdim {"v18", 671314564Sdim nullptr, 672314564Sdim 16, 673314564Sdim 0, 674314564Sdim eEncodingVector, 675314564Sdim eFormatVectorOfUInt8, 676314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v18, LLDB_INVALID_REGNUM, 677314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 678314564Sdim nullptr, 679314564Sdim nullptr, 680314564Sdim nullptr, 681314564Sdim 0}, 682314564Sdim {"v19", 683314564Sdim nullptr, 684314564Sdim 16, 685314564Sdim 0, 686314564Sdim eEncodingVector, 687314564Sdim eFormatVectorOfUInt8, 688314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v19, LLDB_INVALID_REGNUM, 689314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 690314564Sdim nullptr, 691314564Sdim nullptr, 692314564Sdim nullptr, 693314564Sdim 0}, 694314564Sdim {"v20", 695314564Sdim nullptr, 696314564Sdim 16, 697314564Sdim 0, 698314564Sdim eEncodingVector, 699314564Sdim eFormatVectorOfUInt8, 700314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v20, LLDB_INVALID_REGNUM, 701314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 702314564Sdim nullptr, 703314564Sdim nullptr, 704314564Sdim nullptr, 705314564Sdim 0}, 706314564Sdim {"v21", 707314564Sdim nullptr, 708314564Sdim 16, 709314564Sdim 0, 710314564Sdim eEncodingVector, 711314564Sdim eFormatVectorOfUInt8, 712314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v21, LLDB_INVALID_REGNUM, 713314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 714314564Sdim nullptr, 715314564Sdim nullptr, 716314564Sdim nullptr, 717314564Sdim 0}, 718314564Sdim {"v22", 719314564Sdim nullptr, 720314564Sdim 16, 721314564Sdim 0, 722314564Sdim eEncodingVector, 723314564Sdim eFormatVectorOfUInt8, 724314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v22, LLDB_INVALID_REGNUM, 725314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 726314564Sdim nullptr, 727314564Sdim nullptr, 728314564Sdim nullptr, 729314564Sdim 0}, 730314564Sdim {"v23", 731314564Sdim nullptr, 732314564Sdim 16, 733314564Sdim 0, 734314564Sdim eEncodingVector, 735314564Sdim eFormatVectorOfUInt8, 736314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v23, LLDB_INVALID_REGNUM, 737314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 738314564Sdim nullptr, 739314564Sdim nullptr, 740314564Sdim nullptr, 741314564Sdim 0}, 742314564Sdim {"v24", 743314564Sdim nullptr, 744314564Sdim 16, 745314564Sdim 0, 746314564Sdim eEncodingVector, 747314564Sdim eFormatVectorOfUInt8, 748314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v24, LLDB_INVALID_REGNUM, 749314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 750314564Sdim nullptr, 751314564Sdim nullptr, 752314564Sdim nullptr, 753314564Sdim 0}, 754314564Sdim {"v25", 755314564Sdim nullptr, 756314564Sdim 16, 757314564Sdim 0, 758314564Sdim eEncodingVector, 759314564Sdim eFormatVectorOfUInt8, 760314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v25, LLDB_INVALID_REGNUM, 761314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 762314564Sdim nullptr, 763314564Sdim nullptr, 764314564Sdim nullptr, 765314564Sdim 0}, 766314564Sdim {"v26", 767314564Sdim nullptr, 768314564Sdim 16, 769314564Sdim 0, 770314564Sdim eEncodingVector, 771314564Sdim eFormatVectorOfUInt8, 772314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v26, LLDB_INVALID_REGNUM, 773314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 774314564Sdim nullptr, 775314564Sdim nullptr, 776314564Sdim nullptr, 777314564Sdim 0}, 778314564Sdim {"v27", 779314564Sdim nullptr, 780314564Sdim 16, 781314564Sdim 0, 782314564Sdim eEncodingVector, 783314564Sdim eFormatVectorOfUInt8, 784314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v27, LLDB_INVALID_REGNUM, 785314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 786314564Sdim nullptr, 787314564Sdim nullptr, 788314564Sdim nullptr, 789314564Sdim 0}, 790314564Sdim {"v28", 791314564Sdim nullptr, 792314564Sdim 16, 793314564Sdim 0, 794314564Sdim eEncodingVector, 795314564Sdim eFormatVectorOfUInt8, 796314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v28, LLDB_INVALID_REGNUM, 797314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 798314564Sdim nullptr, 799314564Sdim nullptr, 800314564Sdim nullptr, 801314564Sdim 0}, 802314564Sdim {"v29", 803314564Sdim nullptr, 804314564Sdim 16, 805314564Sdim 0, 806314564Sdim eEncodingVector, 807314564Sdim eFormatVectorOfUInt8, 808314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v29, LLDB_INVALID_REGNUM, 809314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 810314564Sdim nullptr, 811314564Sdim nullptr, 812314564Sdim nullptr, 813314564Sdim 0}, 814314564Sdim {"v30", 815314564Sdim nullptr, 816314564Sdim 16, 817314564Sdim 0, 818314564Sdim eEncodingVector, 819314564Sdim eFormatVectorOfUInt8, 820314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v30, LLDB_INVALID_REGNUM, 821314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 822314564Sdim nullptr, 823314564Sdim nullptr, 824314564Sdim nullptr, 825314564Sdim 0}, 826314564Sdim {"v31", 827314564Sdim nullptr, 828314564Sdim 16, 829314564Sdim 0, 830314564Sdim eEncodingVector, 831314564Sdim eFormatVectorOfUInt8, 832314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v31, LLDB_INVALID_REGNUM, 833314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 834314564Sdim nullptr, 835314564Sdim nullptr, 836314564Sdim nullptr, 837314564Sdim 0}, 838275072Semaste 839314564Sdim {"fpsr", 840314564Sdim nullptr, 841314564Sdim 4, 842314564Sdim 0, 843314564Sdim eEncodingUint, 844314564Sdim eFormatHex, 845314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 846314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 847314564Sdim nullptr, 848314564Sdim nullptr, 849314564Sdim nullptr, 850314564Sdim 0}, 851314564Sdim {"fpcr", 852314564Sdim nullptr, 853314564Sdim 4, 854314564Sdim 0, 855314564Sdim eEncodingUint, 856314564Sdim eFormatHex, 857314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 858314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 859314564Sdim nullptr, 860314564Sdim nullptr, 861314564Sdim nullptr, 862314564Sdim 0}, 863275072Semaste 864314564Sdim {"s0", 865314564Sdim nullptr, 866314564Sdim 4, 867314564Sdim 0, 868314564Sdim eEncodingIEEE754, 869314564Sdim eFormatFloat, 870314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 871314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 872314564Sdim nullptr, 873314564Sdim nullptr, 874314564Sdim nullptr, 875314564Sdim 0}, 876314564Sdim {"s1", 877314564Sdim nullptr, 878314564Sdim 4, 879314564Sdim 0, 880314564Sdim eEncodingIEEE754, 881314564Sdim eFormatFloat, 882314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 883314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 884314564Sdim nullptr, 885314564Sdim nullptr, 886314564Sdim nullptr, 887314564Sdim 0}, 888314564Sdim {"s2", 889314564Sdim nullptr, 890314564Sdim 4, 891314564Sdim 0, 892314564Sdim eEncodingIEEE754, 893314564Sdim eFormatFloat, 894314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 895314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 896314564Sdim nullptr, 897314564Sdim nullptr, 898314564Sdim nullptr, 899314564Sdim 0}, 900314564Sdim {"s3", 901314564Sdim nullptr, 902314564Sdim 4, 903314564Sdim 0, 904314564Sdim eEncodingIEEE754, 905314564Sdim eFormatFloat, 906314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 907314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 908314564Sdim nullptr, 909314564Sdim nullptr, 910314564Sdim nullptr, 911314564Sdim 0}, 912314564Sdim {"s4", 913314564Sdim nullptr, 914314564Sdim 4, 915314564Sdim 0, 916314564Sdim eEncodingIEEE754, 917314564Sdim eFormatFloat, 918314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 919314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 920314564Sdim nullptr, 921314564Sdim nullptr, 922314564Sdim nullptr, 923314564Sdim 0}, 924314564Sdim {"s5", 925314564Sdim nullptr, 926314564Sdim 4, 927314564Sdim 0, 928314564Sdim eEncodingIEEE754, 929314564Sdim eFormatFloat, 930314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 931314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 932314564Sdim nullptr, 933314564Sdim nullptr, 934314564Sdim nullptr, 935314564Sdim 0}, 936314564Sdim {"s6", 937314564Sdim nullptr, 938314564Sdim 4, 939314564Sdim 0, 940314564Sdim eEncodingIEEE754, 941314564Sdim eFormatFloat, 942314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 943314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 944314564Sdim nullptr, 945314564Sdim nullptr, 946314564Sdim nullptr, 947314564Sdim 0}, 948314564Sdim {"s7", 949314564Sdim nullptr, 950314564Sdim 4, 951314564Sdim 0, 952314564Sdim eEncodingIEEE754, 953314564Sdim eFormatFloat, 954314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 955314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 956314564Sdim nullptr, 957314564Sdim nullptr, 958314564Sdim nullptr, 959314564Sdim 0}, 960314564Sdim {"s8", 961314564Sdim nullptr, 962314564Sdim 4, 963314564Sdim 0, 964314564Sdim eEncodingIEEE754, 965314564Sdim eFormatFloat, 966314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 967314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 968314564Sdim nullptr, 969314564Sdim nullptr, 970314564Sdim nullptr, 971314564Sdim 0}, 972314564Sdim {"s9", 973314564Sdim nullptr, 974314564Sdim 4, 975314564Sdim 0, 976314564Sdim eEncodingIEEE754, 977314564Sdim eFormatFloat, 978314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 979314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 980314564Sdim nullptr, 981314564Sdim nullptr, 982314564Sdim nullptr, 983314564Sdim 0}, 984314564Sdim {"s10", 985314564Sdim nullptr, 986314564Sdim 4, 987314564Sdim 0, 988314564Sdim eEncodingIEEE754, 989314564Sdim eFormatFloat, 990314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 991314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 992314564Sdim nullptr, 993314564Sdim nullptr, 994314564Sdim nullptr, 995314564Sdim 0}, 996314564Sdim {"s11", 997314564Sdim nullptr, 998314564Sdim 4, 999314564Sdim 0, 1000314564Sdim eEncodingIEEE754, 1001314564Sdim eFormatFloat, 1002314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1003314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1004314564Sdim nullptr, 1005314564Sdim nullptr, 1006314564Sdim nullptr, 1007314564Sdim 0}, 1008314564Sdim {"s12", 1009314564Sdim nullptr, 1010314564Sdim 4, 1011314564Sdim 0, 1012314564Sdim eEncodingIEEE754, 1013314564Sdim eFormatFloat, 1014314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1015314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1016314564Sdim nullptr, 1017314564Sdim nullptr, 1018314564Sdim nullptr, 1019314564Sdim 0}, 1020314564Sdim {"s13", 1021314564Sdim nullptr, 1022314564Sdim 4, 1023314564Sdim 0, 1024314564Sdim eEncodingIEEE754, 1025314564Sdim eFormatFloat, 1026314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1027314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1028314564Sdim nullptr, 1029314564Sdim nullptr, 1030314564Sdim nullptr, 1031314564Sdim 0}, 1032314564Sdim {"s14", 1033314564Sdim nullptr, 1034314564Sdim 4, 1035314564Sdim 0, 1036314564Sdim eEncodingIEEE754, 1037314564Sdim eFormatFloat, 1038314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1039314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1040314564Sdim nullptr, 1041314564Sdim nullptr, 1042314564Sdim nullptr, 1043314564Sdim 0}, 1044314564Sdim {"s15", 1045314564Sdim nullptr, 1046314564Sdim 4, 1047314564Sdim 0, 1048314564Sdim eEncodingIEEE754, 1049314564Sdim eFormatFloat, 1050314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1051314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1052314564Sdim nullptr, 1053314564Sdim nullptr, 1054314564Sdim nullptr, 1055314564Sdim 0}, 1056314564Sdim {"s16", 1057314564Sdim nullptr, 1058314564Sdim 4, 1059314564Sdim 0, 1060314564Sdim eEncodingIEEE754, 1061314564Sdim eFormatFloat, 1062314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1063314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1064314564Sdim nullptr, 1065314564Sdim nullptr, 1066314564Sdim nullptr, 1067314564Sdim 0}, 1068314564Sdim {"s17", 1069314564Sdim nullptr, 1070314564Sdim 4, 1071314564Sdim 0, 1072314564Sdim eEncodingIEEE754, 1073314564Sdim eFormatFloat, 1074314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1075314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1076314564Sdim nullptr, 1077314564Sdim nullptr, 1078314564Sdim nullptr, 1079314564Sdim 0}, 1080314564Sdim {"s18", 1081314564Sdim nullptr, 1082314564Sdim 4, 1083314564Sdim 0, 1084314564Sdim eEncodingIEEE754, 1085314564Sdim eFormatFloat, 1086314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1087314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1088314564Sdim nullptr, 1089314564Sdim nullptr, 1090314564Sdim nullptr, 1091314564Sdim 0}, 1092314564Sdim {"s19", 1093314564Sdim nullptr, 1094314564Sdim 4, 1095314564Sdim 0, 1096314564Sdim eEncodingIEEE754, 1097314564Sdim eFormatFloat, 1098314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1099314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1100314564Sdim nullptr, 1101314564Sdim nullptr, 1102314564Sdim nullptr, 1103314564Sdim 0}, 1104314564Sdim {"s20", 1105314564Sdim nullptr, 1106314564Sdim 4, 1107314564Sdim 0, 1108314564Sdim eEncodingIEEE754, 1109314564Sdim eFormatFloat, 1110314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1111314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1112314564Sdim nullptr, 1113314564Sdim nullptr, 1114314564Sdim nullptr, 1115314564Sdim 0}, 1116314564Sdim {"s21", 1117314564Sdim nullptr, 1118314564Sdim 4, 1119314564Sdim 0, 1120314564Sdim eEncodingIEEE754, 1121314564Sdim eFormatFloat, 1122314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1123314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1124314564Sdim nullptr, 1125314564Sdim nullptr, 1126314564Sdim nullptr, 1127314564Sdim 0}, 1128314564Sdim {"s22", 1129314564Sdim nullptr, 1130314564Sdim 4, 1131314564Sdim 0, 1132314564Sdim eEncodingIEEE754, 1133314564Sdim eFormatFloat, 1134314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1135314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1136314564Sdim nullptr, 1137314564Sdim nullptr, 1138314564Sdim nullptr, 1139314564Sdim 0}, 1140314564Sdim {"s23", 1141314564Sdim nullptr, 1142314564Sdim 4, 1143314564Sdim 0, 1144314564Sdim eEncodingIEEE754, 1145314564Sdim eFormatFloat, 1146314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1147314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1148314564Sdim nullptr, 1149314564Sdim nullptr, 1150314564Sdim nullptr, 1151314564Sdim 0}, 1152314564Sdim {"s24", 1153314564Sdim nullptr, 1154314564Sdim 4, 1155314564Sdim 0, 1156314564Sdim eEncodingIEEE754, 1157314564Sdim eFormatFloat, 1158314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1159314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1160314564Sdim nullptr, 1161314564Sdim nullptr, 1162314564Sdim nullptr, 1163314564Sdim 0}, 1164314564Sdim {"s25", 1165314564Sdim nullptr, 1166314564Sdim 4, 1167314564Sdim 0, 1168314564Sdim eEncodingIEEE754, 1169314564Sdim eFormatFloat, 1170314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1171314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1172314564Sdim nullptr, 1173314564Sdim nullptr, 1174314564Sdim nullptr, 1175314564Sdim 0}, 1176314564Sdim {"s26", 1177314564Sdim nullptr, 1178314564Sdim 4, 1179314564Sdim 0, 1180314564Sdim eEncodingIEEE754, 1181314564Sdim eFormatFloat, 1182314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1183314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1184314564Sdim nullptr, 1185314564Sdim nullptr, 1186314564Sdim nullptr, 1187314564Sdim 0}, 1188314564Sdim {"s27", 1189314564Sdim nullptr, 1190314564Sdim 4, 1191314564Sdim 0, 1192314564Sdim eEncodingIEEE754, 1193314564Sdim eFormatFloat, 1194314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1195314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1196314564Sdim nullptr, 1197314564Sdim nullptr, 1198314564Sdim nullptr, 1199314564Sdim 0}, 1200314564Sdim {"s28", 1201314564Sdim nullptr, 1202314564Sdim 4, 1203314564Sdim 0, 1204314564Sdim eEncodingIEEE754, 1205314564Sdim eFormatFloat, 1206314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1207314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1208314564Sdim nullptr, 1209314564Sdim nullptr, 1210314564Sdim nullptr, 1211314564Sdim 0}, 1212314564Sdim {"s29", 1213314564Sdim nullptr, 1214314564Sdim 4, 1215314564Sdim 0, 1216314564Sdim eEncodingIEEE754, 1217314564Sdim eFormatFloat, 1218314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1219314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1220314564Sdim nullptr, 1221314564Sdim nullptr, 1222314564Sdim nullptr, 1223314564Sdim 0}, 1224314564Sdim {"s30", 1225314564Sdim nullptr, 1226314564Sdim 4, 1227314564Sdim 0, 1228314564Sdim eEncodingIEEE754, 1229314564Sdim eFormatFloat, 1230314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1231314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1232314564Sdim nullptr, 1233314564Sdim nullptr, 1234314564Sdim nullptr, 1235314564Sdim 0}, 1236314564Sdim {"s31", 1237314564Sdim nullptr, 1238314564Sdim 4, 1239314564Sdim 0, 1240314564Sdim eEncodingIEEE754, 1241314564Sdim eFormatFloat, 1242314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1243314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1244314564Sdim nullptr, 1245314564Sdim nullptr, 1246314564Sdim nullptr, 1247314564Sdim 0}, 1248275072Semaste 1249314564Sdim {"d0", 1250314564Sdim nullptr, 1251314564Sdim 8, 1252314564Sdim 0, 1253314564Sdim eEncodingIEEE754, 1254314564Sdim eFormatFloat, 1255314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1256314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1257314564Sdim nullptr, 1258314564Sdim nullptr, 1259314564Sdim nullptr, 1260314564Sdim 0}, 1261314564Sdim {"d1", 1262314564Sdim nullptr, 1263314564Sdim 8, 1264314564Sdim 0, 1265314564Sdim eEncodingIEEE754, 1266314564Sdim eFormatFloat, 1267314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1268314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1269314564Sdim nullptr, 1270314564Sdim nullptr, 1271314564Sdim nullptr, 1272314564Sdim 0}, 1273314564Sdim {"d2", 1274314564Sdim nullptr, 1275314564Sdim 8, 1276314564Sdim 0, 1277314564Sdim eEncodingIEEE754, 1278314564Sdim eFormatFloat, 1279314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1280314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1281314564Sdim nullptr, 1282314564Sdim nullptr, 1283314564Sdim nullptr, 1284314564Sdim 0}, 1285314564Sdim {"d3", 1286314564Sdim nullptr, 1287314564Sdim 8, 1288314564Sdim 0, 1289314564Sdim eEncodingIEEE754, 1290314564Sdim eFormatFloat, 1291314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1292314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1293314564Sdim nullptr, 1294314564Sdim nullptr, 1295314564Sdim nullptr, 1296314564Sdim 0}, 1297314564Sdim {"d4", 1298314564Sdim nullptr, 1299314564Sdim 8, 1300314564Sdim 0, 1301314564Sdim eEncodingIEEE754, 1302314564Sdim eFormatFloat, 1303314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1304314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1305314564Sdim nullptr, 1306314564Sdim nullptr, 1307314564Sdim nullptr, 1308314564Sdim 0}, 1309314564Sdim {"d5", 1310314564Sdim nullptr, 1311314564Sdim 8, 1312314564Sdim 0, 1313314564Sdim eEncodingIEEE754, 1314314564Sdim eFormatFloat, 1315314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1316314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1317314564Sdim nullptr, 1318314564Sdim nullptr, 1319314564Sdim nullptr, 1320314564Sdim 0}, 1321314564Sdim {"d6", 1322314564Sdim nullptr, 1323314564Sdim 8, 1324314564Sdim 0, 1325314564Sdim eEncodingIEEE754, 1326314564Sdim eFormatFloat, 1327314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1328314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1329314564Sdim nullptr, 1330314564Sdim nullptr, 1331314564Sdim nullptr, 1332314564Sdim 0}, 1333314564Sdim {"d7", 1334314564Sdim nullptr, 1335314564Sdim 8, 1336314564Sdim 0, 1337314564Sdim eEncodingIEEE754, 1338314564Sdim eFormatFloat, 1339314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1340314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1341314564Sdim nullptr, 1342314564Sdim nullptr, 1343314564Sdim nullptr, 1344314564Sdim 0}, 1345314564Sdim {"d8", 1346314564Sdim nullptr, 1347314564Sdim 8, 1348314564Sdim 0, 1349314564Sdim eEncodingIEEE754, 1350314564Sdim eFormatFloat, 1351314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1352314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1353314564Sdim nullptr, 1354314564Sdim nullptr, 1355314564Sdim nullptr, 1356314564Sdim 0}, 1357314564Sdim {"d9", 1358314564Sdim nullptr, 1359314564Sdim 8, 1360314564Sdim 0, 1361314564Sdim eEncodingIEEE754, 1362314564Sdim eFormatFloat, 1363314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1364314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1365314564Sdim nullptr, 1366314564Sdim nullptr, 1367314564Sdim nullptr, 1368314564Sdim 0}, 1369314564Sdim {"d10", 1370314564Sdim nullptr, 1371314564Sdim 8, 1372314564Sdim 0, 1373314564Sdim eEncodingIEEE754, 1374314564Sdim eFormatFloat, 1375314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1376314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1377314564Sdim nullptr, 1378314564Sdim nullptr, 1379314564Sdim nullptr, 1380314564Sdim 0}, 1381314564Sdim {"d11", 1382314564Sdim nullptr, 1383314564Sdim 8, 1384314564Sdim 0, 1385314564Sdim eEncodingIEEE754, 1386314564Sdim eFormatFloat, 1387314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1388314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1389314564Sdim nullptr, 1390314564Sdim nullptr, 1391314564Sdim nullptr, 1392314564Sdim 0}, 1393314564Sdim {"d12", 1394314564Sdim nullptr, 1395314564Sdim 8, 1396314564Sdim 0, 1397314564Sdim eEncodingIEEE754, 1398314564Sdim eFormatFloat, 1399314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1400314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1401314564Sdim nullptr, 1402314564Sdim nullptr, 1403314564Sdim nullptr, 1404314564Sdim 0}, 1405314564Sdim {"d13", 1406314564Sdim nullptr, 1407314564Sdim 8, 1408314564Sdim 0, 1409314564Sdim eEncodingIEEE754, 1410314564Sdim eFormatFloat, 1411314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1412314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1413314564Sdim nullptr, 1414314564Sdim nullptr, 1415314564Sdim nullptr, 1416314564Sdim 0}, 1417314564Sdim {"d14", 1418314564Sdim nullptr, 1419314564Sdim 8, 1420314564Sdim 0, 1421314564Sdim eEncodingIEEE754, 1422314564Sdim eFormatFloat, 1423314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1424314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1425314564Sdim nullptr, 1426314564Sdim nullptr, 1427314564Sdim nullptr, 1428314564Sdim 0}, 1429314564Sdim {"d15", 1430314564Sdim nullptr, 1431314564Sdim 8, 1432314564Sdim 0, 1433314564Sdim eEncodingIEEE754, 1434314564Sdim eFormatFloat, 1435314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1436314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1437314564Sdim nullptr, 1438314564Sdim nullptr, 1439314564Sdim nullptr, 1440314564Sdim 0}, 1441314564Sdim {"d16", 1442314564Sdim nullptr, 1443314564Sdim 8, 1444314564Sdim 0, 1445314564Sdim eEncodingIEEE754, 1446314564Sdim eFormatFloat, 1447314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1448314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1449314564Sdim nullptr, 1450314564Sdim nullptr, 1451314564Sdim nullptr, 1452314564Sdim 0}, 1453314564Sdim {"d17", 1454314564Sdim nullptr, 1455314564Sdim 8, 1456314564Sdim 0, 1457314564Sdim eEncodingIEEE754, 1458314564Sdim eFormatFloat, 1459314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1460314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1461314564Sdim nullptr, 1462314564Sdim nullptr, 1463314564Sdim nullptr, 1464314564Sdim 0}, 1465314564Sdim {"d18", 1466314564Sdim nullptr, 1467314564Sdim 8, 1468314564Sdim 0, 1469314564Sdim eEncodingIEEE754, 1470314564Sdim eFormatFloat, 1471314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1472314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1473314564Sdim nullptr, 1474314564Sdim nullptr, 1475314564Sdim nullptr, 1476314564Sdim 0}, 1477314564Sdim {"d19", 1478314564Sdim nullptr, 1479314564Sdim 8, 1480314564Sdim 0, 1481314564Sdim eEncodingIEEE754, 1482314564Sdim eFormatFloat, 1483314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1484314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1485314564Sdim nullptr, 1486314564Sdim nullptr, 1487314564Sdim nullptr, 1488314564Sdim 0}, 1489314564Sdim {"d20", 1490314564Sdim nullptr, 1491314564Sdim 8, 1492314564Sdim 0, 1493314564Sdim eEncodingIEEE754, 1494314564Sdim eFormatFloat, 1495314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1496314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1497314564Sdim nullptr, 1498314564Sdim nullptr, 1499314564Sdim nullptr, 1500314564Sdim 0}, 1501314564Sdim {"d21", 1502314564Sdim nullptr, 1503314564Sdim 8, 1504314564Sdim 0, 1505314564Sdim eEncodingIEEE754, 1506314564Sdim eFormatFloat, 1507314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1508314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1509314564Sdim nullptr, 1510314564Sdim nullptr, 1511314564Sdim nullptr, 1512314564Sdim 0}, 1513314564Sdim {"d22", 1514314564Sdim nullptr, 1515314564Sdim 8, 1516314564Sdim 0, 1517314564Sdim eEncodingIEEE754, 1518314564Sdim eFormatFloat, 1519314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1520314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1521314564Sdim nullptr, 1522314564Sdim nullptr, 1523314564Sdim nullptr, 1524314564Sdim 0}, 1525314564Sdim {"d23", 1526314564Sdim nullptr, 1527314564Sdim 8, 1528314564Sdim 0, 1529314564Sdim eEncodingIEEE754, 1530314564Sdim eFormatFloat, 1531314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1532314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1533314564Sdim nullptr, 1534314564Sdim nullptr, 1535314564Sdim nullptr, 1536314564Sdim 0}, 1537314564Sdim {"d24", 1538314564Sdim nullptr, 1539314564Sdim 8, 1540314564Sdim 0, 1541314564Sdim eEncodingIEEE754, 1542314564Sdim eFormatFloat, 1543314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1544314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1545314564Sdim nullptr, 1546314564Sdim nullptr, 1547314564Sdim nullptr, 1548314564Sdim 0}, 1549314564Sdim {"d25", 1550314564Sdim nullptr, 1551314564Sdim 8, 1552314564Sdim 0, 1553314564Sdim eEncodingIEEE754, 1554314564Sdim eFormatFloat, 1555314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1556314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1557314564Sdim nullptr, 1558314564Sdim nullptr, 1559314564Sdim nullptr, 1560314564Sdim 0}, 1561314564Sdim {"d26", 1562314564Sdim nullptr, 1563314564Sdim 8, 1564314564Sdim 0, 1565314564Sdim eEncodingIEEE754, 1566314564Sdim eFormatFloat, 1567314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1568314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1569314564Sdim nullptr, 1570314564Sdim nullptr, 1571314564Sdim nullptr, 1572314564Sdim 0}, 1573314564Sdim {"d27", 1574314564Sdim nullptr, 1575314564Sdim 8, 1576314564Sdim 0, 1577314564Sdim eEncodingIEEE754, 1578314564Sdim eFormatFloat, 1579314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1580314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1581314564Sdim nullptr, 1582314564Sdim nullptr, 1583314564Sdim nullptr, 1584314564Sdim 0}, 1585314564Sdim {"d28", 1586314564Sdim nullptr, 1587314564Sdim 8, 1588314564Sdim 0, 1589314564Sdim eEncodingIEEE754, 1590314564Sdim eFormatFloat, 1591314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1592314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1593314564Sdim nullptr, 1594314564Sdim nullptr, 1595314564Sdim nullptr, 1596314564Sdim 0}, 1597314564Sdim {"d29", 1598314564Sdim nullptr, 1599314564Sdim 8, 1600314564Sdim 0, 1601314564Sdim eEncodingIEEE754, 1602314564Sdim eFormatFloat, 1603314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1604314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1605314564Sdim nullptr, 1606314564Sdim nullptr, 1607314564Sdim nullptr, 1608314564Sdim 0}, 1609314564Sdim {"d30", 1610314564Sdim nullptr, 1611314564Sdim 8, 1612314564Sdim 0, 1613314564Sdim eEncodingIEEE754, 1614314564Sdim eFormatFloat, 1615314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1616314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1617314564Sdim nullptr, 1618314564Sdim nullptr, 1619314564Sdim nullptr, 1620314564Sdim 0}, 1621314564Sdim {"d31", 1622314564Sdim nullptr, 1623314564Sdim 8, 1624314564Sdim 0, 1625314564Sdim eEncodingIEEE754, 1626314564Sdim eFormatFloat, 1627314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1628314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1629314564Sdim nullptr, 1630314564Sdim nullptr, 1631314564Sdim nullptr, 1632314564Sdim 0}}; 1633275072Semaste 1634314564Sdimstatic const uint32_t k_num_register_infos = 1635314564Sdim llvm::array_lengthof(g_register_infos); 1636275072Semastestatic bool g_register_info_names_constified = false; 1637275072Semaste 1638275072Semasteconst lldb_private::RegisterInfo * 1639314564SdimABIMacOSX_arm64::GetRegisterInfoArray(uint32_t &count) { 1640314564Sdim // Make the C-string names and alt_names for the register infos into const 1641314564Sdim // C-string values by having the ConstString unique the names in the global 1642314564Sdim // constant C-string pool. 1643314564Sdim if (!g_register_info_names_constified) { 1644314564Sdim g_register_info_names_constified = true; 1645314564Sdim for (uint32_t i = 0; i < k_num_register_infos; ++i) { 1646314564Sdim if (g_register_infos[i].name) 1647314564Sdim g_register_infos[i].name = 1648314564Sdim ConstString(g_register_infos[i].name).GetCString(); 1649314564Sdim if (g_register_infos[i].alt_name) 1650314564Sdim g_register_infos[i].alt_name = 1651314564Sdim ConstString(g_register_infos[i].alt_name).GetCString(); 1652275072Semaste } 1653314564Sdim } 1654314564Sdim count = k_num_register_infos; 1655314564Sdim return g_register_infos; 1656275072Semaste} 1657275072Semaste 1658314564Sdimsize_t ABIMacOSX_arm64::GetRedZoneSize() const { return 128; } 1659275072Semaste 1660275072Semaste// Static Functions 1661309124Sdim 1662275072SemasteABISP 1663321369SdimABIMacOSX_arm64::CreateInstance(ProcessSP process_sp, const ArchSpec &arch) { 1664314564Sdim const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch(); 1665314564Sdim const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor(); 1666288943Sdim 1667314564Sdim if (vendor_type == llvm::Triple::Apple) { 1668360784Sdim if (arch_type == llvm::Triple::aarch64 || 1669360784Sdim arch_type == llvm::Triple::aarch64_32) { 1670360784Sdim return ABISP( 1671360784Sdim new ABIMacOSX_arm64(std::move(process_sp), MakeMCRegisterInfo(arch))); 1672275072Semaste } 1673314564Sdim } 1674288943Sdim 1675314564Sdim return ABISP(); 1676275072Semaste} 1677275072Semaste 1678314564Sdimbool ABIMacOSX_arm64::PrepareTrivialCall( 1679314564Sdim Thread &thread, lldb::addr_t sp, lldb::addr_t func_addr, 1680314564Sdim lldb::addr_t return_addr, llvm::ArrayRef<lldb::addr_t> args) const { 1681314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1682314564Sdim if (!reg_ctx) 1683314564Sdim return false; 1684275072Semaste 1685314564Sdim Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); 1686275072Semaste 1687314564Sdim if (log) { 1688314564Sdim StreamString s; 1689314564Sdim s.Printf("ABISysV_x86_64::PrepareTrivialCall (tid = 0x%" PRIx64 1690314564Sdim ", sp = 0x%" PRIx64 ", func_addr = 0x%" PRIx64 1691314564Sdim ", return_addr = 0x%" PRIx64, 1692314564Sdim thread.GetID(), (uint64_t)sp, (uint64_t)func_addr, 1693314564Sdim (uint64_t)return_addr); 1694275072Semaste 1695314564Sdim for (size_t i = 0; i < args.size(); ++i) 1696314564Sdim s.Printf(", arg%d = 0x%" PRIx64, static_cast<int>(i + 1), args[i]); 1697314564Sdim s.PutCString(")"); 1698314564Sdim log->PutString(s.GetString()); 1699314564Sdim } 1700275072Semaste 1701314564Sdim const uint32_t pc_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1702314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC); 1703314564Sdim const uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1704314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP); 1705314564Sdim const uint32_t ra_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1706314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA); 1707275072Semaste 1708314564Sdim // x0 - x7 contain first 8 simple args 1709314564Sdim if (args.size() > 8) // TODO handle more than 6 arguments 1710314564Sdim return false; 1711275072Semaste 1712314564Sdim for (size_t i = 0; i < args.size(); ++i) { 1713314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo( 1714314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + i); 1715360784Sdim LLDB_LOGF(log, "About to write arg%d (0x%" PRIx64 ") into %s", 1716360784Sdim static_cast<int>(i + 1), args[i], reg_info->name); 1717314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(reg_info, args[i])) 1718314564Sdim return false; 1719314564Sdim } 1720275072Semaste 1721314564Sdim // Set "lr" to the return address 1722314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1723314564Sdim reg_ctx->GetRegisterInfoAtIndex(ra_reg_num), return_addr)) 1724314564Sdim return false; 1725275072Semaste 1726314564Sdim // Set "sp" to the requested value 1727314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1728314564Sdim reg_ctx->GetRegisterInfoAtIndex(sp_reg_num), sp)) 1729314564Sdim return false; 1730275072Semaste 1731314564Sdim // Set "pc" to the address requested 1732314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1733314564Sdim reg_ctx->GetRegisterInfoAtIndex(pc_reg_num), func_addr)) 1734314564Sdim return false; 1735275072Semaste 1736314564Sdim return true; 1737275072Semaste} 1738275072Semaste 1739314564Sdimbool ABIMacOSX_arm64::GetArgumentValues(Thread &thread, 1740314564Sdim ValueList &values) const { 1741314564Sdim uint32_t num_values = values.GetSize(); 1742314564Sdim 1743314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 1744314564Sdim 1745314564Sdim // Extract the register context so we can read arguments from registers 1746314564Sdim 1747314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1748314564Sdim 1749314564Sdim if (!reg_ctx) 1750314564Sdim return false; 1751314564Sdim 1752314564Sdim addr_t sp = 0; 1753314564Sdim 1754314564Sdim for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { 1755341825Sdim // We currently only support extracting values with Clang QualTypes. Do we 1756341825Sdim // care about others? 1757314564Sdim Value *value = values.GetValueAtIndex(value_idx); 1758314564Sdim 1759314564Sdim if (!value) 1760314564Sdim return false; 1761314564Sdim 1762314564Sdim CompilerType value_type = value->GetCompilerType(); 1763344779Sdim llvm::Optional<uint64_t> bit_size = value_type.GetBitSize(&thread); 1764344779Sdim if (!bit_size) 1765344779Sdim return false; 1766314564Sdim 1767344779Sdim bool is_signed = false; 1768344779Sdim size_t bit_width = 0; 1769344779Sdim if (value_type.IsIntegerOrEnumerationType(is_signed)) { 1770344779Sdim bit_width = *bit_size; 1771344779Sdim } else if (value_type.IsPointerOrReferenceType()) { 1772344779Sdim bit_width = *bit_size; 1773344779Sdim } else { 1774344779Sdim // We only handle integer, pointer and reference types currently... 1775344779Sdim return false; 1776344779Sdim } 1777344779Sdim 1778344779Sdim if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) { 1779344779Sdim if (value_idx < 8) { 1780344779Sdim // Arguments 1-6 are in x0-x5... 1781344779Sdim const RegisterInfo *reg_info = nullptr; 1782344779Sdim // Search by generic ID first, then fall back to by name 1783344779Sdim uint32_t arg_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1784344779Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx); 1785344779Sdim if (arg_reg_num != LLDB_INVALID_REGNUM) { 1786344779Sdim reg_info = reg_ctx->GetRegisterInfoAtIndex(arg_reg_num); 1787344779Sdim } else { 1788344779Sdim switch (value_idx) { 1789344779Sdim case 0: 1790344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x0"); 1791344779Sdim break; 1792344779Sdim case 1: 1793344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x1"); 1794344779Sdim break; 1795344779Sdim case 2: 1796344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x2"); 1797344779Sdim break; 1798344779Sdim case 3: 1799344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x3"); 1800344779Sdim break; 1801344779Sdim case 4: 1802344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x4"); 1803344779Sdim break; 1804344779Sdim case 5: 1805344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x5"); 1806344779Sdim break; 1807344779Sdim case 6: 1808344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x6"); 1809344779Sdim break; 1810344779Sdim case 7: 1811344779Sdim reg_info = reg_ctx->GetRegisterInfoByName("x7"); 1812344779Sdim break; 1813314564Sdim } 1814344779Sdim } 1815314564Sdim 1816344779Sdim if (reg_info) { 1817344779Sdim RegisterValue reg_value; 1818314564Sdim 1819344779Sdim if (reg_ctx->ReadRegister(reg_info, reg_value)) { 1820344779Sdim if (is_signed) 1821344779Sdim reg_value.SignExtend(bit_width); 1822344779Sdim if (!reg_value.GetScalarValue(value->GetScalar())) 1823314564Sdim return false; 1824344779Sdim continue; 1825314564Sdim } 1826344779Sdim } 1827344779Sdim return false; 1828344779Sdim } else { 1829344779Sdim if (sp == 0) { 1830344779Sdim // Read the stack pointer if we already haven't read it 1831344779Sdim sp = reg_ctx->GetSP(0); 1832344779Sdim if (sp == 0) 1833314564Sdim return false; 1834344779Sdim } 1835314564Sdim 1836344779Sdim // Arguments 5 on up are on the stack 1837344779Sdim const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8; 1838344779Sdim Status error; 1839344779Sdim if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory( 1840344779Sdim sp, arg_byte_size, is_signed, value->GetScalar(), error)) 1841344779Sdim return false; 1842344779Sdim 1843344779Sdim sp += arg_byte_size; 1844344779Sdim // Align up to the next 8 byte boundary if needed 1845344779Sdim if (sp % 8) { 1846344779Sdim sp >>= 3; 1847344779Sdim sp += 1; 1848344779Sdim sp <<= 3; 1849275072Semaste } 1850314564Sdim } 1851275072Semaste } 1852314564Sdim } 1853314564Sdim return true; 1854275072Semaste} 1855275072Semaste 1856321369SdimStatus 1857321369SdimABIMacOSX_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp, 1858321369Sdim lldb::ValueObjectSP &new_value_sp) { 1859321369Sdim Status error; 1860314564Sdim if (!new_value_sp) { 1861314564Sdim error.SetErrorString("Empty value object for return value."); 1862314564Sdim return error; 1863314564Sdim } 1864314564Sdim 1865314564Sdim CompilerType return_value_type = new_value_sp->GetCompilerType(); 1866314564Sdim if (!return_value_type) { 1867314564Sdim error.SetErrorString("Null clang type for return value."); 1868314564Sdim return error; 1869314564Sdim } 1870314564Sdim 1871314564Sdim Thread *thread = frame_sp->GetThread().get(); 1872314564Sdim 1873314564Sdim RegisterContext *reg_ctx = thread->GetRegisterContext().get(); 1874314564Sdim 1875314564Sdim if (reg_ctx) { 1876314564Sdim DataExtractor data; 1877321369Sdim Status data_error; 1878314564Sdim const uint64_t byte_size = new_value_sp->GetData(data, data_error); 1879314564Sdim if (data_error.Fail()) { 1880314564Sdim error.SetErrorStringWithFormat( 1881314564Sdim "Couldn't convert return value to raw data: %s", 1882314564Sdim data_error.AsCString()); 1883314564Sdim return error; 1884275072Semaste } 1885275072Semaste 1886314564Sdim const uint32_t type_flags = return_value_type.GetTypeInfo(nullptr); 1887314564Sdim if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) { 1888314564Sdim if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) { 1889314564Sdim // Extract the register context so we can read arguments from registers 1890314564Sdim lldb::offset_t offset = 0; 1891314564Sdim if (byte_size <= 16) { 1892314564Sdim const RegisterInfo *x0_info = reg_ctx->GetRegisterInfoByName("x0", 0); 1893314564Sdim if (byte_size <= 8) { 1894314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, byte_size); 1895275072Semaste 1896314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) 1897314564Sdim error.SetErrorString("failed to write register x0"); 1898314564Sdim } else { 1899314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, 8); 1900314564Sdim 1901314564Sdim if (reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) { 1902314564Sdim const RegisterInfo *x1_info = 1903314564Sdim reg_ctx->GetRegisterInfoByName("x1", 0); 1904314564Sdim raw_value = data.GetMaxU64(&offset, byte_size - offset); 1905314564Sdim 1906314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x1_info, raw_value)) 1907314564Sdim error.SetErrorString("failed to write register x1"); 1908275072Semaste } 1909314564Sdim } 1910314564Sdim } else { 1911314564Sdim error.SetErrorString("We don't support returning longer than 128 bit " 1912314564Sdim "integer values at present."); 1913314564Sdim } 1914314564Sdim } else if (type_flags & eTypeIsFloat) { 1915314564Sdim if (type_flags & eTypeIsComplex) { 1916314564Sdim // Don't handle complex yet. 1917314564Sdim error.SetErrorString( 1918314564Sdim "returning complex float values are not supported"); 1919314564Sdim } else { 1920314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1921275072Semaste 1922314564Sdim if (v0_info) { 1923314564Sdim if (byte_size <= 16) { 1924314564Sdim if (byte_size <= RegisterValue::GetMaxByteSize()) { 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"); 1930275072Semaste } 1931314564Sdim } else { 1932314564Sdim error.SetErrorStringWithFormat( 1933314564Sdim "returning float values with a byte size of %" PRIu64 1934314564Sdim " are not supported", 1935314564Sdim byte_size); 1936314564Sdim } 1937314564Sdim } else { 1938314564Sdim error.SetErrorString("returning float values longer than 128 " 1939314564Sdim "bits are not supported"); 1940275072Semaste } 1941314564Sdim } else { 1942314564Sdim error.SetErrorString("v0 register is not available on this target"); 1943314564Sdim } 1944275072Semaste } 1945314564Sdim } 1946314564Sdim } else if (type_flags & eTypeIsVector) { 1947314564Sdim if (byte_size > 0) { 1948314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1949314564Sdim 1950314564Sdim if (v0_info) { 1951314564Sdim if (byte_size <= v0_info->byte_size) { 1952314564Sdim RegisterValue reg_value; 1953314564Sdim error = reg_value.SetValueFromData(v0_info, data, 0, true); 1954314564Sdim if (error.Success()) { 1955314564Sdim if (!reg_ctx->WriteRegister(v0_info, reg_value)) 1956314564Sdim error.SetErrorString("failed to write register v0"); 1957275072Semaste } 1958314564Sdim } 1959275072Semaste } 1960314564Sdim } 1961275072Semaste } 1962314564Sdim } else { 1963314564Sdim error.SetErrorString("no registers are available"); 1964314564Sdim } 1965314564Sdim 1966314564Sdim return error; 1967275072Semaste} 1968275072Semaste 1969314564Sdimbool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) { 1970314564Sdim unwind_plan.Clear(); 1971314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 1972275072Semaste 1973314564Sdim uint32_t lr_reg_num = arm64_dwarf::lr; 1974314564Sdim uint32_t sp_reg_num = arm64_dwarf::sp; 1975314564Sdim uint32_t pc_reg_num = arm64_dwarf::pc; 1976314564Sdim 1977314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 1978314564Sdim 1979314564Sdim // Our previous Call Frame Address is the stack pointer 1980314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0); 1981314564Sdim 1982314564Sdim // Our previous PC is in the LR 1983314564Sdim row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true); 1984314564Sdim 1985314564Sdim unwind_plan.AppendRow(row); 1986314564Sdim 1987314564Sdim // All other registers are the same. 1988314564Sdim 1989314564Sdim unwind_plan.SetSourceName("arm64 at-func-entry default"); 1990314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 1991314564Sdim 1992314564Sdim return true; 1993275072Semaste} 1994275072Semaste 1995314564Sdimbool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { 1996314564Sdim unwind_plan.Clear(); 1997314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 1998275072Semaste 1999314564Sdim uint32_t fp_reg_num = arm64_dwarf::fp; 2000314564Sdim uint32_t pc_reg_num = arm64_dwarf::pc; 2001314564Sdim 2002314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 2003314564Sdim const int32_t ptr_size = 8; 2004314564Sdim 2005314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size); 2006314564Sdim row->SetOffset(0); 2007314564Sdim 2008314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true); 2009314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true); 2010314564Sdim 2011314564Sdim unwind_plan.AppendRow(row); 2012314564Sdim unwind_plan.SetSourceName("arm64-apple-darwin default unwind plan"); 2013314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 2014314564Sdim unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo); 2015360784Sdim unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo); 2016314564Sdim return true; 2017275072Semaste} 2018275072Semaste 2019314564Sdim// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says 2020341825Sdim// registers x19 through x28 and sp are callee preserved. v8-v15 are non- 2021341825Sdim// volatile (and specifically only the lower 8 bytes of these regs), the rest 2022341825Sdim// of the fp/SIMD registers are volatile. 2023360784Sdim// 2024360784Sdim// v. https://github.com/ARM-software/software-standards/blob/master/abi/aapcs64/ 2025275072Semaste 2026275072Semaste// We treat x29 as callee preserved also, else the unwinder won't try to 2027275072Semaste// retrieve fp saves. 2028275072Semaste 2029314564Sdimbool ABIMacOSX_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) { 2030314564Sdim if (reg_info) { 2031314564Sdim const char *name = reg_info->name; 2032275072Semaste 2033314564Sdim // Sometimes we'll be called with the "alternate" name for these registers; 2034314564Sdim // recognize them as non-volatile. 2035275072Semaste 2036314564Sdim if (name[0] == 'p' && name[1] == 'c') // pc 2037314564Sdim return false; 2038314564Sdim if (name[0] == 'f' && name[1] == 'p') // fp 2039314564Sdim return false; 2040314564Sdim if (name[0] == 's' && name[1] == 'p') // sp 2041314564Sdim return false; 2042314564Sdim if (name[0] == 'l' && name[1] == 'r') // lr 2043314564Sdim return false; 2044275072Semaste 2045314564Sdim if (name[0] == 'x') { 2046314564Sdim // Volatile registers: x0-x18, x30 (lr) 2047314564Sdim // Return false for the non-volatile gpr regs, true for everything else 2048314564Sdim switch (name[1]) { 2049314564Sdim case '1': 2050314564Sdim switch (name[2]) { 2051314564Sdim case '9': 2052314564Sdim return false; // x19 is non-volatile 2053314564Sdim default: 2054314564Sdim return true; 2055275072Semaste } 2056314564Sdim break; 2057314564Sdim case '2': 2058314564Sdim switch (name[2]) { 2059314564Sdim case '0': 2060314564Sdim case '1': 2061314564Sdim case '2': 2062314564Sdim case '3': 2063314564Sdim case '4': 2064314564Sdim case '5': 2065314564Sdim case '6': 2066314564Sdim case '7': 2067314564Sdim case '8': 2068314564Sdim return false; // x20 - 28 are non-volatile 2069314564Sdim case '9': 2070314564Sdim return false; // x29 aka fp treat as non-volatile on Darwin 2071314564Sdim default: 2072314564Sdim return true; 2073275072Semaste } 2074314564Sdim case '3': // x30 aka lr treat as non-volatile 2075314564Sdim if (name[2] == '0') 2076314564Sdim return false; 2077314564Sdim break; 2078314564Sdim default: 2079314564Sdim return true; 2080314564Sdim } 2081314564Sdim } else if (name[0] == 'v' || name[0] == 's' || name[0] == 'd') { 2082314564Sdim // Volatile registers: v0-7, v16-v31 2083314564Sdim // Return false for non-volatile fp/SIMD regs, true for everything else 2084314564Sdim switch (name[1]) { 2085314564Sdim case '8': 2086314564Sdim case '9': 2087314564Sdim return false; // v8-v9 are non-volatile 2088314564Sdim case '1': 2089314564Sdim switch (name[2]) { 2090314564Sdim case '0': 2091314564Sdim case '1': 2092314564Sdim case '2': 2093314564Sdim case '3': 2094314564Sdim case '4': 2095314564Sdim case '5': 2096314564Sdim return false; // v10-v15 are non-volatile 2097314564Sdim default: 2098314564Sdim return true; 2099314564Sdim } 2100314564Sdim default: 2101314564Sdim return true; 2102314564Sdim } 2103275072Semaste } 2104314564Sdim } 2105314564Sdim return true; 2106275072Semaste} 2107275072Semaste 2108314564Sdimstatic bool LoadValueFromConsecutiveGPRRegisters( 2109314564Sdim ExecutionContext &exe_ctx, RegisterContext *reg_ctx, 2110314564Sdim const CompilerType &value_type, 2111314564Sdim bool is_return_value, // false => parameter, true => return value 2112314564Sdim uint32_t &NGRN, // NGRN (see ABI documentation) 2113314564Sdim uint32_t &NSRN, // NSRN (see ABI documentation) 2114314564Sdim DataExtractor &data) { 2115344779Sdim llvm::Optional<uint64_t> byte_size = value_type.GetByteSize(nullptr); 2116344779Sdim if (!byte_size || *byte_size == 0) 2117314564Sdim return false; 2118314564Sdim 2119353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2120344779Sdim new DataBufferHeap(*byte_size, 0)); 2121314564Sdim const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder(); 2122321369Sdim Status error; 2123314564Sdim 2124314564Sdim CompilerType base_type; 2125314564Sdim const uint32_t homogeneous_count = 2126314564Sdim value_type.IsHomogeneousAggregate(&base_type); 2127314564Sdim if (homogeneous_count > 0 && homogeneous_count <= 8) { 2128314564Sdim // Make sure we have enough registers 2129314564Sdim if (NSRN < 8 && (8 - NSRN) >= homogeneous_count) { 2130314564Sdim if (!base_type) 2131275072Semaste return false; 2132344779Sdim llvm::Optional<uint64_t> base_byte_size = base_type.GetByteSize(nullptr); 2133344779Sdim if (!base_byte_size) 2134344779Sdim return false; 2135314564Sdim uint32_t data_offset = 0; 2136275072Semaste 2137314564Sdim for (uint32_t i = 0; i < homogeneous_count; ++i) { 2138314564Sdim char v_name[8]; 2139314564Sdim ::snprintf(v_name, sizeof(v_name), "v%u", NSRN); 2140314564Sdim const RegisterInfo *reg_info = 2141314564Sdim reg_ctx->GetRegisterInfoByName(v_name, 0); 2142314564Sdim if (reg_info == nullptr) 2143314564Sdim return false; 2144275072Semaste 2145344779Sdim if (*base_byte_size > reg_info->byte_size) 2146314564Sdim return false; 2147275072Semaste 2148314564Sdim RegisterValue reg_value; 2149314564Sdim 2150314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2151314564Sdim return false; 2152314564Sdim 2153353358Sdim // Make sure we have enough room in "heap_data_up" 2154353358Sdim if ((data_offset + *base_byte_size) <= heap_data_up->GetByteSize()) { 2155314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2156353358Sdim reg_info, heap_data_up->GetBytes() + data_offset, *base_byte_size, 2157314564Sdim byte_order, error); 2158344779Sdim if (bytes_copied != *base_byte_size) 2159314564Sdim return false; 2160314564Sdim data_offset += bytes_copied; 2161314564Sdim ++NSRN; 2162314564Sdim } else 2163314564Sdim return false; 2164314564Sdim } 2165314564Sdim data.SetByteOrder(byte_order); 2166314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2167353358Sdim data.SetData(DataBufferSP(heap_data_up.release())); 2168314564Sdim return true; 2169275072Semaste } 2170314564Sdim } 2171275072Semaste 2172314564Sdim const size_t max_reg_byte_size = 16; 2173344779Sdim if (*byte_size <= max_reg_byte_size) { 2174344779Sdim size_t bytes_left = *byte_size; 2175314564Sdim uint32_t data_offset = 0; 2176344779Sdim while (data_offset < *byte_size) { 2177314564Sdim if (NGRN >= 8) 2178314564Sdim return false; 2179275072Semaste 2180314564Sdim uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 2181314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2182314564Sdim if (reg_num == LLDB_INVALID_REGNUM) 2183314564Sdim return false; 2184314564Sdim 2185314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num); 2186314564Sdim if (reg_info == nullptr) 2187314564Sdim return false; 2188314564Sdim 2189314564Sdim RegisterValue reg_value; 2190314564Sdim 2191314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2192314564Sdim return false; 2193314564Sdim 2194314564Sdim const size_t curr_byte_size = std::min<size_t>(8, bytes_left); 2195314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2196353358Sdim reg_info, heap_data_up->GetBytes() + data_offset, curr_byte_size, 2197314564Sdim byte_order, error); 2198314564Sdim if (bytes_copied == 0) 2199314564Sdim return false; 2200314564Sdim if (bytes_copied >= bytes_left) 2201314564Sdim break; 2202314564Sdim data_offset += bytes_copied; 2203314564Sdim bytes_left -= bytes_copied; 2204314564Sdim ++NGRN; 2205275072Semaste } 2206314564Sdim } else { 2207314564Sdim const RegisterInfo *reg_info = nullptr; 2208314564Sdim if (is_return_value) { 2209341825Sdim // We are assuming we are decoding this immediately after returning from 2210341825Sdim // a function call and that the address of the structure is in x8 2211314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); 2212314564Sdim } else { 2213314564Sdim // We are assuming we are stopped at the first instruction in a function 2214341825Sdim // and that the ABI is being respected so all parameters appear where 2215341825Sdim // they should be (functions with no external linkage can legally violate 2216341825Sdim // the ABI). 2217314564Sdim if (NGRN >= 8) 2218314564Sdim return false; 2219275072Semaste 2220314564Sdim uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 2221314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2222314564Sdim if (reg_num == LLDB_INVALID_REGNUM) 2223314564Sdim return false; 2224314564Sdim reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num); 2225314564Sdim if (reg_info == nullptr) 2226314564Sdim return false; 2227314564Sdim ++NGRN; 2228314564Sdim } 2229275072Semaste 2230314564Sdim if (reg_info == nullptr) 2231314564Sdim return false; 2232275072Semaste 2233314564Sdim const lldb::addr_t value_addr = 2234314564Sdim reg_ctx->ReadRegisterAsUnsigned(reg_info, LLDB_INVALID_ADDRESS); 2235275072Semaste 2236314564Sdim if (value_addr == LLDB_INVALID_ADDRESS) 2237314564Sdim return false; 2238314564Sdim 2239314564Sdim if (exe_ctx.GetProcessRef().ReadMemory( 2240353358Sdim value_addr, heap_data_up->GetBytes(), heap_data_up->GetByteSize(), 2241353358Sdim error) != heap_data_up->GetByteSize()) { 2242314564Sdim return false; 2243275072Semaste } 2244314564Sdim } 2245275072Semaste 2246314564Sdim data.SetByteOrder(byte_order); 2247314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2248353358Sdim data.SetData(DataBufferSP(heap_data_up.release())); 2249314564Sdim return true; 2250275072Semaste} 2251275072Semaste 2252314564SdimValueObjectSP ABIMacOSX_arm64::GetReturnValueObjectImpl( 2253314564Sdim Thread &thread, CompilerType &return_compiler_type) const { 2254314564Sdim ValueObjectSP return_valobj_sp; 2255314564Sdim Value value; 2256275072Semaste 2257314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 2258314564Sdim if (exe_ctx.GetTargetPtr() == nullptr || exe_ctx.GetProcessPtr() == nullptr) 2259314564Sdim return return_valobj_sp; 2260275072Semaste 2261314564Sdim // value.SetContext (Value::eContextTypeClangType, return_compiler_type); 2262314564Sdim value.SetCompilerType(return_compiler_type); 2263314564Sdim 2264314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 2265314564Sdim if (!reg_ctx) 2266314564Sdim return return_valobj_sp; 2267314564Sdim 2268344779Sdim llvm::Optional<uint64_t> byte_size = 2269344779Sdim return_compiler_type.GetByteSize(nullptr); 2270344779Sdim if (!byte_size) 2271344779Sdim return return_valobj_sp; 2272314564Sdim 2273314564Sdim const uint32_t type_flags = return_compiler_type.GetTypeInfo(nullptr); 2274314564Sdim if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) { 2275314564Sdim value.SetValueType(Value::eValueTypeScalar); 2276314564Sdim 2277314564Sdim bool success = false; 2278314564Sdim if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) { 2279314564Sdim // Extract the register context so we can read arguments from registers 2280344779Sdim if (*byte_size <= 8) { 2281314564Sdim const RegisterInfo *x0_reg_info = 2282314564Sdim reg_ctx->GetRegisterInfoByName("x0", 0); 2283314564Sdim if (x0_reg_info) { 2284314564Sdim uint64_t raw_value = 2285314564Sdim thread.GetRegisterContext()->ReadRegisterAsUnsigned(x0_reg_info, 2286314564Sdim 0); 2287314564Sdim const bool is_signed = (type_flags & eTypeIsSigned) != 0; 2288344779Sdim switch (*byte_size) { 2289314564Sdim default: 2290314564Sdim break; 2291314564Sdim case 16: // uint128_t 2292314564Sdim // In register x0 and x1 2293275072Semaste { 2294314564Sdim const RegisterInfo *x1_reg_info = 2295314564Sdim reg_ctx->GetRegisterInfoByName("x1", 0); 2296314564Sdim 2297314564Sdim if (x1_reg_info) { 2298344779Sdim if (*byte_size <= 2299314564Sdim x0_reg_info->byte_size + x1_reg_info->byte_size) { 2300353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2301344779Sdim new DataBufferHeap(*byte_size, 0)); 2302314564Sdim const ByteOrder byte_order = 2303314564Sdim exe_ctx.GetProcessRef().GetByteOrder(); 2304314564Sdim RegisterValue x0_reg_value; 2305314564Sdim RegisterValue x1_reg_value; 2306314564Sdim if (reg_ctx->ReadRegister(x0_reg_info, x0_reg_value) && 2307314564Sdim reg_ctx->ReadRegister(x1_reg_info, x1_reg_value)) { 2308321369Sdim Status error; 2309314564Sdim if (x0_reg_value.GetAsMemoryData( 2310353358Sdim x0_reg_info, heap_data_up->GetBytes() + 0, 8, 2311314564Sdim byte_order, error) && 2312314564Sdim x1_reg_value.GetAsMemoryData( 2313353358Sdim x1_reg_info, heap_data_up->GetBytes() + 8, 8, 2314314564Sdim byte_order, error)) { 2315314564Sdim DataExtractor data( 2316353358Sdim DataBufferSP(heap_data_up.release()), byte_order, 2317314564Sdim exe_ctx.GetProcessRef().GetAddressByteSize()); 2318314564Sdim 2319314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2320314564Sdim &thread, return_compiler_type, ConstString(""), data); 2321314564Sdim return return_valobj_sp; 2322275072Semaste } 2323314564Sdim } 2324275072Semaste } 2325314564Sdim } 2326275072Semaste } 2327314564Sdim break; 2328314564Sdim case sizeof(uint64_t): 2329314564Sdim if (is_signed) 2330314564Sdim value.GetScalar() = (int64_t)(raw_value); 2331314564Sdim else 2332314564Sdim value.GetScalar() = (uint64_t)(raw_value); 2333314564Sdim success = true; 2334314564Sdim break; 2335314564Sdim 2336314564Sdim case sizeof(uint32_t): 2337314564Sdim if (is_signed) 2338314564Sdim value.GetScalar() = (int32_t)(raw_value & UINT32_MAX); 2339314564Sdim else 2340314564Sdim value.GetScalar() = (uint32_t)(raw_value & UINT32_MAX); 2341314564Sdim success = true; 2342314564Sdim break; 2343314564Sdim 2344314564Sdim case sizeof(uint16_t): 2345314564Sdim if (is_signed) 2346314564Sdim value.GetScalar() = (int16_t)(raw_value & UINT16_MAX); 2347314564Sdim else 2348314564Sdim value.GetScalar() = (uint16_t)(raw_value & UINT16_MAX); 2349314564Sdim success = true; 2350314564Sdim break; 2351314564Sdim 2352314564Sdim case sizeof(uint8_t): 2353314564Sdim if (is_signed) 2354314564Sdim value.GetScalar() = (int8_t)(raw_value & UINT8_MAX); 2355314564Sdim else 2356314564Sdim value.GetScalar() = (uint8_t)(raw_value & UINT8_MAX); 2357314564Sdim success = true; 2358314564Sdim break; 2359314564Sdim } 2360275072Semaste } 2361314564Sdim } 2362314564Sdim } else if (type_flags & eTypeIsFloat) { 2363314564Sdim if (type_flags & eTypeIsComplex) { 2364314564Sdim // Don't handle complex yet. 2365314564Sdim } else { 2366344779Sdim if (*byte_size <= sizeof(long double)) { 2367314564Sdim const RegisterInfo *v0_reg_info = 2368314564Sdim reg_ctx->GetRegisterInfoByName("v0", 0); 2369314564Sdim RegisterValue v0_value; 2370314564Sdim if (reg_ctx->ReadRegister(v0_reg_info, v0_value)) { 2371314564Sdim DataExtractor data; 2372314564Sdim if (v0_value.GetData(data)) { 2373314564Sdim lldb::offset_t offset = 0; 2374344779Sdim if (*byte_size == sizeof(float)) { 2375314564Sdim value.GetScalar() = data.GetFloat(&offset); 2376314564Sdim success = true; 2377344779Sdim } else if (*byte_size == sizeof(double)) { 2378314564Sdim value.GetScalar() = data.GetDouble(&offset); 2379314564Sdim success = true; 2380344779Sdim } else if (*byte_size == sizeof(long double)) { 2381314564Sdim value.GetScalar() = data.GetLongDouble(&offset); 2382314564Sdim success = true; 2383314564Sdim } 2384275072Semaste } 2385314564Sdim } 2386275072Semaste } 2387314564Sdim } 2388275072Semaste } 2389314564Sdim 2390314564Sdim if (success) 2391314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2392314564Sdim thread.GetStackFrameAtIndex(0).get(), value, ConstString("")); 2393314564Sdim } else if (type_flags & eTypeIsVector) { 2394344779Sdim if (*byte_size > 0) { 2395314564Sdim 2396314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 2397314564Sdim 2398314564Sdim if (v0_info) { 2399344779Sdim if (*byte_size <= v0_info->byte_size) { 2400353358Sdim std::unique_ptr<DataBufferHeap> heap_data_up( 2401344779Sdim new DataBufferHeap(*byte_size, 0)); 2402314564Sdim const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder(); 2403314564Sdim RegisterValue reg_value; 2404314564Sdim if (reg_ctx->ReadRegister(v0_info, reg_value)) { 2405321369Sdim Status error; 2406353358Sdim if (reg_value.GetAsMemoryData(v0_info, heap_data_up->GetBytes(), 2407353358Sdim heap_data_up->GetByteSize(), 2408314564Sdim byte_order, error)) { 2409353358Sdim DataExtractor data(DataBufferSP(heap_data_up.release()), 2410314564Sdim byte_order, 2411314564Sdim exe_ctx.GetProcessRef().GetAddressByteSize()); 2412314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2413314564Sdim &thread, return_compiler_type, ConstString(""), data); 2414275072Semaste } 2415314564Sdim } 2416275072Semaste } 2417314564Sdim } 2418275072Semaste } 2419314564Sdim } else if (type_flags & eTypeIsStructUnion || type_flags & eTypeIsClass) { 2420314564Sdim DataExtractor data; 2421314564Sdim 2422314564Sdim uint32_t NGRN = 0; // Search ABI docs for NGRN 2423314564Sdim uint32_t NSRN = 0; // Search ABI docs for NSRN 2424314564Sdim const bool is_return_value = true; 2425314564Sdim if (LoadValueFromConsecutiveGPRRegisters( 2426314564Sdim exe_ctx, reg_ctx, return_compiler_type, is_return_value, NGRN, NSRN, 2427314564Sdim data)) { 2428314564Sdim return_valobj_sp = ValueObjectConstResult::Create( 2429314564Sdim &thread, return_compiler_type, ConstString(""), data); 2430275072Semaste } 2431314564Sdim } 2432314564Sdim return return_valobj_sp; 2433275072Semaste} 2434275072Semaste 2435314564Sdimvoid ABIMacOSX_arm64::Initialize() { 2436314564Sdim PluginManager::RegisterPlugin(GetPluginNameStatic(), pluginDesc, 2437314564Sdim CreateInstance); 2438275072Semaste} 2439275072Semaste 2440314564Sdimvoid ABIMacOSX_arm64::Terminate() { 2441314564Sdim PluginManager::UnregisterPlugin(CreateInstance); 2442275072Semaste} 2443275072Semaste 2444275072Semaste// PluginInterface protocol 2445309124Sdim 2446314564SdimConstString ABIMacOSX_arm64::GetPluginNameStatic() { 2447314564Sdim static ConstString g_plugin_name("ABIMacOSX_arm64"); 2448314564Sdim return g_plugin_name; 2449275072Semaste} 2450275072Semaste 2451314564Sdimuint32_t ABIMacOSX_arm64::GetPluginVersion() { return 1; } 2452