Re: [PATCH RFC 0/3] list inline expansions in .BTF.inline

Thierry Treyer
2025-04-29T19:14:05Z

> It looks to me we only need:
> - register
> - load_from_reg_plus_offset
> - constant

In that case, we can shorten the list of operators:

### | Operator Name | Operands[...]
----+------------------------+-------------------------------------------
1 | LOC_SIGNED_CONST_1 | s8: constant's value
2 | LOC_SIGNED_CONST_2 | s16: constant's value
3 | LOC_SIGNED_CONST_4 | s32: constant's value
4 | LOC_SIGNED_CONST_8 | s64: constant's value
5 | LOC_UNSIGNED_CONST_1 | u8: constant's value
6 | LOC_UNSIGNED_CONST_2 | u16: constant's value
7 | LOC_UNSIGNED_CONST_4 | u32: constant's value
8 | LOC_UNSIGNED_CONST_8 | u64: constant's value
9 | LOC_REGISTER | u8: DWARF register number from the ABI
10 | LOC_REGISTER_OFFSET | u8: DWARF register number from the ABI
| s64: offset added to the register's value

> register vs register_offset is another artifact of dwarf.
> ...
> - load_from_reg_plus_offset

What is the difference between LOC_REGISTER_OFFSET
and load_from_reg_plus_offset?

> For fully inlined we still need callee_id otherwise bpftrace won't know
> argument types. It shouldn't be hard to emit btf even for fully
> inlined functions, but we need to be smart not to bloat BTF to dwarf sizes.

I'll come back with an estimate for the size increase of the BTF.

Have a great day,
Thierry