mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 04:24:43 +00:00
This updates the copyright headers to include 2025. I did this by running gdb/copyright.py and then manually modifying a few files as noted by the script. Approved-By: Eli Zaretskii <eliz@gnu.org>
109 lines
3.7 KiB
C++
109 lines
3.7 KiB
C++
/* build-id-related functions.
|
|
|
|
Copyright (C) 1991-2025 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef GDB_BUILD_ID_H
|
|
#define GDB_BUILD_ID_H
|
|
|
|
#include "gdb_bfd.h"
|
|
#include "gdbsupport/rsp-low.h"
|
|
|
|
/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */
|
|
|
|
extern const struct bfd_build_id *build_id_bfd_get (bfd *abfd);
|
|
|
|
/* Return true if ABFD has NT_GNU_BUILD_ID matching the CHECK value.
|
|
Otherwise, issue a warning and return false. */
|
|
|
|
extern int build_id_verify (bfd *abfd,
|
|
size_t check_len, const bfd_byte *check);
|
|
|
|
|
|
/* Find and open a BFD for a debuginfo file given a build-id. If no BFD
|
|
can be found, return NULL. */
|
|
|
|
extern gdb_bfd_ref_ptr build_id_to_debug_bfd (size_t build_id_len,
|
|
const bfd_byte *build_id);
|
|
|
|
/* Find the separate debug file for OBJFILE, by using the build-id
|
|
associated with OBJFILE's BFD. If successful, returns the file name for the
|
|
separate debug file, otherwise, return an empty string.
|
|
|
|
Any warnings that are generated by the lookup process should be added to
|
|
WARNINGS. If some other mechanism can be used to lookup the debug
|
|
information then the warning will not be shown, however, if GDB fails to
|
|
find suitable debug information using any approach, then any warnings
|
|
will be printed. */
|
|
|
|
extern std::string find_separate_debug_file_by_buildid
|
|
(struct objfile *objfile, deferred_warnings *warnings);
|
|
|
|
/* Find an objfile (executable or shared library) that matches BUILD_ID.
|
|
This is done by first checking in the debug-file-directory for a
|
|
suitable .build-id/ sub-directory, and looking for a file with the
|
|
required build-id (usually a symbolic link or hard link to the actual
|
|
file).
|
|
|
|
If that doesn't find us a file then we call to debuginfod to see if it
|
|
can provide the required file.
|
|
|
|
EXPECTED_FILENAME is used in output messages from debuginfod, this
|
|
should be the file we were looking for but couldn't find. */
|
|
|
|
extern gdb_bfd_ref_ptr find_objfile_by_build_id
|
|
(struct program_space *pspace, const bfd_build_id *build_id,
|
|
const char *expected_filename);
|
|
|
|
/* Return an hex-string representation of BUILD_ID. */
|
|
|
|
static inline std::string
|
|
build_id_to_string (const bfd_build_id *build_id)
|
|
{
|
|
gdb_assert (build_id != NULL);
|
|
|
|
return bin2hex (build_id->data, build_id->size);
|
|
}
|
|
|
|
/* Compare the content of two build-ids. One build-id (A) is passed as a
|
|
build-id pointer, while the second is passed using BUILD_ID_LEN and
|
|
BUILD_ID_DATA. Return true if the build-ids match, otherwise false. */
|
|
|
|
static inline bool
|
|
build_id_equal (const bfd_build_id *a, const bfd_size_type build_id_len,
|
|
const bfd_byte *build_id_data)
|
|
{
|
|
gdb_assert (a != nullptr);
|
|
gdb_assert (build_id_data != nullptr);
|
|
|
|
return (a->size == build_id_len
|
|
&& memcmp (a->data, build_id_data, a->size) == 0);
|
|
}
|
|
|
|
/* Like the above, but take two build-id pointers A and B. */
|
|
|
|
static inline bool
|
|
build_id_equal (const bfd_build_id *a, const bfd_build_id *b)
|
|
{
|
|
gdb_assert (a != nullptr);
|
|
gdb_assert (b != nullptr);
|
|
|
|
return build_id_equal (a, b->size, b->data);
|
|
}
|
|
|
|
#endif /* GDB_BUILD_ID_H */
|