Since elfutils 0.171 libdw support split-dwarf (.dwo files). This is mostly, but not totally, transparent for users like stap.
The easiest way to support split-dwarf is to use the new interface dwarf_get_units where currently dwarf_next_unit or dwarf_nextcu is used.
/* Gets the next Dwarf_CU (unit), version, unit type and if available
the CU DIE and sub (type) DIE of the unit. Returns 0 on success,
-1 on error or 1 if there are no more units. To start iterating
provide NULL for CU. If version < 5 the unit type is set from the
CU DIE if available (DW_UT_compile for DW_TAG_compile_unit,
DW_UT_type for DW_TAG_type_unit or DW_UT_partial for
DW_TAG_partial_unit), otherwise it is set to zero. If unavailable
(the version or unit type is unknown) the CU DIE is cleared.
Likewise if the sub DIE isn't isn't available (the unit type is not
DW_UT_type or DW_UT_split_type) the sub DIE tag is cleared. */
extern int dwarf_get_units (Dwarf *dwarf, Dwarf_CU *cu, Dwarf_CU **next_cu,
Dwarf_Half *version, uint8_t *unit_type,
Dwarf_Die *cudie, Dwarf_Die *subdie)