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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [corefile.c] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 khays
/* Core file generic interface routines for BFD.
2
   Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2005,
3
   2007 Free Software Foundation, Inc.
4
   Written by Cygnus Support.
5
 
6
   This file is part of BFD, the Binary File Descriptor library.
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, write to the Free Software
20
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21
   MA 02110-1301, USA.  */
22
 
23
/*
24
SECTION
25
        Core files
26
 
27
SUBSECTION
28
        Core file functions
29
 
30
DESCRIPTION
31
        These are functions pertaining to core files.
32
*/
33
 
34
#include "sysdep.h"
35
#include "bfd.h"
36
#include "libbfd.h"
37
 
38
/*
39
FUNCTION
40
        bfd_core_file_failing_command
41
 
42
SYNOPSIS
43
        const char *bfd_core_file_failing_command (bfd *abfd);
44
 
45
DESCRIPTION
46
        Return a read-only string explaining which program was running
47
        when it failed and produced the core file @var{abfd}.
48
 
49
*/
50
 
51
const char *
52
bfd_core_file_failing_command (bfd *abfd)
53
{
54
  if (abfd->format != bfd_core)
55
    {
56
      bfd_set_error (bfd_error_invalid_operation);
57
      return NULL;
58
    }
59
  return BFD_SEND (abfd, _core_file_failing_command, (abfd));
60
}
61
 
62
/*
63
FUNCTION
64
        bfd_core_file_failing_signal
65
 
66
SYNOPSIS
67
        int bfd_core_file_failing_signal (bfd *abfd);
68
 
69
DESCRIPTION
70
        Returns the signal number which caused the core dump which
71
        generated the file the BFD @var{abfd} is attached to.
72
*/
73
 
74
int
75
bfd_core_file_failing_signal (bfd *abfd)
76
{
77
  if (abfd->format != bfd_core)
78
    {
79
      bfd_set_error (bfd_error_invalid_operation);
80
      return 0;
81
    }
82
  return BFD_SEND (abfd, _core_file_failing_signal, (abfd));
83
}
84
 
85
/*
86
FUNCTION
87
        bfd_core_file_pid
88
 
89
SYNOPSIS
90
        int bfd_core_file_pid (bfd *abfd);
91
 
92
DESCRIPTION
93
 
94
        Returns the PID of the process the core dump the BFD
95
        @var{abfd} is attached to was generated from.
96
*/
97
 
98
int
99
bfd_core_file_pid (bfd *abfd)
100
{
101
  if (abfd->format != bfd_core)
102
    {
103
      bfd_set_error (bfd_error_invalid_operation);
104
      return 0;
105
    }
106
  return BFD_SEND (abfd, _core_file_pid, (abfd));
107
}
108
 
109
 
110
/*
111
FUNCTION
112
        core_file_matches_executable_p
113
 
114
SYNOPSIS
115
        bfd_boolean core_file_matches_executable_p
116
          (bfd *core_bfd, bfd *exec_bfd);
117
 
118
DESCRIPTION
119
        Return <<TRUE>> if the core file attached to @var{core_bfd}
120
        was generated by a run of the executable file attached to
121
        @var{exec_bfd}, <<FALSE>> otherwise.
122
*/
123
 
124
bfd_boolean
125
core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
126
{
127
  if (core_bfd->format != bfd_core || exec_bfd->format != bfd_object)
128
    {
129
      bfd_set_error (bfd_error_wrong_format);
130
      return FALSE;
131
    }
132
 
133
  return BFD_SEND (core_bfd, _core_file_matches_executable_p,
134
                   (core_bfd, exec_bfd));
135
}
136
 
137
/*
138
FUNCTION
139
        generic_core_file_matches_executable_p
140
 
141
SYNOPSIS
142
        bfd_boolean generic_core_file_matches_executable_p
143
          (bfd *core_bfd, bfd *exec_bfd);
144
 
145
DESCRIPTION
146
        Return TRUE if the core file attached to @var{core_bfd}
147
        was generated by a run of the executable file attached
148
        to @var{exec_bfd}.  The match is based on executable
149
        basenames only.
150
 
151
        Note: When not able to determine the core file failing
152
        command or the executable name, we still return TRUE even
153
        though we're not sure that core file and executable match.
154
        This is to avoid generating a false warning in situations
155
        where we really don't know whether they match or not.
156
*/
157
 
158
bfd_boolean
159
generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
160
{
161
  char *exec;
162
  char *core;
163
  char *last_slash;
164
 
165
  if (exec_bfd == NULL || core_bfd == NULL)
166
    return TRUE;
167
 
168
  /* The cast below is to avoid a compiler warning due to the assignment
169
     of the const char * returned by bfd_core_file_failing_command to a
170
     non-const char *.  In this case, the assignement does not lead to
171
     breaking the const, as we're only reading the string.  */
172
 
173
  core = (char *) bfd_core_file_failing_command (core_bfd);
174
  if (core == NULL)
175
    return TRUE;
176
 
177
  exec = bfd_get_filename (exec_bfd);
178
  if (exec == NULL)
179
    return TRUE;
180
 
181
  last_slash = strrchr (core, '/');
182
  if (last_slash != NULL)
183
    core = last_slash + 1;
184
 
185
  last_slash = strrchr (exec, '/');
186
  if (last_slash != NULL)
187
    exec = last_slash + 1;
188
 
189
  return filename_cmp (exec, core) == 0;
190
}
191
 

powered by: WebSVN 2.1.0

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