On Wed, Oct 28, 2026 at 7:12 PM Mark Wielaard <[email protected]> wrote:
>
> Hi Aaron,
>
> On Wed, Oct 28, 2026 at 03:32:29PM -0400, Aaron Merey wrote:
> > On Wed, Oct 28, 2026 at 11:22 AM Mark Wielaard <[email protected]> wrote:
> > > On Tue, 2026-10-27 at 20:34 -0400, Aaron Merey wrote:
> > > > Store a Dwfl_Module's ebl field atomically in __libdwfl_module_getebl
> > > > while holding the associated Dwfl load_lock.
> > > >
> > > > Change usage of the ebl field so that before using it's either been
> > > > atomically read or else it's used after __libdwfl_module_getebl returns
> > > > DWFL_E_NOERROR.
> > >
> > > Why not always use __libdwfl_module_getebl ?
> > >
> > > [...]
> > >
> > > > diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c
> > > > index 2bb07fd8..4905f019 100644
> > > > --- a/libdwfl/dwfl_module_getsym.c
> > > > +++ b/libdwfl/dwfl_module_getsym.c
> > > > @@ -124,7 +124,8 @@ __libdwfl_getsym (Dwfl_Module *mod, int ndx, 
> > > > GElf_Sym *sym, GElf_Addr *addr,
> > > >       descriptors).  */
> > > >
> > > >    char *ident;
> > > > -  GElf_Addr st_value = sym->st_value & ebl_func_addr_mask (mod->ebl);
> > > > +  Ebl *ebl = atomic_load_acquire (&mod->ebl);
> > > > +  GElf_Addr st_value = sym->st_value & ebl_func_addr_mask (ebl);
> > > >    *resolved = false;
> > > >    if (! adjust_st_value && mod->e_type != ET_REL && alloc
> > > >        && (GELF_ST_TYPE (sym->st_info) == STT_FUNC
> > >
> > > So why not use __libdwfl_module_getebl here?
> >
> > This preserves existing behaviour. If mod->ebl is NULL then the mask
> > from ebl_func_addr_mask leaves the symbol value unchanged. If we use
> > __libdwfl_module_getebl then the backend could get initialized early
> > resulting in a different mask.
>
> But just two lines down we call __libdwfl_module_getebl. So I think it
> would actually be a bug if the ebl hasn't yet been loaded at this
> point.

Ok I will fix this in v2.

Aaron

>
> Cheers,
>
> Mark
>

Reply via email to