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 Antmicro.Renode.Utilities.GDB;
8 
9 namespace Antmicro.Renode.Extensions.Utilities.GDB.Commands
10 {
11     public class ThreadContextCommand : Command, IMultithreadCommand
12     {
ThreadContextCommand(CommandsManager manager)13         public ThreadContextCommand(CommandsManager manager) : base(manager)
14         {
15         }
16 
17         [Execute("Hg")]
Execute( [Argument(Encoding = ArgumentAttribute.ArgumentEncoding.ThreadId)]PacketThreadId threadId)18         public PacketData Execute(
19             [Argument(Encoding = ArgumentAttribute.ArgumentEncoding.ThreadId)]PacketThreadId threadId)
20         {
21             var cpuId = threadId.ProcessId ?? threadId.ThreadId;
22             if(cpuId == PacketThreadId.All)
23             {
24                 // Choosing all isn't currently supported.
25                 return PacketData.ErrorReply(Error.OperationNotPermitted);
26             }
27 
28             manager.SelectCpuForDebugging(manager.ManagedCpus[cpuId]);
29             return PacketData.Success;
30         }
31     }
32 }
33