[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-03-22 Thread William Ashley
Thanks! I verified bionic and focal (via docker images) now successfully
run the libunwind-using tests updated earlier.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Released
Status in libunwind source package in Focal:
  Fix Released

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-03-21 Thread Matthew Ruffell
Hi William.

The libunwind SRU for Bionic and Focal have now been released to
-updates. Their versions are 1.2.1-8ubuntu0.1 for Bionic, and
1.2.1-9ubuntu0.1 for Focal.

I just want to apologise for the significant delay in getting libunwind
released. It really was a exceptional amount of time, and I'm sorry it
took so long.

Since I wrote to you last, I root caused the issue and worked with
Paride to resolve the regression that was introduced into autopkgtest
itself.

The bug in autopkgtest was quite obscure, and it required the following
to occur:

1. an all-proposed build (--apt-pocket=proposed with no package pinning)
2. multiple tests defined in d/t/control
3. the tests do not allow reusing the same testbed system

All these conditions were present in the kernel autopkgtests, and the
result was that the change to allow apt pinning for -proposed caused
_create_apt_pinning_for_packages() to be called incorrectly and it set a
pinning for the -release pocket at 990, over -updates and -proposed, at
500 each, which meant that -release was being favoured over -proposed,
and it caused all sorts of apt resolve issues.

The issue was introduced in:

commit 1c018c78de9d9421c0c358c900a37e545334cc66
From: Paride Legovini 
Date: Thu, 15 Dec 2022 21:47:02 +0100
Subject: Pin pockets with Pin-Priority: 500
Link: 
https://salsa.debian.org/ci-team/autopkgtest/-/commit/1c018c78de9d9421c0c358c900a37e545334cc66

The full explanation of the autopkgtest issues can be found in the below
emails:

>From myself to Paride
https://paste.ubuntu.com/p/44yFTBNBHh/

>From Paride to myself:
https://paste.ubuntu.com/p/jtt5wh6BB2/

Paride's merge request;
https://salsa.debian.org/ci-team/autopkgtest/-/merge_requests/218

Final fix commit:
https://salsa.debian.org/ci-team/autopkgtest/-/commit/94b9bb8db3051123d7b29a7880420340a76c7b7e

The fix is in place on the Launchpad build infrastructure, and we re-ran
all autopkgtests around libunwind and its reverse dependencies, and they
all passed, leading us clear to release libunwind to -updates.

Again, I sincerely apologise for keeping you waiting for so long, and I
thank you for your patience and understanding while I debugged
autopkgtest.

Thanks,
Matthew

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Released
Status in libunwind source package in Focal:
  Fix Released

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-03-21 Thread Launchpad Bug Tracker
This bug was fixed in the package libunwind - 1.2.1-9ubuntu0.1

---
libunwind (1.2.1-9ubuntu0.1) focal; urgency=medium

  * Manually enable C++ exception support only on i386 and amd64,
it is known broken on several other architectures.
Thanks to Bernhard Übelacker. (Closes: #923962) (LP: #1999104)

 -- Matthew Ruffell   Tue, 13 Dec 2022
12:07:17 +1300

** Changed in: libunwind (Ubuntu Focal)
   Status: Fix Committed => Fix Released

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Released
Status in libunwind source package in Focal:
  Fix Released

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-03-21 Thread Launchpad Bug Tracker
This bug was fixed in the package libunwind - 1.2.1-8ubuntu0.1

---
libunwind (1.2.1-8ubuntu0.1) bionic; urgency=medium

  * Manually enable C++ exception support only on i386 and amd64,
it is known broken on several other architectures.
Thanks to Bernhard Übelacker. (Closes: #923962) (LP: #1999104)

 -- Matthew Ruffell   Tue, 13 Dec 2022
12:12:23 +1300

** Changed in: libunwind (Ubuntu Bionic)
   Status: Fix Committed => Fix Released

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Released
Status in libunwind source package in Focal:
  Fix Released

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-02-17 Thread William Ashley
Thank you for that thorough explanation and helping get this fix
released, Matthew.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-02-17 Thread Matthew Ruffell
Hi William,

I sincerely apologise for the delay.

Currently libunwind is stuck in -proposed due to benign autopkgtest
regressions in the kernel packages.

If you go to the below page:

https://people.canonical.com/~ubuntu-archive/pending-sru.html

And search for "libunwind" you will see entries for Bionic and Focal.

It is SRU policy to not release a package with current autopkgtest
regressions.

Now, I have spent more time than I am willing to admit on trying to
debug these failures, and I have also asked the Kernel Team, several
which took a look, and some Launchpad admins, and we are still a bit
stuck. The problem does not reproduce locally, only on Launchpad
builders.

For example, take the 4.15 Bionic Kernel:

https://autopkgtest.ubuntu.com/packages/l/linux/bionic/amd64

(it is a reverse dependency of libunwind, which is why it is selected
for autopkgtest)

https://autopkgtest.ubuntu.com/results/autopkgtest-
bionic/bionic/amd64/l/linux/20230110_115614_09e98@/log.gz

It rebuilds fine, but then runs into apt resolver trouble when running
the kernel testsuite.

autopkgtest makes a dummy package, that contains the list of necessary
dependencies to run the testsuite, dpkg -i to install the package, and
then does an apt install -f to force dependency resolution. The dummy
package is called autopkgtest-satdep.

https://paste.ubuntu.com/p/Cszfkvy47Z/

But it fails in strange ways, like not being able to select build-
essential, even though it is already installed in the builder.

I am still trying to debug the root cause behind these autopkgtest
regressions, which is why things have been delayed.

There is a provision in SRUs where they can be released as long as I can
prove that the upload did not cause the regression:

https://wiki.ubuntu.com/StableReleaseUpdates#Autopkgtest_Regressions

In which case, I may as well invoke this clause, since I don't wish to
keep you waiting any longer.

I will try and get this package released within the week.

Thanks,
Matthew

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-02-16 Thread William Ashley
How long will it take for these changes to be released to Focal and
Bionic?

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-01-04 Thread Matthew Ruffell
Performing verification for Bionic.

I started two instances on AWS, one c6g.medium (arm64) and a t2.micro
(amd64).

I went through the reproducer listed in the testcase with libunwind-dev
1.2.1-8 from -release.

$ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
$ sudo apt install -y build-essential libunwind-dev
$ tar xvf libunwind.tar.gz && cd test
test/
test/lib.hpp
test/main.cpp
test/lib.cpp
test/Makefile
~/test$ make all
g++ -g -shared-libgcc -shared -fPIC -std=c++11 -o libtest.so lib.cpp
g++ -g -shared-libgcc -o main -L. -Wl,-rpath,. main.cpp -ltest
g++ -g -shared-libgcc -o main_unwind -L. -Wl,-rpath,.  main.cpp -ltest -lunwind

On arm64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
terminate called after throwing an instance of 'int'
terminate called recursively
Aborted (core dumped)

On amd64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
int throws lib
int caught main

As expected, we see arm64 abort the execution of the reproducer.

I then installed 1.2.1-8ubuntu0.1 from -proposed and rebuilt the
reproducers:

$ make clean
$ make all
g++ -g -shared-libgcc -shared -fPIC -std=c++11 -o libtest.so lib.cpp
g++ -g -shared-libgcc -o main -L. -Wl,-rpath,. main.cpp -ltest
g++ -g -shared-libgcc -o main_unwind -L. -Wl,-rpath,.  main.cpp -ltest -lunwind

On arm64:

$ ./main
int throws lib
int caught main
$ ./main_unwind
int throws lib
int caught main

On amd64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
int throws lib
int caught main

We see that 1.2.1-8ubuntu0.1 from -proposed does not abort, and instead
runs as expected. There is no change in behaviour on amd64. The package
in -proposed fixes the problem, happy to mark as verified for Bionic.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2023-01-04 Thread Matthew Ruffell
Performing verification for Focal.

I started two instances on AWS, one c6g.medium (arm64) and a t2.micro
(amd64).

I went through the reproducer listed in the testcase with libunwind-dev
1.2.1-9build1 from -release.

$ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
$ sudo apt install -y build-essential libunwind-dev
$ tar xvf libunwind.tar.gz && cd test
test/
test/lib.hpp
test/main.cpp
test/lib.cpp
test/Makefile
~/test$ make all
g++ -g -shared-libgcc -shared -fPIC -std=c++11 -o libtest.so lib.cpp
g++ -g -shared-libgcc -o main -L. -Wl,-rpath,. main.cpp -ltest
g++ -g -shared-libgcc -o main_unwind -L. -Wl,-rpath,.  main.cpp -ltest -lunwind

On arm64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
terminate called after throwing an instance of 'int'
terminate called recursively
Aborted (core dumped)

On amd64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
int throws lib
int caught main

As expected, we see arm64 abort the execution of the reproducer.

I then installed 1.2.1-9ubuntu0.1 from -proposed and rebuilt the
reproducers:

$ make clean
$ make all
g++ -g -shared-libgcc -shared -fPIC -std=c++11 -o libtest.so lib.cpp
g++ -g -shared-libgcc -o main -L. -Wl,-rpath,. main.cpp -ltest
g++ -g -shared-libgcc -o main_unwind -L. -Wl,-rpath,.  main.cpp -ltest -lunwind

On arm64:

$ ./main
int throws lib
int caught main
$ ./main_unwind
int throws lib
int caught main

On amd64:

~/test$ ./main
int throws lib
int caught main
~/test$ ./main_unwind
int throws lib
int caught main

We see that 1.2.1-9ubuntu0.1 from -proposed does not abort, and instead
runs as expected. There is no change in behaviour on amd64. The package
in -proposed fixes the problem, happy to mark as verified for Focal.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-16 Thread Ali Saidi
Also tried folly (the dependency of mcrouter that was throwing the
exception) and unit tests that previously failed because of this bug now
pass.

** Tags removed: verification-needed-bionic verification-needed-focal
** Tags added: verification-done-bionic verification-done-focal

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-16 Thread Ali Saidi
Tested on bionic with package libunwind8_1.2.1-8ubuntu0.1 and the
reproducer ran successfully.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-16 Thread Ali Saidi
Tested on focal with package libunwind8_1.2.1-9ubuntu0.1 and the
reproducer ran successfully

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-16 Thread Timo Aaltonen
Hello Ali, or anyone else affected,

Accepted libunwind into bionic-proposed. The package will build now and
be available at
https://launchpad.net/ubuntu/+source/libunwind/1.2.1-8ubuntu0.1 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 on 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, what testing has been
performed on the package and change the tag from verification-needed-
bionic to verification-done-bionic. If it does not fix the bug for you,
please add a comment stating that, and change the tag to verification-
failed-bionic. In either case, without details of your testing we will
not be able to proceed.

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

N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.

** Changed in: libunwind (Ubuntu Bionic)
   Status: In Progress => Fix Committed

** Tags added: verification-needed verification-needed-bionic

** Changed in: libunwind (Ubuntu Focal)
   Status: In Progress => Fix Committed

** Tags added: verification-needed-focal

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  Fix Committed
Status in libunwind source package in Focal:
  Fix Committed

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-15 Thread Heitor Alves de Siqueira
** Tags removed: sts-sponsor-halves

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  In Progress
Status in libunwind source package in Focal:
  In Progress

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: tigervnc-standalone-server
Depends: tarantool

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-14 Thread Michael Hudson-Doyle
I tweaked the version numbers slightly (ubuntu1 -> ubuntu0.1) and
uploaded.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  In Progress
Status in libunwind source package in Focal:
  In Progress

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-13 Thread Heitor Alves de Siqueira
** Tags removed: sts-sponsor
** Tags added: sts-sponsor-halves

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  In Progress
Status in libunwind source package in Focal:
  In Progress

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: tigervnc-standalone-server

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-13 Thread Matthew Ruffell
** Tags added: sts-sponsor

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libunwind in Ubuntu.
https://bugs.launchpad.net/bugs/1999104

Title:
  arm64: broken c++ exception handler support leads to std::terminate()
  being called and program abort

Status in libunwind package in Ubuntu:
  Fix Released
Status in libunwind source package in Bionic:
  In Progress
Status in libunwind source package in Focal:
  In Progress

Bug description:
  [Impact]

  On architectures other than i386 and amd64, the C++ exception support
  in libunwind appears to be broken, always failing and calling
  std::terminate() which leads to the program aborting.

  (gdb) bt
  #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0xf7c2daac in __GI_abort () at abort.c:79
  #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #4  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #5  0xf7e1f5e0 in __cxa_rethrow ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
  #8  0xf7e1f280 in std::terminate() ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #9  0xf7e1f574 in __cxa_throw ()
 from /lib/aarch64-linux-gnu/libstdc++.so.6
  #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
  #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9

  Compiling libunwind with --enable-cxx-exceptions enabled leads to
  _Unwind_RaiseException being called during __cxa_throw(), which fails
  to find a handler, and the generic std::terminate() is called instead,
  aborting the program.

  On i386 and amd64 this doesn't seem to be the case, and the libunwind
  handlers seem to be present.

  To fix, we only enable the configure option --enable-cxx-exceptions on
  i386 and amd64 only, in debian/rules. This lets other architectures
  fall back to the symbols provided by libgcc_s, which implementation
  works correctly.

  [Testcase]

  Ali Sadi has provided a reproducer program.

  Start an arm64 instance, for example, a c6g.medium instance on AWS,
  with either Bionic or Focal.

  $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
  $ sudo apt install -y build-essential libunwind-dev
  $ tar xvf libunwind.tar.gz && cd test
  $ make all

  There are two executable, main and main_unwind. main is not linked to
  libunwind, and main_unwind is linked to libunwind.

  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)

  If you install the test package available in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test

  $ make clean
  $ sudo apt install -y libunwind-dev
  $ make all
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  int throws lib
  int caught main

  The exception is caught as expected the program does not abort.

  [Where problems could occur]

  For architectures other than i386 and amd64, we are changing from
  libunwind provided exception handlers for __cxa_throw(), and using
  those provided by libgcc_s instead.

  There are a few reverse dependencies for libunwind-dev and libunwind8,
  which need to be considered:

  $ apt rdepends libunwind-dev
  libunwind-dev
  Reverse Depends:
Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
Depends: libefl-all-dev

  t$ apt rdepends libunwind-dev8
  libunwind8
  Reverse Depends:
Depends: libunwind-dev (= 1.2.1-9build1)
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: xwayland
Depends: xserver-xorg-core
Depends: xserver-xephyr
Depends: linux-tools-5.4.0-*
Depends: linux-raspi-tools-*
Depends: linux-raspi2-tools-5.4.0-*
Depends: linux-raspi2-5.4-tools-5.4.0-*
Depends: linux-oracle-5.15-tools-5.15.0-*
Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
Depends: linux-hwe-5.8-tools-5.8.0-*
Depends: linux-hwe-5.15-tools-5.15.0-*
Depends: linux-gke-tools-5.4.0-*
Depends: linux-gke-5.15-tools-5.15.0-*
Depends: linux-gcp-tools-5.4.0-*
Depends: linux-gcp-5.15-tools-5.15.0-*
Depends: linux-azure-tools-5.4.0-*
Depends: linux-azure-5.15-tools-5.15.0-*
Depends: linux-aws-tools-5.4.0-*
Depends: linux-aws-5.8-tools-5.8.0-*
Depends: linux-aws-5.15-tools-5.15.0-*
Depends: xvfb
Depends: xnest
Depends: xdmx
Depends: trafficserver
Depends: tilix
Depends: tigervnc-standalone-server
Depends: tarantool
Depends: 

[Touch-packages] [Bug 1999104] Re: arm64: broken c++ exception handler support leads to std::terminate() being called and program abort

2022-12-12 Thread Matthew Ruffell
** Summary changed:

- libunwind causes crashes on arm64
+ arm64: broken c++ exception handler support leads to std::terminate() being 
called and program abort

** Description changed:

- There is a bug in libunwind in both 18.04 and 20.04 on arm64 where when
- linked with libunwind instead of catching an exception, the program
- crashes. This was first seen on mcrouter, but attached is a small
- reproducer where `main_unwind` will crash. The libunwind shipping with
- 22.04 doesn't appear to have this problem, nor do unmodified upstream
- versions (including the 1.2.1 which is the 18.04 and 20.04 version).
+ [Impact]
  
- Attached is a small reproducer that demonstrates the problem.
+ On architectures other than i386 and amd64, the C++ exception support in
+ libunwind appears to be broken, always failing and calling
+ std::terminate() which leads to the program aborting.
  
- Ubuntu 22.04:
- ```
- $ ./main
- int throws lib
- int caught main
- $ ./main_unwind
- int throws lib
- int caught main
- ```
+ (gdb) bt
+ #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
+ #1  0xf7c2daac in __GI_abort () at abort.c:79
+ #2  0xf7e21868 in __gnu_cxx::__verbose_terminate_handler() ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #3  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #4  0xf7e1f280 in std::terminate() ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #5  0xf7e1f5e0 in __cxa_rethrow ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #6  0xf7e21804 in __gnu_cxx::__verbose_terminate_handler() ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #7  0xf7e1f21c in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #8  0xf7e1f280 in std::terminate() ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #9  0xf7e1f574 in __cxa_throw ()
+from /lib/aarch64-linux-gnu/libstdc++.so.6
+ #10 0xf7fb9f50 in function_throws_int () at lib.cpp:9
+ #11 0x0d54 in main (argc=1, argv=0xfab8) at main.cpp:9
  
- Ubuntu 20.04:
- ```
+ Compiling libunwind with --enable-cxx-exceptions enabled leads to
+ _Unwind_RaiseException being called during __cxa_throw(), which fails to
+ find a handler, and the generic std::terminate() is called instead,
+ aborting the program.
+ 
+ On i386 and amd64 this doesn't seem to be the case, and the libunwind
+ handlers seem to be present.
+ 
+ To fix, we only enable the configure option --enable-cxx-exceptions on
+ i386 and amd64 only, in debian/rules. This lets other architectures fall
+ back to the symbols provided by libgcc_s, which implementation works
+ correctly.
+ 
+ [Testcase]
+ 
+ Ali Sadi has provided a reproducer program.
+ 
+ Start an arm64 instance, for example, a c6g.medium instance on AWS, with
+ either Bionic or Focal.
+ 
+ $ wget 
https://bugs.launchpad.net/ubuntu/+source/libunwind/+bug/1999104/+attachment/5635122/+files/libunwind.tar.gz
+ $ sudo apt install -y build-essential libunwind-dev
+ $ tar xvf libunwind.tar.gz && cd test
+ $ make all
+ 
+ There are two executable, main and main_unwind. main is not linked to
+ libunwind, and main_unwind is linked to libunwind.
+ 
  $ ./main
  int throws lib
  int caught main
  $ ./main_unwind
  terminate called after throwing an instance of 'int'
  terminate called recursively
  Aborted (core dumped)
- ```
+ 
+ If you install the test package available in the following ppa:
+ 
+ https://launchpad.net/~mruffell/+archive/ubuntu/sf350246-test
+ 
+ $ make clean
+ $ sudo apt install -y libunwind-dev
+ $ make all
+ $ ./main
+ int throws lib
+ int caught main
+ $ ./main_unwind
+ int throws lib
+ int caught main
+ 
+ The exception is caught as expected the program does not abort.
+ 
+ [Where problems could occur]
+ 
+ For architectures other than i386 and amd64, we are changing from
+ libunwind provided exception handlers for __cxa_throw(), and using those
+ provided by libgcc_s instead.
+ 
+ There are a few reverse dependencies for libunwind-dev and libunwind8,
+ which need to be considered:
+ 
+ $ apt rdepends libunwind-dev
+ libunwind-dev
+ Reverse Depends:
+   Depends: libunwind-setjmp0-dev (= 1.2.1-9build1)
+   Depends: libefl-all-dev
+ 
+ t$ apt rdepends libunwind-dev8
+ libunwind8
+ Reverse Depends:
+   Depends: libunwind-dev (= 1.2.1-9build1)
+   Depends: xvfb
+   Depends: xnest
+   Depends: xdmx
+   Depends: xwayland
+   Depends: xserver-xorg-core
+   Depends: xserver-xephyr
+   Depends: linux-tools-5.4.0-*
+   Depends: linux-raspi-tools-*
+   Depends: linux-raspi2-tools-5.4.0-*
+   Depends: linux-raspi2-5.4-tools-5.4.0-*
+   Depends: linux-oracle-5.15-tools-5.15.0-*
+   Depends: linux-lowlatency-hwe-5.15-tools-5.15.0-*
+   Depends: linux-hwe-5.8-tools-5.8.0-*
+   Depends: linux-hwe-5.15-tools-5.15.0-*
+   Depends: linux-gke-tools-5.4.0-*
+   Depends: linux-gke-5.15-tools-5.15.0-*
+   Depends: linux-gcp-tools-5.4.0-*
+   Depends: linux-gcp-5.15-tools-5.15.0-*
+   Depends: