ABIMacOSX_arm64.cpp revision 321369
1275072Semaste//===-- ABIMacOSX_arm64.cpp -------------------------------------*- C++ -*-===// 2275072Semaste// 3275072Semaste// The LLVM Compiler Infrastructure 4275072Semaste// 5275072Semaste// This file is distributed under the University of Illinois Open Source 6275072Semaste// License. See LICENSE.TXT for details. 7275072Semaste// 8275072Semaste//===----------------------------------------------------------------------===// 9275072Semaste 10275072Semaste#include "ABIMacOSX_arm64.h" 11275072Semaste 12309124Sdim// C Includes 13309124Sdim// C++ Includes 14309124Sdim#include <vector> 15309124Sdim 16309124Sdim// Other libraries and framework includes 17309124Sdim#include "llvm/ADT/STLExtras.h" 18309124Sdim#include "llvm/ADT/Triple.h" 19309124Sdim 20275072Semaste#include "lldb/Core/Module.h" 21275072Semaste#include "lldb/Core/PluginManager.h" 22275072Semaste#include "lldb/Core/RegisterValue.h" 23275072Semaste#include "lldb/Core/Scalar.h" 24275072Semaste#include "lldb/Core/Value.h" 25275072Semaste#include "lldb/Core/ValueObjectConstResult.h" 26275072Semaste#include "lldb/Symbol/UnwindPlan.h" 27275072Semaste#include "lldb/Target/Process.h" 28275072Semaste#include "lldb/Target/RegisterContext.h" 29275072Semaste#include "lldb/Target/Target.h" 30275072Semaste#include "lldb/Target/Thread.h" 31321369Sdim#include "lldb/Utility/ConstString.h" 32321369Sdim#include "lldb/Utility/Log.h" 33321369Sdim#include "lldb/Utility/Status.h" 34275072Semaste 35275072Semaste#include "Utility/ARM64_DWARF_Registers.h" 36275072Semaste 37275072Semasteusing namespace lldb; 38275072Semasteusing namespace lldb_private; 39275072Semaste 40275072Semastestatic const char *pluginDesc = "Mac OS X ABI for arm64 targets"; 41275072Semaste 42314564Sdimstatic RegisterInfo g_register_infos[] = { 43314564Sdim // NAME ALT SZ OFF ENCODING FORMAT 44314564Sdim // EH_FRAME DWARF GENERIC 45314564Sdim // PROCESS PLUGIN LLDB NATIVE 46314564Sdim // ========== ======= == === ============= =================== 47314564Sdim // =================== ====================== =========================== 48314564Sdim // ======================= ====================== 49314564Sdim {"x0", 50314564Sdim nullptr, 51314564Sdim 8, 52314564Sdim 0, 53314564Sdim eEncodingUint, 54314564Sdim eFormatHex, 55314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x0, LLDB_REGNUM_GENERIC_ARG1, 56314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 57314564Sdim nullptr, 58314564Sdim nullptr, 59314564Sdim nullptr, 60314564Sdim 0}, 61314564Sdim {"x1", 62314564Sdim nullptr, 63314564Sdim 8, 64314564Sdim 0, 65314564Sdim eEncodingUint, 66314564Sdim eFormatHex, 67314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x1, LLDB_REGNUM_GENERIC_ARG2, 68314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 69314564Sdim nullptr, 70314564Sdim nullptr, 71314564Sdim nullptr, 72314564Sdim 0}, 73314564Sdim {"x2", 74314564Sdim nullptr, 75314564Sdim 8, 76314564Sdim 0, 77314564Sdim eEncodingUint, 78314564Sdim eFormatHex, 79314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x2, LLDB_REGNUM_GENERIC_ARG3, 80314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 81314564Sdim nullptr, 82314564Sdim nullptr, 83314564Sdim nullptr, 84314564Sdim 0}, 85314564Sdim {"x3", 86314564Sdim nullptr, 87314564Sdim 8, 88314564Sdim 0, 89314564Sdim eEncodingUint, 90314564Sdim eFormatHex, 91314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x3, LLDB_REGNUM_GENERIC_ARG4, 92314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 93314564Sdim nullptr, 94314564Sdim nullptr, 95314564Sdim nullptr, 96314564Sdim 0}, 97314564Sdim {"x4", 98314564Sdim nullptr, 99314564Sdim 8, 100314564Sdim 0, 101314564Sdim eEncodingUint, 102314564Sdim eFormatHex, 103314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x4, LLDB_REGNUM_GENERIC_ARG5, 104314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 105314564Sdim nullptr, 106314564Sdim nullptr, 107314564Sdim nullptr, 108314564Sdim 0}, 109314564Sdim {"x5", 110314564Sdim nullptr, 111314564Sdim 8, 112314564Sdim 0, 113314564Sdim eEncodingUint, 114314564Sdim eFormatHex, 115314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x5, LLDB_REGNUM_GENERIC_ARG6, 116314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 117314564Sdim nullptr, 118314564Sdim nullptr, 119314564Sdim nullptr, 120314564Sdim 0}, 121314564Sdim {"x6", 122314564Sdim nullptr, 123314564Sdim 8, 124314564Sdim 0, 125314564Sdim eEncodingUint, 126314564Sdim eFormatHex, 127314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x6, LLDB_REGNUM_GENERIC_ARG7, 128314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 129314564Sdim nullptr, 130314564Sdim nullptr, 131314564Sdim nullptr, 132314564Sdim 0}, 133314564Sdim {"x7", 134314564Sdim nullptr, 135314564Sdim 8, 136314564Sdim 0, 137314564Sdim eEncodingUint, 138314564Sdim eFormatHex, 139314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x7, LLDB_REGNUM_GENERIC_ARG8, 140314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 141314564Sdim nullptr, 142314564Sdim nullptr, 143314564Sdim nullptr, 144314564Sdim 0}, 145314564Sdim {"x8", 146314564Sdim nullptr, 147314564Sdim 8, 148314564Sdim 0, 149314564Sdim eEncodingUint, 150314564Sdim eFormatHex, 151314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x8, LLDB_INVALID_REGNUM, 152314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 153314564Sdim nullptr, 154314564Sdim nullptr, 155314564Sdim nullptr, 156314564Sdim 0}, 157314564Sdim {"x9", 158314564Sdim nullptr, 159314564Sdim 8, 160314564Sdim 0, 161314564Sdim eEncodingUint, 162314564Sdim eFormatHex, 163314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x9, LLDB_INVALID_REGNUM, 164314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 165314564Sdim nullptr, 166314564Sdim nullptr, 167314564Sdim nullptr, 168314564Sdim 0}, 169314564Sdim {"x10", 170314564Sdim nullptr, 171314564Sdim 8, 172314564Sdim 0, 173314564Sdim eEncodingUint, 174314564Sdim eFormatHex, 175314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x10, LLDB_INVALID_REGNUM, 176314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 177314564Sdim nullptr, 178314564Sdim nullptr, 179314564Sdim nullptr, 180314564Sdim 0}, 181314564Sdim {"x11", 182314564Sdim nullptr, 183314564Sdim 8, 184314564Sdim 0, 185314564Sdim eEncodingUint, 186314564Sdim eFormatHex, 187314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x11, LLDB_INVALID_REGNUM, 188314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 189314564Sdim nullptr, 190314564Sdim nullptr, 191314564Sdim nullptr, 192314564Sdim 0}, 193314564Sdim {"x12", 194314564Sdim nullptr, 195314564Sdim 8, 196314564Sdim 0, 197314564Sdim eEncodingUint, 198314564Sdim eFormatHex, 199314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x12, LLDB_INVALID_REGNUM, 200314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 201314564Sdim nullptr, 202314564Sdim nullptr, 203314564Sdim nullptr, 204314564Sdim 0}, 205314564Sdim {"x13", 206314564Sdim nullptr, 207314564Sdim 8, 208314564Sdim 0, 209314564Sdim eEncodingUint, 210314564Sdim eFormatHex, 211314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x13, LLDB_INVALID_REGNUM, 212314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 213314564Sdim nullptr, 214314564Sdim nullptr, 215314564Sdim nullptr, 216314564Sdim 0}, 217314564Sdim {"x14", 218314564Sdim nullptr, 219314564Sdim 8, 220314564Sdim 0, 221314564Sdim eEncodingUint, 222314564Sdim eFormatHex, 223314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x14, LLDB_INVALID_REGNUM, 224314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 225314564Sdim nullptr, 226314564Sdim nullptr, 227314564Sdim nullptr, 228314564Sdim 0}, 229314564Sdim {"x15", 230314564Sdim nullptr, 231314564Sdim 8, 232314564Sdim 0, 233314564Sdim eEncodingUint, 234314564Sdim eFormatHex, 235314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x15, LLDB_INVALID_REGNUM, 236314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 237314564Sdim nullptr, 238314564Sdim nullptr, 239314564Sdim nullptr, 240314564Sdim 0}, 241314564Sdim {"x16", 242314564Sdim nullptr, 243314564Sdim 8, 244314564Sdim 0, 245314564Sdim eEncodingUint, 246314564Sdim eFormatHex, 247314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x16, LLDB_INVALID_REGNUM, 248314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 249314564Sdim nullptr, 250314564Sdim nullptr, 251314564Sdim nullptr, 252314564Sdim 0}, 253314564Sdim {"x17", 254314564Sdim nullptr, 255314564Sdim 8, 256314564Sdim 0, 257314564Sdim eEncodingUint, 258314564Sdim eFormatHex, 259314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x17, LLDB_INVALID_REGNUM, 260314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 261314564Sdim nullptr, 262314564Sdim nullptr, 263314564Sdim nullptr, 264314564Sdim 0}, 265314564Sdim {"x18", 266314564Sdim nullptr, 267314564Sdim 8, 268314564Sdim 0, 269314564Sdim eEncodingUint, 270314564Sdim eFormatHex, 271314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x18, LLDB_INVALID_REGNUM, 272314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 273314564Sdim nullptr, 274314564Sdim nullptr, 275314564Sdim nullptr, 276314564Sdim 0}, 277314564Sdim {"x19", 278314564Sdim nullptr, 279314564Sdim 8, 280314564Sdim 0, 281314564Sdim eEncodingUint, 282314564Sdim eFormatHex, 283314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x19, LLDB_INVALID_REGNUM, 284314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 285314564Sdim nullptr, 286314564Sdim nullptr, 287314564Sdim nullptr, 288314564Sdim 0}, 289314564Sdim {"x20", 290314564Sdim nullptr, 291314564Sdim 8, 292314564Sdim 0, 293314564Sdim eEncodingUint, 294314564Sdim eFormatHex, 295314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x20, LLDB_INVALID_REGNUM, 296314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 297314564Sdim nullptr, 298314564Sdim nullptr, 299314564Sdim nullptr, 300314564Sdim 0}, 301314564Sdim {"x21", 302314564Sdim nullptr, 303314564Sdim 8, 304314564Sdim 0, 305314564Sdim eEncodingUint, 306314564Sdim eFormatHex, 307314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x21, LLDB_INVALID_REGNUM, 308314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 309314564Sdim nullptr, 310314564Sdim nullptr, 311314564Sdim nullptr, 312314564Sdim 0}, 313314564Sdim {"x22", 314314564Sdim nullptr, 315314564Sdim 8, 316314564Sdim 0, 317314564Sdim eEncodingUint, 318314564Sdim eFormatHex, 319314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x22, LLDB_INVALID_REGNUM, 320314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 321314564Sdim nullptr, 322314564Sdim nullptr, 323314564Sdim nullptr, 324314564Sdim 0}, 325314564Sdim {"x23", 326314564Sdim nullptr, 327314564Sdim 8, 328314564Sdim 0, 329314564Sdim eEncodingUint, 330314564Sdim eFormatHex, 331314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x23, LLDB_INVALID_REGNUM, 332314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 333314564Sdim nullptr, 334314564Sdim nullptr, 335314564Sdim nullptr, 336314564Sdim 0}, 337314564Sdim {"x24", 338314564Sdim nullptr, 339314564Sdim 8, 340314564Sdim 0, 341314564Sdim eEncodingUint, 342314564Sdim eFormatHex, 343314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x24, LLDB_INVALID_REGNUM, 344314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 345314564Sdim nullptr, 346314564Sdim nullptr, 347314564Sdim nullptr, 348314564Sdim 0}, 349314564Sdim {"x25", 350314564Sdim nullptr, 351314564Sdim 8, 352314564Sdim 0, 353314564Sdim eEncodingUint, 354314564Sdim eFormatHex, 355314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x25, LLDB_INVALID_REGNUM, 356314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 357314564Sdim nullptr, 358314564Sdim nullptr, 359314564Sdim nullptr, 360314564Sdim 0}, 361314564Sdim {"x26", 362314564Sdim nullptr, 363314564Sdim 8, 364314564Sdim 0, 365314564Sdim eEncodingUint, 366314564Sdim eFormatHex, 367314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x26, LLDB_INVALID_REGNUM, 368314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 369314564Sdim nullptr, 370314564Sdim nullptr, 371314564Sdim nullptr, 372314564Sdim 0}, 373314564Sdim {"x27", 374314564Sdim nullptr, 375314564Sdim 8, 376314564Sdim 0, 377314564Sdim eEncodingUint, 378314564Sdim eFormatHex, 379314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x27, LLDB_INVALID_REGNUM, 380314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 381314564Sdim nullptr, 382314564Sdim nullptr, 383314564Sdim nullptr, 384314564Sdim 0}, 385314564Sdim {"x28", 386314564Sdim nullptr, 387314564Sdim 8, 388314564Sdim 0, 389314564Sdim eEncodingUint, 390314564Sdim eFormatHex, 391314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x28, LLDB_INVALID_REGNUM, 392314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 393314564Sdim nullptr, 394314564Sdim nullptr, 395314564Sdim nullptr, 396314564Sdim 0}, 397314564Sdim {"fp", 398314564Sdim "x29", 399314564Sdim 8, 400314564Sdim 0, 401314564Sdim eEncodingUint, 402314564Sdim eFormatHex, 403314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x29, LLDB_REGNUM_GENERIC_FP, 404314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 405314564Sdim nullptr, 406314564Sdim nullptr, 407314564Sdim nullptr, 408314564Sdim 0}, 409314564Sdim {"lr", 410314564Sdim "x30", 411314564Sdim 8, 412314564Sdim 0, 413314564Sdim eEncodingUint, 414314564Sdim eFormatHex, 415314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x30, LLDB_REGNUM_GENERIC_RA, 416314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 417314564Sdim nullptr, 418314564Sdim nullptr, 419314564Sdim nullptr, 420314564Sdim 0}, 421314564Sdim {"sp", 422314564Sdim "x31", 423314564Sdim 8, 424314564Sdim 0, 425314564Sdim eEncodingUint, 426314564Sdim eFormatHex, 427314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::x31, LLDB_REGNUM_GENERIC_SP, 428314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 429314564Sdim nullptr, 430314564Sdim nullptr, 431314564Sdim nullptr, 432314564Sdim 0}, 433314564Sdim {"pc", 434314564Sdim nullptr, 435314564Sdim 8, 436314564Sdim 0, 437314564Sdim eEncodingUint, 438314564Sdim eFormatHex, 439314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::pc, LLDB_REGNUM_GENERIC_PC, 440314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 441314564Sdim nullptr, 442314564Sdim nullptr, 443314564Sdim nullptr, 444314564Sdim 0}, 445314564Sdim {"cpsr", 446314564Sdim "psr", 447314564Sdim 4, 448314564Sdim 0, 449314564Sdim eEncodingUint, 450314564Sdim eFormatHex, 451314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS, 452314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 453314564Sdim nullptr, 454314564Sdim nullptr, 455314564Sdim nullptr, 456314564Sdim 0}, 457275072Semaste 458314564Sdim {"v0", 459314564Sdim nullptr, 460314564Sdim 16, 461314564Sdim 0, 462314564Sdim eEncodingVector, 463314564Sdim eFormatVectorOfUInt8, 464314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v0, LLDB_INVALID_REGNUM, 465314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 466314564Sdim nullptr, 467314564Sdim nullptr, 468314564Sdim nullptr, 469314564Sdim 0}, 470314564Sdim {"v1", 471314564Sdim nullptr, 472314564Sdim 16, 473314564Sdim 0, 474314564Sdim eEncodingVector, 475314564Sdim eFormatVectorOfUInt8, 476314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v1, LLDB_INVALID_REGNUM, 477314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 478314564Sdim nullptr, 479314564Sdim nullptr, 480314564Sdim nullptr, 481314564Sdim 0}, 482314564Sdim {"v2", 483314564Sdim nullptr, 484314564Sdim 16, 485314564Sdim 0, 486314564Sdim eEncodingVector, 487314564Sdim eFormatVectorOfUInt8, 488314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v2, LLDB_INVALID_REGNUM, 489314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 490314564Sdim nullptr, 491314564Sdim nullptr, 492314564Sdim nullptr, 493314564Sdim 0}, 494314564Sdim {"v3", 495314564Sdim nullptr, 496314564Sdim 16, 497314564Sdim 0, 498314564Sdim eEncodingVector, 499314564Sdim eFormatVectorOfUInt8, 500314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v3, LLDB_INVALID_REGNUM, 501314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 502314564Sdim nullptr, 503314564Sdim nullptr, 504314564Sdim nullptr, 505314564Sdim 0}, 506314564Sdim {"v4", 507314564Sdim nullptr, 508314564Sdim 16, 509314564Sdim 0, 510314564Sdim eEncodingVector, 511314564Sdim eFormatVectorOfUInt8, 512314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v4, LLDB_INVALID_REGNUM, 513314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 514314564Sdim nullptr, 515314564Sdim nullptr, 516314564Sdim nullptr, 517314564Sdim 0}, 518314564Sdim {"v5", 519314564Sdim nullptr, 520314564Sdim 16, 521314564Sdim 0, 522314564Sdim eEncodingVector, 523314564Sdim eFormatVectorOfUInt8, 524314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v5, LLDB_INVALID_REGNUM, 525314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 526314564Sdim nullptr, 527314564Sdim nullptr, 528314564Sdim nullptr, 529314564Sdim 0}, 530314564Sdim {"v6", 531314564Sdim nullptr, 532314564Sdim 16, 533314564Sdim 0, 534314564Sdim eEncodingVector, 535314564Sdim eFormatVectorOfUInt8, 536314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v6, LLDB_INVALID_REGNUM, 537314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 538314564Sdim nullptr, 539314564Sdim nullptr, 540314564Sdim nullptr, 541314564Sdim 0}, 542314564Sdim {"v7", 543314564Sdim nullptr, 544314564Sdim 16, 545314564Sdim 0, 546314564Sdim eEncodingVector, 547314564Sdim eFormatVectorOfUInt8, 548314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v7, LLDB_INVALID_REGNUM, 549314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 550314564Sdim nullptr, 551314564Sdim nullptr, 552314564Sdim nullptr, 553314564Sdim 0}, 554314564Sdim {"v8", 555314564Sdim nullptr, 556314564Sdim 16, 557314564Sdim 0, 558314564Sdim eEncodingVector, 559314564Sdim eFormatVectorOfUInt8, 560314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v8, LLDB_INVALID_REGNUM, 561314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 562314564Sdim nullptr, 563314564Sdim nullptr, 564314564Sdim nullptr, 565314564Sdim 0}, 566314564Sdim {"v9", 567314564Sdim nullptr, 568314564Sdim 16, 569314564Sdim 0, 570314564Sdim eEncodingVector, 571314564Sdim eFormatVectorOfUInt8, 572314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v9, LLDB_INVALID_REGNUM, 573314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 574314564Sdim nullptr, 575314564Sdim nullptr, 576314564Sdim nullptr, 577314564Sdim 0}, 578314564Sdim {"v10", 579314564Sdim nullptr, 580314564Sdim 16, 581314564Sdim 0, 582314564Sdim eEncodingVector, 583314564Sdim eFormatVectorOfUInt8, 584314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v10, LLDB_INVALID_REGNUM, 585314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 586314564Sdim nullptr, 587314564Sdim nullptr, 588314564Sdim nullptr, 589314564Sdim 0}, 590314564Sdim {"v11", 591314564Sdim nullptr, 592314564Sdim 16, 593314564Sdim 0, 594314564Sdim eEncodingVector, 595314564Sdim eFormatVectorOfUInt8, 596314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v11, LLDB_INVALID_REGNUM, 597314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 598314564Sdim nullptr, 599314564Sdim nullptr, 600314564Sdim nullptr, 601314564Sdim 0}, 602314564Sdim {"v12", 603314564Sdim nullptr, 604314564Sdim 16, 605314564Sdim 0, 606314564Sdim eEncodingVector, 607314564Sdim eFormatVectorOfUInt8, 608314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v12, LLDB_INVALID_REGNUM, 609314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 610314564Sdim nullptr, 611314564Sdim nullptr, 612314564Sdim nullptr, 613314564Sdim 0}, 614314564Sdim {"v13", 615314564Sdim nullptr, 616314564Sdim 16, 617314564Sdim 0, 618314564Sdim eEncodingVector, 619314564Sdim eFormatVectorOfUInt8, 620314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v13, LLDB_INVALID_REGNUM, 621314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 622314564Sdim nullptr, 623314564Sdim nullptr, 624314564Sdim nullptr, 625314564Sdim 0}, 626314564Sdim {"v14", 627314564Sdim nullptr, 628314564Sdim 16, 629314564Sdim 0, 630314564Sdim eEncodingVector, 631314564Sdim eFormatVectorOfUInt8, 632314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v14, LLDB_INVALID_REGNUM, 633314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 634314564Sdim nullptr, 635314564Sdim nullptr, 636314564Sdim nullptr, 637314564Sdim 0}, 638314564Sdim {"v15", 639314564Sdim nullptr, 640314564Sdim 16, 641314564Sdim 0, 642314564Sdim eEncodingVector, 643314564Sdim eFormatVectorOfUInt8, 644314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v15, LLDB_INVALID_REGNUM, 645314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 646314564Sdim nullptr, 647314564Sdim nullptr, 648314564Sdim nullptr, 649314564Sdim 0}, 650314564Sdim {"v16", 651314564Sdim nullptr, 652314564Sdim 16, 653314564Sdim 0, 654314564Sdim eEncodingVector, 655314564Sdim eFormatVectorOfUInt8, 656314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v16, LLDB_INVALID_REGNUM, 657314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 658314564Sdim nullptr, 659314564Sdim nullptr, 660314564Sdim nullptr, 661314564Sdim 0}, 662314564Sdim {"v17", 663314564Sdim nullptr, 664314564Sdim 16, 665314564Sdim 0, 666314564Sdim eEncodingVector, 667314564Sdim eFormatVectorOfUInt8, 668314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v17, LLDB_INVALID_REGNUM, 669314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 670314564Sdim nullptr, 671314564Sdim nullptr, 672314564Sdim nullptr, 673314564Sdim 0}, 674314564Sdim {"v18", 675314564Sdim nullptr, 676314564Sdim 16, 677314564Sdim 0, 678314564Sdim eEncodingVector, 679314564Sdim eFormatVectorOfUInt8, 680314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v18, LLDB_INVALID_REGNUM, 681314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 682314564Sdim nullptr, 683314564Sdim nullptr, 684314564Sdim nullptr, 685314564Sdim 0}, 686314564Sdim {"v19", 687314564Sdim nullptr, 688314564Sdim 16, 689314564Sdim 0, 690314564Sdim eEncodingVector, 691314564Sdim eFormatVectorOfUInt8, 692314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v19, LLDB_INVALID_REGNUM, 693314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 694314564Sdim nullptr, 695314564Sdim nullptr, 696314564Sdim nullptr, 697314564Sdim 0}, 698314564Sdim {"v20", 699314564Sdim nullptr, 700314564Sdim 16, 701314564Sdim 0, 702314564Sdim eEncodingVector, 703314564Sdim eFormatVectorOfUInt8, 704314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v20, LLDB_INVALID_REGNUM, 705314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 706314564Sdim nullptr, 707314564Sdim nullptr, 708314564Sdim nullptr, 709314564Sdim 0}, 710314564Sdim {"v21", 711314564Sdim nullptr, 712314564Sdim 16, 713314564Sdim 0, 714314564Sdim eEncodingVector, 715314564Sdim eFormatVectorOfUInt8, 716314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v21, LLDB_INVALID_REGNUM, 717314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 718314564Sdim nullptr, 719314564Sdim nullptr, 720314564Sdim nullptr, 721314564Sdim 0}, 722314564Sdim {"v22", 723314564Sdim nullptr, 724314564Sdim 16, 725314564Sdim 0, 726314564Sdim eEncodingVector, 727314564Sdim eFormatVectorOfUInt8, 728314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v22, LLDB_INVALID_REGNUM, 729314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 730314564Sdim nullptr, 731314564Sdim nullptr, 732314564Sdim nullptr, 733314564Sdim 0}, 734314564Sdim {"v23", 735314564Sdim nullptr, 736314564Sdim 16, 737314564Sdim 0, 738314564Sdim eEncodingVector, 739314564Sdim eFormatVectorOfUInt8, 740314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v23, LLDB_INVALID_REGNUM, 741314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 742314564Sdim nullptr, 743314564Sdim nullptr, 744314564Sdim nullptr, 745314564Sdim 0}, 746314564Sdim {"v24", 747314564Sdim nullptr, 748314564Sdim 16, 749314564Sdim 0, 750314564Sdim eEncodingVector, 751314564Sdim eFormatVectorOfUInt8, 752314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v24, LLDB_INVALID_REGNUM, 753314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 754314564Sdim nullptr, 755314564Sdim nullptr, 756314564Sdim nullptr, 757314564Sdim 0}, 758314564Sdim {"v25", 759314564Sdim nullptr, 760314564Sdim 16, 761314564Sdim 0, 762314564Sdim eEncodingVector, 763314564Sdim eFormatVectorOfUInt8, 764314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v25, LLDB_INVALID_REGNUM, 765314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 766314564Sdim nullptr, 767314564Sdim nullptr, 768314564Sdim nullptr, 769314564Sdim 0}, 770314564Sdim {"v26", 771314564Sdim nullptr, 772314564Sdim 16, 773314564Sdim 0, 774314564Sdim eEncodingVector, 775314564Sdim eFormatVectorOfUInt8, 776314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v26, LLDB_INVALID_REGNUM, 777314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 778314564Sdim nullptr, 779314564Sdim nullptr, 780314564Sdim nullptr, 781314564Sdim 0}, 782314564Sdim {"v27", 783314564Sdim nullptr, 784314564Sdim 16, 785314564Sdim 0, 786314564Sdim eEncodingVector, 787314564Sdim eFormatVectorOfUInt8, 788314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v27, LLDB_INVALID_REGNUM, 789314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 790314564Sdim nullptr, 791314564Sdim nullptr, 792314564Sdim nullptr, 793314564Sdim 0}, 794314564Sdim {"v28", 795314564Sdim nullptr, 796314564Sdim 16, 797314564Sdim 0, 798314564Sdim eEncodingVector, 799314564Sdim eFormatVectorOfUInt8, 800314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v28, LLDB_INVALID_REGNUM, 801314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 802314564Sdim nullptr, 803314564Sdim nullptr, 804314564Sdim nullptr, 805314564Sdim 0}, 806314564Sdim {"v29", 807314564Sdim nullptr, 808314564Sdim 16, 809314564Sdim 0, 810314564Sdim eEncodingVector, 811314564Sdim eFormatVectorOfUInt8, 812314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v29, LLDB_INVALID_REGNUM, 813314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 814314564Sdim nullptr, 815314564Sdim nullptr, 816314564Sdim nullptr, 817314564Sdim 0}, 818314564Sdim {"v30", 819314564Sdim nullptr, 820314564Sdim 16, 821314564Sdim 0, 822314564Sdim eEncodingVector, 823314564Sdim eFormatVectorOfUInt8, 824314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v30, LLDB_INVALID_REGNUM, 825314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 826314564Sdim nullptr, 827314564Sdim nullptr, 828314564Sdim nullptr, 829314564Sdim 0}, 830314564Sdim {"v31", 831314564Sdim nullptr, 832314564Sdim 16, 833314564Sdim 0, 834314564Sdim eEncodingVector, 835314564Sdim eFormatVectorOfUInt8, 836314564Sdim {LLDB_INVALID_REGNUM, arm64_dwarf::v31, LLDB_INVALID_REGNUM, 837314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 838314564Sdim nullptr, 839314564Sdim nullptr, 840314564Sdim nullptr, 841314564Sdim 0}, 842275072Semaste 843314564Sdim {"fpsr", 844314564Sdim nullptr, 845314564Sdim 4, 846314564Sdim 0, 847314564Sdim eEncodingUint, 848314564Sdim eFormatHex, 849314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 850314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 851314564Sdim nullptr, 852314564Sdim nullptr, 853314564Sdim nullptr, 854314564Sdim 0}, 855314564Sdim {"fpcr", 856314564Sdim nullptr, 857314564Sdim 4, 858314564Sdim 0, 859314564Sdim eEncodingUint, 860314564Sdim eFormatHex, 861314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 862314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 863314564Sdim nullptr, 864314564Sdim nullptr, 865314564Sdim nullptr, 866314564Sdim 0}, 867275072Semaste 868314564Sdim {"s0", 869314564Sdim nullptr, 870314564Sdim 4, 871314564Sdim 0, 872314564Sdim eEncodingIEEE754, 873314564Sdim eFormatFloat, 874314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 875314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 876314564Sdim nullptr, 877314564Sdim nullptr, 878314564Sdim nullptr, 879314564Sdim 0}, 880314564Sdim {"s1", 881314564Sdim nullptr, 882314564Sdim 4, 883314564Sdim 0, 884314564Sdim eEncodingIEEE754, 885314564Sdim eFormatFloat, 886314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 887314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 888314564Sdim nullptr, 889314564Sdim nullptr, 890314564Sdim nullptr, 891314564Sdim 0}, 892314564Sdim {"s2", 893314564Sdim nullptr, 894314564Sdim 4, 895314564Sdim 0, 896314564Sdim eEncodingIEEE754, 897314564Sdim eFormatFloat, 898314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 899314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 900314564Sdim nullptr, 901314564Sdim nullptr, 902314564Sdim nullptr, 903314564Sdim 0}, 904314564Sdim {"s3", 905314564Sdim nullptr, 906314564Sdim 4, 907314564Sdim 0, 908314564Sdim eEncodingIEEE754, 909314564Sdim eFormatFloat, 910314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 911314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 912314564Sdim nullptr, 913314564Sdim nullptr, 914314564Sdim nullptr, 915314564Sdim 0}, 916314564Sdim {"s4", 917314564Sdim nullptr, 918314564Sdim 4, 919314564Sdim 0, 920314564Sdim eEncodingIEEE754, 921314564Sdim eFormatFloat, 922314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 923314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 924314564Sdim nullptr, 925314564Sdim nullptr, 926314564Sdim nullptr, 927314564Sdim 0}, 928314564Sdim {"s5", 929314564Sdim nullptr, 930314564Sdim 4, 931314564Sdim 0, 932314564Sdim eEncodingIEEE754, 933314564Sdim eFormatFloat, 934314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 935314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 936314564Sdim nullptr, 937314564Sdim nullptr, 938314564Sdim nullptr, 939314564Sdim 0}, 940314564Sdim {"s6", 941314564Sdim nullptr, 942314564Sdim 4, 943314564Sdim 0, 944314564Sdim eEncodingIEEE754, 945314564Sdim eFormatFloat, 946314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 947314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 948314564Sdim nullptr, 949314564Sdim nullptr, 950314564Sdim nullptr, 951314564Sdim 0}, 952314564Sdim {"s7", 953314564Sdim nullptr, 954314564Sdim 4, 955314564Sdim 0, 956314564Sdim eEncodingIEEE754, 957314564Sdim eFormatFloat, 958314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 959314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 960314564Sdim nullptr, 961314564Sdim nullptr, 962314564Sdim nullptr, 963314564Sdim 0}, 964314564Sdim {"s8", 965314564Sdim nullptr, 966314564Sdim 4, 967314564Sdim 0, 968314564Sdim eEncodingIEEE754, 969314564Sdim eFormatFloat, 970314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 971314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 972314564Sdim nullptr, 973314564Sdim nullptr, 974314564Sdim nullptr, 975314564Sdim 0}, 976314564Sdim {"s9", 977314564Sdim nullptr, 978314564Sdim 4, 979314564Sdim 0, 980314564Sdim eEncodingIEEE754, 981314564Sdim eFormatFloat, 982314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 983314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 984314564Sdim nullptr, 985314564Sdim nullptr, 986314564Sdim nullptr, 987314564Sdim 0}, 988314564Sdim {"s10", 989314564Sdim nullptr, 990314564Sdim 4, 991314564Sdim 0, 992314564Sdim eEncodingIEEE754, 993314564Sdim eFormatFloat, 994314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 995314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 996314564Sdim nullptr, 997314564Sdim nullptr, 998314564Sdim nullptr, 999314564Sdim 0}, 1000314564Sdim {"s11", 1001314564Sdim nullptr, 1002314564Sdim 4, 1003314564Sdim 0, 1004314564Sdim eEncodingIEEE754, 1005314564Sdim eFormatFloat, 1006314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1007314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1008314564Sdim nullptr, 1009314564Sdim nullptr, 1010314564Sdim nullptr, 1011314564Sdim 0}, 1012314564Sdim {"s12", 1013314564Sdim nullptr, 1014314564Sdim 4, 1015314564Sdim 0, 1016314564Sdim eEncodingIEEE754, 1017314564Sdim eFormatFloat, 1018314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1019314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1020314564Sdim nullptr, 1021314564Sdim nullptr, 1022314564Sdim nullptr, 1023314564Sdim 0}, 1024314564Sdim {"s13", 1025314564Sdim nullptr, 1026314564Sdim 4, 1027314564Sdim 0, 1028314564Sdim eEncodingIEEE754, 1029314564Sdim eFormatFloat, 1030314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1031314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1032314564Sdim nullptr, 1033314564Sdim nullptr, 1034314564Sdim nullptr, 1035314564Sdim 0}, 1036314564Sdim {"s14", 1037314564Sdim nullptr, 1038314564Sdim 4, 1039314564Sdim 0, 1040314564Sdim eEncodingIEEE754, 1041314564Sdim eFormatFloat, 1042314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1043314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1044314564Sdim nullptr, 1045314564Sdim nullptr, 1046314564Sdim nullptr, 1047314564Sdim 0}, 1048314564Sdim {"s15", 1049314564Sdim nullptr, 1050314564Sdim 4, 1051314564Sdim 0, 1052314564Sdim eEncodingIEEE754, 1053314564Sdim eFormatFloat, 1054314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1055314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1056314564Sdim nullptr, 1057314564Sdim nullptr, 1058314564Sdim nullptr, 1059314564Sdim 0}, 1060314564Sdim {"s16", 1061314564Sdim nullptr, 1062314564Sdim 4, 1063314564Sdim 0, 1064314564Sdim eEncodingIEEE754, 1065314564Sdim eFormatFloat, 1066314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1067314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1068314564Sdim nullptr, 1069314564Sdim nullptr, 1070314564Sdim nullptr, 1071314564Sdim 0}, 1072314564Sdim {"s17", 1073314564Sdim nullptr, 1074314564Sdim 4, 1075314564Sdim 0, 1076314564Sdim eEncodingIEEE754, 1077314564Sdim eFormatFloat, 1078314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1079314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1080314564Sdim nullptr, 1081314564Sdim nullptr, 1082314564Sdim nullptr, 1083314564Sdim 0}, 1084314564Sdim {"s18", 1085314564Sdim nullptr, 1086314564Sdim 4, 1087314564Sdim 0, 1088314564Sdim eEncodingIEEE754, 1089314564Sdim eFormatFloat, 1090314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1091314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1092314564Sdim nullptr, 1093314564Sdim nullptr, 1094314564Sdim nullptr, 1095314564Sdim 0}, 1096314564Sdim {"s19", 1097314564Sdim nullptr, 1098314564Sdim 4, 1099314564Sdim 0, 1100314564Sdim eEncodingIEEE754, 1101314564Sdim eFormatFloat, 1102314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1103314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1104314564Sdim nullptr, 1105314564Sdim nullptr, 1106314564Sdim nullptr, 1107314564Sdim 0}, 1108314564Sdim {"s20", 1109314564Sdim nullptr, 1110314564Sdim 4, 1111314564Sdim 0, 1112314564Sdim eEncodingIEEE754, 1113314564Sdim eFormatFloat, 1114314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1115314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1116314564Sdim nullptr, 1117314564Sdim nullptr, 1118314564Sdim nullptr, 1119314564Sdim 0}, 1120314564Sdim {"s21", 1121314564Sdim nullptr, 1122314564Sdim 4, 1123314564Sdim 0, 1124314564Sdim eEncodingIEEE754, 1125314564Sdim eFormatFloat, 1126314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1127314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1128314564Sdim nullptr, 1129314564Sdim nullptr, 1130314564Sdim nullptr, 1131314564Sdim 0}, 1132314564Sdim {"s22", 1133314564Sdim nullptr, 1134314564Sdim 4, 1135314564Sdim 0, 1136314564Sdim eEncodingIEEE754, 1137314564Sdim eFormatFloat, 1138314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1139314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1140314564Sdim nullptr, 1141314564Sdim nullptr, 1142314564Sdim nullptr, 1143314564Sdim 0}, 1144314564Sdim {"s23", 1145314564Sdim nullptr, 1146314564Sdim 4, 1147314564Sdim 0, 1148314564Sdim eEncodingIEEE754, 1149314564Sdim eFormatFloat, 1150314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1151314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1152314564Sdim nullptr, 1153314564Sdim nullptr, 1154314564Sdim nullptr, 1155314564Sdim 0}, 1156314564Sdim {"s24", 1157314564Sdim nullptr, 1158314564Sdim 4, 1159314564Sdim 0, 1160314564Sdim eEncodingIEEE754, 1161314564Sdim eFormatFloat, 1162314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1163314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1164314564Sdim nullptr, 1165314564Sdim nullptr, 1166314564Sdim nullptr, 1167314564Sdim 0}, 1168314564Sdim {"s25", 1169314564Sdim nullptr, 1170314564Sdim 4, 1171314564Sdim 0, 1172314564Sdim eEncodingIEEE754, 1173314564Sdim eFormatFloat, 1174314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1175314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1176314564Sdim nullptr, 1177314564Sdim nullptr, 1178314564Sdim nullptr, 1179314564Sdim 0}, 1180314564Sdim {"s26", 1181314564Sdim nullptr, 1182314564Sdim 4, 1183314564Sdim 0, 1184314564Sdim eEncodingIEEE754, 1185314564Sdim eFormatFloat, 1186314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1187314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1188314564Sdim nullptr, 1189314564Sdim nullptr, 1190314564Sdim nullptr, 1191314564Sdim 0}, 1192314564Sdim {"s27", 1193314564Sdim nullptr, 1194314564Sdim 4, 1195314564Sdim 0, 1196314564Sdim eEncodingIEEE754, 1197314564Sdim eFormatFloat, 1198314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1199314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1200314564Sdim nullptr, 1201314564Sdim nullptr, 1202314564Sdim nullptr, 1203314564Sdim 0}, 1204314564Sdim {"s28", 1205314564Sdim nullptr, 1206314564Sdim 4, 1207314564Sdim 0, 1208314564Sdim eEncodingIEEE754, 1209314564Sdim eFormatFloat, 1210314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1211314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1212314564Sdim nullptr, 1213314564Sdim nullptr, 1214314564Sdim nullptr, 1215314564Sdim 0}, 1216314564Sdim {"s29", 1217314564Sdim nullptr, 1218314564Sdim 4, 1219314564Sdim 0, 1220314564Sdim eEncodingIEEE754, 1221314564Sdim eFormatFloat, 1222314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1223314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1224314564Sdim nullptr, 1225314564Sdim nullptr, 1226314564Sdim nullptr, 1227314564Sdim 0}, 1228314564Sdim {"s30", 1229314564Sdim nullptr, 1230314564Sdim 4, 1231314564Sdim 0, 1232314564Sdim eEncodingIEEE754, 1233314564Sdim eFormatFloat, 1234314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1235314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1236314564Sdim nullptr, 1237314564Sdim nullptr, 1238314564Sdim nullptr, 1239314564Sdim 0}, 1240314564Sdim {"s31", 1241314564Sdim nullptr, 1242314564Sdim 4, 1243314564Sdim 0, 1244314564Sdim eEncodingIEEE754, 1245314564Sdim eFormatFloat, 1246314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1247314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1248314564Sdim nullptr, 1249314564Sdim nullptr, 1250314564Sdim nullptr, 1251314564Sdim 0}, 1252275072Semaste 1253314564Sdim {"d0", 1254314564Sdim nullptr, 1255314564Sdim 8, 1256314564Sdim 0, 1257314564Sdim eEncodingIEEE754, 1258314564Sdim eFormatFloat, 1259314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1260314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1261314564Sdim nullptr, 1262314564Sdim nullptr, 1263314564Sdim nullptr, 1264314564Sdim 0}, 1265314564Sdim {"d1", 1266314564Sdim nullptr, 1267314564Sdim 8, 1268314564Sdim 0, 1269314564Sdim eEncodingIEEE754, 1270314564Sdim eFormatFloat, 1271314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1272314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1273314564Sdim nullptr, 1274314564Sdim nullptr, 1275314564Sdim nullptr, 1276314564Sdim 0}, 1277314564Sdim {"d2", 1278314564Sdim nullptr, 1279314564Sdim 8, 1280314564Sdim 0, 1281314564Sdim eEncodingIEEE754, 1282314564Sdim eFormatFloat, 1283314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1284314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1285314564Sdim nullptr, 1286314564Sdim nullptr, 1287314564Sdim nullptr, 1288314564Sdim 0}, 1289314564Sdim {"d3", 1290314564Sdim nullptr, 1291314564Sdim 8, 1292314564Sdim 0, 1293314564Sdim eEncodingIEEE754, 1294314564Sdim eFormatFloat, 1295314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1296314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1297314564Sdim nullptr, 1298314564Sdim nullptr, 1299314564Sdim nullptr, 1300314564Sdim 0}, 1301314564Sdim {"d4", 1302314564Sdim nullptr, 1303314564Sdim 8, 1304314564Sdim 0, 1305314564Sdim eEncodingIEEE754, 1306314564Sdim eFormatFloat, 1307314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1308314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1309314564Sdim nullptr, 1310314564Sdim nullptr, 1311314564Sdim nullptr, 1312314564Sdim 0}, 1313314564Sdim {"d5", 1314314564Sdim nullptr, 1315314564Sdim 8, 1316314564Sdim 0, 1317314564Sdim eEncodingIEEE754, 1318314564Sdim eFormatFloat, 1319314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1320314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1321314564Sdim nullptr, 1322314564Sdim nullptr, 1323314564Sdim nullptr, 1324314564Sdim 0}, 1325314564Sdim {"d6", 1326314564Sdim nullptr, 1327314564Sdim 8, 1328314564Sdim 0, 1329314564Sdim eEncodingIEEE754, 1330314564Sdim eFormatFloat, 1331314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1332314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1333314564Sdim nullptr, 1334314564Sdim nullptr, 1335314564Sdim nullptr, 1336314564Sdim 0}, 1337314564Sdim {"d7", 1338314564Sdim nullptr, 1339314564Sdim 8, 1340314564Sdim 0, 1341314564Sdim eEncodingIEEE754, 1342314564Sdim eFormatFloat, 1343314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1344314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1345314564Sdim nullptr, 1346314564Sdim nullptr, 1347314564Sdim nullptr, 1348314564Sdim 0}, 1349314564Sdim {"d8", 1350314564Sdim nullptr, 1351314564Sdim 8, 1352314564Sdim 0, 1353314564Sdim eEncodingIEEE754, 1354314564Sdim eFormatFloat, 1355314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1356314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1357314564Sdim nullptr, 1358314564Sdim nullptr, 1359314564Sdim nullptr, 1360314564Sdim 0}, 1361314564Sdim {"d9", 1362314564Sdim nullptr, 1363314564Sdim 8, 1364314564Sdim 0, 1365314564Sdim eEncodingIEEE754, 1366314564Sdim eFormatFloat, 1367314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1368314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1369314564Sdim nullptr, 1370314564Sdim nullptr, 1371314564Sdim nullptr, 1372314564Sdim 0}, 1373314564Sdim {"d10", 1374314564Sdim nullptr, 1375314564Sdim 8, 1376314564Sdim 0, 1377314564Sdim eEncodingIEEE754, 1378314564Sdim eFormatFloat, 1379314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1380314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1381314564Sdim nullptr, 1382314564Sdim nullptr, 1383314564Sdim nullptr, 1384314564Sdim 0}, 1385314564Sdim {"d11", 1386314564Sdim nullptr, 1387314564Sdim 8, 1388314564Sdim 0, 1389314564Sdim eEncodingIEEE754, 1390314564Sdim eFormatFloat, 1391314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1392314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1393314564Sdim nullptr, 1394314564Sdim nullptr, 1395314564Sdim nullptr, 1396314564Sdim 0}, 1397314564Sdim {"d12", 1398314564Sdim nullptr, 1399314564Sdim 8, 1400314564Sdim 0, 1401314564Sdim eEncodingIEEE754, 1402314564Sdim eFormatFloat, 1403314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1404314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1405314564Sdim nullptr, 1406314564Sdim nullptr, 1407314564Sdim nullptr, 1408314564Sdim 0}, 1409314564Sdim {"d13", 1410314564Sdim nullptr, 1411314564Sdim 8, 1412314564Sdim 0, 1413314564Sdim eEncodingIEEE754, 1414314564Sdim eFormatFloat, 1415314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1416314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1417314564Sdim nullptr, 1418314564Sdim nullptr, 1419314564Sdim nullptr, 1420314564Sdim 0}, 1421314564Sdim {"d14", 1422314564Sdim nullptr, 1423314564Sdim 8, 1424314564Sdim 0, 1425314564Sdim eEncodingIEEE754, 1426314564Sdim eFormatFloat, 1427314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1428314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1429314564Sdim nullptr, 1430314564Sdim nullptr, 1431314564Sdim nullptr, 1432314564Sdim 0}, 1433314564Sdim {"d15", 1434314564Sdim nullptr, 1435314564Sdim 8, 1436314564Sdim 0, 1437314564Sdim eEncodingIEEE754, 1438314564Sdim eFormatFloat, 1439314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1440314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1441314564Sdim nullptr, 1442314564Sdim nullptr, 1443314564Sdim nullptr, 1444314564Sdim 0}, 1445314564Sdim {"d16", 1446314564Sdim nullptr, 1447314564Sdim 8, 1448314564Sdim 0, 1449314564Sdim eEncodingIEEE754, 1450314564Sdim eFormatFloat, 1451314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1452314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1453314564Sdim nullptr, 1454314564Sdim nullptr, 1455314564Sdim nullptr, 1456314564Sdim 0}, 1457314564Sdim {"d17", 1458314564Sdim nullptr, 1459314564Sdim 8, 1460314564Sdim 0, 1461314564Sdim eEncodingIEEE754, 1462314564Sdim eFormatFloat, 1463314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1464314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1465314564Sdim nullptr, 1466314564Sdim nullptr, 1467314564Sdim nullptr, 1468314564Sdim 0}, 1469314564Sdim {"d18", 1470314564Sdim nullptr, 1471314564Sdim 8, 1472314564Sdim 0, 1473314564Sdim eEncodingIEEE754, 1474314564Sdim eFormatFloat, 1475314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1476314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1477314564Sdim nullptr, 1478314564Sdim nullptr, 1479314564Sdim nullptr, 1480314564Sdim 0}, 1481314564Sdim {"d19", 1482314564Sdim nullptr, 1483314564Sdim 8, 1484314564Sdim 0, 1485314564Sdim eEncodingIEEE754, 1486314564Sdim eFormatFloat, 1487314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1488314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1489314564Sdim nullptr, 1490314564Sdim nullptr, 1491314564Sdim nullptr, 1492314564Sdim 0}, 1493314564Sdim {"d20", 1494314564Sdim nullptr, 1495314564Sdim 8, 1496314564Sdim 0, 1497314564Sdim eEncodingIEEE754, 1498314564Sdim eFormatFloat, 1499314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1500314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1501314564Sdim nullptr, 1502314564Sdim nullptr, 1503314564Sdim nullptr, 1504314564Sdim 0}, 1505314564Sdim {"d21", 1506314564Sdim nullptr, 1507314564Sdim 8, 1508314564Sdim 0, 1509314564Sdim eEncodingIEEE754, 1510314564Sdim eFormatFloat, 1511314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1512314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1513314564Sdim nullptr, 1514314564Sdim nullptr, 1515314564Sdim nullptr, 1516314564Sdim 0}, 1517314564Sdim {"d22", 1518314564Sdim nullptr, 1519314564Sdim 8, 1520314564Sdim 0, 1521314564Sdim eEncodingIEEE754, 1522314564Sdim eFormatFloat, 1523314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1524314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1525314564Sdim nullptr, 1526314564Sdim nullptr, 1527314564Sdim nullptr, 1528314564Sdim 0}, 1529314564Sdim {"d23", 1530314564Sdim nullptr, 1531314564Sdim 8, 1532314564Sdim 0, 1533314564Sdim eEncodingIEEE754, 1534314564Sdim eFormatFloat, 1535314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1536314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1537314564Sdim nullptr, 1538314564Sdim nullptr, 1539314564Sdim nullptr, 1540314564Sdim 0}, 1541314564Sdim {"d24", 1542314564Sdim nullptr, 1543314564Sdim 8, 1544314564Sdim 0, 1545314564Sdim eEncodingIEEE754, 1546314564Sdim eFormatFloat, 1547314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1548314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1549314564Sdim nullptr, 1550314564Sdim nullptr, 1551314564Sdim nullptr, 1552314564Sdim 0}, 1553314564Sdim {"d25", 1554314564Sdim nullptr, 1555314564Sdim 8, 1556314564Sdim 0, 1557314564Sdim eEncodingIEEE754, 1558314564Sdim eFormatFloat, 1559314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1560314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1561314564Sdim nullptr, 1562314564Sdim nullptr, 1563314564Sdim nullptr, 1564314564Sdim 0}, 1565314564Sdim {"d26", 1566314564Sdim nullptr, 1567314564Sdim 8, 1568314564Sdim 0, 1569314564Sdim eEncodingIEEE754, 1570314564Sdim eFormatFloat, 1571314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1572314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1573314564Sdim nullptr, 1574314564Sdim nullptr, 1575314564Sdim nullptr, 1576314564Sdim 0}, 1577314564Sdim {"d27", 1578314564Sdim nullptr, 1579314564Sdim 8, 1580314564Sdim 0, 1581314564Sdim eEncodingIEEE754, 1582314564Sdim eFormatFloat, 1583314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1584314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1585314564Sdim nullptr, 1586314564Sdim nullptr, 1587314564Sdim nullptr, 1588314564Sdim 0}, 1589314564Sdim {"d28", 1590314564Sdim nullptr, 1591314564Sdim 8, 1592314564Sdim 0, 1593314564Sdim eEncodingIEEE754, 1594314564Sdim eFormatFloat, 1595314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1596314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1597314564Sdim nullptr, 1598314564Sdim nullptr, 1599314564Sdim nullptr, 1600314564Sdim 0}, 1601314564Sdim {"d29", 1602314564Sdim nullptr, 1603314564Sdim 8, 1604314564Sdim 0, 1605314564Sdim eEncodingIEEE754, 1606314564Sdim eFormatFloat, 1607314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1608314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1609314564Sdim nullptr, 1610314564Sdim nullptr, 1611314564Sdim nullptr, 1612314564Sdim 0}, 1613314564Sdim {"d30", 1614314564Sdim nullptr, 1615314564Sdim 8, 1616314564Sdim 0, 1617314564Sdim eEncodingIEEE754, 1618314564Sdim eFormatFloat, 1619314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1620314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1621314564Sdim nullptr, 1622314564Sdim nullptr, 1623314564Sdim nullptr, 1624314564Sdim 0}, 1625314564Sdim {"d31", 1626314564Sdim nullptr, 1627314564Sdim 8, 1628314564Sdim 0, 1629314564Sdim eEncodingIEEE754, 1630314564Sdim eFormatFloat, 1631314564Sdim {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 1632314564Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, 1633314564Sdim nullptr, 1634314564Sdim nullptr, 1635314564Sdim nullptr, 1636314564Sdim 0}}; 1637275072Semaste 1638314564Sdimstatic const uint32_t k_num_register_infos = 1639314564Sdim llvm::array_lengthof(g_register_infos); 1640275072Semastestatic bool g_register_info_names_constified = false; 1641275072Semaste 1642275072Semasteconst lldb_private::RegisterInfo * 1643314564SdimABIMacOSX_arm64::GetRegisterInfoArray(uint32_t &count) { 1644314564Sdim // Make the C-string names and alt_names for the register infos into const 1645314564Sdim // C-string values by having the ConstString unique the names in the global 1646314564Sdim // constant C-string pool. 1647314564Sdim if (!g_register_info_names_constified) { 1648314564Sdim g_register_info_names_constified = true; 1649314564Sdim for (uint32_t i = 0; i < k_num_register_infos; ++i) { 1650314564Sdim if (g_register_infos[i].name) 1651314564Sdim g_register_infos[i].name = 1652314564Sdim ConstString(g_register_infos[i].name).GetCString(); 1653314564Sdim if (g_register_infos[i].alt_name) 1654314564Sdim g_register_infos[i].alt_name = 1655314564Sdim ConstString(g_register_infos[i].alt_name).GetCString(); 1656275072Semaste } 1657314564Sdim } 1658314564Sdim count = k_num_register_infos; 1659314564Sdim return g_register_infos; 1660275072Semaste} 1661275072Semaste 1662314564Sdimsize_t ABIMacOSX_arm64::GetRedZoneSize() const { return 128; } 1663275072Semaste 1664275072Semaste//------------------------------------------------------------------ 1665275072Semaste// Static Functions 1666275072Semaste//------------------------------------------------------------------ 1667309124Sdim 1668275072SemasteABISP 1669321369SdimABIMacOSX_arm64::CreateInstance(ProcessSP process_sp, const ArchSpec &arch) { 1670314564Sdim static ABISP g_abi_sp; 1671314564Sdim const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch(); 1672314564Sdim const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor(); 1673288943Sdim 1674314564Sdim if (vendor_type == llvm::Triple::Apple) { 1675314564Sdim if (arch_type == llvm::Triple::aarch64) { 1676314564Sdim if (!g_abi_sp) 1677321369Sdim g_abi_sp.reset(new ABIMacOSX_arm64(process_sp)); 1678314564Sdim return g_abi_sp; 1679275072Semaste } 1680314564Sdim } 1681288943Sdim 1682314564Sdim return ABISP(); 1683275072Semaste} 1684275072Semaste 1685314564Sdimbool ABIMacOSX_arm64::PrepareTrivialCall( 1686314564Sdim Thread &thread, lldb::addr_t sp, lldb::addr_t func_addr, 1687314564Sdim lldb::addr_t return_addr, llvm::ArrayRef<lldb::addr_t> args) const { 1688314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1689314564Sdim if (!reg_ctx) 1690314564Sdim return false; 1691275072Semaste 1692314564Sdim Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); 1693275072Semaste 1694314564Sdim if (log) { 1695314564Sdim StreamString s; 1696314564Sdim s.Printf("ABISysV_x86_64::PrepareTrivialCall (tid = 0x%" PRIx64 1697314564Sdim ", sp = 0x%" PRIx64 ", func_addr = 0x%" PRIx64 1698314564Sdim ", return_addr = 0x%" PRIx64, 1699314564Sdim thread.GetID(), (uint64_t)sp, (uint64_t)func_addr, 1700314564Sdim (uint64_t)return_addr); 1701275072Semaste 1702314564Sdim for (size_t i = 0; i < args.size(); ++i) 1703314564Sdim s.Printf(", arg%d = 0x%" PRIx64, static_cast<int>(i + 1), args[i]); 1704314564Sdim s.PutCString(")"); 1705314564Sdim log->PutString(s.GetString()); 1706314564Sdim } 1707275072Semaste 1708314564Sdim const uint32_t pc_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1709314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC); 1710314564Sdim const uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1711314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP); 1712314564Sdim const uint32_t ra_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1713314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA); 1714275072Semaste 1715314564Sdim // x0 - x7 contain first 8 simple args 1716314564Sdim if (args.size() > 8) // TODO handle more than 6 arguments 1717314564Sdim return false; 1718275072Semaste 1719314564Sdim for (size_t i = 0; i < args.size(); ++i) { 1720314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo( 1721314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + i); 1722314564Sdim if (log) 1723314564Sdim log->Printf("About to write arg%d (0x%" PRIx64 ") into %s", 1724314564Sdim static_cast<int>(i + 1), args[i], reg_info->name); 1725314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(reg_info, args[i])) 1726314564Sdim return false; 1727314564Sdim } 1728275072Semaste 1729314564Sdim // Set "lr" to the return address 1730314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1731314564Sdim reg_ctx->GetRegisterInfoAtIndex(ra_reg_num), return_addr)) 1732314564Sdim return false; 1733275072Semaste 1734314564Sdim // Set "sp" to the requested value 1735314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1736314564Sdim reg_ctx->GetRegisterInfoAtIndex(sp_reg_num), sp)) 1737314564Sdim return false; 1738275072Semaste 1739314564Sdim // Set "pc" to the address requested 1740314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned( 1741314564Sdim reg_ctx->GetRegisterInfoAtIndex(pc_reg_num), func_addr)) 1742314564Sdim return false; 1743275072Semaste 1744314564Sdim return true; 1745275072Semaste} 1746275072Semaste 1747314564Sdimbool ABIMacOSX_arm64::GetArgumentValues(Thread &thread, 1748314564Sdim ValueList &values) const { 1749314564Sdim uint32_t num_values = values.GetSize(); 1750314564Sdim 1751314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 1752314564Sdim 1753314564Sdim // Extract the register context so we can read arguments from registers 1754314564Sdim 1755314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 1756314564Sdim 1757314564Sdim if (!reg_ctx) 1758314564Sdim return false; 1759314564Sdim 1760314564Sdim addr_t sp = 0; 1761314564Sdim 1762314564Sdim for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { 1763314564Sdim // We currently only support extracting values with Clang QualTypes. 1764314564Sdim // Do we care about others? 1765314564Sdim Value *value = values.GetValueAtIndex(value_idx); 1766314564Sdim 1767314564Sdim if (!value) 1768314564Sdim return false; 1769314564Sdim 1770314564Sdim CompilerType value_type = value->GetCompilerType(); 1771314564Sdim if (value_type) { 1772314564Sdim bool is_signed = false; 1773314564Sdim size_t bit_width = 0; 1774314564Sdim if (value_type.IsIntegerOrEnumerationType(is_signed)) { 1775314564Sdim bit_width = value_type.GetBitSize(&thread); 1776314564Sdim } else if (value_type.IsPointerOrReferenceType()) { 1777314564Sdim bit_width = value_type.GetBitSize(&thread); 1778314564Sdim } else { 1779314564Sdim // We only handle integer, pointer and reference types currently... 1780275072Semaste return false; 1781314564Sdim } 1782314564Sdim 1783314564Sdim if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) { 1784314564Sdim if (value_idx < 8) { 1785314564Sdim // Arguments 1-6 are in x0-x5... 1786314564Sdim const RegisterInfo *reg_info = nullptr; 1787314564Sdim // Search by generic ID first, then fall back to by name 1788314564Sdim uint32_t arg_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 1789314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx); 1790314564Sdim if (arg_reg_num != LLDB_INVALID_REGNUM) { 1791314564Sdim reg_info = reg_ctx->GetRegisterInfoAtIndex(arg_reg_num); 1792314564Sdim } else { 1793314564Sdim switch (value_idx) { 1794314564Sdim case 0: 1795314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x0"); 1796314564Sdim break; 1797314564Sdim case 1: 1798314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x1"); 1799314564Sdim break; 1800314564Sdim case 2: 1801314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x2"); 1802314564Sdim break; 1803314564Sdim case 3: 1804314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x3"); 1805314564Sdim break; 1806314564Sdim case 4: 1807314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x4"); 1808314564Sdim break; 1809314564Sdim case 5: 1810314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x5"); 1811314564Sdim break; 1812314564Sdim case 6: 1813314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x6"); 1814314564Sdim break; 1815314564Sdim case 7: 1816314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x7"); 1817314564Sdim break; 1818275072Semaste } 1819314564Sdim } 1820314564Sdim 1821314564Sdim if (reg_info) { 1822314564Sdim RegisterValue reg_value; 1823314564Sdim 1824314564Sdim if (reg_ctx->ReadRegister(reg_info, reg_value)) { 1825314564Sdim if (is_signed) 1826314564Sdim reg_value.SignExtend(bit_width); 1827314564Sdim if (!reg_value.GetScalarValue(value->GetScalar())) 1828275072Semaste return false; 1829314564Sdim continue; 1830275072Semaste } 1831314564Sdim } 1832314564Sdim return false; 1833314564Sdim } else { 1834314564Sdim if (sp == 0) { 1835314564Sdim // Read the stack pointer if we already haven't read it 1836314564Sdim sp = reg_ctx->GetSP(0); 1837314564Sdim if (sp == 0) 1838314564Sdim return false; 1839314564Sdim } 1840275072Semaste 1841314564Sdim // Arguments 5 on up are on the stack 1842314564Sdim const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8; 1843321369Sdim Status error; 1844314564Sdim if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory( 1845314564Sdim sp, arg_byte_size, is_signed, value->GetScalar(), error)) 1846314564Sdim return false; 1847314564Sdim 1848314564Sdim sp += arg_byte_size; 1849314564Sdim // Align up to the next 8 byte boundary if needed 1850314564Sdim if (sp % 8) { 1851314564Sdim sp >>= 3; 1852314564Sdim sp += 1; 1853314564Sdim sp <<= 3; 1854314564Sdim } 1855275072Semaste } 1856314564Sdim } 1857275072Semaste } 1858314564Sdim } 1859314564Sdim return true; 1860275072Semaste} 1861275072Semaste 1862321369SdimStatus 1863321369SdimABIMacOSX_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp, 1864321369Sdim lldb::ValueObjectSP &new_value_sp) { 1865321369Sdim Status error; 1866314564Sdim if (!new_value_sp) { 1867314564Sdim error.SetErrorString("Empty value object for return value."); 1868314564Sdim return error; 1869314564Sdim } 1870314564Sdim 1871314564Sdim CompilerType return_value_type = new_value_sp->GetCompilerType(); 1872314564Sdim if (!return_value_type) { 1873314564Sdim error.SetErrorString("Null clang type for return value."); 1874314564Sdim return error; 1875314564Sdim } 1876314564Sdim 1877314564Sdim Thread *thread = frame_sp->GetThread().get(); 1878314564Sdim 1879314564Sdim RegisterContext *reg_ctx = thread->GetRegisterContext().get(); 1880314564Sdim 1881314564Sdim if (reg_ctx) { 1882314564Sdim DataExtractor data; 1883321369Sdim Status data_error; 1884314564Sdim const uint64_t byte_size = new_value_sp->GetData(data, data_error); 1885314564Sdim if (data_error.Fail()) { 1886314564Sdim error.SetErrorStringWithFormat( 1887314564Sdim "Couldn't convert return value to raw data: %s", 1888314564Sdim data_error.AsCString()); 1889314564Sdim return error; 1890275072Semaste } 1891275072Semaste 1892314564Sdim const uint32_t type_flags = return_value_type.GetTypeInfo(nullptr); 1893314564Sdim if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) { 1894314564Sdim if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) { 1895314564Sdim // Extract the register context so we can read arguments from registers 1896314564Sdim lldb::offset_t offset = 0; 1897314564Sdim if (byte_size <= 16) { 1898314564Sdim const RegisterInfo *x0_info = reg_ctx->GetRegisterInfoByName("x0", 0); 1899314564Sdim if (byte_size <= 8) { 1900314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, byte_size); 1901275072Semaste 1902314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) 1903314564Sdim error.SetErrorString("failed to write register x0"); 1904314564Sdim } else { 1905314564Sdim uint64_t raw_value = data.GetMaxU64(&offset, 8); 1906314564Sdim 1907314564Sdim if (reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) { 1908314564Sdim const RegisterInfo *x1_info = 1909314564Sdim reg_ctx->GetRegisterInfoByName("x1", 0); 1910314564Sdim raw_value = data.GetMaxU64(&offset, byte_size - offset); 1911314564Sdim 1912314564Sdim if (!reg_ctx->WriteRegisterFromUnsigned(x1_info, raw_value)) 1913314564Sdim error.SetErrorString("failed to write register x1"); 1914275072Semaste } 1915314564Sdim } 1916314564Sdim } else { 1917314564Sdim error.SetErrorString("We don't support returning longer than 128 bit " 1918314564Sdim "integer values at present."); 1919314564Sdim } 1920314564Sdim } else if (type_flags & eTypeIsFloat) { 1921314564Sdim if (type_flags & eTypeIsComplex) { 1922314564Sdim // Don't handle complex yet. 1923314564Sdim error.SetErrorString( 1924314564Sdim "returning complex float values are not supported"); 1925314564Sdim } else { 1926314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1927275072Semaste 1928314564Sdim if (v0_info) { 1929314564Sdim if (byte_size <= 16) { 1930314564Sdim if (byte_size <= RegisterValue::GetMaxByteSize()) { 1931314564Sdim RegisterValue reg_value; 1932314564Sdim error = reg_value.SetValueFromData(v0_info, data, 0, true); 1933314564Sdim if (error.Success()) { 1934314564Sdim if (!reg_ctx->WriteRegister(v0_info, reg_value)) 1935314564Sdim error.SetErrorString("failed to write register v0"); 1936275072Semaste } 1937314564Sdim } else { 1938314564Sdim error.SetErrorStringWithFormat( 1939314564Sdim "returning float values with a byte size of %" PRIu64 1940314564Sdim " are not supported", 1941314564Sdim byte_size); 1942314564Sdim } 1943314564Sdim } else { 1944314564Sdim error.SetErrorString("returning float values longer than 128 " 1945314564Sdim "bits are not supported"); 1946275072Semaste } 1947314564Sdim } else { 1948314564Sdim error.SetErrorString("v0 register is not available on this target"); 1949314564Sdim } 1950275072Semaste } 1951314564Sdim } 1952314564Sdim } else if (type_flags & eTypeIsVector) { 1953314564Sdim if (byte_size > 0) { 1954314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 1955314564Sdim 1956314564Sdim if (v0_info) { 1957314564Sdim if (byte_size <= v0_info->byte_size) { 1958314564Sdim RegisterValue reg_value; 1959314564Sdim error = reg_value.SetValueFromData(v0_info, data, 0, true); 1960314564Sdim if (error.Success()) { 1961314564Sdim if (!reg_ctx->WriteRegister(v0_info, reg_value)) 1962314564Sdim error.SetErrorString("failed to write register v0"); 1963275072Semaste } 1964314564Sdim } 1965275072Semaste } 1966314564Sdim } 1967275072Semaste } 1968314564Sdim } else { 1969314564Sdim error.SetErrorString("no registers are available"); 1970314564Sdim } 1971314564Sdim 1972314564Sdim return error; 1973275072Semaste} 1974275072Semaste 1975314564Sdimbool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) { 1976314564Sdim unwind_plan.Clear(); 1977314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 1978275072Semaste 1979314564Sdim uint32_t lr_reg_num = arm64_dwarf::lr; 1980314564Sdim uint32_t sp_reg_num = arm64_dwarf::sp; 1981314564Sdim uint32_t pc_reg_num = arm64_dwarf::pc; 1982314564Sdim 1983314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 1984314564Sdim 1985314564Sdim // Our previous Call Frame Address is the stack pointer 1986314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0); 1987314564Sdim 1988314564Sdim // Our previous PC is in the LR 1989314564Sdim row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true); 1990314564Sdim 1991314564Sdim unwind_plan.AppendRow(row); 1992314564Sdim 1993314564Sdim // All other registers are the same. 1994314564Sdim 1995314564Sdim unwind_plan.SetSourceName("arm64 at-func-entry default"); 1996314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 1997314564Sdim 1998314564Sdim return true; 1999275072Semaste} 2000275072Semaste 2001314564Sdimbool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { 2002314564Sdim unwind_plan.Clear(); 2003314564Sdim unwind_plan.SetRegisterKind(eRegisterKindDWARF); 2004275072Semaste 2005314564Sdim uint32_t fp_reg_num = arm64_dwarf::fp; 2006314564Sdim uint32_t pc_reg_num = arm64_dwarf::pc; 2007314564Sdim 2008314564Sdim UnwindPlan::RowSP row(new UnwindPlan::Row); 2009314564Sdim const int32_t ptr_size = 8; 2010314564Sdim 2011314564Sdim row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size); 2012314564Sdim row->SetOffset(0); 2013314564Sdim 2014314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true); 2015314564Sdim row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true); 2016314564Sdim 2017314564Sdim unwind_plan.AppendRow(row); 2018314564Sdim unwind_plan.SetSourceName("arm64-apple-darwin default unwind plan"); 2019314564Sdim unwind_plan.SetSourcedFromCompiler(eLazyBoolNo); 2020314564Sdim unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo); 2021314564Sdim return true; 2022275072Semaste} 2023275072Semaste 2024314564Sdim// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says 2025314564Sdim// registers x19 through x28 and sp are callee preserved. 2026314564Sdim// v8-v15 are non-volatile (and specifically only the lower 8 bytes of these 2027314564Sdim// regs), 2028275072Semaste// the rest of the fp/SIMD registers are volatile. 2029275072Semaste 2030275072Semaste// We treat x29 as callee preserved also, else the unwinder won't try to 2031275072Semaste// retrieve fp saves. 2032275072Semaste 2033314564Sdimbool ABIMacOSX_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) { 2034314564Sdim if (reg_info) { 2035314564Sdim const char *name = reg_info->name; 2036275072Semaste 2037314564Sdim // Sometimes we'll be called with the "alternate" name for these registers; 2038314564Sdim // recognize them as non-volatile. 2039275072Semaste 2040314564Sdim if (name[0] == 'p' && name[1] == 'c') // pc 2041314564Sdim return false; 2042314564Sdim if (name[0] == 'f' && name[1] == 'p') // fp 2043314564Sdim return false; 2044314564Sdim if (name[0] == 's' && name[1] == 'p') // sp 2045314564Sdim return false; 2046314564Sdim if (name[0] == 'l' && name[1] == 'r') // lr 2047314564Sdim return false; 2048275072Semaste 2049314564Sdim if (name[0] == 'x') { 2050314564Sdim // Volatile registers: x0-x18, x30 (lr) 2051314564Sdim // Return false for the non-volatile gpr regs, true for everything else 2052314564Sdim switch (name[1]) { 2053314564Sdim case '1': 2054314564Sdim switch (name[2]) { 2055314564Sdim case '9': 2056314564Sdim return false; // x19 is non-volatile 2057314564Sdim default: 2058314564Sdim return true; 2059275072Semaste } 2060314564Sdim break; 2061314564Sdim case '2': 2062314564Sdim switch (name[2]) { 2063314564Sdim case '0': 2064314564Sdim case '1': 2065314564Sdim case '2': 2066314564Sdim case '3': 2067314564Sdim case '4': 2068314564Sdim case '5': 2069314564Sdim case '6': 2070314564Sdim case '7': 2071314564Sdim case '8': 2072314564Sdim return false; // x20 - 28 are non-volatile 2073314564Sdim case '9': 2074314564Sdim return false; // x29 aka fp treat as non-volatile on Darwin 2075314564Sdim default: 2076314564Sdim return true; 2077275072Semaste } 2078314564Sdim case '3': // x30 aka lr treat as non-volatile 2079314564Sdim if (name[2] == '0') 2080314564Sdim return false; 2081314564Sdim break; 2082314564Sdim default: 2083314564Sdim return true; 2084314564Sdim } 2085314564Sdim } else if (name[0] == 'v' || name[0] == 's' || name[0] == 'd') { 2086314564Sdim // Volatile registers: v0-7, v16-v31 2087314564Sdim // Return false for non-volatile fp/SIMD regs, true for everything else 2088314564Sdim switch (name[1]) { 2089314564Sdim case '8': 2090314564Sdim case '9': 2091314564Sdim return false; // v8-v9 are non-volatile 2092314564Sdim case '1': 2093314564Sdim switch (name[2]) { 2094314564Sdim case '0': 2095314564Sdim case '1': 2096314564Sdim case '2': 2097314564Sdim case '3': 2098314564Sdim case '4': 2099314564Sdim case '5': 2100314564Sdim return false; // v10-v15 are non-volatile 2101314564Sdim default: 2102314564Sdim return true; 2103314564Sdim } 2104314564Sdim default: 2105314564Sdim return true; 2106314564Sdim } 2107275072Semaste } 2108314564Sdim } 2109314564Sdim return true; 2110275072Semaste} 2111275072Semaste 2112314564Sdimstatic bool LoadValueFromConsecutiveGPRRegisters( 2113314564Sdim ExecutionContext &exe_ctx, RegisterContext *reg_ctx, 2114314564Sdim const CompilerType &value_type, 2115314564Sdim bool is_return_value, // false => parameter, true => return value 2116314564Sdim uint32_t &NGRN, // NGRN (see ABI documentation) 2117314564Sdim uint32_t &NSRN, // NSRN (see ABI documentation) 2118314564Sdim DataExtractor &data) { 2119314564Sdim const size_t byte_size = value_type.GetByteSize(nullptr); 2120314564Sdim 2121314564Sdim if (byte_size == 0) 2122314564Sdim return false; 2123314564Sdim 2124314564Sdim std::unique_ptr<DataBufferHeap> heap_data_ap( 2125314564Sdim new DataBufferHeap(byte_size, 0)); 2126314564Sdim const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder(); 2127321369Sdim Status error; 2128314564Sdim 2129314564Sdim CompilerType base_type; 2130314564Sdim const uint32_t homogeneous_count = 2131314564Sdim value_type.IsHomogeneousAggregate(&base_type); 2132314564Sdim if (homogeneous_count > 0 && homogeneous_count <= 8) { 2133314564Sdim // Make sure we have enough registers 2134314564Sdim if (NSRN < 8 && (8 - NSRN) >= homogeneous_count) { 2135314564Sdim if (!base_type) 2136275072Semaste return false; 2137314564Sdim const size_t base_byte_size = base_type.GetByteSize(nullptr); 2138314564Sdim uint32_t data_offset = 0; 2139275072Semaste 2140314564Sdim for (uint32_t i = 0; i < homogeneous_count; ++i) { 2141314564Sdim char v_name[8]; 2142314564Sdim ::snprintf(v_name, sizeof(v_name), "v%u", NSRN); 2143314564Sdim const RegisterInfo *reg_info = 2144314564Sdim reg_ctx->GetRegisterInfoByName(v_name, 0); 2145314564Sdim if (reg_info == nullptr) 2146314564Sdim return false; 2147275072Semaste 2148314564Sdim if (base_byte_size > reg_info->byte_size) 2149314564Sdim return false; 2150275072Semaste 2151314564Sdim RegisterValue reg_value; 2152314564Sdim 2153314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2154314564Sdim return false; 2155314564Sdim 2156314564Sdim // Make sure we have enough room in "heap_data_ap" 2157314564Sdim if ((data_offset + base_byte_size) <= heap_data_ap->GetByteSize()) { 2158314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2159314564Sdim reg_info, heap_data_ap->GetBytes() + data_offset, base_byte_size, 2160314564Sdim byte_order, error); 2161314564Sdim if (bytes_copied != base_byte_size) 2162314564Sdim return false; 2163314564Sdim data_offset += bytes_copied; 2164314564Sdim ++NSRN; 2165314564Sdim } else 2166314564Sdim return false; 2167314564Sdim } 2168314564Sdim data.SetByteOrder(byte_order); 2169314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2170314564Sdim data.SetData(DataBufferSP(heap_data_ap.release())); 2171314564Sdim return true; 2172275072Semaste } 2173314564Sdim } 2174275072Semaste 2175314564Sdim const size_t max_reg_byte_size = 16; 2176314564Sdim if (byte_size <= max_reg_byte_size) { 2177314564Sdim size_t bytes_left = byte_size; 2178314564Sdim uint32_t data_offset = 0; 2179314564Sdim while (data_offset < byte_size) { 2180314564Sdim if (NGRN >= 8) 2181314564Sdim return false; 2182275072Semaste 2183314564Sdim uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 2184314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2185314564Sdim if (reg_num == LLDB_INVALID_REGNUM) 2186314564Sdim return false; 2187314564Sdim 2188314564Sdim const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num); 2189314564Sdim if (reg_info == nullptr) 2190314564Sdim return false; 2191314564Sdim 2192314564Sdim RegisterValue reg_value; 2193314564Sdim 2194314564Sdim if (!reg_ctx->ReadRegister(reg_info, reg_value)) 2195314564Sdim return false; 2196314564Sdim 2197314564Sdim const size_t curr_byte_size = std::min<size_t>(8, bytes_left); 2198314564Sdim const size_t bytes_copied = reg_value.GetAsMemoryData( 2199314564Sdim reg_info, heap_data_ap->GetBytes() + data_offset, curr_byte_size, 2200314564Sdim byte_order, error); 2201314564Sdim if (bytes_copied == 0) 2202314564Sdim return false; 2203314564Sdim if (bytes_copied >= bytes_left) 2204314564Sdim break; 2205314564Sdim data_offset += bytes_copied; 2206314564Sdim bytes_left -= bytes_copied; 2207314564Sdim ++NGRN; 2208275072Semaste } 2209314564Sdim } else { 2210314564Sdim const RegisterInfo *reg_info = nullptr; 2211314564Sdim if (is_return_value) { 2212314564Sdim // We are assuming we are decoding this immediately after returning 2213314564Sdim // from a function call and that the address of the structure is in x8 2214314564Sdim reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); 2215314564Sdim } else { 2216314564Sdim // We are assuming we are stopped at the first instruction in a function 2217314564Sdim // and that the ABI is being respected so all parameters appear where they 2218314564Sdim // should be (functions with no external linkage can legally violate the 2219314564Sdim // ABI). 2220314564Sdim if (NGRN >= 8) 2221314564Sdim return false; 2222275072Semaste 2223314564Sdim uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( 2224314564Sdim eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN); 2225314564Sdim if (reg_num == LLDB_INVALID_REGNUM) 2226314564Sdim return false; 2227314564Sdim reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num); 2228314564Sdim if (reg_info == nullptr) 2229314564Sdim return false; 2230314564Sdim ++NGRN; 2231314564Sdim } 2232275072Semaste 2233314564Sdim if (reg_info == nullptr) 2234314564Sdim return false; 2235275072Semaste 2236314564Sdim const lldb::addr_t value_addr = 2237314564Sdim reg_ctx->ReadRegisterAsUnsigned(reg_info, LLDB_INVALID_ADDRESS); 2238275072Semaste 2239314564Sdim if (value_addr == LLDB_INVALID_ADDRESS) 2240314564Sdim return false; 2241314564Sdim 2242314564Sdim if (exe_ctx.GetProcessRef().ReadMemory( 2243314564Sdim value_addr, heap_data_ap->GetBytes(), heap_data_ap->GetByteSize(), 2244314564Sdim error) != heap_data_ap->GetByteSize()) { 2245314564Sdim return false; 2246275072Semaste } 2247314564Sdim } 2248275072Semaste 2249314564Sdim data.SetByteOrder(byte_order); 2250314564Sdim data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize()); 2251314564Sdim data.SetData(DataBufferSP(heap_data_ap.release())); 2252314564Sdim return true; 2253275072Semaste} 2254275072Semaste 2255314564SdimValueObjectSP ABIMacOSX_arm64::GetReturnValueObjectImpl( 2256314564Sdim Thread &thread, CompilerType &return_compiler_type) const { 2257314564Sdim ValueObjectSP return_valobj_sp; 2258314564Sdim Value value; 2259275072Semaste 2260314564Sdim ExecutionContext exe_ctx(thread.shared_from_this()); 2261314564Sdim if (exe_ctx.GetTargetPtr() == nullptr || exe_ctx.GetProcessPtr() == nullptr) 2262314564Sdim return return_valobj_sp; 2263275072Semaste 2264314564Sdim // value.SetContext (Value::eContextTypeClangType, return_compiler_type); 2265314564Sdim value.SetCompilerType(return_compiler_type); 2266314564Sdim 2267314564Sdim RegisterContext *reg_ctx = thread.GetRegisterContext().get(); 2268314564Sdim if (!reg_ctx) 2269314564Sdim return return_valobj_sp; 2270314564Sdim 2271314564Sdim const size_t byte_size = return_compiler_type.GetByteSize(nullptr); 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 2280314564Sdim 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; 2288314564Sdim 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) { 2298314564Sdim if (byte_size <= 2299314564Sdim x0_reg_info->byte_size + x1_reg_info->byte_size) { 2300314564Sdim std::unique_ptr<DataBufferHeap> heap_data_ap( 2301314564Sdim 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( 2310314564Sdim x0_reg_info, heap_data_ap->GetBytes() + 0, 8, 2311314564Sdim byte_order, error) && 2312314564Sdim x1_reg_value.GetAsMemoryData( 2313314564Sdim x1_reg_info, heap_data_ap->GetBytes() + 8, 8, 2314314564Sdim byte_order, error)) { 2315314564Sdim DataExtractor data( 2316314564Sdim DataBufferSP(heap_data_ap.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 { 2366314564Sdim 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; 2374314564Sdim if (byte_size == sizeof(float)) { 2375314564Sdim value.GetScalar() = data.GetFloat(&offset); 2376314564Sdim success = true; 2377314564Sdim } else if (byte_size == sizeof(double)) { 2378314564Sdim value.GetScalar() = data.GetDouble(&offset); 2379314564Sdim success = true; 2380314564Sdim } 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) { 2394314564Sdim if (byte_size > 0) { 2395314564Sdim 2396314564Sdim const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0); 2397314564Sdim 2398314564Sdim if (v0_info) { 2399314564Sdim if (byte_size <= v0_info->byte_size) { 2400314564Sdim std::unique_ptr<DataBufferHeap> heap_data_ap( 2401314564Sdim 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; 2406314564Sdim if (reg_value.GetAsMemoryData(v0_info, heap_data_ap->GetBytes(), 2407314564Sdim heap_data_ap->GetByteSize(), 2408314564Sdim byte_order, error)) { 2409314564Sdim DataExtractor data(DataBufferSP(heap_data_ap.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//------------------------------------------------------------------ 2445275072Semaste// PluginInterface protocol 2446275072Semaste//------------------------------------------------------------------ 2447309124Sdim 2448314564SdimConstString ABIMacOSX_arm64::GetPluginNameStatic() { 2449314564Sdim static ConstString g_plugin_name("ABIMacOSX_arm64"); 2450314564Sdim return g_plugin_name; 2451275072Semaste} 2452275072Semaste 2453314564Sdimuint32_t ABIMacOSX_arm64::GetPluginVersion() { return 1; } 2454