libdw: Add new function dwarf_cu_getdwarf.

In both systemtap and libabigail there is a need to get the actual Dwarf
underlying an Dwarf_Die or Dwarf_Attribute. Following a DIE reference
might end up in an alternate Dwarf since the addition of DWZ multifile
forms. Both Dwarf_Die and Dwarf_Attribute already contain a Dwarf_CU
handle. Add a function dwarf_cu_getdwarf to retrieve the underlying
Dwarf using the Dwarf_CU.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
This commit is contained in:
Mark Wielaard
2014-08-15 13:08:24 +02:00
parent 9d29ed2989
commit 209f149fdc
7 changed files with 75 additions and 2 deletions
+4
View File
@@ -1,3 +1,7 @@
2014-08-15 Mark Wielaard <mjw@redhat.com>
* NEWS: Add dwarf_cu_getdwarf.
2014-07-18 Mark Wielaard <mjw@redhat.com>
* configure.ac (AC_CHECK_TYPE): Test for struct user_regs_struct.
+2
View File
@@ -1,5 +1,7 @@
Version 0.160
libdw: New function dwarf_cu_getdwarf.
unstrip: New option -F, --force to combining files even if some ELF headers
don't seem to match.
+8
View File
@@ -1,3 +1,11 @@
2014-08-15 Mark Wielaard <mjw@redhat.com>
* dwarf_cu_getdwarf.c: New file.
* Makefile.am (libdw_a_SOURCES): Add dwarf_cu_getdwarf.c.
* libdw.h (Dwarf_CU): New typedef.
(dwarf_cu_getdwarf): New function declaration.
* libdw.map (ELFUTILS_0.160): New. Add dwarf_cu_getdwarf.
2014-06-18 Mark Wielaard <mjw@redhat.com>
* dwarf.h: Remove DW_TAG_mutable_type.
+1 -1
View File
@@ -86,7 +86,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \
dwarf_getcfi.c dwarf_getcfi_elf.c dwarf_cfi_end.c \
dwarf_aggregate_size.c dwarf_getlocation_implicit_pointer.c \
dwarf_getlocation_die.c dwarf_getlocation_attr.c \
dwarf_getalt.c dwarf_setalt.c
dwarf_getalt.c dwarf_setalt.c dwarf_cu_getdwarf.c
if MAINTAINER_MODE
BUILT_SOURCES = $(srcdir)/known-dwarf.h
+47
View File
@@ -0,0 +1,47 @@
/* Retrieve Dwarf descriptor underlying a Dwarf_CU.
Copyright (C) 2014 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
it under the terms of either
* the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at
your option) any later version
or
* the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at
your option) any later version
or both in parallel, as here.
elfutils 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 copies of the GNU General Public License and
the GNU Lesser General Public License along with this program. If
not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stddef.h>
#include "libdwP.h"
Dwarf *
dwarf_cu_getdwarf (cu)
Dwarf_CU *cu;
{
if (cu == NULL)
/* Some error occurred before. */
return NULL;
return cu->dbg;
}
+8 -1
View File
@@ -1,5 +1,5 @@
/* Interfaces for libdw.
Copyright (C) 2002-2010, 2013 Red Hat, Inc.
Copyright (C) 2002-2010, 2013, 2014 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -112,6 +112,7 @@ typedef struct Dwarf_Aranges_s Dwarf_Aranges;
/* CU representation. */
struct Dwarf_CU;
typedef struct Dwarf_CU Dwarf_CU;
/* Macro information. */
typedef struct Dwarf_Macro_s Dwarf_Macro;
@@ -260,6 +261,12 @@ extern Dwarf *dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp);
/* Retrieve ELF descriptor used for DWARF access. */
extern Elf *dwarf_getelf (Dwarf *dwarf);
/* Retieve DWARF descriptor used for a Dwarf_Die or Dwarf_Attribute.
A Dwarf_Die or a Dwarf_Attribute is associated with a particular
Dwarf_CU handle. This function returns the DWARF descriptor for
that Dwarf_CU. */
extern Dwarf *dwarf_cu_getdwarf (Dwarf_CU *cu);
/* Retrieves the DWARF descriptor for debugaltlink data. Returns NULL
if no alternate debug data has been supplied. */
extern Dwarf *dwarf_getalt (Dwarf *main);
+5
View File
@@ -301,3 +301,8 @@ ELFUTILS_0.159 {
dwelf_elf_gnu_debuglink;
dwelf_elf_gnu_build_id;
} ELFUTILS_0.158;
ELFUTILS_0.160 {
global:
dwarf_cu_getdwarf;
} ELFUTILS_0.159;