本文整理匯總了C++中DWARF_SET_ERROR函數的典型用法代碼示例。如果您正苦於以下問題:C++ DWARF_SET_ERROR函數的具體用法?C++ DWARF_SET_ERROR怎麽用?C++ DWARF_SET_ERROR使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了DWARF_SET_ERROR函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: dwarf_linesrc
int
dwarf_linesrc(Dwarf_Line ln, char **ret_linesrc, Dwarf_Error *error)
{
Dwarf_LineInfo li;
Dwarf_LineFile lf;
int i;
if (ln == NULL || ret_linesrc == NULL) {
DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
li = ln->ln_li;
assert(li != NULL);
for (i = 1, lf = STAILQ_FIRST(&li->li_lflist);
(Dwarf_Unsigned) i < ln->ln_fileno && lf != NULL;
i++, lf = STAILQ_NEXT(lf, lf_next))
;
if (lf == NULL) {
DWARF_SET_ERROR(NULL, error, DW_DLE_LINE_FILE_NUM_BAD);
return (DW_DLV_ERROR);
}
if (lf->lf_fullpath) {
*ret_linesrc = (char *) lf->lf_fullpath;
return (DW_DLV_OK);
}
*ret_linesrc = lf->lf_fname;
return (DW_DLV_OK);
}
示例2: dwarf_get_str
int
dwarf_get_str(Dwarf_Debug dbg, Dwarf_Off offset, char **string,
Dwarf_Signed *ret_strlen, Dwarf_Error *error)
{
Dwarf_Section *ds;
if (dbg == NULL || offset < 0 || string == NULL || ret_strlen == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
ds = _dwarf_find_section(dbg, ".debug_str");
if (ds == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
}
if ((Dwarf_Unsigned) offset > ds->ds_size) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if ((Dwarf_Unsigned) offset == ds->ds_size) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
}
*string = (char *) ds->ds_data + offset;
*ret_strlen = strlen(*string);
return (DW_DLV_OK);
}
示例3: dwarf_attr_add
int
dwarf_attr_add(Dwarf_Abbrev a, uint64_t attr, uint64_t form, Dwarf_Attribute *atp, Dwarf_Error *error)
{
Dwarf_Attribute at;
int ret = DWARF_E_NONE;
if (error == NULL)
return DWARF_E_ERROR;
if (a == NULL) {
DWARF_SET_ERROR(error, DWARF_E_ARGUMENT);
return DWARF_E_ARGUMENT;
}
if ((at = malloc(sizeof(struct _Dwarf_Attribute))) == NULL) {
DWARF_SET_ERROR(error, DWARF_E_MEMORY);
return DWARF_E_MEMORY;
}
/* Initialise the attribute structure. */
at->at_attrib = attr;
at->at_form = form;
/* Add the attribute to the list in the abbrev. */
STAILQ_INSERT_TAIL(&a->a_attrib, at, at_next);
if (atp != NULL)
*atp = at;
return ret;
}
示例4: dwarf_get_abbrev_entry
int
dwarf_get_abbrev_entry(Dwarf_Abbrev abbrev, Dwarf_Signed ndx,
Dwarf_Half *attr_num, Dwarf_Signed *form, Dwarf_Off *offset,
Dwarf_Error *error)
{
Dwarf_AttrDef ad;
int i;
if (abbrev == NULL || attr_num == NULL || form == NULL ||
offset == NULL) {
DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (ndx < 0 || (uint64_t) ndx >= abbrev->ab_atnum) {
DWARF_SET_ERROR(NULL, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
}
ad = STAILQ_FIRST(&abbrev->ab_attrdef);
for (i = 0; i < ndx && ad != NULL; i++)
ad = STAILQ_NEXT(ad, ad_next);
assert(ad != NULL);
*attr_num = ad->ad_attrib;
*form = ad->ad_form;
*offset = ad->ad_offset;
return (DW_DLV_OK);
}
示例5: dwarf_get_pubtypes
int
dwarf_get_pubtypes(Dwarf_Debug dbg, Dwarf_Type **pubtypes,
Dwarf_Signed *ret_count, Dwarf_Error *error)
{
Dwarf_Section *ds;
int ret;
if (dbg == NULL || pubtypes == NULL || ret_count == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (dbg->dbg_pubtypes == NULL) {
if ((ds = _dwarf_find_section(dbg, ".debug_pubtypes")) != NULL) {
ret = _dwarf_nametbl_init(dbg, &dbg->dbg_pubtypes, ds,
error);
if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
}
if (dbg->dbg_pubtypes == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
}
}
*pubtypes = dbg->dbg_pubtypes->ns_array;
*ret_count = dbg->dbg_pubtypes->ns_len;
return (DW_DLV_OK);
}
示例6: dwarf_attr
int
dwarf_attr(Dwarf_Die die, Dwarf_Half attr, Dwarf_Attribute *atp, Dwarf_Error *err)
{
Dwarf_Attribute at;
Dwarf_Abbrev a;
int ret = DWARF_E_NONE;
if (err == NULL)
return DWARF_E_ERROR;
if (die == NULL || atp == NULL || (a = die->die_a) == NULL) {
DWARF_SET_ERROR(err, DWARF_E_ARGUMENT);
return DWARF_E_ARGUMENT;
}
STAILQ_FOREACH(at, &a->a_attrib, at_next)
if (at->at_attrib == attr)
break;
*atp = at;
if (at == NULL) {
DWARF_SET_ERROR(err, DWARF_E_NO_ENTRY);
ret = DWARF_E_NO_ENTRY;
}
return ret;
}
示例7: _dwarf_loc_fill_locdesc
int
_dwarf_loc_fill_locdesc(Dwarf_Debug dbg, Dwarf_Locdesc *llbuf, uint8_t *in,
uint64_t in_len, uint8_t pointer_size, uint8_t offset_size,
uint8_t version, Dwarf_Error *error)
{
int num;
assert(llbuf != NULL);
assert(in != NULL);
assert(in_len > 0);
/* Compute the number of locations. */
if ((num = _dwarf_loc_fill_loc(dbg, NULL, pointer_size, offset_size,
version, in, in_len)) < 0) {
DWARF_SET_ERROR(dbg, error, DW_DLE_LOC_EXPR_BAD);
return (DW_DLE_LOC_EXPR_BAD);
}
llbuf->ld_cents = num;
if (num <= 0)
return (DW_DLE_NONE);
if ((llbuf->ld_s = calloc(num, sizeof(Dwarf_Loc))) == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_MEMORY);
return (DW_DLE_MEMORY);
}
(void) _dwarf_loc_fill_loc(dbg, llbuf, pointer_size, offset_size,
version, in, in_len);
return (DW_DLE_NONE);
}
示例8: dwarf_get_abbrev
int
dwarf_get_abbrev(Dwarf_Debug dbg, Dwarf_Unsigned offset,
Dwarf_Abbrev *return_abbrev, Dwarf_Unsigned *length,
Dwarf_Unsigned *attr_count, Dwarf_Error *error)
{
Dwarf_Abbrev ab;
int ret;
if (dbg == NULL || return_abbrev == NULL || length == NULL ||
attr_count == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
ret = _dwarf_abbrev_parse(dbg, NULL, &offset, &ab, error);
if (ret != DW_DLE_NONE) {
if (ret == DW_DLE_NO_ENTRY) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
} else
return (DW_DLV_ERROR);
}
*return_abbrev = ab;
*length = ab->ab_length;
*attr_count = ab->ab_atnum;
return (DW_DLV_OK);
}
示例9: dwarf_die_link
Dwarf_P_Die
dwarf_die_link(Dwarf_P_Die die, Dwarf_P_Die parent,
Dwarf_P_Die child, Dwarf_P_Die left_sibling, Dwarf_P_Die right_sibling,
Dwarf_Error *error)
{
Dwarf_Debug dbg;
int count;
if (die == NULL) {
DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT);
return (DW_DLV_BADADDR);
}
dbg = die->die_dbg;
count = _dwarf_die_count_links(parent, child, left_sibling,
right_sibling);
if (count > 1) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_BADADDR);
} else if (count == 0)
return (die);
_dwarf_die_link(die, parent, child, left_sibling, right_sibling);
return (die);
}
示例10: dwarf_loclist_from_expr_b
int
dwarf_loclist_from_expr_b(Dwarf_Debug dbg, Dwarf_Ptr bytes_in,
Dwarf_Unsigned bytes_len, Dwarf_Half addr_size, Dwarf_Half offset_size,
Dwarf_Small version, Dwarf_Locdesc **llbuf, Dwarf_Signed *listlen,
Dwarf_Error *error)
{
Dwarf_Locdesc *ld;
int ret;
if (dbg == NULL || bytes_in == NULL || bytes_len == 0 ||
llbuf == NULL || listlen == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (addr_size != 4 && addr_size != 8) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (offset_size != 4 && offset_size != 8) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
ret = _dwarf_loc_fill_locexpr(dbg, &ld, bytes_in, bytes_len, addr_size,
offset_size, version, error);
if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
*llbuf = ld;
*listlen = 1;
return (DW_DLV_OK);
}
示例11: dwarf_add_arange_b
Dwarf_Unsigned
dwarf_add_arange_b(Dwarf_P_Debug dbg, Dwarf_Addr start, Dwarf_Unsigned length,
Dwarf_Unsigned symbol_index, Dwarf_Unsigned end_symbol_index,
Dwarf_Addr offset_from_end_symbol, Dwarf_Error *error)
{
Dwarf_ArangeSet as;
Dwarf_Arange ar;
if (dbg == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (0);
}
as = dbg->dbgp_as;
if (end_symbol_index > 0 &&
(dbg->dbgp_flags & DW_DLC_SYMBOLIC_RELOCATIONS) == 0) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (0);
}
if ((ar = calloc(1, sizeof(struct _Dwarf_Arange))) == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_MEMORY);
return (0);
}
ar->ar_as = as;
ar->ar_address = start;
ar->ar_range = length;
ar->ar_symndx = symbol_index;
ar->ar_esymndx = end_symbol_index;
ar->ar_eoff = offset_from_end_symbol;
STAILQ_INSERT_TAIL(&as->as_arlist, ar, ar_next);
return (1);
}
示例12: dwarf_next_cu_header_b
int
dwarf_next_cu_header_b(Dwarf_Debug dbg, Dwarf_Unsigned *cu_length,
Dwarf_Half *cu_version, Dwarf_Off *cu_abbrev_offset,
Dwarf_Half *cu_pointer_size, Dwarf_Half *cu_offset_size,
Dwarf_Half *cu_extension_size, Dwarf_Unsigned *cu_next_offset,
Dwarf_Error *error)
{
Dwarf_CU cu;
int ret;
if (dbg == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (dbg->dbg_cu_current == NULL)
ret = _dwarf_info_first_cu(dbg, error);
else
ret = _dwarf_info_next_cu(dbg, error);
if (ret == DW_DLE_NO_ENTRY) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
} else if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
if (dbg->dbg_cu_current == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
}
cu = dbg->dbg_cu_current;
if (cu_length)
*cu_length = cu->cu_length;
if (cu_version)
*cu_version = cu->cu_version;
if (cu_abbrev_offset)
*cu_abbrev_offset = (Dwarf_Off) cu->cu_abbrev_offset;
if (cu_pointer_size)
*cu_pointer_size = cu->cu_pointer_size;
if (cu_offset_size) {
if (cu->cu_length_size == 4)
*cu_offset_size = 4;
else
*cu_offset_size = 8;
}
if (cu_extension_size) {
if (cu->cu_length_size == 4)
*cu_extension_size = 0;
else
*cu_extension_size = 4;
}
if (cu_next_offset)
*cu_next_offset = dbg->dbg_cu_current->cu_next_offset;
return (DW_DLV_OK);
}
示例13: dwarf_get_loclist_entry
int
dwarf_get_loclist_entry(Dwarf_Debug dbg, Dwarf_Unsigned offset,
Dwarf_Addr *hipc, Dwarf_Addr *lopc, Dwarf_Ptr *data,
Dwarf_Unsigned *entry_len, Dwarf_Unsigned *next_entry,
Dwarf_Error *error)
{
Dwarf_Loclist ll, next_ll;
Dwarf_Locdesc *ld;
Dwarf_Section *ds;
int i, ret;
if (dbg == NULL || hipc == NULL || lopc == NULL || data == NULL ||
entry_len == NULL || next_entry == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
ret = _dwarf_loclist_find(dbg, STAILQ_FIRST(&dbg->dbg_cu), offset, &ll,
error);
if (ret == DW_DLE_NO_ENTRY) {
DWARF_SET_ERROR(dbg, error, DW_DLV_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
} else if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
*hipc = *lopc = 0;
for (i = 0; i < ll->ll_ldlen; i++) {
ld = ll->ll_ldlist[i];
if (i == 0) {
*hipc = ld->ld_hipc;
*lopc = ld->ld_lopc;
} else {
if (ld->ld_lopc < *lopc)
*lopc = ld->ld_lopc;
if (ld->ld_hipc > *hipc)
*hipc = ld->ld_hipc;
}
}
ds = _dwarf_find_section(dbg, ".debug_loc");
assert(ds != NULL);
*data = (uint8_t *) ds->ds_data + ll->ll_offset;
*entry_len = ll->ll_length;
next_ll = TAILQ_NEXT(ll, ll_next);
if (next_ll != NULL)
*next_entry = next_ll->ll_offset;
else
*next_entry = ds->ds_size;
return (DW_DLV_OK);
}
示例14: dwarf_get_loclist_entry
int
dwarf_get_loclist_entry(Dwarf_Debug dbg, Dwarf_Unsigned offset,
Dwarf_Addr *hipc, Dwarf_Addr *lopc, Dwarf_Ptr *data,
Dwarf_Unsigned *entry_len, Dwarf_Unsigned *next_entry,
Dwarf_Error *error)
{
Dwarf_Locdesc *ld, **llbuf;
Dwarf_Section *ds;
Dwarf_Signed listlen;
int i, ret;
/*
* Note that this API sometimes will not work correctly because
* it assumes that all units have the same pointer size and offset
* size.
*/
if (dbg == NULL || hipc == NULL || lopc == NULL || data == NULL ||
entry_len == NULL || next_entry == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
ret = _dwarf_loclist_find(dbg, STAILQ_FIRST(&dbg->dbg_cu), offset,
&llbuf, &listlen, entry_len, error);
if (ret == DW_DLE_NO_ENTRY) {
DWARF_SET_ERROR(dbg, error, DW_DLV_NO_ENTRY);
return (DW_DLV_NO_ENTRY);
} else if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
*hipc = *lopc = 0;
for (i = 0; i < listlen; i++) {
ld = llbuf[i];
if (i == 0) {
*hipc = ld->ld_hipc;
*lopc = ld->ld_lopc;
} else {
if (ld->ld_lopc < *lopc)
*lopc = ld->ld_lopc;
if (ld->ld_hipc > *hipc)
*hipc = ld->ld_hipc;
}
}
ds = _dwarf_find_section(dbg, ".debug_loc");
assert(ds != NULL);
*data = (uint8_t *) ds->ds_data + offset;
*next_entry = offset + *entry_len;
return (DW_DLV_OK);
}
示例15: dwarf_get_fde_info_for_reg
int
dwarf_get_fde_info_for_reg(Dwarf_Fde fde, Dwarf_Half table_column,
Dwarf_Addr pc_requested, Dwarf_Signed *offset_relevant,
Dwarf_Signed *register_num, Dwarf_Signed *offset, Dwarf_Addr *row_pc,
Dwarf_Error *error)
{
Dwarf_Regtable3 *rt;
Dwarf_Debug dbg;
Dwarf_Addr pc;
int ret;
dbg = fde != NULL ? fde->fde_dbg : NULL;
if (fde == NULL || offset_relevant == NULL || register_num == NULL ||
offset == NULL || row_pc == NULL) {
DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
return (DW_DLV_ERROR);
}
if (pc_requested < fde->fde_initloc ||
pc_requested >= fde->fde_initloc + fde->fde_adrange) {
DWARF_SET_ERROR(dbg, error, DW_DLE_PC_NOT_IN_FDE_RANGE);
return (DW_DLV_ERROR);
}
ret = _dwarf_frame_get_internal_table(fde, pc_requested, &rt, &pc,
error);
if (ret != DW_DLE_NONE)
return (DW_DLV_ERROR);
if (table_column == dbg->dbg_frame_cfa_value) {
/* Application ask for CFA. */
*offset_relevant = CFA.dw_offset_relevant;
*register_num = CFA.dw_regnum;
*offset = CFA.dw_offset_or_block_len;
} else {
/* Application ask for normal registers. */
if (table_column >= dbg->dbg_frame_rule_table_size ||
table_column >= DW_REG_TABLE_SIZE) {
DWARF_SET_ERROR(dbg, error, DW_DLE_FRAME_TABLE_COL_BAD);
return (DW_DLV_ERROR);
}
*offset_relevant = RL.dw_offset_relevant;
*register_num = RL.dw_regnum;
*offset = RL.dw_offset_or_block_len;
}
*row_pc = pc;
return (DW_DLV_OK);
}