Fix RELOC_FOR_GLOBAL_SYMBOLS macro so that it can cope with user defined symbols...
[binutils-gdb.git] / bfd / corefile.c
blob9de1999ff77a9d78df1b4dcbb270debadc18eb0d
1 /* Core file generic interface routines for BFD.
2 Copyright (C) 1990-2024 Free Software Foundation, Inc.
3 Written by Cygnus Support.
5 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
23 SECTION
24 Core files
26 SUBSECTION
27 Core file functions
29 DESCRIPTION
30 These are functions pertaining to core files.
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
38 FUNCTION
39 bfd_core_file_failing_command
41 SYNOPSIS
42 const char *bfd_core_file_failing_command (bfd *abfd);
44 DESCRIPTION
45 Return a read-only string explaining which program was running
46 when it failed and produced the core file @var{abfd}.
50 const char *
51 bfd_core_file_failing_command (bfd *abfd)
53 if (abfd->format != bfd_core)
55 bfd_set_error (bfd_error_invalid_operation);
56 return NULL;
58 return BFD_SEND (abfd, _core_file_failing_command, (abfd));
62 FUNCTION
63 bfd_core_file_failing_signal
65 SYNOPSIS
66 int bfd_core_file_failing_signal (bfd *abfd);
68 DESCRIPTION
69 Returns the signal number which caused the core dump which
70 generated the file the BFD @var{abfd} is attached to.
73 int
74 bfd_core_file_failing_signal (bfd *abfd)
76 if (abfd->format != bfd_core)
78 bfd_set_error (bfd_error_invalid_operation);
79 return 0;
81 return BFD_SEND (abfd, _core_file_failing_signal, (abfd));
85 FUNCTION
86 bfd_core_file_pid
88 SYNOPSIS
89 int bfd_core_file_pid (bfd *abfd);
91 DESCRIPTION
93 Returns the PID of the process the core dump the BFD
94 @var{abfd} is attached to was generated from.
97 int
98 bfd_core_file_pid (bfd *abfd)
100 if (abfd->format != bfd_core)
102 bfd_set_error (bfd_error_invalid_operation);
103 return 0;
105 return BFD_SEND (abfd, _core_file_pid, (abfd));
110 FUNCTION
111 core_file_matches_executable_p
113 SYNOPSIS
114 bool core_file_matches_executable_p
115 (bfd *core_bfd, bfd *exec_bfd);
117 DESCRIPTION
118 Return <<TRUE>> 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}, <<FALSE>> otherwise.
123 bool
124 core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
126 if (core_bfd->format != bfd_core || exec_bfd->format != bfd_object)
128 bfd_set_error (bfd_error_wrong_format);
129 return false;
132 return BFD_SEND (core_bfd, _core_file_matches_executable_p,
133 (core_bfd, exec_bfd));
137 FUNCTION
138 generic_core_file_matches_executable_p
140 SYNOPSIS
141 bool generic_core_file_matches_executable_p
142 (bfd *core_bfd, bfd *exec_bfd);
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.
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.
157 bool
158 generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
160 const char *exec;
161 const char *core;
162 const char *last_slash;
164 if (exec_bfd == NULL || core_bfd == NULL)
165 return true;
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. */
172 core = bfd_core_file_failing_command (core_bfd);
173 if (core == NULL)
174 return true;
176 exec = bfd_get_filename (exec_bfd);
177 if (exec == NULL)
178 return true;
180 last_slash = strrchr (core, '/');
181 if (last_slash != NULL)
182 core = last_slash + 1;
184 last_slash = strrchr (exec, '/');
185 if (last_slash != NULL)
186 exec = last_slash + 1;
188 return filename_cmp (exec, core) == 0;