gdb-multiarch cannot read ARM cores: "wrong size gregset struct in core file"

Bug #1233185 reported by Martin Pitt
14
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gdb (Debian)
Fix Released
Unknown
gdb (Ubuntu)
Fix Released
High
Brian Murray
Trusty
Fix Released
High
Brian Murray

Bug Description

We are getting complaints that the Launchpad apport retracers cannot create proper symbolic stack traces for crashes on ARM. It seems gdb-multiarch does not get along with our core dumps on ARM any more. Reproducing the full apport-retrace environment is a bit complicated, so I reduced this to a very simple test case:

Log into an ARM machine, like the Nexus G4, or porter-armhf.canonical.com (shedir), using "schroot -c saucy-armhf".

 1. create a core dump of bash:

     $ cd /tmp/
     $ bash -c 'ulimit -c unlimited; kill -SEGV $$'

  2. Run it with gdb:

    $ gdb --batch --ex 'file /bin/bash' --ex 'core-file core' --ex 'bt'
    Core was generated by `bash -c ulimit -c unlimited; kill -SEGV $$'.
    Program terminated with signal 11, Segmentation fault.
    #0 0x00007f2eae349257 in kill () at ../sysdeps/unix/syscall-template.S:8181
  ../sysdeps/unix/syscall-template.S: Datei oder Verzeichnis nicht gefunden.
    #0 0x00007f2eae349257 in kill () at ../sysdeps/unix/syscall-template.S:81
    #1 0x00000000004418a1 in kill_pid ()
    [...]

    There are not a lot of symbols as usually one doesn't have bash-dbgsym etc. installed, but it's clearly able to produce a stack trace.

  3. Run the same with gdb-multiarch:

     $ gdb-multiarch --batch --ex 'file /bin/bash' --ex 'core-file core' --ex 'bt'
    warning: wrong size gregset struct in core file
    Core was generated by `bash -c ulimit -c unlimited; kill -SEGV $$'.
    Program terminated with signal 11, Segmentation fault.
    warning: wrong size gregset struct in core file
    #0 <unavailable> in ?? ()
    #0 <unavailable> in ?? ()
    PC not available

FTR, Apport uses gdb-multiarch on amd64, and --ex 'set architecture arm' --ex 'set gnutarget elf32-littlearm' to generate stack traces for ARM coredumps on x86 (using binaries/libaries/debug symbols for ARM that get unpacked into a temporary directory). The full invocation looks something like this:

  gdb-multiarch --ex 'set architecture arm' --ex 'set gnutarget elf32-littlearm' --ex 'set debug-file-directory /tmp/s/usr/lib/debug' --ex 'set solib-absolute-prefix /tmp/s' --ex 'file /tmp/s/bin/bash' --ex 'core-file CoreDump' --ex 'bt full' --batch

But as gdb-multiarch does not even work on a native ARM machine for a native ARM core dump of the very same machine/OS, I guess it's something more fundamental which got broken there.

The same test case on amd64 works fine BTW, i. e. gdb-multiarch can process amd64 binaries on amd64.

Revision history for this message
Martin Pitt (pitti) wrote :

I checked again when this started:
- precise (7.4-2012.04-0ubuntu2.1): OK
- quantal/raring (7.5-0ubuntu2): broken
- saucy (7.6-5ubuntu2): broken

So it seems this started failing with 7.5?

Revision history for this message
Martin Pitt (pitti) wrote :

Further bisecting of versions shows that this regression was introduced in
https://launchpad.net/ubuntu/+source/gdb/7.4-2012.04-0ubuntu3, which (fortunately for debugging) isn't a new upstream release but just a merge with Debian with a 20 kB diff: http://launchpadlibrarian.net/107416511/gdb_7.4-2012.04-0ubuntu2_7.4-2012.04-0ubuntu3.diff.gz

Revision history for this message
Martin Pitt (pitti) wrote :

I found the part that caused the regression, it seems "--enable-targets=all" does not actually work. Reverting this change like in the attached debdiff fixes the problem. (Note that I had to drop powerpcspe-linux-gnu as this is not a valid target any more in current gdb.)

tags: added: patch
Martin Pitt (pitti)
Changed in gdb (Ubuntu):
status: New → Fix Committed
Changed in gdb (Debian):
status: Unknown → New
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package gdb - 7.6-5ubuntu3

---------------
gdb (7.6-5ubuntu3) saucy; urgency=low

  * debian/rules: Revert configuring with "MULTIARCH_TARGET=all" and go back
    to static list of targets. "all" is broken and does not work at least on
    ARM. (LP: #1233185)
 -- Martin Pitt <email address hidden> Mon, 30 Sep 2013 17:54:20 +0200

Changed in gdb (Ubuntu):
status: Fix Committed → Fix Released
Changed in gdb (Debian):
status: New → Confirmed
Changed in gdb (Debian):
status: Confirmed → Fix Released
Revision history for this message
Brian Murray (brian-murray) wrote :

This patch seems to have disappeared from the Ubuntu versions of gdb in Saucy, Trusty and Utopic. I've actually no idea what happened to the Saucy version of the package 7.6-5ubuntu3. I'll take care of fixing this in Utopic and Trusty. The test case in the description is still valid.

Changed in gdb (Ubuntu):
importance: Undecided → High
status: Fix Released → Triaged
assignee: nobody → Brian Murray (brian-murray)
Changed in gdb (Ubuntu Trusty):
assignee: nobody → Brian Murray (brian-murray)
importance: Undecided → High
status: New → Triaged
Changed in gdb (Ubuntu):
status: Triaged → In Progress
Changed in gdb (Ubuntu Trusty):
status: Triaged → In Progress
Revision history for this message
Brian Murray (brian-murray) wrote :

Oh, I was misreading 7.6.-5 as 7.6.5. I don't think this is worth fixing in Saucy.

Revision history for this message
Steve Langasek (vorlon) wrote : Please test proposed package

Hello Martin, or anyone else affected,

Accepted gdb into trusty-proposed. The package will build now and be available at http://launchpad.net/ubuntu/+source/gdb/7.7-0ubuntu3.2 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, and change the tag from verification-needed to verification-done. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in gdb (Ubuntu Trusty):
status: In Progress → Fix Committed
tags: added: verification-needed
Revision history for this message
Martin Pitt (pitti) wrote :

Thanks Brian! I upgraded the schroot on osageorange (where the Launchpad retracers run) to the trusty-proposed version. We can check the next incoming ARM crash report.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package gdb - 7.7.1-0ubuntu4

---------------
gdb (7.7.1-0ubuntu4) utopic; urgency=medium

  [ Martin Pitt ]
  * debian/rules: Revert configuring with "MULTIARCH_TARGET=all" and go back
    to static list of targets. "all" is broken and does not work at least on
    ARM. (LP: #1233185)
 -- Brian Murray <email address hidden> Mon, 30 Jun 2014 15:28:20 -0700

Changed in gdb (Ubuntu):
status: In Progress → Fix Released
Revision history for this message
Martin Pitt (pitti) wrote :

The Launchpad retracers have used this proposed version for some time now, and I confirm this issue is fixed. E. g. bug 1347053 was retraced successfully.

tags: added: verification-done
removed: verification-needed
Revision history for this message
Matthias Klose (doko) wrote :

this introduces regressions for arm64 and ppc64el, please add the gnu triplets for these targets to the multiarch list.

Changed in gdb (Ubuntu):
status: Fix Released → Triaged
tags: removed: verification-done
Changed in gdb (Ubuntu Trusty):
status: Fix Committed → Triaged
Revision history for this message
Matthias Klose (doko) wrote :

this was ppc64el only, now fixed in utopic. I really would like to see the utopic version in trusty, re-adding the linaro changes and the updates of the 7.7.1 release, as documented at https://sourceware.org/gdb/

This is a minor corrective release over GDB 7.7, fixing the following issues:

PR win32/14018 (pc register not available error on Windows)
PR python/16547 (GDB crashing on gdb.python/py-linetable.exp)
PR build/16550 (64-bit GDB doesn't build on Solaris)
PR gdb/16626 (auto-load regression: gdb uses wrong file to test safeness)
PR breakpoints/16292 (GDB oversteps a range in some cases.)
PR gdb/16575 (stale breakpoint instructions in the code cache)
PR gdb/16696 (AIX 32-bit cores, high section addresses)
PR gdb/16721 (Erroneous backtrace on AVR)
PR gdb/16832 (Erroneous backtrace on avrxmega architectures)
PR build/16873 (GDB 7.7 does not build with GCC 4.9)

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package gdb - 7.7.1-0ubuntu5

---------------
gdb (7.7.1-0ubuntu5) utopic; urgency=medium

  * Fix regression introduced in previous upload, again supporting
    powerpc64le in the multilib build. LP: #1233185.
 -- Matthias Klose <email address hidden> Wed, 23 Jul 2014 15:19:13 +0200

Changed in gdb (Ubuntu):
status: Triaged → Fix Released
Revision history for this message
Mathew Hodson (mhodson) wrote :

Marking this, so that it is clear on http://people.canonical.com/~ubuntu-archive/pending-sru.html that it needs another upload.

tags: added: verification-failed
Revision history for this message
Mathew Hodson (mhodson) wrote :

http://launchpad.net/ubuntu/+source/gdb/7.7.1-0ubuntu5~14.04.2 is available in trusty-proposed. Does that package include a fix for this bug?

Revision history for this message
Brian Murray (brian-murray) wrote :

Yes, see the changelog.

--- gdb-7.7/debian/changelog 2014-06-30 18:22:58.000000000 +0000
+++ gdb-7.7.1/debian/changelog 2014-10-08 18:48:25.000000000 +0000
@@ -1,19 +1,52 @@
-gdb (7.7-0ubuntu3.2) trusty; urgency=medium
+gdb (7.7.1-0ubuntu5~14.04.2) trusty-proposed; urgency=medium
+
+ * SRU: Update for trusty. LP: #1351646.
+ * Build the gdb-doc package from the gdb sources.
+
+ -- Matthias Klose <email address hidden> Wed, 08 Oct 2014 20:48:14 +0200
+
+gdb (7.7.1-0ubuntu5) utopic; urgency=medium
+
+ * Fix regression introduced in previous upload, again supporting
+ powerpc64le in the multilib build. LP: #1233185.
+
+ -- Matthias Klose <email address hidden> Wed, 23 Jul 2014 15:19:13 +0200
+
+gdb (7.7.1-0ubuntu4) utopic; urgency=medium

   [ Martin Pitt ]
   * debian/rules: Revert configuring with "MULTIARCH_TARGET=all" and go back
     to static list of targets. "all" is broken and does not work at least on
     ARM. (LP: #1233185)

- -- Brian Murray <email address hidden> Mon, 30 Jun 2014 11:22:03 -0700
+ -- Brian Murray <email address hidden> Mon, 30 Jun 2014 15:28:20 -0700

Mathew Hodson (mhodson)
Changed in gdb (Ubuntu Trusty):
status: Triaged → Fix Committed
tags: added: verification-needed
removed: verification-failed
Revision history for this message
Martin Pitt (pitti) wrote :

I ran the test case on an armhf machine with gdb/gdb-multiarch 7.7.1-0ubuntu5~14.04.2 from trusty-proposed, and it works well now. I also copied the binary, libraries, and core dump to an amd64 machine and ran gdb-multiarch there, with the same result. So for this purpose, the trusty-proposed binary works fine now.

tags: added: verification-done
removed: verification-needed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package gdb - 7.7.1-0ubuntu5~14.04.2

---------------
gdb (7.7.1-0ubuntu5~14.04.2) trusty-proposed; urgency=medium

  * SRU: Update for trusty. LP: #1351646.
  * Build the gdb-doc package from the gdb sources.
 -- Matthias Klose <email address hidden> Wed, 08 Oct 2014 20:48:14 +0200

Changed in gdb (Ubuntu Trusty):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.