[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bochs-cvs
Subject:    [Bochs-cvs] CVS: bochs gdbstub.cc,1.21,1.22
From:       Stanislav Shwartsman <sshwarts () users ! sourceforge ! net>
Date:       2006-06-17 12:09:57
Message-ID: E1FrZcj-0002pG-60 () sc8-pr-cvs3 ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/bochs/bochs
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv10453

Modified Files:
	gdbstub.cc 
Log Message:
Move paddr_valid param of dbg_xlate_linear2phy method to return value.
This is much easier to use.



Index: gdbstub.cc
===================================================================
RCS file: /cvsroot/bochs/bochs/gdbstub.cc,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- gdbstub.cc	30 May 2006 19:46:31 -0000	1.21
+++ gdbstub.cc	17 Jun 2006 12:09:54 -0000	1.22
@@ -63,24 +63,23 @@
    
    BX_DEBUG (("put_buffer %s", buffer));
    
-   do
-     { 
+   do { 
        put_debug_char('$');
        
        csum = 0;
        
        i = 0;
        while (buffer[i] != 0)
-         {
+       {
             put_debug_char(buffer[i]);
             csum = csum + buffer[i];
             i++;
-         }
+       }
        
        put_debug_char('#');
        put_debug_char(hexchars[csum >> 4]);
        put_debug_char(hexchars[csum % 16]);
-     } while (get_debug_char() != '+');
+   } while (get_debug_char() != '+');
 }
 
 static void get_command(char* buffer)
@@ -91,8 +90,7 @@
    unsigned int count;
    unsigned int i;
    
-   do
-     {
+   do{
        while ((ch = get_debug_char()) != '$');
        
        checksum = 0;
@@ -100,44 +98,44 @@
        count = 0;
    
        while (1)
-         {
+       {
             ch = get_debug_char();
             if (ch == '#') break;
             checksum = checksum + ch;
             buffer[count] = ch;
             count++;
-         }
+       }
        buffer[count] = 0;
        
        if (ch == '#')
-         {
+       {
             xmitcsum = hex(get_debug_char()) << 4;
             xmitcsum += hex(get_debug_char());
             if (checksum != xmitcsum)
-              {
-                 BX_INFO (("Bad checksum"));
-              }
-         }
+            {
+                 BX_INFO(("Bad checksum"));
+            }
+       }
        
        if (checksum != xmitcsum)
-         {
+       {
             put_debug_char('-');
-         }
+       }
        else
-         {
+       {
             put_debug_char('+');
             if (buffer[2] == ':')
-              {
+            {
                  put_debug_char(buffer[0]);
                  put_debug_char(buffer[1]);
                  count = strlen(buffer);
                  for (i = 3; i <= count; i++)
-                   {
+                 {
                       buffer[i - 3] = buffer[i];
-                   }
-              }
-         }
-     } while (checksum != xmitcsum);   
+                 }
+            }
+       }
+   } while (checksum != xmitcsum);   
 }
 
 void hex2mem(char* buf, unsigned char* mem, int count)
@@ -146,12 +144,12 @@
    unsigned char ch;
    
    for (i = 0; i<count; i++)
-     {
+   {
        ch = hex(*buf++) << 4;
        ch = ch + hex(*buf++);
        *mem = ch;
        mem++;
-     }
+   }
 }
 
 char* mem2hex(char* mem, char* buf, int count)
@@ -160,14 +158,14 @@
    unsigned char ch;
    
    for (i = 0; i<count; i++)
-     {
+   {
        ch = *mem;
        mem++;
        *buf = hexchars[ch >> 4];
        buf++;
        *buf = hexchars[ch % 16];
        buf++;  
-     }
+   }
    *buf = 0;
    return(buf);
 }
@@ -211,9 +209,7 @@
 static unsigned int nr_breakpoints = 0;
 
 static int stub_trace_flag = 0;
-
 static int instr_count = 0;
-
 static int saved_eip = 0;
 
 int bx_gdbstub_check(unsigned int eip)
@@ -230,7 +226,7 @@
    instr_count++;
    
    if ((instr_count % 500) == 0)
-     {
+   {
 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
        arg = fcntl(socket_fd, F_GETFL);
        fcntl(socket_fd, F_SETFL, arg | O_NONBLOCK);
@@ -239,36 +235,36 @@
 #else
        FD_ZERO(&fds);
        FD_SET(socket_fd, &fds);
-        r = select(socket_fd + 1, &fds, NULL, NULL, &tv);
+       r = select(socket_fd + 1, &fds, NULL, NULL, &tv);
        if (r == 1)
-         {
+       {
            r = recv(socket_fd, (char *)&ch, 1, 0);
-         }
+       }
 #endif   
        if (r == 1)
-         {
-            BX_INFO (("Got byte %x", (unsigned int)ch));
+       {
+            BX_INFO(("Got byte %x", (unsigned int)ch));
             last_stop_reason = GDBSTUB_USER_BREAK;
             return(GDBSTUB_USER_BREAK);
-         }
-     }
+       }
+   }
    
    // why is trace before breakpoints? does that mean it would never
    // hit a breakpoint during tracing?
    if (stub_trace_flag == 1)
-     {
+   {
        last_stop_reason = GDBSTUB_TRACE;
        return(GDBSTUB_TRACE);
-     }
+   }
    for (i = 0; i < nr_breakpoints; i++)
-     {
+   {
        if (eip == breakpoints[i])
-         {
-            BX_INFO (("found breakpoint at %x", eip));
+       {
+            BX_INFO(("found breakpoint at %x", eip));
             last_stop_reason = GDBSTUB_EXECUTION_BREAKPOINT;
             return(GDBSTUB_EXECUTION_BREAKPOINT);
-         }
-     }
+       }
+   }
    last_stop_reason = GDBSTUB_STOP_NO_REASON;
    return(GDBSTUB_STOP_NO_REASON);
 }
@@ -278,19 +274,19 @@
    unsigned int i;
    
    if (len != 1)
-     {
+   {
        return(0);
-     }
+   }
    
    for (i = 0; i < MAX_BREAKPOINTS; i++)
-     {
+   {
        if (breakpoints[i] == addr)
-         {
-            BX_INFO (("Removing breakpoint at %x", addr));
+       {
+            BX_INFO(("Removing breakpoint at %x", addr));
             breakpoints[i] = 0;
             return(1);
-         }
-     }
+       }
+   }
    return(0);
 }
 
@@ -298,21 +294,21 @@
 {
    unsigned int i;
    
-   BX_INFO (("setting breakpoint at %x", addr));
+   BX_INFO(("setting breakpoint at %x", addr));
    
    for (i = 0; i < (unsigned)MAX_BREAKPOINTS; i++)
-     {
+   {
        if (breakpoints[i] == 0)
-         {
+       {
             breakpoints[i] = addr;
             if (i >= nr_breakpoints)
-              {
+            {
                  nr_breakpoints = i + 1;
-              }
+            }
             return;
-         }
-     }
-   BX_INFO (("No slot for breakpoint"));
+       }
+   }
+   BX_INFO(("No slot for breakpoint"));
 }
 
 static void do_pc_breakpoint(int insert, unsigned long long addr, int len)
@@ -354,43 +350,40 @@
                         unsigned int rw,
                         Bit8u* data)
 {
-  Bit32u phys;
-  bx_bool valid;
-   
+   bx_phy_address phys;
+    
    if (((laddress & 0xfff) + len) > 4096)
-     {
+   {
        valid = access_linear(laddress,
                              4096 - (laddress & 0xfff),
                              rw,
                              data);
        if (!valid)
-         {
+       {
             return(valid);
-         }
+       }
        valid = access_linear(laddress,
                              len + (laddress & 0xfff) - 4096,
                              rw,
                              (Bit8u *)((unsigned long)data + 
                                       4096 - (laddress & 0xfff)));
        return(valid);
-     }
+   }
    
-   BX_CPU(0)->dbg_xlate_linear2phy(laddress, 
-                                       (Bit32u*)&phys, 
-                                       (bx_bool*)&valid);
+   bx_bool valid = BX_CPU(0)->dbg_xlate_linear2phy(laddress, (bx_phy_address*)&phys);
    if (!valid)
-     {
+   {
        return(0);
-     }
+   }
    
    if (rw == BX_READ)
-     {
+   {
        valid = BX_MEM(0)->dbg_fetch_mem(phys, len, data);
-     }
+   }
    else
-     {
+   {
        valid = BX_MEM(0)->dbg_set_mem(phys, len, data);
-     }
+   }
    return(valid);
 }
 
@@ -404,22 +397,22 @@
    ne = 0;
    
    while (ne == 0)
-     {
+   {
        get_command(buffer);
        BX_DEBUG (("get_buffer %s", buffer));
        
        switch (buffer[0])
-         {
+       {
           case 'c':
               {
                  char buf[255];
                  int new_eip;
                  
                  if (buffer[1] != 0)
-                   {
+                 {
                       new_eip = atoi(buffer + 1);
                       
-                      BX_INFO (("continuing at %x", new_eip));
+                      BX_INFO(("continuing at %x", new_eip));
                       
 		      for (int i=0; i<BX_SMP_PROCESSORS; i++) {
                         BX_CPU(i)->invalidate_prefetch_q();
@@ -428,7 +421,7 @@
                       saved_eip = EIP;
                       
                       BX_CPU(0)->dword.eip = new_eip;
-                   }
+                 }
                  
                  stub_trace_flag = 0;
                  bx_cpu.ispanic = 0;
@@ -441,23 +434,22 @@
                  DEV_vga_refresh();
                  
                  if (buffer[1] != 0)
-                   {
+                 {
                       bx_cpu.invalidate_prefetch_q();
-                      
                       BX_CPU_THIS_PTR dword.eip = saved_eip;
-                   }
+                 }
                  
-                 BX_INFO (("stopped with %x", last_stop_reason));                               
+                 BX_INFO(("stopped with %x", last_stop_reason));                               
                  buf[0] = 'S';
                  if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT ||
                      last_stop_reason == GDBSTUB_TRACE)
-                   {
+                 {
                       write_signal(&buf[1], SIGTRAP);
-                   }
+                 }
                  else
-                   {
+                 {
                       write_signal(&buf[1], 0);
-                   }
+                 }
                  put_reply(buf);
                  break;
               }
@@ -466,22 +458,22 @@
               {
                  char buf[255];
                  
-                 BX_INFO (("stepping"));
+                 BX_INFO(("stepping"));
                  stub_trace_flag = 1;
                  bx_cpu.cpu_loop(0);
                  DEV_vga_refresh();
                  stub_trace_flag = 0;
-                 BX_INFO (("stopped with %x", last_stop_reason));
+                 BX_INFO(("stopped with %x", last_stop_reason));
                  buf[0] = 'S';
                  if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT ||
                      last_stop_reason == GDBSTUB_TRACE)
-                   {
+                 {
                       write_signal(&buf[1], SIGTRAP);
-                   }
+                 }
                  else
-                   {
+                 {
                       write_signal(&buf[1], SIGTRAP);
-                   }
+                 }
                  put_reply(buf);
                  break;
               }
@@ -498,28 +490,28 @@
                  hex2mem(ebuf + 1, mem, len);          
                  
                  if (len == 1 && mem[0] == 0xcc)
-                   {
+                 {
                       insert_breakpoint(addr);
                       put_reply("OK");
-                   }
+                 }
                  else if (remove_breakpoint(addr, len))
-                   {
+                 {
                       put_reply("OK");
-                   }
+                 }
                  else
-                   {
+                 {
                       if (access_linear(addr,
                                         len,
                                         BX_WRITE,
                                         mem))
-                        {
+                      {
                            put_reply("OK");
-                        }
+                      }
                       else
-                        {
+                      {
                            put_reply("ENN");
-                        }
-                   }
+                      }
+                 }
                  break;                    
               }
             
@@ -531,7 +523,7 @@
                  
                  addr = strtoull(&buffer[1], &ebuf, 16);
                  len = strtoul(ebuf + 1, NULL, 16);
-                 BX_INFO (("addr %x len %x", addr, len));
+                 BX_INFO(("addr %x len %x", addr, len));
                  
                  access_linear(addr,
                                len,
@@ -551,10 +543,10 @@
 		 ++ebuf;
                  value = read_little_endian_hex(ebuf);
                  
-                 BX_INFO (("reg %d set to %llx", reg, value));
+                 BX_INFO(("reg %d set to %llx", reg, value));
 #if !BX_SUPPORT_X86_64                 
                  switch (reg)
-                   {
+                 {
                     case 1:
                       EAX = value;
                       break;
@@ -590,10 +582,10 @@
                       
                     default:
                       break;
-                   }
+                 }
 #else
                  switch (reg)
-                   {
+                 {
                     case 0:
                       RAX = value;
                       break;
@@ -665,7 +657,7 @@
                       
                     default:
                       break;
-                   }
+                 }
 #endif                 
                  put_reply("OK");
                  
@@ -683,13 +675,13 @@
             registers[6] = ESI;
             registers[7] = EDI;
             if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
-              {
+            {
                  registers[8] = EIP + 1;
-              }
+            }
             else
-              {
+            {
                  registers[8] = EIP;
-              }
+            }
             registers[9] = BX_CPU_THIS_PTR read_eflags();
             registers[10] = 
               BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
@@ -730,9 +722,9 @@
 	    Bit64u rip;
 	    rip = RIP;
             if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
-              {
+            {
 		++rip;
-              }
+            }
             PUTREG(buf, rip, 8);
 	    PUTREG(buf, BX_CPU_THIS_PTR read_eflags(), 4);
             PUTREG(buf, BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, 4);
@@ -752,40 +744,39 @@
             
           case 'H':
             if (buffer[1] == 'c')
-              {
+            {
                  continue_thread = strtol(&buffer[2], NULL, 16);
                  put_reply("OK");
-              }
+            }
             else if (buffer[1] == 'g')
-              {
+            {
                  other_thread = strtol(&buffer[2], NULL, 16);
                  put_reply("OK");
-              }
+            }
             else
-              {
+            {
                  put_reply("ENN");
-              }
+            }
             break;
             
           case 'q':
             if (buffer[1] == 'C')
-              {
+            {
                  sprintf(obuf,"%Lx", 1);
                  put_reply(obuf);
-              }
+            }
             else if (strncmp(&buffer[1], "Offsets", strlen("Offsets")) == 0)
-              {
+            {
                  sprintf(obuf,
                          "Text=%x;Data=%x;Bss=%x",
                          SIM->get_param_num("text_base", gdbstub_list)->get(),
                          SIM->get_param_num("data_base", gdbstub_list)->get(),
                          SIM->get_param_num("bss_base", gdbstub_list)->get());
                  put_reply(obuf);
-              }
-            else
-              {
+            }
+            else {
                  put_reply("ENN");
-              }          
+            }          
             break;
 
 	  case 'Z':
@@ -795,14 +786,14 @@
 	    do_breakpoint(0, buffer+1);
 	    break;
           case 'k':
-            BX_PANIC (("Debugger asked us to quit\n"));
+            BX_PANIC(("Debugger asked us to quit\n"));
             break;
             
           default:
             put_reply("");
             break;
-         }
-     }
+       }
+   }
 }
 
 static void wait_for_connect(int portn)
@@ -815,10 +806,10 @@
    
    listen_socket_fd = socket(PF_INET, SOCK_STREAM, 0);
    if (listen_socket_fd == -1)
-     {
-       BX_PANIC (("Failed to create socket\n"));
+   {
+       BX_PANIC(("Failed to create socket\n"));
        exit(1);
-     }
+   }
    
    /* Allow rapid reuse of this port */
    opt = 1;
@@ -828,9 +819,9 @@
    r = setsockopt(listen_socket_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
 #endif
    if (r == -1)
-     {
-       BX_INFO (("setsockopt(SO_REUSEADDR) failed\n"));
-     }
+   {
+       BX_INFO(("setsockopt(SO_REUSEADDR) failed\n"));
+   }
    
    memset (&sockaddr, '\000', sizeof sockaddr);
 #if BX_HAVE_SOCKADDR_IN_SIN_LEN
@@ -844,30 +835,30 @@
 
    r = bind(listen_socket_fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
    if (r == -1)
-     {
-       BX_PANIC (("Failed to bind socket\n"));
-     }
+   {
+       BX_PANIC(("Failed to bind socket\n"));
+   }
 
    r = listen(listen_socket_fd, 0);
    if (r == -1)
-     {
-       BX_PANIC (("Failed to listen on socket\n"));
-     }
+   {
+       BX_PANIC(("Failed to listen on socket\n"));
+   }
    
    sockaddr_len = sizeof sockaddr;
    socket_fd = accept(listen_socket_fd, (struct sockaddr *)&sockaddr, &sockaddr_len);
    if (socket_fd == -1)
-     {
-       BX_PANIC (("Failed to accept on socket\n"));
-     }
+   {
+       BX_PANIC(("Failed to accept on socket\n"));
+   }
    close(listen_socket_fd);
    
    protoent = getprotobyname ("tcp");
    if (!protoent)
-     {
-       BX_INFO (("getprotobyname (\"tcp\") failed\n"));
+   {
+       BX_INFO(("getprotobyname (\"tcp\") failed\n"));
        return;
-     }
+   }
 
    /* Disable Nagle - allow small packets to be sent without delay. */
    opt = 1;
@@ -877,9 +868,9 @@
    r = setsockopt (socket_fd, protoent->p_proto, TCP_NODELAY, &opt, sizeof(opt));
 #endif
    if (r == -1)
-     {
-       BX_INFO (("setsockopt(TCP_NODELAY) failed\n"));
-     }
+   {
+       BX_INFO(("setsockopt(TCP_NODELAY) failed\n"));
+   }
 }
 
 void bx_gdbstub_init(int argc, char* argv[])



_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic