https://sourceware.org/bugzilla/show_bug.cgi?id=32540

--- Comment #2 from Michael Tremer <michael.tremer at ipfire dot org> ---
Hello Mark,

thank you for getting back to me on this.

I did notice the string function, but how would I programmatically check what
kind of error was returned? String matching does not sound like a safe option.

My code looks like this:

>       // Read DWARF information
>       dwarf = dwarf_begin(self->fd, DWARF_C_READ);
>       if (!dwarf) {
>               switch (dwarf_errno()) {
>                       // If we don't have any DWARF information there is 
> nothing to do
>                       case DWARF_E_NO_DWARF:
>                               r = 0;
>                               goto ERROR;
>
>                       default:
>                               ERROR(self->ctx, "Could not initialize DWARF 
> context: %s\n", dwarf_errmsg(-1));
>                               r = -errno;
>                               goto ERROR;
>               }
>       }

I am basically trying to extract any source information before I am stripping
the binary. Sometimes there is no DWARF information. From the NULL pointer that
is being returned by dward_begin() I cannot tell whether there has been an
error, or genuinely no DWARF information was found - which in my case is an
acceptable outcome.

A bit further into my routine I have a similar case:

>               // Fetch the source files
>               r = dwarf_getsrcfiles(die, &files, &count);
>               if (r < 0) {
>                       switch (dwarf_errno()) {
>                               // Skip any invalid DWARF sections
>                               case DWARF_E_INVALID_DWARF:
>                                       goto NEXT;
>
>                               default:
>                                       ERROR(self->ctx, "Could not fetch the 
> source files for %s: %s\n",
>                                               self->path, dwarf_errmsg(-1));
>                                       r = -ENOTSUP;
>                                       goto ERROR;
>                       }
>               }

Some files, if I remember correctly glibc start files, can get opened, but
there seem to be some sections that cannot be parsed. As extracting the source
is best-effort anyways, I would like to skip them and the error code allows me
to.

My full code is here:
https://git.ipfire.org/?p=pakfire.git;a=blob;f=src/pakfire/elf.c;hb=ec4278ae949bcd5a73e47448afe404d187d89be2#l1127

As a workaround I have been defining the two codes that I am currently using,
but of course that won't be a stable solution for the future.

I hope I could explain my use case a little bit more and there is a chance to
export those error codes.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to