Hi Aaron,
On Mon, 2025-01-20 at 19:38 -0500, Aaron Merey wrote:
> If none of -e, -p or -k is given as a command line option, libdwfl
> parse_opt will use '-e a.out' as the default.
>
> When handling -e, parse_opt will set dwfl->offline_next_address
> to 0. However when handling the default '-e a.out',
> dwfl->offline_next_address is not set to 0. This can result in
> eu-addr2line failing to correctly output the line information for a
> given address.
>
> Fix this by setting dwfl->offline_next_address to 0 when setting up
> the default '-e a.out' dwfl.
Thanks, this makes sense.
> ---
> libdwfl/argp-std.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c
> index 1605fbfe..55e98715 100644
> --- a/libdwfl/argp-std.c
> +++ b/libdwfl/argp-std.c
> @@ -268,6 +268,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
> /* Default if no -e, -p, or -k, is "-e a.out". */
> arg = "a.out";
> dwfl = INTUSE(dwfl_begin) (&offline_callbacks);
> +
> + if (dwfl != NULL)
> + dwfl->offline_next_address = 0;
> if (INTUSE(dwfl_report_offline) (dwfl, "", arg, -1) == NULL)
> return fail (dwfl, -1, arg, state);
> opt->dwfl = dwfl;
This is indeed the same as what would happen if the user would provide
"-e a.out" directly.
Which has the following comment:
/* Start at zero so if there is just one -e foo.so,
the DSO is shown without address bias. */
dwfl->offline_next_address = 0;
Cheers,
Mark