---
name: "dwarf_get_abbrev_entry"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/dwarf_get_abbrev_entry"
---

# dwarf\_get\_abbrev\_entry(3)

retrieve attribute information from an abbreviation descriptor

## NAME

**dwarf\_get\_abbrev\_entry** – retrieve attribute information from an abbreviation descriptor

## LIBRARY

library “libdwarf”

## SYNOPSIS

**#include \<libdwarf.h\>**

*int*\

**dwarf\_get\_abbrev\_entry**(*Dwarf\_Abbrev abbrev*, *Dwarf\_Signed ndx*, *Dwarf\_Half \*code*, *Dwarf\_Signed \*form*, *Dwarf\_Off \*offset*, *Dwarf\_Error \*err*);

## DESCRIPTION

Function **dwarf\_get\_abbrev\_entry**() retrieves attribute information from a DWARF abbreviation descriptor.

Argument *abbrev* should be a valid abbreviation descriptor, as returned by function [dwarf\_get\_abbrev(3)](/dwarf_get_abbrev/3.md).

Argument *ndx* specifies the 0-based index of the attribute. The total count of the attributes contained in the abbreviation entry can be retrieved using the function [dwarf\_get\_abbrev(3)](/dwarf_get_abbrev/3.md).

Argument *code* should point to a location which will hold a returned attribute code.

Argument *form* should point to a location which will hold the returned form of the attribute.

Argument *offset* should point to a location which will hold a returned offset, relative to the “.debug\_abbrev” section, for the specified attribute.

If argument *err* is not NULL, it will be used to return an error descriptor in case of an error.

## RETURN VALUES

Function **dwarf\_get\_abbrev\_entry**() returns DW\_DLV\_OK when it succeeds. It returns DW\_DLV\_NO\_ENTRY if the attribute index specified by argument *ndx* is out of range. In case of an error, it returns DW\_DLV\_ERROR and sets the argument *err*.

## EXAMPLES

To loop through all the attribute entries contained in the abbreviation section, use:

```
Dwarf_Debug dbg;
Dwarf_Abbrev ab;
Dwarf_Off aboff, atoff;
Dwarf_Signed form;
Dwarf_Half attr;
Dwarf_Unsigned length, attr_count;
Dwarf_Error de;
int i, ret;
/* ...allocate 'dbg' using dwarf_init(3) ... */
while ((ret = dwarf_next_cu_header(dbg, NULL, NULL, &aboff,
    NULL, NULL, &de)) ==  DW_DLV_OK) {
	while ((ret = dwarf_get_abbrev(dbg, aboff, &ab, &length,
	    &attr_count, &de)) == DW_DLV_OK) {
		if (length == 1)	/* Last entry. */
			break;
		aboff += length;
		for (i = 0; (Dwarf_Unsigned) i < attr_count; i++) {
			if (dwarf_get_abbrev_entry(ab, i,
			    &attr, &form, &atoff, &de) != DW_DLV_OK) {
				warnx("dwarf_get_abbrev_entry failed:"
				    " %s", dwarf_errmsg(de));
				continue;
			}
			/* .. use the retrieved information ... */
		}
	}
	if (ret != DW_DLV_OK)
		warnx("dwarf_get_abbrev: %s", dwarf_errmsg(de));
}
if (ret == DW_DLV_ERROR)
	warnx("dwarf_next_cu_header: %s", dwarf_errmsg(de));
```

## ERRORS

Function **dwarf\_get\_abbrev\_entry**() can fail with:

- \[DW\_DLE\_ARGUMENT\]

  One of the arguments *abbrev*, *code*, *form* or *offset* was NULL.

- \[DW\_DLE\_NO\_ENTRY\]

  The attribute index specified by argument *ndx* was out of range.

## SEE ALSO

[dwarf(3)](/dwarf/3.md), [dwarf\_get\_abbrev(3)](/dwarf_get_abbrev/3.md)
