[Bug libdw/30980] offline.c:53: dwfl_offline_section_address: Assertion `mod->e_type == ET_REL' failed.

2023-11-02 Thread mark at klomp dot org
https://sourceware.org/bugzilla/show_bug.cgi?id=30980

--- Comment #6 from Mark Wielaard  ---
Thanks, that seems to be the correct thing to do here.

Note that there are a couple more asserts on this code path. In particular in
__libdwfl_find_elf_build_id there is what apparently is the root of the
confusion here:

  // MOD->E_TYPE is zero here.
  assert (ehdr->e_type != ET_REL || mod != NULL);

Which passes because mod != NULL. But probably should have been a red flag.
This is my fault, I refactored this code and kept these asserts without fully
understanding why there were (not) needed.

We should go over all asserts in the library code and rewrite/remove them. It
is never a good thing to trigger an abort in library code.

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

Re: [PATCH] readelf: Support .gdb_index version 9

2023-11-02 Thread Mark Wielaard
Hi Aaron,

On Tue, 2023-10-31 at 16:33 -0400, Aaron Merey wrote:
> I'd like to merge this patch before the next release.  Unless anyone objects
> I'll merge it by Friday Nov 3.

Looks good to me. Some small comments below.

> Commit message:

BTW if you add comments like the above after the first "scissors" ---
line, they wont show up in the actually commit message when applying
the email message (that is why the stat output is put there).

> Version 9 adds a "shortcut table" to the index.  The shortcut table contains
> the name and language of the main function, if it exists.
> 
> A testcase added in this patch uses an executable written with Fortran.
> This is because gdb does not currently populate the shortcut table of
> C/C++ programs (see sourceware PR30996).
> 
> Signed-off-by: Aaron Merey 
> ---
>  src/readelf.c   |  66 +++-
>  tests/Makefile.am   |   3 +-
>  tests/run-readelf-gdb_index.sh  |  95 +++-
>  tests/testfilegdbindex9-no-maininfo.bz2 | Bin 0 -> 3502 bytes
>  tests/testfilegdbindex9.bz2 | Bin 0 -> 4266 bytes
>  5 files changed, 159 insertions(+), 5 deletions(-)
>  create mode 100755 tests/testfilegdbindex9-no-maininfo.bz2
>  create mode 100755 tests/testfilegdbindex9.bz2
> 
> diff --git a/src/readelf.c b/src/readelf.c
> index db31ad09..a28f6236 100644
> --- a/src/readelf.c
> +++ b/src/readelf.c
> @@ -11539,8 +11539,9 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl 
> *ebl,
>// hash used for generating the table.  Version 6 contains symbols
>// for inlined functions, older versions didn't.  Version 7 adds
>// symbol kinds.  Version 8 just indicates that it correctly includes
> -  // TUs for symbols.
> -  if (vers < 4 || vers > 8)
> +  // TUs for symbols.  Version 9 adds shortcut table for information
> +  // regarding the main function.
> +  if (vers < 4 || vers > 9)
>  {
>printf (_("  unknown version, cannot parse section\n"));
>return;

OK. BTW the description of the gdb_index at the top
https://sourceware.org/gdb/current/onlinedocs/gdb/Index-Section-Format.html
doesn't resolve anymore. It is now 
https://sourceware.org/gdb/current/onlinedocs/gdb.html/Index-Section-Format.html
Maybe we should report that to the gdb project.

> @@ -11578,6 +11579,17 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl 
> *ebl,
>if (unlikely (readp + 4 > dataend))
>  goto invalid_data;
>  
> +  uint32_t shortcut_off = 0;
> +  if (vers >= 9)
> +{
> +  shortcut_off = read_4ubyte_unaligned (dbg, readp);
> +  printf (_(" shortcut offset: %#" PRIx32 "\n"), shortcut_off);
> +
> +  readp += 4;
> +  if (unlikely (readp + 4 > dataend))
> + goto invalid_data;
> +}
> +
>uint32_t const_off = read_4ubyte_unaligned (dbg, readp);
>printf (_(" constant offset: %#" PRIx32 "\n"), const_off);

OK

> @@ -11675,8 +11687,19 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl 
> *ebl,
>if (const_off >= data->d_size)
>  goto invalid_data;
>  
> +  const unsigned char *shortcut_start = NULL;
> +  if (vers >= 9)
> +{
> +  if (shortcut_off >= data->d_size)
> + goto invalid_data;
> +
> +  shortcut_start = data->d_buf + shortcut_off;
> +  nextp = shortcut_start;
> +}
> +  else
> +nextp = const_start;
> +
>readp = data->d_buf + sym_off;
> -  nextp = const_start;
>size_t sym_nr = (nextp - readp) / 8;
>  
>printf (_("\n Symbol table at offset %#" PRIx32

OK

> @@ -11750,6 +11773,43 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl 
> *ebl,
>   }
>n++;
>  }
> +
> +  if (vers < 9)
> +return;
> +
> +  if (unlikely (shortcut_start == NULL))
> +goto invalid_data;
> +
> +  readp = shortcut_start;
> +  nextp = const_start;
> +  size_t shortcut_nr = (nextp - readp) / 4;
> +
> +  if (unlikely (shortcut_nr != 2))
> +goto invalid_data;

OK. So you just expect two entries.

> +  printf (_("\nShortcut table at offset %#" PRIx32 " contains %zu slots:\n"),
> +   shortcut_off, shortcut_nr);

That is a fancy way to print "contains 2 slots" :)

> +  uint32_t lang = read_4ubyte_unaligned (dbg, readp);
> +  readp += 4;
> +
> +  printf (_("Language of main: %s\n"), dwarf_lang_name (lang));

Note that dwarf_lang_name calls string_or_unknown with false for 
print_unknown_num so it might make sense to either flip that to true
(but there is probably a reason it doesn't print the hex num) or to
always add the hex num after the name so the user doesn't just get ???
on an unknown DWARF_LANG constant.

> +  printf (_("Name of main: "));
> +
> +  if (lang != 0)
> +{
> +  uint32_t name = read_4ubyte_unaligned (dbg, readp);
> +  readp += 4;
> +  const unsigned char *sym = const_start + name;
> +
> +  if (unlikely ((size_t) (dataend - const_start) < name
> + || memchr (sym, '\0', dataend - sym) == NULL))
> + goto invalid_data;

Good end of string check.
BTW. DW_LANG const

[Bug libdw/30948] src/stack doesn't show source inforamtion if the target is compiled with clang

2023-11-02 Thread mark at klomp dot org
https://sourceware.org/bugzilla/show_bug.cgi?id=30948

Mark Wielaard  changed:

   What|Removed |Added

 CC||mark at klomp dot org

--- Comment #1 from Mark Wielaard  ---
Does compiling with -gdwarf-aranges help?
For some reason clang doesn't seem to include .debug_aranges by default.

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

[Bug libdw/28148] eu-addr2line reports function name of the caller when code is inlined

2023-11-02 Thread mark at klomp dot org
https://sourceware.org/bugzilla/show_bug.cgi?id=28148

Mark Wielaard  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|UNCONFIRMED |RESOLVED

--- Comment #2 from Mark Wielaard  ---
(In reply to Mark Wielaard from comment #1)
> Is this still an issue?
> 
> With binutils addr2line 2.39 I get:
> 
> $ addr2line -f -e inlined-bug.elf 20400e10
> irq_disable
> /home/john/src/RIOT/cpu/riscv_common/include/irq_arch.h:62
> 
> And with eu-addr2line 0.189:
> 
> $ eu-addr2line -f -e inlined-bug.elf 20400e10
> irq_disable inlined at /home/john/src/RIOT/core/atomic_c11.c:212:1 in
> __atomic_fetch_and_4
> /home/john/src/RIOT/cpu/riscv_common/include/irq_arch.h:62:5
> 
> $ eu-addr2line -a --pretty-print -i -f -e inlined-bug.elf 20400e10
> 0x20400e10: irq_disable at
> /home/john/src/RIOT/cpu/riscv_common/include/irq_arch.h:62:5
>  (inlined by) __atomic_fetch_and_4 at
> /home/john/src/RIOT/core/atomic_c11.c:212:1

Assuming this is now fixed.

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

[Bug tools/30986] Bug Report: elfutils eu-addr2line not working correctly with Rust inline functions

2023-11-02 Thread mark at klomp dot org
https://sourceware.org/bugzilla/show_bug.cgi?id=30986

Mark Wielaard  changed:

   What|Removed |Added

 CC||mark at klomp dot org
   Last reconfirmed||2023-11-02
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW

--- Comment #1 from Mark Wielaard  ---
I can confirm this is still an issue with the latest release (0.189) and with
the latest git (elfutils-0.189-76-g0999fca6). But I haven't investigated why
yet.

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

[Bug general/31027] New: Remove asserts from library code

2023-11-02 Thread amerey at redhat dot com
https://sourceware.org/bugzilla/show_bug.cgi?id=31027

Bug ID: 31027
   Summary: Remove asserts from library code
   Product: elfutils
   Version: unspecified
Status: NEW
  Severity: normal
  Priority: P2
 Component: general
  Assignee: unassigned at sourceware dot org
  Reporter: amerey at redhat dot com
CC: elfutils-devel at sourceware dot org
  Target Milestone: ---

It would be better for elfutils library functions to return an error code
instead of aborting because of a failed assert. For example see
https://sourceware.org/bugzilla/show_bug.cgi?id=30980

We should remove asserts from library code to prevent unnecessary aborts.

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

[Bug libdw/30980] offline.c:53: dwfl_offline_section_address: Assertion `mod->e_type == ET_REL' failed.

2023-11-02 Thread amerey at redhat dot com
https://sourceware.org/bugzilla/show_bug.cgi?id=30980

--- Comment #7 from Aaron Merey  ---
(In reply to Mark Wielaard from comment #6)
> We should go over all asserts in the library code and rewrite/remove them.
> It is never a good thing to trigger an abort in library code.

I created a PR for this: https://sourceware.org/bugzilla/show_bug.cgi?id=31027

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

[Bug general/30975] elfutils incorrectly reports core files with non-contiguous segments

2023-11-02 Thread mark at klomp dot org
https://sourceware.org/bugzilla/show_bug.cgi?id=30975

Mark Wielaard  changed:

   What|Removed |Added

   Last reconfirmed||2023-11-02
 Status|UNCONFIRMED |NEW
 CC||mark at klomp dot org
 Ever confirmed|0   |1

--- Comment #1 from Mark Wielaard  ---
I believe your analysis of the code is correct. But I don't yet know
what the correct fix for this is. We'll probably need to do multiple
passes over the list to combine the segments that are part of the same
ELF file. In theory we support split Dwfl_Modules for e.g kernel modules,
which are ET_REL files where the sections are loaded individually. But
I am not yet sure how that would translate to general user space
executables/shared libraries (which are assumed to have just one base
load address). Maybe we should ignore any segment not having the executable
flag set?

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

[Bug general/30975] elfutils incorrectly reports core files with non-contiguous segments

2023-11-02 Thread pablogsal at gmail dot com
https://sourceware.org/bugzilla/show_bug.cgi?id=30975

--- Comment #2 from Pablo Galindo Salgado  ---
Maybe a first attempt to improve the situation could be to not eagerly remove
"colliding" modules but either warn or take a callback to act on them or some
way to deactivate that behavior as currently there is nothing the user can do
to fix this problem using public APIs.

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

Re: [PATCH] readelf: Support .gdb_index version 9

2023-11-02 Thread Frank Ch. Eigler
Hi -

> OK. BTW the description of the gdb_index at the top
> https://sourceware.org/gdb/current/onlinedocs/gdb/Index-Section-Format.html
> doesn't resolve anymore. It is now 
> https://sourceware.org/gdb/current/onlinedocs/gdb.html/Index-Section-Format.html

Added another httpd redirect to make the first link work too.

- FChE



Re: [PATCH] readelf: Support .gdb_index version 9

2023-11-02 Thread Aaron Merey
On Thu, Nov 2, 2023 at 10:20 AM Frank Ch. Eigler  wrote:
>
> > BTW the description of the gdb_index at the top
> > https://sourceware.org/gdb/current/onlinedocs/gdb/Index-Section-Format.html
> > doesn't resolve anymore. It is now
> > https://sourceware.org/gdb/current/onlinedocs/gdb.html/Index-Section-Format.html
>
> Added another httpd redirect to make the first link work too.

Thanks Frank.

On Thu, Nov 2, 2023 at 8:54 AM Mark Wielaard  wrote:
>
> > +  printf (_("\nShortcut table at offset %#" PRIx32 " contains %zu 
> > slots:\n"),
> > +   shortcut_off, shortcut_nr);
>
> That is a fancy way to print "contains 2 slots" :)

My intention was to require fewer changes to the code if the shortcut
table was extended in a future version.  But yes at the moment this is
slightly excessive!

>
> > +  uint32_t lang = read_4ubyte_unaligned (dbg, readp);
> > +  readp += 4;
> > +
> > +  printf (_("Language of main: %s\n"), dwarf_lang_name (lang));
>
> Note that dwarf_lang_name calls string_or_unknown with false for
> print_unknown_num so it might make sense to either flip that to true
> (but there is probably a reason it doesn't print the hex num) or to
> always add the hex num after the name so the user doesn't just get ???
> on an unknown DWARF_LANG constant.

Binutils readelf includes the language hex number for unknown languages
and we should too.  I will add the hex number to the output when the
language is unknown.

>
> > +  printf (_("Name of main: "));
> > +
> > +  if (lang != 0)
> > +{
> > +  uint32_t name = read_4ubyte_unaligned (dbg, readp);
> > +  readp += 4;
> > +  const unsigned char *sym = const_start + name;
> > +
> > +  if (unlikely ((size_t) (dataend - const_start) < name
> > + || memchr (sym, '\0', dataend - sym) == NULL))
> > + goto invalid_data;
>
> Good end of string check.
> BTW. DW_LANG constants are going away with DWARF6:
> https://dwarfstd.org/languages-v6.html

Interesting.  If gdb continues to support .gdb_index then we may end up
extending the shortcut table to include the new DW_AT_language_version.

> > +Shortcut table at offset 0x207c contains 2 slots:
> > +Language of main: ???
> > +Name of main: 
> > +EOF
>
> This seems an unfortunate example. Why is the language unknown?
> But maybe it is a nice example to show why you should at least print
> the hex num of the language?

Currently gdb only populates the shortcut table when it can find
DW_AT_main_subprogram or DW_AT_calling_convention with value
DW_CC_program.  gcc doesn't emit this for C/C++ programs so their
shortcut tables all have language and name set to 0.
See https://sourceware.org/bugzilla/show_bug.cgi?id=30996

I will change this testcase to include the hex number of the language.

Aaron



Re: [PATCH 09/14] libdw, libdwfl: Save original path of ELF file

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, 2023-09-27 at 11:20 -0700, Omar Sandoval wrote:
> libdw and libdwfl currently save the path of the directory containing
> the ELF file to use when searching for alt and dwo files.  To search for
> dwp files, we need the file name too.  Add an elfpath field to Dwarf,
> and set the debugdir field from it.  Also update libdwfl to set elfpath
> and debugdir.

This looks good. We will need some locking around this code when we
integrate the thread-safety work. But that should be pretty clear.

> 
> Signed-off-by: Omar Sandoval 
> ---
>  libdw/ChangeLog| 11 ++-
>  libdw/dwarf_begin_elf.c| 34 --
>  libdw/dwarf_end.c  |  3 ++-
>  libdw/libdwP.h | 12 ++--
>  libdwfl/ChangeLog  |  9 +
>  libdwfl/dwfl_module.c  |  2 +-
>  libdwfl/dwfl_module_getdwarf.c | 11 +++
>  libdwfl/libdwflP.h |  2 +-
>  libdwfl/offline.c  |  4 ++--
>  9 files changed, 62 insertions(+), 26 deletions(-)
> 
> diff --git a/libdw/ChangeLog b/libdw/ChangeLog
> index 1d229094..f491587f 100644
> --- a/libdw/ChangeLog
> +++ b/libdw/ChangeLog
> @@ -20,7 +20,7 @@
>   instead of dbg parameter, which is now unused.
>   * libdwP.h (Dwarf_Macro_Op_Table): Replace is_64bit with address_size
>   and offset_size.  Add dbg.
> - (Dwarf): Add cu_index and tu_index.
> + (Dwarf): Add cu_index and tu_index.  Add elfpath.
>   (Dwarf_CU): Add dwp_row.
>   (Dwarf_Package_Index): New type.
>   (DW_SECT_TYPES): New macro.
> @@ -28,6 +28,9 @@
>   (dwarf_cu_dwp_section_info): New INTDECL.
>   Add IDX_debug_cu_index and IDX_debug_tu_index.  Add
>   DWARF_E_UNKNOWN_SECTION.
> + (__libdw_debugdir): Replace declaration with...
> + (__libdw_elfpath): New declaration.
> + (__libdw_set_debugdir): New declaration.
>   * dwarf_begin_elf.c (dwarf_scnnames): Add IDX_debug_cu_index and
>   IDX_debug_tu_index.
>   (scn_to_string_section_idx): Ditto.
> @@ -35,8 +38,14 @@
>   .zdebug_cu_index, and .zdebug_tu_index.
>   (check_section): Change .dwo suffix matching to account for
>   .debug_cu_index and .debug_tu_index.
> + (__libdw_debugdir): Replace with..
> + (__libdw_elfpath): New function.
> + (__libdw_set_debugdir): New function.
> + (valid_p): Call __libdw_elfpath and __libdw_set_debugdir instead of
> + __libdw_debugdir.
>   * Makefile.am (libdw_a_SOURCES): Add dwarf_cu_dwp_section_info.c.
>   * dwarf_end.c (dwarf_end): Free dwarf->cu_index and dwarf->tu_index.
> + Free dwarf->elfpath.
>   * dwarf_error.c (errmsgs): Add DWARF_E_UNKNOWN_SECTION.
>   * libdw.h (dwarf_cu_dwp_section_info): New declaration.
>   * libdw.map (ELFUTILS_0.190): Add dwarf_cu_dwp_section_info.

I had to recreate the ChangeLog entry because we skipped your patch 08.
In the future lets just move the ChangeLog Entry into the commit
message (we just updated CONTRIBUTING to recommend this). That makes
rebasing slightly

> diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
> index 7936d343..323a91d0 100644
> --- a/libdw/dwarf_begin_elf.c
> +++ b/libdw/dwarf_begin_elf.c
> @@ -272,24 +272,27 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn 
> *scn, bool inscngrp)
>return result;
>  }
>  
> -
> -/* Helper function to set debugdir field.  We want to cache the dir
> -   where we found this Dwarf ELF file to locate alt and dwo files.  */
>  char *
> -__libdw_debugdir (int fd)
> +__libdw_elfpath (int fd)
>  {
>/* strlen ("/proc/self/fd/") = 14 + strlen () = 10 + 1 = 25.  */
>char devfdpath[25];
>sprintf (devfdpath, "/proc/self/fd/%u", fd);
> -  char *fdpath = realpath (devfdpath, NULL);
> -  char *fddir;
> -  if (fdpath != NULL && fdpath[0] == '/'
> -  && (fddir = strrchr (fdpath, '/')) != NULL)
> -{
> -  *++fddir = '\0';
> -  return fdpath;
> -}
> -  return NULL;
> +  return realpath (devfdpath, NULL);
> +}
> +
> +
> +void
> +__libdw_set_debugdir (Dwarf *dbg)
> +{
> +  if (dbg->elfpath == NULL || dbg->elfpath[0] != '/')
> +return;
> +  size_t dirlen = strrchr (dbg->elfpath, '/') - dbg->elfpath + 1;
> +  dbg->debugdir = malloc (dirlen + 1);
> +  if (dbg->debugdir == NULL)
> +return;
> +  memcpy (dbg->debugdir, dbg->elfpath, dirlen);
> +  dbg->debugdir[dirlen] = '\0';
>  }
> 

This looks slightly nicer than the original code it replaces.

>  
> @@ -421,7 +424,10 @@ valid_p (Dwarf *result)
>  }
>  
>if (result != NULL)
> -result->debugdir = __libdw_debugdir (result->elf->fildes);
> +{
> +  result->elfpath = __libdw_elfpath (result->elf->fildes);
> +  __libdw_set_debugdir(result);
> +}
>  
>return result;
>  }

OK.

> diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c
> index 18a419ce..b7f817d9 100644
> --- a/libdw/dwarf_end.c
> +++ b/libdw/dwarf_end.c
> @@ -147,7 +147,8 @@ dwarf_end (Dwarf *dwarf)
> close (dwarf->alt_fd);
>  

☺ Buildbot (Sourceware): elfutils - build successful (master)

2023-11-02 Thread builder
A restored build has been detected on builder elfutils-fedora-s390x while 
building elfutils.

Full details are available at:
https://builder.sourceware.org/buildbot/#builders/43/builds/242

Build state: build successful
Revision: 14c5658acfc24367bc1cf63b0e04b70220bedad2
Worker: fedora-s390x
Build Reason: (unknown)
Blamelist: Aaron Merey , Omar Sandoval 

Steps:

- 0: worker_preparation ( success )

- 1: set package name ( success )

- 2: git checkout ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/2/logs/stdio

- 3: autoreconf ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/3/logs/stdio

- 4: configure ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/4/logs/stdio
- config.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/4/logs/config_log

- 5: get version ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/5/logs/stdio
- property changes: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/5/logs/property_changes

- 6: make ( warnings )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/6/logs/stdio
- warnings (3): 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/6/logs/warnings__3_

- 7: make check ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/7/logs/stdio
- test-suite.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/7/logs/test-suite_log

- 8: prep ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/8/logs/stdio

- 9: build bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/9/logs/stdio

- 10: fetch bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/10/logs/stdio

- 11: unpack bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/11/logs/stdio

- 12: pass .bunsen.source.gitname ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/12/logs/stdio

- 13: pass .bunsen.source.gitdescribe ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/13/logs/stdio

- 14: pass .bunsen.source.gitbranch ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/14/logs/stdio

- 15: pass .bunsen.source.gitrepo ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/15/logs/stdio

- 16: upload to bunsen ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/16/logs/stdio

- 17: clean up ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/17/logs/stdio

- 18: make distclean ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/242/steps/18/logs/stdio



Re: [PATCH 10/14] libdw: Try .dwp file in __libdw_find_split_unit()

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, Sep 27, 2023 at 11:20:59AM -0700, Omar Sandoval wrote:
> Try opening the file in the location suggested by the standard (the
> skeleton file name + ".dwp") and looking up the unit in the package
> index.  The rest is similar to .dwo files, with slightly different
> cleanup since a single Dwarf handle is shared.

This seems a good default given it is what the standard says.
But do you know of any distro doing this?

The case I am wondering about is for separate .debug files (which
surprisingly isn't standardized). In that case this would be
foobar.debug.dwz (and not foobar.dwz).

It might also be an idea to just create one file with both the
skeletons and the .dwo and dwz index sections.
 
> Signed-off-by: Omar Sandoval 
> ---
>  libdw/ChangeLog   | 11 -
>  libdw/dwarf_begin_elf.c   |  1 +
>  libdw/dwarf_cu_dwp_section_info.c | 19 
>  libdw/dwarf_end.c | 10 -
>  libdw/libdwP.h| 16 ++-
>  libdw/libdw_find_split_unit.c | 75 ---
>  6 files changed, 122 insertions(+), 10 deletions(-)
> 
> diff --git a/libdw/ChangeLog b/libdw/ChangeLog
> index f491587f..f37d9411 100644
> --- a/libdw/ChangeLog
> +++ b/libdw/ChangeLog
> @@ -1,6 +1,8 @@
>  2023-09-27  Omar Sandoval  
>  
>   * libdw_find_split_unit.c (try_split_file): Make static.
> + (try_dwp_file): New function.
> + (__libdw_find_split_unit): Call try_dwp_file.
>   * dwarf_entrypc.c (dwarf_entrypc): Call dwarf_lowpc.
>   * dwarf_ranges.c (dwarf_ranges): Use skeleton ranges section for
>   skeleton units.
> @@ -20,7 +22,8 @@
>   instead of dbg parameter, which is now unused.
>   * libdwP.h (Dwarf_Macro_Op_Table): Replace is_64bit with address_size
>   and offset_size.  Add dbg.
> - (Dwarf): Add cu_index and tu_index.  Add elfpath.
> + (Dwarf): Add cu_index and tu_index.  Add elfpath.  Add dwp_dwarf and
> + dwp_fd.
>   (Dwarf_CU): Add dwp_row.
>   (Dwarf_Package_Index): New type.
>   (DW_SECT_TYPES): New macro.
> @@ -31,6 +34,8 @@
>   (__libdw_debugdir): Replace declaration with...
>   (__libdw_elfpath): New declaration.
>   (__libdw_set_debugdir): New declaration.
> + (__libdw_dwp_findcu_id): New declaration.
> + (__libdw_link_skel_split): Handle .debug_addr for dwp.
>   * dwarf_begin_elf.c (dwarf_scnnames): Add IDX_debug_cu_index and
>   IDX_debug_tu_index.
>   (scn_to_string_section_idx): Ditto.
> @@ -43,9 +48,11 @@
>   (__libdw_set_debugdir): New function.
>   (valid_p): Call __libdw_elfpath and __libdw_set_debugdir instead of
>   __libdw_debugdir.
> + (dwarf_begin_elf): Initialize result->dwp_fd.
>   * Makefile.am (libdw_a_SOURCES): Add dwarf_cu_dwp_section_info.c.
>   * dwarf_end.c (dwarf_end): Free dwarf->cu_index and dwarf->tu_index.
> - Free dwarf->elfpath.
> + Free dwarf->elfpath.  Free dwarf->dwp_dwarf and close dwarf->dwp_fd.
> + (cu_free): Don't free split dbg if it is dwp_dwarf.
>   * dwarf_error.c (errmsgs): Add DWARF_E_UNKNOWN_SECTION.
>   * libdw.h (dwarf_cu_dwp_section_info): New declaration.
>   * libdw.map (ELFUTILS_0.190): Add dwarf_cu_dwp_section_info.
> diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
> index 323a91d0..ca2b7e2a 100644
> --- a/libdw/dwarf_begin_elf.c
> +++ b/libdw/dwarf_begin_elf.c
> @@ -567,6 +567,7 @@ dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp)
>  
>result->elf = elf;
>result->alt_fd = -1;
> +  result->dwp_fd = -1;
>  
>/* Initialize the memory handling.  Initial blocks are allocated on first
>   actual allocation.  */
> diff --git a/libdw/dwarf_cu_dwp_section_info.c 
> b/libdw/dwarf_cu_dwp_section_info.c
> index 6766fb9a..7bf08d9d 100644
> --- a/libdw/dwarf_cu_dwp_section_info.c
> +++ b/libdw/dwarf_cu_dwp_section_info.c
> @@ -340,6 +340,25 @@ __libdw_dwp_find_unit (Dwarf *dbg, bool debug_types, 
> Dwarf_Off off,
>  abbrev_offsetp, NULL);
>  }
>  
> +Dwarf_CU *
> +internal_function
> +__libdw_dwp_findcu_id (Dwarf *dbg, uint64_t unit_id8)
> +{
> +  Dwarf_Package_Index *index = __libdw_package_index (dbg, false);
> +  uint32_t unit_row;
> +  Dwarf_Off offset;
> +  Dwarf_CU *cu;
> +  if (__libdw_dwp_unit_row (index, unit_id8, &unit_row) == 0
> +  && __libdw_dwp_section_info (index, unit_row, DW_SECT_INFO, &offset,
> +NULL) == 0
> +  && (cu = __libdw_findcu (dbg, offset, false)) != NULL
> +  && cu->unit_type == DW_UT_split_compile
> +  && cu->unit_id8 == unit_id8)
> +return cu;
> +  else
> +return NULL;
> +}

No lookup for split_type?

>  int
>  dwarf_cu_dwp_section_info (Dwarf_CU *cu, unsigned int section,
>  Dwarf_Off *offsetp, Dwarf_Off *sizep)
> diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c
> index b7f817d9..78224ddb 100644
> --- a/libdw/dwarf_end.c
> +++ b/libdw/dwarf_end.c
> @@ -66,7 +66,9 @@ cu_fre

[PATCH] libelf/elf_newscn.c: fix build failure against gcc-14 (-Walloc-size)

2023-11-02 Thread Sergei Trofimovich
`gcc-14` adde a new -Walloc-size warning that makes sure that size of an
individual element matches size of a pointed type:

https://gcc.gnu.org/PR71219

`elfutils` triggers is on `calloc()` call where member size is sued as
`1`.

elf_newscn.c: In function `elf_newscn`:
elf_newscn.c:97:12: error: allocation of insufficient size «1» for type 
«Elf_ScnList» with size «16» [-Werror=alloc-size]
   97 |   newp = calloc (sizeof (Elf_ScnList)
  |^

The change swaps arguments to pass larger value as a member size.

Signed-off-by: Sergei Trofimovich 
---
 libelf/elf_newscn.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c
index d6bdf153..ec731f75 100644
--- a/libelf/elf_newscn.c
+++ b/libelf/elf_newscn.c
@@ -94,9 +94,9 @@ elf_newscn (Elf *elf)
  1
 #endif
  )
-  newp = calloc (sizeof (Elf_ScnList)
-+ ((elf->state.elf.scnincr *= 2)
-   * sizeof (Elf_Scn)), 1);
+  newp = calloc (1, sizeof (Elf_ScnList)
+   + ((elf->state.elf.scnincr *= 2)
+  * sizeof (Elf_Scn)));
   if (newp == NULL)
{
  __libelf_seterrno (ELF_E_NOMEM);
-- 
2.42.0



Re: [PATCH 11/14] tests: Handle DW_MACRO_{define, undef}_{strx, sup} in dwarf-getmacros

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, Sep 27, 2023 at 11:21:00AM -0700, Omar Sandoval wrote:
> + * dwarf-getmacros.c (mac): Add DW_MACRO_define_sup,
> + DW_MACRO_define_strx, DW_MACRO_undef_sup, and DW_MACRO_undef_strx
> + cases to opcode switch statement.

Looks sane. Applied and pushed.

Thanks,

Mark


Re: [PATCH 12/14] tests: Optionally dump all units in dwarf-getmacros

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, Sep 27, 2023 at 11:21:01AM -0700, Omar Sandoval wrote:
> If instead of a CU offset an empty string is given as the second
> argument, dump all units.

Pushed,

Mark


Re: [PATCH 13/14] libdw: Apply DWARF package file section offsets where appropriate

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, Sep 27, 2023 at 11:21:02AM -0700, Omar Sandoval wrote:
> The final piece of DWARF package file support is that offsets have to be
> interpreted relative to the section offset from the package index.
> .debug_abbrev.dwo is already covered, so sprinkle around calls to
> dwarf_cu_dwp_section_info for the remaining sections: .debug_line.dwo,
> .debug_loclists.dwo/.debug_loc.dwo, .debug_str_offsets.dwo,
> .debug_macro.dwo/.debug_macinfo.dwo, and .debug_rnglists.dwo.  With all
> of that in place, we can finally test various libdw functions on dwp
> files.

This looks good, but obviously needs some earlier patches.

> diff --git a/libdw/ChangeLog b/libdw/ChangeLog
> index f37d9411..08b2c3e6 100644
> --- a/libdw/ChangeLog
> +++ b/libdw/ChangeLog
> @@ -12,10 +12,13 @@
>   * dwarf_getmacros.c (get_macinfo_table): Replace assignment of
>   table->is_64bit with assignments of table->address_size and
>   table->offset_size.  Assume default DW_AT_stmt_list of 0 for split
> - DWARF.  Set table->dbg.
> + DWARF.  Set table->dbg.  Call dwarf_cu_dwp_section_info and add offset
> + to line_offset.
>   (get_table_for_offset): Ditto.
>   (read_macros): Get fake CU offset_size from table->offset_size instead
>   of table->is_64bit.
> + (get_offset_from): Call dwarf_cu_dwp_section_info and add offset to
> + *retp.
>   * dwarf_macro_getsrcfiles.c (dwarf_macro_getsrcfiles): Get
>   address_size for __libdw_getsrclines from table->address_size instead
>   of table->is_64bit.  Get dbg for __libdw_getsrclines from table->dbg
> @@ -36,6 +39,9 @@
>   (__libdw_set_debugdir): New declaration.
>   (__libdw_dwp_findcu_id): New declaration.
>   (__libdw_link_skel_split): Handle .debug_addr for dwp.
> + (str_offsets_base_off): Call dwarf_cu_dwp_section_info and add offset.
> + (__libdw_cu_ranges_base): Ditto.
> + (__libdw_cu_locs_base): Ditto.
>   * dwarf_begin_elf.c (dwarf_scnnames): Add IDX_debug_cu_index and
>   IDX_debug_tu_index.
>   (scn_to_string_section_idx): Ditto.
> @@ -60,6 +66,8 @@
>   __libdw_dwp_find_unit, and use it to adjust abbrev_offset and assign
>   newp->dwp_row.
>   * dwarf_cu_dwp_section_info.c: New file.
> + * dwarf_getlocation.c (initial_offset): Call dwarf_cu_dwp_section_info
> + and add offset to start_offset.
>  
>  2023-02-22  Mark Wielaard  
>  
> diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
> index 553fdc98..37b32fc1 100644
> --- a/libdw/dwarf_getlocation.c
> +++ b/libdw/dwarf_getlocation.c
> @@ -812,6 +812,12 @@ initial_offset (Dwarf_Attribute *attr, ptrdiff_t *offset)
>   : DWARF_E_NO_DEBUG_LOCLISTS),
>   NULL, &start_offset) == NULL)
>   return -1;
> +
> +  Dwarf_Off loc_off;
> +  if (INTUSE(dwarf_cu_dwp_section_info) (attr->cu, DW_SECT_LOCLISTS,
> +  &loc_off, NULL) != 0)
> + return -1;
> +  start_offset += loc_off;
>  }
>  
>*offset = start_offset;

OK. This already handled DW_FORM_loclistx, now also other loclist
refs.

> diff --git a/libdw/dwarf_getmacros.c b/libdw/dwarf_getmacros.c
> index a3a78884..2667eb45 100644
> --- a/libdw/dwarf_getmacros.c
> +++ b/libdw/dwarf_getmacros.c
> @@ -47,7 +47,15 @@ get_offset_from (Dwarf_Die *die, int name, Dwarf_Word 
> *retp)
>  return -1;
>  
>/* Offset into the corresponding section.  */
> -  return INTUSE(dwarf_formudata) (&attr, retp);
> +  if (INTUSE(dwarf_formudata) (&attr, retp) != 0)
> +return -1;
> +
> +  Dwarf_Off offset;
> +  if (INTUSE(dwarf_cu_dwp_section_info) (die->cu, DW_SECT_MACRO, &offset, 
> NULL)
> +  != 0)
> +return -1;
> +  *retp += offset;
> +  return 0;
>  }

OK.

>  static int
> @@ -131,6 +139,14 @@ get_macinfo_table (Dwarf *dbg, Dwarf_Word macoff, 
> Dwarf_Die *cudie)
>else if (cudie->cu->unit_type == DW_UT_split_compile
>  && dbg->sectiondata[IDX_debug_line] != NULL)
>  line_offset = 0;
> +  if (line_offset != (Dwarf_Off) -1)
> +{
> +  Dwarf_Off dwp_offset;
> +  if (INTUSE(dwarf_cu_dwp_section_info) (cudie->cu, DW_SECT_LINE,
> +  &dwp_offset, NULL) != 0)
> + return NULL;
> +  line_offset += dwp_offset;
> +}

OK.
 
>Dwarf_Macro_Op_Table *table = libdw_alloc (dbg, Dwarf_Macro_Op_Table,
>macinfo_data_size, 1);
> @@ -188,6 +204,14 @@ get_table_for_offset (Dwarf *dbg, Dwarf_Word macoff,
>   if (unlikely (INTUSE(dwarf_formudata) (attr, &line_offset) != 0))
> return NULL;
>  }
> +  if (line_offset != (Dwarf_Off) -1 && cudie != NULL)
> +{
> +  Dwarf_Off dwp_offset;
> +  if (INTUSE(dwarf_cu_dwp_section_info) (cudie->cu, DW_SECT_LINE,
> +  &dwp_offset, NULL) != 0)
> + return NULL;
> +  line_offset += dwp_offset;
> +}
>  
>uint8_t address_size;
>if (cudie != 

☠ Buildbot (Sourceware): elfutils - failed test (failure) (master)

2023-11-02 Thread builder
A new failure has been detected on builder elfutils-fedora-s390x while building 
elfutils.

Full details are available at:
https://builder.sourceware.org/buildbot/#builders/43/builds/244

Build state: failed test (failure)
Revision: 7878737f1c60dd444f47b701c208ade0b5a2becf
Worker: fedora-s390x
Build Reason: (unknown)
Blamelist: Omar Sandoval 

Steps:

- 0: worker_preparation ( success )

- 1: set package name ( success )

- 2: git checkout ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/2/logs/stdio

- 3: autoreconf ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/3/logs/stdio

- 4: configure ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/4/logs/stdio
- config.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/4/logs/config_log

- 5: get version ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/5/logs/stdio
- property changes: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/5/logs/property_changes

- 6: make ( warnings )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/6/logs/stdio
- warnings (3): 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/6/logs/warnings__3_

- 7: make check ( failure )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/7/logs/stdio
- test-suite.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/7/logs/test-suite_log

- 8: prep ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/8/logs/stdio

- 9: build bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/9/logs/stdio

- 10: fetch bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/10/logs/stdio

- 11: unpack bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/11/logs/stdio

- 12: pass .bunsen.source.gitname ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/12/logs/stdio

- 13: pass .bunsen.source.gitdescribe ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/13/logs/stdio

- 14: pass .bunsen.source.gitbranch ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/14/logs/stdio

- 15: pass .bunsen.source.gitrepo ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/15/logs/stdio

- 16: upload to bunsen ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/16/logs/stdio

- 17: clean up ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/17/logs/stdio

- 18: make distclean ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/244/steps/18/logs/stdio



Re: [PATCH 00/14] elfutils: DWARF package (.dwp) file support

2023-11-02 Thread Mark Wielaard
Hi Omar,

On Wed, Sep 27, 2023 at 11:20:49AM -0700, Omar Sandoval wrote:
> This patch series adds support for DWARF package files to libdw and the
> elfutils tools. It supports the GNU DebugFission format for DWARF 4 [1]
> and the format standardized in DWARF 5 (section 7.3.5 "DWARF Package
> Files"). It supports both automatically opening the .dwp file for a
> skeleton unit and examining the .dwp file alone, just like for .dwo
> files.

I had hoped to review and apply all this for the 0.190 release
tomorrow, but wasn't fast enough. In general it looks very good and
most has been applied as is. Except for the last patch I don't have
real concerns, just a few questions (see the specific reviews).

> Patch 1 is a trivial cleanup I found while developing this. Patches 2-6
> are fixes for unrelated bugs in split DWARF and/or DWARF 5 that I
> encountered while adding test cases for this series.

These have all been applied some time ago.

> The actual dwp support is in patches 7-10 and 13, including test cases.

7 and 9 have been applied already. 8 has some comments/nitpicks, I can
probably easily be convinced to accept it. 10 looks good, but depends
on 8, some questions, specificly about handling split type units. 13
looks good, but depends on 8 and 10.

> Patches 11 and 12 enable testing macro information in dwp files.

Both applied.

> Patch 14 adds support and tests for an LLVM extension to the dwp
> format.

I have to think a bit more on this.

Cheers,

Mark


Re: [PATCH] libelf/elf_newscn.c: fix build failure against gcc-14 (-Walloc-size)

2023-11-02 Thread Mark Wielaard
Hi Sergei,

On Thu, Nov 02, 2023 at 07:58:46PM +, Sergei Trofimovich wrote:
> `gcc-14` adde a new -Walloc-size warning that makes sure that size of an
> individual element matches size of a pointed type:
> 
> https://gcc.gnu.org/PR71219
> 
> `elfutils` triggers is on `calloc()` call where member size is sued as
> `1`.
> 
> elf_newscn.c: In function `elf_newscn`:
> elf_newscn.c:97:12: error: allocation of insufficient size «1» for type 
> «Elf_ScnList» with size «16» [-Werror=alloc-size]
>97 |   newp = calloc (sizeof (Elf_ScnList)
>   |^
> 
> The change swaps arguments to pass larger value as a member size.

Very nice. Patch applied.

Thanks,

Mark


☺ Buildbot (Sourceware): elfutils - build successful (master)

2023-11-02 Thread builder
A restored build has been detected on builder elfutils-fedora-s390x while 
building elfutils.

Full details are available at:
https://builder.sourceware.org/buildbot/#builders/43/builds/245

Build state: build successful
Revision: 6902b610939fbe15887905a0e2390c2f46cb1eb9
Worker: fedora-s390x
Build Reason: (unknown)
Blamelist: Omar Sandoval 

Steps:

- 0: worker_preparation ( success )

- 1: set package name ( success )

- 2: git checkout ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/2/logs/stdio

- 3: autoreconf ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/3/logs/stdio

- 4: configure ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/4/logs/stdio
- config.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/4/logs/config_log

- 5: get version ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/5/logs/stdio
- property changes: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/5/logs/property_changes

- 6: make ( warnings )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/6/logs/stdio
- warnings (3): 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/6/logs/warnings__3_

- 7: make check ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/7/logs/stdio
- test-suite.log: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/7/logs/test-suite_log

- 8: prep ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/8/logs/stdio

- 9: build bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/9/logs/stdio

- 10: fetch bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/10/logs/stdio

- 11: unpack bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/11/logs/stdio

- 12: pass .bunsen.source.gitname ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/12/logs/stdio

- 13: pass .bunsen.source.gitdescribe ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/13/logs/stdio

- 14: pass .bunsen.source.gitbranch ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/14/logs/stdio

- 15: pass .bunsen.source.gitrepo ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/15/logs/stdio

- 16: upload to bunsen ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/16/logs/stdio

- 17: clean up ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/17/logs/stdio

- 18: make distclean ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#builders/43/builds/245/steps/18/logs/stdio