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

Reply via email to