⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 breakpoints.c

📁 eCos1.31版
💻 C
字号:
//==========================================================================////      breakpoints.c////      Support aribtrary set of breakpoints.////==========================================================================//####COPYRIGHTBEGIN####//                                                                          // -------------------------------------------                              // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in         // compliance with the License.  You may obtain a copy of the License at    // http://www.redhat.com/                                                   //                                                                          // Software distributed under the License is distributed on an "AS IS"      // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the // License for the specific language governing rights and limitations under // the License.                                                             //                                                                          // The Original Code is eCos - Embedded Configurable Operating System,      // released September 30, 1998.                                             //                                                                          // The Initial Developer of the Original Code is Red Hat.                   // Portions created by Red Hat are                                          // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             // All Rights Reserved.                                                     // -------------------------------------------                              //                                                                          //####COPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    // Contributors: gthomas// Date:         1999-10-20// Purpose:      // Description:  //               ////####DESCRIPTIONEND####////=========================================================================#include <stdlib.h>#ifdef HAVE_BSP#include <bsp/bsp.h>#include <bsp/cpu.h>#endif#include "monitor.h"#include "tservice.h"#include "stub-tservice.h"#include "fmt_util.h"static struct bp *last_bp_ptr;static struct bp *first_bp_ptr;#ifdef NO_MALLOCstatic struct bp *free_bp_list;static struct bp bp_list[MAX_NUM_BP];static int       curr_bp_num;#endifintadd_mon_breakpoint (mem_addr_t location){  struct bp *ptr;  struct bp *new_bp_ptr;  for (ptr = first_bp_ptr; ptr != NULL; ptr = ptr->next)    {      if (MEM_ADDR_EQ_P (ptr->address, location))	return 1;    }#ifdef NO_MALLOC  if (free_bp_list != NULL)    {      new_bp_ptr = free_bp_list;      free_bp_list = new_bp_ptr->next;    }  else    {      if (curr_bp_num < MAX_NUM_BP)	{	  new_bp_ptr = &bp_list[curr_bp_num++];	}      else	{	  xprintf ("No more breakpoints\n");	  return 1;	}    }#else  new_bp_ptr = (struct bp *)malloc (sizeof (struct bp));#endif  if (first_bp_ptr == NULL)    {      first_bp_ptr = new_bp_ptr;    }  else    {      last_bp_ptr->next = new_bp_ptr;    }  last_bp_ptr = new_bp_ptr;  last_bp_ptr->next = NULL;  last_bp_ptr->address = location;  last_bp_ptr->in_memory = 0;  return 0;}voidinstall_breakpoints (void){  struct bp *ptr = first_bp_ptr;  while (ptr != NULL)    {      set_breakpoint (ptr);      ptr = ptr->next;    }}voidclear_breakpoints (void){  struct bp *ptr = first_bp_ptr;  while (ptr != NULL)    {      clear_breakpoint (ptr);      ptr = ptr->next;    }}intshow_breakpoints (void){  struct bp *ptr;  for (ptr = first_bp_ptr; ptr != NULL; ptr = ptr->next)    {      char buf[20];      addr2str (&ptr->address, buf);      xprintf ("%s\n", buf);    }    return 0;}int clear_mon_breakpoint (mem_addr_t location){  int error = 0;  struct bp *ptr = first_bp_ptr;  struct bp *prev_ptr = NULL;  /* Scan the list looking for the address to clear */  while (ptr != NULL && !MEM_ADDR_EQ_P (ptr->address, location))    {      /* keep a pointer one behind the current position */      prev_ptr = ptr;      ptr = ptr->next;    }  if (ptr == NULL)    {      xprintf ("That address has no breakpoint on it.\n");      error = 1;    }  else    {      /* Just in case it's still in memory. */      clear_breakpoint (ptr);      /* now we'll point the previous bp->next at the one after the one 	 we're deleting, unless there is no previous bp. */      if (prev_ptr != NULL)	{	  prev_ptr->next = ptr->next;	}      if (first_bp_ptr == ptr)	first_bp_ptr = ptr->next;      if (last_bp_ptr == ptr)	last_bp_ptr = prev_ptr;      /* eliminate the offending bp struct */#ifdef NO_MALLOC      ptr->next = free_bp_list;      free_bp_list = ptr;#else      free (ptr);#endif    }  return error;}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -