[ros-dev] [ros-diffs] [jgardou] 64127: [KDGDB] - Add a callback mechanism permitting to "simulate" KD send <-> receive loop without having to actually communicate to GDB - Use that to update the program counter when con...
Jérôme Gardou
jerome.gardou at reactos.org
Fri Sep 12 20:59:51 UTC 2014
Yeah you're not the first one to tell me that, and I wasn't really happy
to write it either.
I like your approach. I will try to do as you suggest.
Thanks
Jérôme
Le 12/09/2014 22:53, Timo Kreuzer a écrit :
> while(1); is not really a good solution. It should be something that is
> visible in GDB.
> But I fear that a KeBugCheck() won't work here, since it will rely on a
> working KD connection.
> Maybe a KD_ASSERT() macro, that calls KdAssert() on failure or
> something, resets the GDB connection somehow, issues a debug print and
> then halts.
>
>
> Am 12.09.2014 22:23, schrieb jgardou at svn.reactos.org:
>> Author: jgardou
>> Date: Fri Sep 12 20:23:08 2014
>> New Revision: 64127
>>
>> URL: http://svn.reactos.org/svn/reactos?rev=64127&view=rev
>> Log:
>> [KDGDB]
>> - Add a callback mechanism permitting to "simulate" KD send <-> receive loop without having to actually communicate to GDB
>> - Use that to update the program counter when cont'ing a breakpoint
>> Now cont'ing an assertion failure is possible, since we actually get beyond the int 3 instruction
>>
>> Modified:
>> trunk/reactos/drivers/base/kdgdb/gdb_input.c
>> trunk/reactos/drivers/base/kdgdb/kdgdb.h
>> trunk/reactos/drivers/base/kdgdb/kdpacket.c
>>
>> +)
>> +{
>> + DBGKD_MANIPULATE_STATE64* State = (DBGKD_MANIPULATE_STATE64*)MessageHeader->Buffer;
>> +
>> + /* We just confirm that all went well */
>> + if ((PacketType != PACKET_TYPE_KD_STATE_MANIPULATE)
>> + || (State->ApiNumber != DbgKdSetContextApi)
>> + || (State->ReturnStatus != STATUS_SUCCESS))
>> + {
>> + /* Should we bugcheck ? */
>> + while (1);
>> + }
>> +}
>> +
>> +static
>> +KDSTATUS
>> +SetContext(
>> + _Out_ DBGKD_MANIPULATE_STATE64* State,
>> + _Out_ PSTRING MessageData,
>> + _Out_ PULONG MessageLength,
>> + _Inout_ PKD_CONTEXT KdContext,
>> + _In_opt_ KDP_MANIPULATESTATE_HANDLER ManipulateStateHandler
>> +)
>> +{
>> + State->ApiNumber = DbgKdSetContextApi;
>> + State->Processor = CurrentStateChange.Processor;
>> + State->ReturnStatus = STATUS_SUCCESS;
>> + State->ProcessorLevel = CurrentStateChange.ProcessorLevel;
>> + MessageData->Length = sizeof(CurrentContext);
>> +
>> + if (MessageData->MaximumLength < sizeof(CurrentContext))
>> + {
>> + while (1);
>> + }
>> +
>>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
More information about the Ros-dev
mailing list