Files
binutils-gdb/gdb/dwarf2/public.h
Guinevere Larsen 4b42385c47 gdb: Make dwarf support optional at compile time
This commit allows a user to enable or disable dwarf support at
compilation time. To do that, a new configure option is introduced, in
the form of --enable-gdb-dwarf-support (and the accompanying --disable
version). By default, dwarf support is enabled, so no behavior changes
occur if a user doesn't use the new feature. If support is disabled, no
.c files inside the dwarf2/ subfolder will be compiled into the final
binary.

To achieve this, this commit also introduces the new macro
DWARF_FORMAT_AVAILABLE, which guards the definitions of functions
exported from the dwarf reader. If the macro is not defined, there are a
couple behaviors that exported functions may have:
* no-ops: several functions are used to register things at
  initialization time, like unwinders. These are turned into no-ops
  because the user hasn't attempted to read DWARF yet, there's no point
  in warning that DWARF is unavailable.
* warnings: similar to the previous commit, if dwarf would be read or
  used, the funciton will emit the warning "No dwarf support available."
* throw exceptions: If the code that calls a function expects an
  exceptin in case of errors, and has a try-catch block, an error with
  the previous message is thrown.

I believe that the changed functions should probalby be moved to the
dwarf2/public.h header, but that require a much larger refactor, so it
is left as a future improvement.

Finally, the --enable-gdb-compile configure option has been slightly
changed, since compile requires dwarf support. If compile was requested
and dwarf was disabled, configure will throw an error. If the option was
not used, support will follow what was requested for dwarf (warning the
user of what is decided).

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
2025-06-03 13:36:32 -03:00

73 lines
2.1 KiB
C

/* Public API for gdb DWARF reader
Copyright (C) 2021-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_DWARF2_PUBLIC_H
#define GDB_DWARF2_PUBLIC_H
/* A DWARF names index variant. */
enum class dw_index_kind
{
/* GDB's own .gdb_index format. */
GDB_INDEX,
/* DWARF5 .debug_names. */
DEBUG_NAMES,
};
#if defined(DWARF_FORMAT_AVAILABLE)
/* Try to locate the sections we need for DWARF 2 debugging
information. If these are found, begin reading the DWARF and
return true. Otherwise, return false. NAMES points to the dwarf2
section names, or is NULL if the standard ELF names are used.
CAN_COPY is true for formats where symbol interposition is possible
and so symbol values must follow copy relocation rules. */
extern bool dwarf2_initialize_objfile
(struct objfile *,
const struct dwarf2_debug_sections * = nullptr,
bool = false);
extern void dwarf2_build_frame_info (struct objfile *);
/* Append the DWARF-2 frame unwinders to GDBARCH's list. */
void dwarf2_append_unwinders (struct gdbarch *gdbarch);
#else /* DWARF_FORMAT_AVAILABLE */
static inline bool
dwarf2_initialize_objfile (struct objfile *,
const struct dwarf2_debug_sections * = nullptr,
bool = false)
{
warning (_("No dwarf support available."));
return false;
}
static inline void
dwarf2_build_frame_info (struct objfile *)
{
warning (_("No dwarf support available."));
}
#endif /* DWARF_FORMAT_AVAILABLE */
#endif /* GDB_DWARF2_PUBLIC_H */