#include "config.h"
#include <stdio.h>
#include "dwarf_incl.h"
#include "dwarf_error.h"
#include "dwarf_weaks.h"
#include "dwarf_global.h"
int
dwarf_get_weaks(Dwarf_Debug dbg,
Dwarf_Weak ** weaks,
Dwarf_Signed * ret_weak_count, Dwarf_Error * error)
{
int
res = _dwarf_load_section(dbg, &dbg->de_debug_weaknames,error);
if
(res != DW_DLV_OK) {
return
res;
}
if
(!dbg->de_debug_weaknames.dss_size) {
return
(DW_DLV_NO_ENTRY);
}
return
_dwarf_internal_get_pubnames_like_data(dbg,
dbg->de_debug_weaknames.dss_data,
dbg->de_debug_weaknames.dss_size,
(Dwarf_Global **) weaks,
ret_weak_count,
error,
DW_DLA_WEAK_CONTEXT,
DW_DLA_WEAK,
DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD,
DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR);
}
void
dwarf_weaks_dealloc(Dwarf_Debug dbg, Dwarf_Weak * dwgl,
Dwarf_Signed count)
{
_dwarf_internal_globals_dealloc(dbg, (Dwarf_Global *) dwgl,
count,
DW_DLA_WEAK_CONTEXT,
DW_DLA_WEAK, DW_DLA_LIST);
return
;
}
int
dwarf_weakname(Dwarf_Weak weak_in,
char
**ret_name, Dwarf_Error * error)
{
Dwarf_Global weak = (Dwarf_Global) weak_in;
if
(weak == NULL) {
_dwarf_error(NULL, error, DW_DLE_WEAK_NULL);
return
(DW_DLV_ERROR);
}
*ret_name = (
char
*) (weak->gl_name);
return
DW_DLV_OK;
}
int
dwarf_weak_die_offset(Dwarf_Weak weak_in,
Dwarf_Off * weak_off, Dwarf_Error * error)
{
Dwarf_Global weak = (Dwarf_Global) weak_in;
return
dwarf_global_die_offset(weak, weak_off, error);
}
int
dwarf_weak_cu_offset(Dwarf_Weak weak_in,
Dwarf_Off * weak_off, Dwarf_Error * error)
{
Dwarf_Global weak = (Dwarf_Global) weak_in;
return
dwarf_global_cu_offset(weak, weak_off, error);
}
int
dwarf_weak_name_offsets(Dwarf_Weak weak_in,
char
**weak_name,
Dwarf_Off * die_offset,
Dwarf_Off * cu_offset, Dwarf_Error * error)
{
Dwarf_Global weak = (Dwarf_Global) weak_in;
return
dwarf_global_name_offsets(weak,
weak_name, die_offset, cu_offset, error);
}