The bt_sprnf_addrs() function
formats the addresses in the addrs using fmt as the
format for each entry, and storing the formatted addresses in the
out buffer.
If separator isn't NULL, the function writes it in
out between each formatted address.

The memmap is optional, but if specified, it allows access to
more formatting styles.
The format for each entry (fmt), is analogous to
printf()
formats:

%% — a literal %.

%a — an address in memory.

%l — an address relative to the start of the file
it belongs to (i.e. this corresponds to the address in the object file).

%f — an object file that the address belongs to (e.g.
/some/dir/libc.so).

%I — a numerical index that corresponds to the
numerical index in the memory map printouts (i.e. if the memory map
is printed, then using %I instead of %f in the
backtrace minimizes the size of the backtrace).