---
name: "dwarf_get_fde_info_for_all_regs3"
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_fde_info_for_all_regs3"
---

# dwarf\_get\_fde\_info\_for\_all\_regs3(3)

retrieve register rule row

## NAME

**dwarf\_get\_fde\_info\_for\_all\_regs3** – retrieve register rule row

## LIBRARY

library “libdwarf”

## SYNOPSIS

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

*int*\

**dwarf\_get\_fde\_info\_for\_all\_regs3**(*Dwarf\_Fde fde*, *Dwarf\_Addr pc*, *Dwarf\_Regtable3 \*reg\_table*, *Dwarf\_Addr \*row\_pc*, *Dwarf\_Error \*err*);

## DESCRIPTION

Function **dwarf\_get\_fde\_info\_for\_all\_regs3**() retrieves a row from the register rule table associated with the given FDE descriptor.

Argument *fde* should reference a valid DWARF FDE descriptor.

Argument *pc* should hold the program counter address to be used to locate the desired table row.

Argument *reg\_table* should point to a *Dwarf\_Regtable3* descriptor which will hold the returned table row of register rules. The *Dwarf\_Regtable3* descriptor is defined in the header file ⟨libdwarf.h⟩:

```
typedef struct {
	Dwarf_Small	dw_offset_relevant;
	Dwarf_Small	dw_value_type;
	Dwarf_Half	dw_regnum;
	Dwarf_Unsigned	dw_offset_or_block_len;
	Dwarf_Ptr	dw_block_ptr;
} Dwarf_Regtable_Entry3;
typedef struct {
	Dwarf_Regtable_Entry3	rt3_cfa_rule;
	Dwarf_Half		rt3_reg_table_size;
	Dwarf_Regtable_Entry3	*rt3_rules;
} Dwarf_Regtable3;
```

The *rt3\_reg\_table\_size* field specifies the maximum number of register rule columns to be returned, and should be set by the application before calling the function. The *rt3\_rules* field should point to a memory arena allocated by the application with space for at least *rt3\_reg\_table\_size* descriptors of type *Dwarf\_Regtable\_Entry3*.

On a successful execution of this function, the *rt3\_cfa\_rule* field will be set to the CFA register rule associated with the table row, and the *rt3\_rules* array will hold the returned register rules contained in the table row.

For each register rule descriptor returned, the *dw\_offset\_relevant* field will be set to 1 if the register rule has a offset value, the *dw\_value\_type* field will be set to the type code of the register rule and the *dw\_regnum* field will be set to the register number associated with the register rule. If the register rule is of type DW\_EXPR\_OFFSET or DW\_EXPR\_VAL\_OFFSET, the *dw\_offset\_or\_block\_len* field will be set to the offset value associated with the register rule. If the type is DW\_EXPR\_EXPRESSION or DW\_EXPR\_VAL\_EXPRESSION, the *dw\_offset\_or\_block\_len* field will be set to the length in bytes of the DWARF expression block associated with the register rule. The *dw\_block\_ptr* field will be set to a pointer to the content of the DWARF expression block associated with the register rule.

Argument *row\_pc* should point to a location which will be set to the lowest program counter address associated with the table row.

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

## RETURN VALUES

Function **dwarf\_get\_fde\_info\_for\_all\_regs3**() returns DW\_DLV\_OK when it succeeds. In case of an error, it returns DW\_DLV\_ERROR and sets the argument *err*.

## ERRORS

Function **dwarf\_get\_fde\_info\_for\_all\_regs3**() can fail with:

- \[DW\_DLE\_ARGUMENT\]

  One of the arguments *fde*, *reg\_table* or *row\_pc* was NULL.

- \[DW\_DLE\_PC\_NOT\_IN\_FDE\_RANGE\]

  The program counter value provided in argument *pc* did not fall in the range covered by argument *fde*.

## SEE ALSO

[dwarf(3)](/dwarf/3.md), [dwarf\_get\_fde\_at\_pc(3)](/dwarf_get_fde_at_pc/3.md), [dwarf\_get\_fde\_info\_for\_all\_regs(3)](/dwarf_get_fde_info_for_all_regs/3.md), [dwarf\_get\_fde\_info\_for\_cfa\_reg3(3)](/dwarf_get_fde_info_for_cfa_reg3/3.md), [dwarf\_get\_fde\_info\_for\_reg(3)](/dwarf_get_fde_info_for_reg/3.md), [dwarf\_get\_fde\_info\_for\_reg3(3)](/dwarf_get_fde_info_for_reg3/3.md), [dwarf\_get\_fde\_n(3)](/dwarf_get_fde_n/3.md), [dwarf\_set\_frame\_cfa\_value(3)](/dwarf_set_frame_cfa_value/3.md), [dwarf\_set\_frame\_rule\_initial\_value(3)](/dwarf_set_frame_rule_initial_value/3.md), [dwarf\_set\_frame\_rule\_table\_size(3)](/dwarf_set_frame_rule_table_size/3.md), [dwarf\_set\_frame\_same\_value(3)](/dwarf_set_frame_same_value/3.md), [dwarf\_set\_frame\_undefined\_value(3)](/dwarf_set_frame_undefined_value/3.md)
