Subversion Repositories Kolibri OS

Rev

Rev 5197 | Details | Compare with Previous | Last modification | View Log | RSS feed

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