1 /* Core file generic interface routines for BFD.
2 Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
4 Written by Cygnus Support.
6 This file is part of BFD, the Binary File Descriptor library.
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 2 of the License, or
11 (at your option) any later version.
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.
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, MA 02110-1301, USA. */
30 These are functions pertaining to core files.
39 bfd_core_file_failing_command
42 const char *bfd_core_file_failing_command (bfd *abfd);
45 Return a read-only string explaining which program was running
46 when it failed and produced the core file @var{abfd}.
51 bfd_core_file_failing_command (bfd *abfd)
53 if (abfd->format != bfd_core)
55 bfd_set_error (bfd_error_invalid_operation);
58 return BFD_SEND (abfd, _core_file_failing_command, (abfd));
63 bfd_core_file_failing_signal
66 int bfd_core_file_failing_signal (bfd *abfd);
69 Returns the signal number which caused the core dump which
70 generated the file the BFD @var{abfd} is attached to.
74 bfd_core_file_failing_signal (bfd *abfd)
76 if (abfd->format != bfd_core)
78 bfd_set_error (bfd_error_invalid_operation);
81 return BFD_SEND (abfd, _core_file_failing_signal, (abfd));
86 core_file_matches_executable_p
89 bfd_boolean core_file_matches_executable_p
90 (bfd *core_bfd, bfd *exec_bfd);
93 Return <<TRUE>> if the core file attached to @var{core_bfd}
94 was generated by a run of the executable file attached to
95 @var{exec_bfd}, <<FALSE>> otherwise.
99 core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
101 if (core_bfd->format != bfd_core || exec_bfd->format != bfd_object)
103 bfd_set_error (bfd_error_wrong_format);
107 return BFD_SEND (core_bfd, _core_file_matches_executable_p,
108 (core_bfd, exec_bfd));
113 generic_core_file_matches_executable_p
116 bfd_boolean generic_core_file_matches_executable_p
117 (bfd *core_bfd, bfd *exec_bfd)
120 Return TRUE if the core file attached to @var{core_bfd}
121 was generated by a run of the executable file attached
122 to @var{exec_bfd}. The match is based on executable
125 Note: When not able to determine the core file failing
126 command or the executable name, we still return TRUE even
127 though we're not sure that core file and executable match.
128 This is to avoid generating a false warning in situations
129 where we really don't know whether they match or not.
133 generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
139 if (exec_bfd == NULL || core_bfd == NULL)
142 /* The cast below is to avoid a compiler warning due to the assignment
143 of the const char * returned by bfd_core_file_failing_command to a
144 non-const char *. In this case, the assignement does not lead to
145 breaking the const, as we're only reading the string. */
147 core = (char *) bfd_core_file_failing_command (core_bfd);
151 exec = bfd_get_filename (exec_bfd);
155 last_slash = strrchr (core, '/');
156 if (last_slash != NULL)
157 core = last_slash + 1;
159 last_slash = strrchr (exec, '/');
160 if (last_slash != NULL)
161 exec = last_slash + 1;
163 return strcmp (exec, core) == 0;