OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [gdbserver/] [target.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Target operations for the remote server for GDB.
2
   Copyright 2002
3
   Free Software Foundation, Inc.
4
 
5
   Contributed by MontaVista Software.
6
 
7
   This file is part of GDB.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 2 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program; if not, write to the Free Software
21
   Foundation, Inc., 59 Temple Place - Suite 330,
22
   Boston, MA 02111-1307, USA.  */
23
 
24
#include "server.h"
25
 
26
struct target_ops *the_target;
27
 
28
void
29
set_desired_inferior (int use_general)
30
{
31
  struct thread_info *found;
32
 
33
  if (use_general == 1)
34
    {
35
      found = (struct thread_info *) find_inferior_id (&all_threads,
36
                                                       general_thread);
37
    }
38
  else
39
    {
40
      found = NULL;
41
 
42
      /* If we are continuing any (all) thread(s), use step_thread
43
         to decide which thread to step and/or send the specified
44
         signal to.  */
45
      if (step_thread > 0 && (cont_thread == 0 || cont_thread == -1))
46
        found = (struct thread_info *) find_inferior_id (&all_threads,
47
                                                         step_thread);
48
 
49
      if (found == NULL)
50
        found = (struct thread_info *) find_inferior_id (&all_threads,
51
                                                         cont_thread);
52
    }
53
 
54
  if (found == NULL)
55
    current_inferior = (struct thread_info *) all_threads.head;
56
  else
57
    current_inferior = found;
58
}
59
 
60
void
61
read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len)
62
{
63
  (*the_target->read_memory) (memaddr, myaddr, len);
64
  check_mem_read (memaddr, myaddr, len);
65
}
66
 
67
int
68
write_inferior_memory (CORE_ADDR memaddr, const char *myaddr, int len)
69
{
70
  /* Lacking cleanups, there is some potential for a memory leak if the
71
     write fails and we go through error().  Make sure that no more than
72
     one buffer is ever pending by making BUFFER static.  */
73
  static char *buffer = 0;
74
  int res;
75
 
76
  if (buffer != NULL)
77
    free (buffer);
78
 
79
  buffer = malloc (len);
80
  memcpy (buffer, myaddr, len);
81
  check_mem_write (memaddr, buffer, len);
82
  res = (*the_target->write_memory) (memaddr, buffer, len);
83
  free (buffer);
84
  buffer = NULL;
85
 
86
  return res;
87
}
88
 
89
unsigned char
90
mywait (char *statusp, int connected_wait)
91
{
92
  unsigned char ret;
93
 
94
  if (connected_wait)
95
    server_waiting = 1;
96
 
97
  ret = (*the_target->wait) (statusp);
98
 
99
  if (connected_wait)
100
    server_waiting = 0;
101
 
102
  return ret;
103
}
104
 
105
void
106
set_target_ops (struct target_ops *target)
107
{
108
  the_target = (struct target_ops *) malloc (sizeof (*the_target));
109
  memcpy (the_target, target, sizeof (*the_target));
110
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.