forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

hardware breakpoints

 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development
View previous topic :: View next topic  
Author Message
JorDy



Joined: 11 Dec 2005
Posts: 121

PostPosted: Thu Apr 19, 2007 5:52 am    Post subject: hardware breakpoints Reply with quote

I've been trying to set up my own breakpoint handler using the sio shell code, but its not been very successful so far.
Code:
/* Install a V_DEBUG handler in place of the kernel one */
static void install_debug_handler(void)
{
   u32 data;
   /* Build a 'j level2ExceptionHandler' instruction */
   data = (u32) level2ExceptionHandler & 0xFFFFFFF;
   data = 0x8000000 | (data >> 2);
   _sw(data, 0x80000100);
   _sw(0, 0x80000104);
  FlushCache(0);

}
    .global _level2SavedRegs
    .global _level2ExceptionStack
       
    .global level2ExceptionHandler
    .ent   level2ExceptionHandler

level2ExceptionHandler:

   sq   $k0, -0x20($0)
   la   $k0, _level2SavedRegs
   #lui   k1, 0x8000
   #   or   $k0, $k0, k1

    sq      $0,  0x00($k0)
    sq      $1,  0x10($k0)
    sq      $2,  0x20($k0)
    sq      $3,  0x30($k0)
    sq      $4,  0x40($k0)
    sq      $5,  0x50($k0)
    sq      $6,  0x60($k0)
    sq      $7,  0x70($k0)
    sq      $8,  0x80($k0)
    sq      $9,  0x90($k0)
    sq      $10,  0xa0($k0)
    sq      $11,  0xb0($k0)
    sq      $12,  0xc0($k0)
    sq      $13,  0xd0($k0)
    sq      $14,  0xe0($k0)
    sq      $15,  0xf0($k0)
    sq      $16,  0x100($k0)
    sq      $17,  0x110($k0)
    sq      $18,  0x120($k0)
    sq      $19,  0x130($k0)
    sq      $20,  0x140($k0)
    sq      $21,  0x150($k0)
    sq      $22,  0x160($k0)
    sq      $23,  0x170($k0)
    sq      $24,  0x180($k0)
    sq      $25,  0x190($k0)
   # Restore $k0 and save
    lq      $1, -0x20($0)
    sq      $1, 0x1a0($k0)         # zero instead of $k0
    sq      $27,  0x1b0($k0)          # $k1
    sq      $28,  0x1c0($k0)
    sq      $29,  0x1d0($k0)          # $sp
    sq      $30,  0x1e0($k0)
    sq      $31,  0x1f0($k0)          # $ra

   
    # Return from exception and start 'debugger'
    #jal      sio_shell_level2
    # nop

    la      $k0, _level2SavedRegs
             

    lq      $0,  0x00($k0)
    lq      $1,  0x10($k0)
    lq      $2,  0x20($k0)
    lq      $3,  0x30($k0)
    lq      $4,  0x40($k0)
    lq      $5,  0x50($k0)
    lq      $6,  0x60($k0)
    lq      $7,  0x70($k0)
    lq      $8,  0x80($k0)
    lq      $9,  0x90($k0)
    lq      $10,  0xa0($k0)
    lq      $11,  0xb0($k0)
    lq      $12,  0xc0($k0)
    lq      $13,  0xd0($k0)
    lq      $14,  0xe0($k0)
    lq      $15,  0xf0($k0)
    lq      $16,  0x100($k0)
    lq      $17,  0x110($k0)
    lq      $18,  0x120($k0)
    lq      $19,  0x130($k0)
    lq      $20,  0x140($k0)
    lq      $21,  0x150($k0)
    lq      $22,  0x160($k0)
    lq      $23,  0x170($k0)
    lq      $24,  0x180($k0)
    lq      $25,  0x190($k0)
   # no $k0
    lq      $27,  0x1b0($k0)          # $k1
    lq      $28,  0x1c0($k0)
    lq      $29,  0x1d0($k0)          # $sp
    lq      $30,  0x1e0($k0)
    lq      $31,  0x1f0($k0)          # $ra

    lq      $k0, -0x20($0)

    sync
    eret   
    nop
    jr      $ra
    nop

    .end   level2ExceptionHandler
   
    .bss
        .align  4
        .ent   _level2SavedRegs
_level2SavedRegs:
        .space  0x240, 0
        .end   _level2SavedRegs

u32 test;
u32 memory_location = 0x0;
int main(void)
{
   
   SifInitRpc(0);

   init_scr();
   ee_kmode_enter();
   install_debug_handler();
   ee_kmode_exit();
   scr_printf("         Handler on\n");

   InitBPC();
   scr_printf("         BPC on\n");
   SetDataAddrBP(&test, 0xfffffffc,BPC_DWE | BPC_DUE | BPC_BED);
   scr_printf("         BP SET on\n");
   scr_printf("         test = %8.8x\n",test);
   scr_printf("         Done\n");
   test++;
   scr_printf("         test = %0x\n",test);
   scr_printf("         memory_location = %8.8x\n",memory_location);
   while(1)
   {

   }

   return 0;
}

once it has increased test by 1 it triggers the breakpoint i assume as everything just seems to freeze, it doesn't return back to execution and finish printing the new value to screen, which i thought it would do am i wrong? Its really bugging me because i have basically taken it straight from the sio shell.
In my level 1 handler i have to increase the EPC to the next address so the break doesn't happen again, am i supposed to do this with a level 2 exception as well?
Back to top
View user's profile Send private message
JorDy



Joined: 11 Dec 2005
Posts: 121

PostPosted: Sat Apr 21, 2007 12:54 am    Post subject: Reply with quote

any have any idea?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development All times are GMT + 10 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group