It looks like the pointer to this that deactivateThread is getting is  
completely bogus.

Ali

On Nov 4, 2008, at 11:35 PM, Dean Michael Ancajas wrote:

>
> Message: 1
> Date: Tue, 4 Nov 2008 10:08:22 -0500
> From: Ali Saidi <[EMAIL PROTECTED]>
> Subject: Re: [m5-users] error calling suspendContext(); segfault
> To: M5 users mailing list <[email protected]>
> Message-ID: <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes
>
> You should run M5 in a debugger and see where the segfault comes from.
> Looking over the code you have below I don't see a problem. As for the
> array, sure but you would have to insert each element in the array
> separately.
>
> Ali
>
>  Hi ,
>     I've been single stepping in gdb, I set my break points at the ff:
>
>  FullO3CPU<AlphaSimpleImpl>::SuspendThreadEvent::process() at build/ 
> ALPHA_SE/cpu/o3/cpu.cc:388
>         breakpoint already hit 2 times
>  std::list<unsigned int, std::allocator<unsigned int> >::begin()  
> const    at /usr/include/c++/4.1.3/bits/stl_list.h:589
>  std::list<unsigned int, std::allocator<unsigned int> >::begin() at / 
> usr/include/c++/4.1.3/bits/stl_list.h:580
>         breakpoint already hit 1 time
>
> And it actually has an error in the following statement:
>
> Breakpoint 9, std::list<unsigned int, std::allocator<unsigned int>  
> >::begin (this=0x2cbb) at /usr/include/c++/4.1.3/bits/stl_list.h:580
> 580           { return iterator(this->_M_impl._M_node._M_next); }
>
> If i try to access "this->_M_impl._M_node._M_next" it cannot be  
> accessed that is why it yields a segfault.
>
> (gdb)print this->_M_impl._M_node._M_next
> Cannot access memory at address 0x2cbb
>
> Honestly, I'm clueless about the error. All I know is that the  
> statement has been called by the           
> "std::find(activeThreads.begin(), activeThreads.end(), tid)" method  
> of "FullO3CPU<AlphaSimpleImpl>::deactivateThread" at build/ALPHA_SE/ 
> cpu/o3/cpu.cc
>
>
> I'm printing below part of the backtrace of the program:
>
> #0  std::list<unsigned int, std::allocator<unsigned int> >::begin  
> (this=0x2cbb) at /usr/include/c++/4.1.3/bits/stl_list.h:580
> #1  0x080b8fe9 in FullO3CPU<AlphaSimpleImpl>::deactivateThread  
> (this=0xffffffff, tid=1) at build/ALPHA_SE/cpu/o3/cpu.cc:596
> #2  0x080b9fc3 in  
> FullO3CPU<AlphaSimpleImpl>::SuspendThreadEvent::process  
> (this=0x87cfc78) at build/ALPHA_SE/cpu/o3/cpu.cc:389
> #3  0x083d47a8 in EventQueue::serviceOne (this=0x876a480) at build/ 
> ALPHA_SE/sim/eventq.cc:118
> #4  0x080be210 in EventQueue::serviceEvents (this=0x876a480,  
> when=100) at build/ALPHA_SE/sim/eventq.hh:362
> #5  0x080be30f in FullO3CPU<AlphaSimpleImpl>::instDone  
> (this=0x8791b88, tid=1) at build/ALPHA_SE/cpu/o3/cpu.cc:1286
>
> much thanks,
> -dean
>
> On Nov 4, 2008, at 3:41 AM, Dean Michael Ancajas wrote:
>
> > -------------- next part --------------
> > An HTML attachment was scrubbed...
> > URL: 
> > http://m5sim.org/cgi-bin/mailman/private/m5-users/attachments/20080918/c7a931f3/attachment-0001.htm
> >
> >
> > I think you have a misconception about the events. Events can be
> > reused, so as long as you don't have more than one event outstanding
> > for a specific task (and you really shouldn't ever do this), you
> > shouldn't need to dynamically create them.  Of the top of my head I
> > can' think of what the copy constructor looks like for an Event, but
> > it doesn't seems like it would do what you appear to want it to  
> do. I
> > would imagine that the event copying is the root of the problem,  
> that
> > or something subtle about using the comInstEventQueue.
> >
> > Ali
> >
> > hi Ali,
> >    I know my reply is late, very sorry. Anyways, I've fixed the
> > thread-ID error, it turns out I haven't initialized it properly in
> > the constructor list. So now I can schedule the event to be
> > process()'d at the correct instruction count in each thread, however
> > I still get a segmentation fault error when I call
> > suspendContext(tid) or even deactivateThread(tid). Any tips on how
> > to debug this? And also my reason that I dynamically create
> > SuspendThreadEvent is because I can only find out the number of
> > threads(which would be important when Queue-ing the event in the
> > comInstEventQueue array),instruction count depending on the
> > configuration of the CPU. I'm fairly new to C++ and after reading
> > about copy constructors I understand the fundamental problem of my
> > previous code in scheduleSuspendThreadEvent() method,
> >
> > so my new scheduleSuspendThreadEvent() is now:
> >
> >
> > void scheduleSuspendThreadEvent(int _tid,Tick when){
> > 190         // Schedule thread to suspend, regardless of its current
> > state.
> > 191         DPRINTF(Event,"suspend thread:%d \n",_tid);
> > 192
> > 193         new SuspendThreadEvent(comInstEventQueue[_tid],
> > 1000,_tid); //hard-coded to suspend in 1000 instructions each
> > thread; will be changed later
> > 202         }
> >
> > I removed the "SuspendThreadEvent
> > suspendThread[Impl::Maxthreads]"(see code below from previous email)
> > line to prevent issues in copy constructors and just dyamically
> > created the events(the downside is that I cannot access the created
> > events after, which I guess is fine as of now). Also, I know that
> > this is not an M5-related question but a C++ one: Is it possible
> > create an array of Events in M5 that wouldn't use the standard
> > constructors? The relevance of my question is that I wanted to pass
> > the thread_id of each event so that it would be queued in its own
> > comInstEventQueue[].
> >
> >
> >
> > Thanks in advance!
> >
> >
> >
> >
> >
> > On Sep 18, 2008, at 4:20 AM, Dean Michael Ancajas wrote:
> >
> > > hi everybody,
> > >     I've create d an Event called SuspendThreadEvent(same  
> properties
> > - Hide quoted text -
> >
> > > with ActivateThreadEvent in src/o3/cpu.cc) which will call
> > > FullO3CPU<Impl>::
> > suspendContext(int tid), to be able to initialize a
> > > SuspendThreadEvent instance, I created
> > > scheduleSuspendThreadEvent(tid,cpu), the problem is when I passed
> > > the correct parameter to scheduleSuspendThreadEvent but  
> according to
> > > the generated traces(see below) the value used in the  
> initialization
> > > is different.
> > >
> > > commandline:
> > > [EMAIL PROTECTED]:~/m5/repos/smt$ ./m5.debug --trace-file=event2.out  
> --
> > > trace-flags=Event tests/run.py quick/01.hello-2T-smt/alpha/tru64/ 
> o3-
> > > timing
> > >
> > >
> > > in cpu.cc
> > >  if( params->max_insts_pause_each_thread == 0 ){ //number of
> > > instructiosn has been coded in initialization at cpu.hh
> > >  279
> > >  280         for(int tid=0;tid < numThreads; tid++){
> > >  281
> > >  282            DPRINTF(Event,"Num of threads: %d 
> \n",numThreads); //
> > > print number of threads
> > >  283            DPRINTF(Event,"1. scheduling suspend thread: %d
> > > \n",tid); //print out thread # to be suspended
> > >  284            scheduleSuspendThreadEvent(tid,params-
> > > >max_insts_pause_each_thread);
> > >  285            DPRINTF(Event,"2. scheduling suspend thread: %d
> > > \n",tid); //double check if value of tid has changed
> > >  286         }
> > >  287     }
> > >
> > >
> > > in cpu.hh
> > >  /** added by dean michael ancajas, Schedule thread to suspend **/
> > > 189         void scheduleSuspendThreadEvent(int _tid,Tick when){
> > > 190         // Schedule thread to suspend, regardless of its  
> current
> > > state.
> > > 191         DPRINTF(Event,"suspend thread:%d \n",_tid);
> > > 192
> > > 193         suspendThreadEvent[_tid] = *(new
> > > SuspendThreadEvent(comInstEventQueue[_tid],100)); //for now this  
> is
> > > hard-coded to suspend in 100 instructions each thread
> > > 194         suspendThreadEvent[_tid].init(_tid,this);
> > > 201         }
> > >
> > >
> > > Generated traces from event2.out:
> > >
> > >    2       0: system.cpu: Num of threads: 2
> > >    3       0: system.cpu: 1. scheduling suspend thread: 0
> > >    4       0: system.cpu: suspend thread:0
> > >    5       0: Event_15: FullO3CPU "Suspend Thread" event  
> scheduled @
> > > 100
> > >    6       0: Event_15: thread suspend: 0
> > >    7       0: system.cpu: 2. scheduling suspend thread: 0
> > >    8       0: system.cpu: Num of threads: 2
> > >    9       0: system.cpu: 1. scheduling suspend thread: 1
> > >   10       0: system.cpu: suspend thread:1
> > >   11       0: Event_16: FullO3CPU "Suspend Thread" event  
> scheduled @
> > > 100
> > >   12       0: Event_16: thread suspend: 9
> > >   13       0: system.cpu: 2. scheduling suspend thread: 1
> > >   14       0: Event_2: FullO3CPU tick event scheduled @ 0
> > >
> > >
> > > The first SuspendThreadEvent was initialized properly(line 3's
> > > thread # and line 6's thread # are equal, but the 2nd is not,  
> line 9
> > > says it must suspend thread #1 but in line 12 it passed thread #9.
> > > I'm confused as to where the value started to change. As we can  
> also
> > > see in line 13, the value of tid in cpu.cc hasn't change after
> > > calling the scheduleSuspendThreadEvent. So I guess the culprit  
> must
> > > be in the scheduleSuspendThreadEvent.. Any help/ideas would be
> > > greatly appreciated.
> > >
> > > thanks in advance,
> > > Dean Michael Ancajas
> > >
> > > _______________________________________________
> > > m5-users mailing list
> > > [email protected]
> > > http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
> >
> >
> >
> > ------------------------------
> >
> > _______________________________________________
> > m5-users mailing list
> > [email protected]
> > http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
> >
> > End of m5-users Digest, Vol 26, Issue 10
> > ****************************************
> >
> >
> > --
> > Dean Michael B. Ancajas
> >
> > _______________________________________________
> > m5-users mailing list
> > [email protected]
> > http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>
>
>
> Dean Michael B. Ancajas
>
> _______________________________________________
> m5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to