11
11
12
12
#include " Plugins/Process/Utility/RegisterContextDarwin_arm.h"
13
13
#include " Plugins/Process/Utility/RegisterContextDarwin_arm64.h"
14
- #include " Plugins/Process/Utility/RegisterContextDarwin_i386.h"
15
14
#include " Plugins/Process/Utility/RegisterContextDarwin_riscv32.h"
16
15
#include " Plugins/Process/Utility/RegisterContextDarwin_x86_64.h"
17
16
#include " lldb/Core/Debugger.h"
81
80
#ifdef CPU_TYPE_ARM64_32
82
81
#undef CPU_TYPE_ARM64_32
83
82
#endif
84
- #ifdef CPU_TYPE_I386
85
- #undef CPU_TYPE_I386
86
- #endif
87
83
#ifdef CPU_TYPE_X86_64
88
84
#undef CPU_TYPE_X86_64
89
85
#endif
@@ -358,122 +354,6 @@ class RegisterContextDarwin_x86_64_Mach : public RegisterContextDarwin_x86_64 {
358
354
}
359
355
};
360
356
361
- class RegisterContextDarwin_i386_Mach : public RegisterContextDarwin_i386 {
362
- public:
363
- RegisterContextDarwin_i386_Mach (lldb_private::Thread &thread,
364
- const DataExtractor &data)
365
- : RegisterContextDarwin_i386(thread, 0 ) {
366
- SetRegisterDataFrom_LC_THREAD (data);
367
- }
368
-
369
- void InvalidateAllRegisters () override {
370
- // Do nothing... registers are always valid...
371
- }
372
-
373
- void SetRegisterDataFrom_LC_THREAD (const DataExtractor &data) {
374
- lldb::offset_t offset = 0 ;
375
- SetError (GPRRegSet, Read, -1 );
376
- SetError (FPURegSet, Read, -1 );
377
- SetError (EXCRegSet, Read, -1 );
378
- bool done = false ;
379
-
380
- while (!done) {
381
- int flavor = data.GetU32 (&offset);
382
- if (flavor == 0 )
383
- done = true ;
384
- else {
385
- uint32_t i;
386
- uint32_t count = data.GetU32 (&offset);
387
- switch (flavor) {
388
- case GPRRegSet:
389
- for (i = 0 ; i < count; ++i)
390
- (&gpr.eax )[i] = data.GetU32 (&offset);
391
- SetError (GPRRegSet, Read, 0 );
392
- done = true ;
393
-
394
- break ;
395
- case FPURegSet:
396
- // TODO: fill in FPU regs....
397
- // SetError (FPURegSet, Read, -1);
398
- done = true ;
399
-
400
- break ;
401
- case EXCRegSet:
402
- exc.trapno = data.GetU32 (&offset);
403
- exc.err = data.GetU32 (&offset);
404
- exc.faultvaddr = data.GetU32 (&offset);
405
- SetError (EXCRegSet, Read, 0 );
406
- done = true ;
407
- break ;
408
- case 7 :
409
- case 8 :
410
- case 9 :
411
- // fancy flavors that encapsulate of the above flavors...
412
- break ;
413
-
414
- default :
415
- done = true ;
416
- break ;
417
- }
418
- }
419
- }
420
- }
421
-
422
- static bool Create_LC_THREAD (Thread *thread, Stream &data) {
423
- RegisterContextSP reg_ctx_sp (thread->GetRegisterContext ());
424
- if (reg_ctx_sp) {
425
- RegisterContext *reg_ctx = reg_ctx_sp.get ();
426
-
427
- data.PutHex32 (GPRRegSet); // Flavor
428
- data.PutHex32 (GPRWordCount);
429
- PrintRegisterValue (reg_ctx, " eax" , nullptr , 4 , data);
430
- PrintRegisterValue (reg_ctx, " ebx" , nullptr , 4 , data);
431
- PrintRegisterValue (reg_ctx, " ecx" , nullptr , 4 , data);
432
- PrintRegisterValue (reg_ctx, " edx" , nullptr , 4 , data);
433
- PrintRegisterValue (reg_ctx, " edi" , nullptr , 4 , data);
434
- PrintRegisterValue (reg_ctx, " esi" , nullptr , 4 , data);
435
- PrintRegisterValue (reg_ctx, " ebp" , nullptr , 4 , data);
436
- PrintRegisterValue (reg_ctx, " esp" , nullptr , 4 , data);
437
- PrintRegisterValue (reg_ctx, " ss" , nullptr , 4 , data);
438
- PrintRegisterValue (reg_ctx, " eflags" , nullptr , 4 , data);
439
- PrintRegisterValue (reg_ctx, " eip" , nullptr , 4 , data);
440
- PrintRegisterValue (reg_ctx, " cs" , nullptr , 4 , data);
441
- PrintRegisterValue (reg_ctx, " ds" , nullptr , 4 , data);
442
- PrintRegisterValue (reg_ctx, " es" , nullptr , 4 , data);
443
- PrintRegisterValue (reg_ctx, " fs" , nullptr , 4 , data);
444
- PrintRegisterValue (reg_ctx, " gs" , nullptr , 4 , data);
445
-
446
- // Write out the EXC registers
447
- data.PutHex32 (EXCRegSet);
448
- data.PutHex32 (EXCWordCount);
449
- PrintRegisterValue (reg_ctx, " trapno" , nullptr , 4 , data);
450
- PrintRegisterValue (reg_ctx, " err" , nullptr , 4 , data);
451
- PrintRegisterValue (reg_ctx, " faultvaddr" , nullptr , 4 , data);
452
- return true ;
453
- }
454
- return false ;
455
- }
456
-
457
- protected:
458
- int DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr) override { return 0 ; }
459
-
460
- int DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu) override { return 0 ; }
461
-
462
- int DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc) override { return 0 ; }
463
-
464
- int DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr) override {
465
- return 0 ;
466
- }
467
-
468
- int DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu) override {
469
- return 0 ;
470
- }
471
-
472
- int DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc) override {
473
- return 0 ;
474
- }
475
- };
476
-
477
357
class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
478
358
public:
479
359
RegisterContextDarwin_arm_Mach (lldb_private::Thread &thread,
@@ -491,12 +371,11 @@ class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
491
371
SetError (GPRRegSet, Read, -1 );
492
372
SetError (FPURegSet, Read, -1 );
493
373
SetError (EXCRegSet, Read, -1 );
494
- bool done = false ;
495
374
496
- while (!done ) {
375
+ while (offset < data. GetByteSize () ) {
497
376
int flavor = data.GetU32 (&offset);
498
377
uint32_t count = data.GetU32 (&offset);
499
- lldb:: offset_t next_thread_state = offset + (count * 4 );
378
+ offset_t next_thread_state = offset + (count * 4 );
500
379
switch (flavor) {
501
380
case GPRAltRegSet:
502
381
case GPRRegSet: {
@@ -510,9 +389,7 @@ class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
510
389
511
390
SetError (GPRRegSet, Read, 0 );
512
391
}
513
- }
514
- offset = next_thread_state;
515
- break ;
392
+ } break ;
516
393
517
394
case FPURegSet: {
518
395
uint8_t *fpu_reg_buf = (uint8_t *)&fpu.floats ;
@@ -522,12 +399,8 @@ class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
522
399
offset += fpu_reg_buf_size;
523
400
fpu.fpscr = data.GetU32 (&offset);
524
401
SetError (FPURegSet, Read, 0 );
525
- } else {
526
- done = true ;
527
402
}
528
- }
529
- offset = next_thread_state;
530
- break ;
403
+ } break ;
531
404
532
405
case EXCRegSet:
533
406
if (count == 3 ) {
@@ -536,14 +409,11 @@ class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
536
409
exc.far = data.GetU32 (&offset);
537
410
SetError (EXCRegSet, Read, 0 );
538
411
}
539
- done = true ;
540
- offset = next_thread_state;
541
412
break ;
542
413
543
- // Unknown register set flavor, stop trying to parse.
544
414
default :
545
- done = true ;
546
415
}
416
+ offset = next_thread_state;
547
417
}
548
418
}
549
419
@@ -626,11 +496,10 @@ class RegisterContextDarwin_arm64_Mach : public RegisterContextDarwin_arm64 {
626
496
SetError (GPRRegSet, Read, -1 );
627
497
SetError (FPURegSet, Read, -1 );
628
498
SetError (EXCRegSet, Read, -1 );
629
- bool done = false ;
630
- while (!done) {
499
+ while (offset < data.GetByteSize ()) {
631
500
int flavor = data.GetU32 (&offset);
632
501
uint32_t count = data.GetU32 (&offset);
633
- lldb:: offset_t next_thread_state = offset + (count * 4 );
502
+ offset_t next_thread_state = offset + (count * 4 );
634
503
switch (flavor) {
635
504
case GPRRegSet:
636
505
// x0-x29 + fp + lr + sp + pc (== 33 64-bit registers) plus cpsr (1
@@ -645,7 +514,6 @@ class RegisterContextDarwin_arm64_Mach : public RegisterContextDarwin_arm64 {
645
514
gpr.cpsr = data.GetU32 (&offset);
646
515
SetError (GPRRegSet, Read, 0 );
647
516
}
648
- offset = next_thread_state;
649
517
break ;
650
518
case FPURegSet: {
651
519
uint8_t *fpu_reg_buf = (uint8_t *)&fpu.v [0 ];
@@ -654,25 +522,19 @@ class RegisterContextDarwin_arm64_Mach : public RegisterContextDarwin_arm64 {
654
522
data.ExtractBytes (offset, fpu_reg_buf_size, eByteOrderLittle,
655
523
fpu_reg_buf) == fpu_reg_buf_size) {
656
524
SetError (FPURegSet, Read, 0 );
657
- } else {
658
- done = true ;
659
525
}
660
- }
661
- offset = next_thread_state;
662
- break ;
526
+ } break ;
663
527
case EXCRegSet:
664
528
if (count == 4 ) {
665
529
exc.far = data.GetU64 (&offset);
666
530
exc.esr = data.GetU32 (&offset);
667
531
exc.exception = data.GetU32 (&offset);
668
532
SetError (EXCRegSet, Read, 0 );
669
533
}
670
- offset = next_thread_state;
671
534
break ;
672
535
default :
673
- done = true ;
674
- break ;
675
536
}
537
+ offset = next_thread_state;
676
538
}
677
539
}
678
540
@@ -775,11 +637,10 @@ class RegisterContextDarwin_riscv32_Mach
775
637
SetError (FPURegSet, Read, -1 );
776
638
SetError (EXCRegSet, Read, -1 );
777
639
SetError (CSRRegSet, Read, -1 );
778
- bool done = false ;
779
- while (!done) {
640
+ while (offset < data.GetByteSize ()) {
780
641
int flavor = data.GetU32 (&offset);
781
642
uint32_t count = data.GetU32 (&offset);
782
- lldb:: offset_t next_thread_state = offset + (count * 4 );
643
+ offset_t next_thread_state = offset + (count * 4 );
783
644
switch (flavor) {
784
645
case GPRRegSet:
785
646
// x0-x31 + pc
@@ -789,7 +650,6 @@ class RegisterContextDarwin_riscv32_Mach
789
650
gpr.pc = data.GetU32 (&offset);
790
651
SetError (GPRRegSet, Read, 0 );
791
652
}
792
- offset = next_thread_state;
793
653
break ;
794
654
case FPURegSet: {
795
655
// f0-f31 + fcsr
@@ -799,22 +659,18 @@ class RegisterContextDarwin_riscv32_Mach
799
659
fpr.fcsr = data.GetU32 (&offset);
800
660
SetError (FPURegSet, Read, 0 );
801
661
}
802
- }
803
- offset = next_thread_state;
804
- break ;
662
+ } break ;
805
663
case EXCRegSet:
806
664
if (count == 3 ) {
807
665
exc.exception = data.GetU32 (&offset);
808
666
exc.fsr = data.GetU32 (&offset);
809
667
exc.far = data.GetU32 (&offset);
810
668
SetError (EXCRegSet, Read, 0 );
811
669
}
812
- offset = next_thread_state;
813
670
break ;
814
671
default :
815
- done = true ;
816
- break ;
817
672
}
673
+ offset = next_thread_state;
818
674
}
819
675
}
820
676
@@ -5408,16 +5264,6 @@ lldb_private::Address ObjectFileMachO::GetEntryPointAddress() {
5408
5264
done = true ;
5409
5265
}
5410
5266
break ;
5411
- case llvm::MachO::CPU_TYPE_I386:
5412
- if (flavor ==
5413
- 1 ) // x86_THREAD_STATE32 from mach/i386/thread_status.h
5414
- {
5415
- offset += 40 ; // This is the offset of eip in the GPR thread state
5416
- // data structure.
5417
- start_address = m_data.GetU32 (&offset);
5418
- done = true ;
5419
- }
5420
- break ;
5421
5267
case llvm::MachO::CPU_TYPE_X86_64:
5422
5268
if (flavor ==
5423
5269
4 ) // x86_THREAD_STATE64 from mach/i386/thread_status.h
@@ -5897,11 +5743,6 @@ ObjectFileMachO::GetThreadContextAtIndex(uint32_t idx,
5897
5743
std::make_shared<RegisterContextDarwin_arm_Mach>(thread, data);
5898
5744
break ;
5899
5745
5900
- case llvm::MachO::CPU_TYPE_I386:
5901
- reg_ctx_sp =
5902
- std::make_shared<RegisterContextDarwin_i386_Mach>(thread, data);
5903
- break ;
5904
-
5905
5746
case llvm::MachO::CPU_TYPE_X86_64:
5906
5747
reg_ctx_sp =
5907
5748
std::make_shared<RegisterContextDarwin_x86_64_Mach>(thread, data);
@@ -6769,11 +6610,6 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,
6769
6610
thread_sp.get (), LC_THREAD_datas[thread_idx]);
6770
6611
break ;
6771
6612
6772
- case llvm::MachO::CPU_TYPE_I386:
6773
- RegisterContextDarwin_i386_Mach::Create_LC_THREAD (
6774
- thread_sp.get (), LC_THREAD_datas[thread_idx]);
6775
- break ;
6776
-
6777
6613
case llvm::MachO::CPU_TYPE_X86_64:
6778
6614
RegisterContextDarwin_x86_64_Mach::Create_LC_THREAD (
6779
6615
thread_sp.get (), LC_THREAD_datas[thread_idx]);
0 commit comments