Hi Steve,

I checked that class. I'm not sure if I understand it correctly, but I
think in this case you need to know the PC in advance and then schedule the
event. In my case, I don't want to modify the source code each time I want
to create checkpoint at some random PC or run some different programs.

Also, I don't figure out how you schedule it from python since other events
are scheduled in C++ when the object is startup/drained/processed or
something happened at the runtime.

On Thu, Aug 6, 2015 at 2:14 PM, Steve Reinhardt <[email protected]> wrote:

> There is the PCEvent class (see src/cpu/pc_event.hh) that's used for
> breakpoints, skipping kernel functions, etc.  You could create a subclass
> of that to generate a checkpoint and then "schedule" it from python.
>
> Steve
>
> On Thu, Aug 6, 2015 at 7:03 AM Lingxiao Jia <[email protected]>
> wrote:
>
>> Thanks, Steve. I know the pseudo-instruction stuff, but I do want to
>> generate checkpoint at certain PC.
>>
>> On Thu, Aug 6, 2015 at 3:38 AM, Steve Reinhardt <[email protected]> wrote:
>>
>>> If you're just trying to generate a checkpoint at a particular point in
>>> a program, you can also insert a pseudo-instruction in the program to cause
>>> a checkpoint to be generated without having to figure out the PC value.
>>>
>>> Steve
>>>
>>>
>>> On Wed, Aug 5, 2015 at 11:34 AM Lingxiao Jia <[email protected]>
>>> wrote:
>>>
>>>> Thanks, Patrick. I think it at least gives me a way to get access to
>>>> the pc.
>>>> Of course it would be ideal if there is any way that can directly
>>>> access the pc without getting the address of the thread first.
>>>>
>>>> On Wed, Aug 5, 2015 at 12:42 PM, Patrick <[email protected]> wrote:
>>>>
>>>>> Lingxiao,
>>>>> ​​
>>>>> In lieu of a response from someone else with more gem5 expertise, I
>>>>> thought this might help.
>>>>>
>>>>> (I assume you've seen this page: link
>>>>> <http://www.m5sim.org/Debugger_Based_Debugging>.)
>>>>>
>>>>> I put a breakpoint in src/cpu/simple/base.cc in the BaseSimpleCPU
>>>>> constructor. After it allocates a "SimpleThread" for its "thread" member, 
>>>>> I
>>>>> can get the address of "thread." Then, at another point in the program, I
>>>>> can use that address to examine the pc member of "thread" like this
>>>>> (assuming the address of "thread" is 0x385e9c0):
>>>>>
>>>>> (gdb) call ((SimpleThread*)0x385e9c0)->pcState()
>>>>> $6 = {<GenericISA::UPCState<unsigned long>> =
>>>>> {<GenericISA::SimplePCState<unsigned long>> = {<GenericISA::PCStateBase> =
>>>>> {_pc = 4194710, _npc = 4194718}, <No data fields>}, _upc = 0, _nupc = 1},
>>>>> _size = 0 '\000'}
>>>>>
>>>>> ​A caveat is that gdb won't let me print out the address of "thread".
>>>>> When I try to print it in gdb, I get this error:
>>>>>
>>>>> (gdb)​ p thread​
>>>>>
>>>>> ​A syntax error in expression, near `'.
>>>>>
>>>>>
>>>>> ​My guess is that it's because "thread" is a keyword in gdb. In the
>>>>> code, I stored the value of "thread" in a variable with a different name,
>>>>> and it let me print the other variable.
>>>>>
>>>>> ​I don't know if this answers your question. If it does, I would guess
>>>>> there's probably a better way than this. Maybe someone else can give 
>>>>> input.
>>>>>
>>>>> Hope this helps,
>>>>> Patrick​
>>>>>
>>>>> On Tue, Aug 4, 2015 at 10:31 AM, Lingxiao Jia <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Hello all,
>>>>>>
>>>>>> I am new to gem5. I want to use gdb to inspect what is going on
>>>>>> inside the simulator in SE mode.
>>>>>> Specifically, I want to stop at certain PC and make a checkpoint at
>>>>>> that point, but I don't find an easy way to do that. The existing way to
>>>>>> take checkpoints can only be taken at certain tick.
>>>>>> I reviewed the source code and generally located where the PC is
>>>>>> stored (in the ThreadState structure of the thread of the corresponding
>>>>>> CPU).
>>>>>> But since gem5 use swig to bridge python and C++, I am really
>>>>>> confused if it is possible to access the PC globally in gdb?
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Lingxiao Jia
>>>>>>
>>>>>>
>>>>>> Electrical & Computer Engineering (ECE)
>>>>>>
>>>>>> The University of Texas at Austin (UT-Austin)
>>>>>>
>>>>>> _______________________________________________
>>>>>> gem5-users mailing list
>>>>>> [email protected]
>>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> gem5-users mailing list
>>>>> [email protected]
>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Best regards,
>>>>
>>>> Lingxiao Jia
>>>>
>>>> 贾凌霄
>>>>
>>>>
>>>> Electrical & Computer Engineering (ECE)
>>>>
>>>> The University of Texas at Austin (UT-Austin)
>>>> _______________________________________________
>>>> gem5-users mailing list
>>>> [email protected]
>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>
>>>
>>> _______________________________________________
>>> gem5-users mailing list
>>> [email protected]
>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>>>
>>
>>
>>
>> --
>>
>> Best regards,
>>
>> Lingxiao Jia
>>
>> 贾凌霄
>>
>>
>> Electrical & Computer Engineering (ECE)
>>
>> The University of Texas at Austin (UT-Austin)
>> _______________________________________________
>> gem5-users mailing list
>> [email protected]
>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>
>
> _______________________________________________
> gem5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>



-- 

Best regards,

Lingxiao Jia

贾凌霄


Electrical & Computer Engineering (ECE)

The University of Texas at Austin (UT-Austin)
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to