1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using Endianess = ELFSharp.ELF.Endianess; 8 using Antmicro.Renode.Core; 9 using Antmicro.Renode.Peripherals.IRQControllers; 10 using System.Collections.Generic; 11 12 namespace Antmicro.Renode.Peripherals.CPU 13 { 14 [GPIO(NumberOfInputs = 1)] 15 public partial class X86_64 : BaseX86 16 { X86_64(string cpuType, IMachine machine, LAPIC lapic)17 public X86_64(string cpuType, IMachine machine, LAPIC lapic): base(cpuType, machine, lapic, CpuBitness.Bits64) 18 { 19 } 20 21 public override string Architecture { get { return "x86_64"; } } 22 23 public override string GDBArchitecture { get { return "i386:x86-64"; } } 24 25 public override List<GDBFeatureDescriptor> GDBFeatures 26 { 27 get 28 { 29 var features = new List<GDBFeatureDescriptor>(); 30 31 var coreFeature = new GDBFeatureDescriptor("org.gnu.gdb.i386.core"); 32 coreFeature.Registers.Add(new GDBRegisterDescriptor(0, 64, "rax", "int64")); 33 coreFeature.Registers.Add(new GDBRegisterDescriptor(1, 64, "rcx", "int64")); 34 coreFeature.Registers.Add(new GDBRegisterDescriptor(2, 64, "rdx", "int64")); 35 coreFeature.Registers.Add(new GDBRegisterDescriptor(3, 64, "rbx", "int64")); 36 coreFeature.Registers.Add(new GDBRegisterDescriptor(4, 64, "rsp", "data_ptr")); 37 coreFeature.Registers.Add(new GDBRegisterDescriptor(5, 64, "rbp", "data_ptr")); 38 coreFeature.Registers.Add(new GDBRegisterDescriptor(6, 64, "rsi", "int64")); 39 coreFeature.Registers.Add(new GDBRegisterDescriptor(7, 64, "rdi", "int64")); 40 for(var index = 8u; index <= 15; index++) 41 { 42 coreFeature.Registers.Add(new GDBRegisterDescriptor(index, 64, $"r{index}", "int64")); 43 } 44 45 coreFeature.Registers.Add(new GDBRegisterDescriptor(16, 64, "rip", "code_ptr")); 46 47 coreFeature.Registers.Add(new GDBRegisterDescriptor(17, 32, "eflags")); 48 49 coreFeature.Registers.Add(new GDBRegisterDescriptor(18, 32, "cs", "int32")); 50 coreFeature.Registers.Add(new GDBRegisterDescriptor(19, 32, "ss", "int32")); 51 coreFeature.Registers.Add(new GDBRegisterDescriptor(20, 32, "ds", "int32")); 52 coreFeature.Registers.Add(new GDBRegisterDescriptor(21, 32, "es", "int32")); 53 coreFeature.Registers.Add(new GDBRegisterDescriptor(22, 32, "fs", "int32")); 54 coreFeature.Registers.Add(new GDBRegisterDescriptor(23, 32, "gs", "int32")); 55 56 for(var index = 0u; index <= 7; index++) 57 { 58 coreFeature.Registers.Add(new GDBRegisterDescriptor(24 + index, 80, $"st{index}", "i387_ext")); 59 } 60 61 coreFeature.Registers.Add(new GDBRegisterDescriptor(32, 32, "fctrl", "int", "float")); 62 coreFeature.Registers.Add(new GDBRegisterDescriptor(33, 32, "fstat", "int", "float")); 63 coreFeature.Registers.Add(new GDBRegisterDescriptor(34, 32, "ftag", "int", "float")); 64 coreFeature.Registers.Add(new GDBRegisterDescriptor(35, 32, "fiseg", "int", "float")); 65 coreFeature.Registers.Add(new GDBRegisterDescriptor(36, 32, "fioff", "int", "float")); 66 coreFeature.Registers.Add(new GDBRegisterDescriptor(37, 32, "foseg", "int", "float")); 67 coreFeature.Registers.Add(new GDBRegisterDescriptor(38, 32, "fooff", "int", "float")); 68 coreFeature.Registers.Add(new GDBRegisterDescriptor(39, 32, "fop", "int", "float")); 69 70 features.Add(coreFeature); 71 72 return features; 73 } 74 } 75 } 76 } 77 78