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