DWARF_GET_FDE_INFO_FOR_ALL_REGS(3)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’– NAME πŸ’–

dwarf_get_fde_info_for_all_regs β€” retrieve register rule row. Okay bestie, this is the libdwarf manual page, and yes we are pulling a whole row of register rules out of an FDE. Slay.

πŸ“š LIBRARY πŸ“š

DWARF Access Library (libdwarf, -ldwarf).

✨ SYNOPSIS ✨

#include <libdwarf.h>

int
dwarf_get_fde_info_for_all_regs(Dwarf_Fde fde, Dwarf_Addr pc,
    Dwarf_Regtable *reg_table, Dwarf_Addr *row_pc, Dwarf_Error *err);

πŸ¦‹ DESCRIPTION πŸ¦‹

Function dwarf_get_fde_info_for_all_regs() retrieves a row from the register rule table associated with the given FDE descriptor. It’s giving β€œgrab the row, bestie” energy.

Here’s the vibe check on the arguments:

  • fde β€” should reference a valid DWARF FDE descriptor.
  • pc β€” should hold the program counter address to be used to locate the desired table row.
  • reg_table β€” should point to a Dwarf_Regtable descriptor, which will hold the returned table row of register rules.
  • row_pc β€” should point to a location that will be set to the lowest program counter address associated with the table row.
  • err β€” if it’s not NULL, it will be used to store error information in case of an error.

The Dwarf_Regtable descriptor is defined in the header file <libdwarf.h>:

typedef struct {
        struct {
                Dwarf_Small     dw_offset_relevant;
                Dwarf_Half      dw_regnum;
                Dwarf_Addr      dw_offset;
        } rules[DW_REG_TABLE_SIZE];
} Dwarf_Regtable;

For each of the register rules returned, the dw_offset_relevant field is set to 1 if the register rule has an offset value. The dw_regnum field is set to the register number associated with the register rule. The dw_offset field is set to the offset value associated with the register rule.

The number of register columns returned is either the constant value DW_REG_TABLE_SIZE as defined in the header file <libdwarf.h>, or the value set by function dwarf_set_frame_rule_table_size(3), whichever is smaller. Iconic.

πŸ’… COMPATIBILITY πŸ’…

Okay, important tea: function dwarf_get_fde_info_for_all_regs() is deprecated since it only supports DWARF2 frame sections. Not me using the old one πŸ’€ Applications should instead use function dwarf_get_fde_info_for_all_regs3(3), which supports both DWARF2 and DWARF3 frame sections. Periodt.

πŸŽ€ RETURN VALUES πŸŽ€

Function dwarf_get_fde_info_for_all_regs() returns DW_DLV_OK when it succeeds. In case of an error, it returns DW_DLV_ERROR and sets the argument err. That’s the whole return-value story, bestie.

πŸ’€ ERRORS πŸ’€

Function dwarf_get_fde_info_for_all_regs() 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_get_fde_at_pc(3), dwarf_get_fde_info_for_all_regs3(3), dwarf_get_fde_info_for_cfa_reg3(3), dwarf_get_fde_info_for_reg(3), dwarf_get_fde_info_for_reg3(3), dwarf_get_fde_n(3), dwarf_set_frame_cfa_value(3), dwarf_set_frame_rule_initial_value(3), dwarf_set_frame_rule_table_size(3), dwarf_set_frame_same_value(3), dwarf_set_frame_undefined_value(3).


mwah πŸ’‹ β€” this page’s source/version is Debian, dated June 4, 201. Catch you in the next manpage, bestie 🫢

πŸ“¦ where this page comes from