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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [sim/] [rx/] [err.c] - Blame information for rev 307

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
/* err.c --- handle errors for RX simulator.
2
 
3
Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
4
Contributed by Red Hat, Inc.
5
 
6
This file is part of the GNU simulators.
7
 
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 3 of the License, or
11
(at your option) any later version.
12
 
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
#include <stdio.h>
22
#include <stdlib.h>
23
 
24
#include "err.h"
25
 
26
static unsigned char ee_actions[SIM_ERR_NUM_ERRORS];
27
 
28
static enum execution_error last_error;
29
 
30
static void
31
ee_overrides ()
32
{
33
  /* GCC may initialize a bitfield by reading the uninitialized byte,
34
     masking in the bitfield, and writing the byte back out.  */
35
  ee_actions[SIM_ERR_READ_UNWRITTEN_BYTES] = SIM_ERRACTION_IGNORE;
36
  /* This breaks stack unwinding for exceptions because it leaves
37
     MC_PUSHED_PC tags in the unwound stack frames.  */
38
  ee_actions[SIM_ERR_CORRUPT_STACK] = SIM_ERRACTION_IGNORE;
39
}
40
 
41
void
42
execution_error_init_standalone (void)
43
{
44
  int i;
45
 
46
  for (i = 0; i < SIM_ERR_NUM_ERRORS; i++)
47
    ee_actions[i] = SIM_ERRACTION_EXIT;
48
 
49
  ee_overrides ();
50
}
51
 
52
void
53
execution_error_init_debugger (void)
54
{
55
  int i;
56
 
57
  for (i = 0; i < SIM_ERR_NUM_ERRORS; i++)
58
    ee_actions[i] = SIM_ERRACTION_DEBUG;
59
 
60
  ee_overrides ();
61
}
62
 
63
void
64
execution_error_exit_all (void)
65
{
66
  int i;
67
 
68
  for (i = 0; i < SIM_ERR_NUM_ERRORS; i++)
69
    ee_actions[i] = SIM_ERRACTION_EXIT;
70
}
71
 
72
void
73
execution_error_warn_all (void)
74
{
75
  int i;
76
 
77
  for (i = 0; i < SIM_ERR_NUM_ERRORS; i++)
78
    ee_actions[i] = SIM_ERRACTION_WARN;
79
}
80
 
81
void
82
execution_error_ignore_all (void)
83
{
84
  int i;
85
 
86
  for (i = 0; i < SIM_ERR_NUM_ERRORS; i++)
87
    ee_actions[i] = SIM_ERRACTION_IGNORE;
88
}
89
 
90
void
91
execution_error (enum execution_error num, unsigned long address)
92
{
93
  if (ee_actions[num] != SIM_ERRACTION_IGNORE)
94
    last_error = num;
95
 
96
  if (ee_actions[num] == SIM_ERRACTION_EXIT
97
      || ee_actions[num] == SIM_ERRACTION_WARN)
98
    {
99
      switch (num)
100
        {
101
        case SIM_ERR_READ_UNWRITTEN_PAGES:
102
        case SIM_ERR_READ_UNWRITTEN_BYTES:
103
          printf("Read from unwritten memory at 0x%lx\n", address);
104
          break;
105
 
106
        case SIM_ERR_NULL_POINTER_DEREFERENCE:
107
          printf ("NULL pointer dereference\n");
108
          break;
109
 
110
        case SIM_ERR_CORRUPT_STACK:
111
          printf ("Stack corruption detected at 0x%lx\n", address);
112
          break;
113
 
114
        default:
115
          printf ("Unknown execution error %d\n", num);
116
          exit (1);
117
        }
118
    }
119
 
120
  if (ee_actions[num] == SIM_ERRACTION_EXIT)
121
    exit (1);
122
}
123
 
124
enum execution_error
125
execution_error_get_last_error (void)
126
{
127
  return last_error;
128
}
129
 
130
void
131
execution_error_clear_last_error (void)
132
{
133
  last_error = SIM_ERR_NONE;
134
}
135
 
136
void
137
execution_error_set_action (enum execution_error num, enum execution_error_action act)
138
{
139
  ee_actions[num] = act;
140
}

powered by: WebSVN 2.1.0

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