---
name: "dwarf_new_die"
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_new_die"
---

# dwarf\_new\_die(3)

allocate a new debugging information entry

## NAME

**dwarf\_new\_die** – allocate a new debugging information entry

## LIBRARY

library “libdwarf”

## SYNOPSIS

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

*Dwarf\_P\_Die*\

**dwarf\_new\_die**(*Dwarf\_P\_Debug dbg*, *Dwarf\_Tag tag*, *Dwarf\_P\_Die parent*, *Dwarf\_P\_Die child*, *Dwarf\_P\_Die left*, *Dwarf\_P\_Die right*, *Dwarf\_Error \*err*);

## DESCRIPTION

Function **dwarf\_new\_die**() allocates a new DWARF debugging information entry and links it to another debugging information entry.

Argument *dbg* should reference a DWARF producer instance allocated using [dwarf\_producer\_init(3)](/dwarf_producer_init/3.md) or [dwarf\_producer\_init\_b(3)](/dwarf_producer_init_b/3.md).

Argument *tag* should specify the tag of the newly created debugging information entry. Valid values for this argument are those for the DW\_TAG\_\* symbols defined in ⟨libdwarf.h⟩.

Argument *parent* specifies the parent link of the debugging information entry.

Argument *child* specifies the first child link of the debugging information entry.

Argument *left* specifies the left sibling link of the debugging information entry.

Argument *right* specifies the right sibling link of the debugging information entry.

Only one of arguments *parent*, *child*, *left* and *right* is allowed to be non-NULL. Application code can subsequently call the function [dwarf\_die\_link(3)](/dwarf_die_link/3.md) to change the links for the created debugging information entry.

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

## RETURN VALUES

On success, function **dwarf\_new\_die**() returns the newly created debugging information entry. In case of an error, function **dwarf\_new\_die**() returns DW\_DLV\_BADADDR and sets the argument *err*.

## EXAMPLES

To create debugging information entries and add them to the producer instance, use:

```
Dwarf_P_Debug dbg;
Dwarf_P_Die die1, die2;
Dwarf_Error de;
/* ... assume dbg refers to a DWARF producer instance ... */
die1 = dwarf_new_die(dbg, DW_TAG_compilation_unit, NULL, NULL, NULL,
    NULL, &de);
if (die1 == NULL) {
	warnx("dwarf_new_die failed: %s", dwarf_errmsg(-1));
	return;
}
die2 = dwarf_new_die(dbg, DW_TAG_base_type, die1, NULL, NULL,
    NULL, &de);
if (die1 == NULL) {
	warnx("dwarf_new_die failed: %s", dwarf_errmsg(-1));
	return;
}
if (dwarf_add_die_to_debug(dbg, die1, &de) != DW_DLV_OK) {
	warnx("dwarf_add_die_to_debug failed: %s", dwarf_errmsg(-1));
	return;
}
```

## ERRORS

Function **dwarf\_new\_die**() can fail with:

- \[DW\_DLE\_ARGUMENT\]

  Argument *dbg* was NULL.

- \[DW\_DLE\_ARGUMENT\]

  More than one of the arguments *parent*, *child*, *left* and *right* were non-NULL.

- \[DW\_DLE\_MEMORY\]

  An out of memory condition was encountered during the execution of the function.

## SEE ALSO

[dwarf(3)](/dwarf/3.md), [dwarf\_add\_die\_to\_debug(3)](/dwarf_add_die_to_debug/3.md), [dwarf\_die\_link(3)](/dwarf_die_link/3.md), [dwarf\_producer\_init(3)](/dwarf_producer_init/3.md), [dwarf\_producer\_init\_b(3)](/dwarf_producer_init_b/3.md)
