Hi Mark,

On Wed, Oct 26, 2022 at 11:06 AM Mark Wielaard <m...@klomp.org> wrote:
> On Mon, 2022-10-24 at 14:38 -0400, Frank Ch. Eigler via Elfutils-devel
> wrote:
> > - not sure I understand why the code worries about dots in or not in
> >   section names.  Why not just pass them verbatim throughout the code
> >   base, and not worry about whether or not there's a dot?  Does the
> >   ELF standard even require a dot?
>
> I agree that just passing them through as is might be better. The ELF
> standard doesn't say much about section names, just:
>
>    Section names with a dot (.) prefix are reserved for the system,
>    although applications may use these sections if their existing
>    meanings are satisfactory. Applications may use names without the
>    prefix to avoid conflicts with system sections.

Agreed, will fix.

> I would drop the maybe_debuginfo_section heuristics. There are some
> sections like .strtab/.symtab that are probably in the debug file, but
> might be in the executable. I would assume that a named section can
> normally be found in the debugfile and only use the executable as
> fallback.
>
> So see if you can find the .debug file, if you can, then look for the
> section by name. If it isn't SHT_NOBITS you found it. If it is
> SHT_NOBITS the section should be in the exe. If the section cannot be
> found by name (in the .debug file) you can stop searching, it also
> won't be in the exe. If you cannot find the .debug file, or the section
> was in the .debug file, but had type SHT_NOBITS then search for the exe
> file and the named section in there.

I like this heuristic.  It's simpler and we don't have to update anything
if/when a new section becomes common.

> Finally, if the section comes from a file in the cache or if we have to
> download it in full anyway, then extracting the section into its own
> file seems slightly wasteful. It would be great if we could just report
> back "here is the full exe/debug file which does contain the requested
> section name". But that might make the interface a little ugly.
>
> int
> debuginfod_find_section (debuginfod_client *client,
>                          const unsigned char *build_id,
>                          int build_id_len,
>                          const char *section, char **path,
>                          bool *file_is_elf)
>
> Maybe that is over-designed to avoid a little bit of disk waste?

We'd save a bit of disk space but complicate the API and often
cause client tools to have to do more work to get at the section
contents.  In the case of .gdb_index, gdb already knows how to read
the index from a separate file.  Of course it can read the section
from an ELF file too but I suspect there might need to be some
changes to teach it how to handle "unusual" ELF files that only
contain a single section.

> Since debuginfod-client.c already includes system.h it can use:
>
> static inline ssize_t
> write_retry (int fd, const void *buf, size_t len)
>
> Which takes care of partial and/or interrupted write calls.

Thanks that's exactly what I'm looking for.

Aaron

Reply via email to