From cd9fdcb0797711dd36ba0018447fee1399e77592 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 7 Mar 2013 09:59:33 +1000 Subject: [PATCH] xserver 1.14 --- .gitignore | 1 + ...-tell-changed-so-randr-clients-can-t.patch | 191 ------------------ ...ctly-set-changed-bits-in-randr-scree.patch | 110 ++++++++++ ...anged-modify-the-main-protocol-scree.patch | 47 +++++ ...ected-changed-on-the-protocol-screen.patch | 31 +++ ...anges-when-we-disconnect-a-GPU-slave.patch | 61 ++++++ ...cleanup-properly-if-the-screen-fails.patch | 38 ---- sources | 2 +- xorg-x11-server.spec | 20 +- 9 files changed, 264 insertions(+), 237 deletions(-) delete mode 100644 0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch create mode 100644 0001-randr-don-t-directly-set-changed-bits-in-randr-scree.patch create mode 100644 0001-randr-make-SetChanged-modify-the-main-protocol-scree.patch create mode 100644 0001-randr-only-respected-changed-on-the-protocol-screen.patch create mode 100644 0001-randr-report-changes-when-we-disconnect-a-GPU-slave.patch delete mode 100644 0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch diff --git a/.gitignore b/.gitignore index b4e6cac..d5c69d7 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ xorg-server-1.9.1.tar.bz2 /xorg-server-1.13.1.tar.bz2 /xorg-server-20130109.tar.xz /xorg-server-20130215.tar.xz +/xorg-server-1.14.0.tar.bz2 diff --git a/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch b/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch deleted file mode 100644 index 9be545f..0000000 --- a/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch +++ /dev/null @@ -1,191 +0,0 @@ -From fc08ad50a2ad81f8741939f8e9eacf86b5af6676 Mon Sep 17 00:00:00 2001 -From: Fedora X Ninjas -Date: Wed, 12 Dec 2012 15:15:38 +1000 -Subject: [PATCH] autoconfig: fixup tell changed so randr clients can tell - -This lets the gnome applet update if a usb device appears/disappears ---- - hw/xfree86/common/xf86platformBus.c | 6 ++++-- - hw/xfree86/modes/xf86Crtc.c | 4 ++++ - randr/randr.c | 24 +++++++++++++++++++++++- - randr/randrstr.h | 4 ++++ - randr/rrcrtc.c | 2 +- - randr/rrinfo.c | 2 +- - randr/rroutput.c | 2 +- - randr/rrscreen.c | 2 +- - 8 files changed, 39 insertions(+), 7 deletions(-) - -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index 0b735d1..891142d 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -47,6 +47,7 @@ - #include "Pci.h" - #include "xf86platformBus.h" - -+#include "randrstr.h" - int platformSlotClaimed; - - int xf86_num_platform_devices; -@@ -454,7 +455,8 @@ xf86platformAddDevice(int index) - /* attach unbound to 0 protocol screen */ - AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); - xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]); -- -+ -+ RRTellChanged(xf86Screens[0]->pScreen); - return 0; - } - -@@ -497,7 +499,7 @@ xf86platformRemoveDevice(int index) - xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL); - - xf86_remove_platform_device(index); -- -+ RRTellChanged(xf86Screens[0]->pScreen); - out: - return; - } -diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c -index 61119b3..a4fdec9 100644 ---- a/hw/xfree86/modes/xf86Crtc.c -+++ b/hw/xfree86/modes/xf86Crtc.c -@@ -743,10 +743,12 @@ xf86CrtcCloseScreen(ScreenPtr screen) - /* detach any providers */ - if (config->randr_provider) { - if (config->randr_provider->offload_sink) { -+ RRSetChanged(screen); - DetachOffloadGPU(screen); - config->randr_provider->offload_sink = NULL; - } - else if (config->randr_provider->output_source) { -+ RRSetChanged(screen); - DetachOutputGPU(screen); - config->randr_provider->output_source = NULL; - } -@@ -3341,11 +3343,13 @@ void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master) - DetachUnboundGPU(pScrn->pScreen); - AttachOffloadGPU(master->pScreen, pScrn->pScreen); - slave_config->randr_provider->offload_sink = master_provider; -+ RRSetChanged(master->pScreen); - } else if ((master->capabilities & RR_Capability_SourceOutput) && - pScrn->capabilities & RR_Capability_SinkOutput) { - /* sink offload */ - DetachUnboundGPU(pScrn->pScreen); - AttachOutputGPU(master->pScreen, pScrn->pScreen); - slave_config->randr_provider->output_source = master_provider; -+ RRSetChanged(master->pScreen); - } - } -diff --git a/randr/randr.c b/randr/randr.c -index da48c3f..5b1957b 100644 ---- a/randr/randr.c -+++ b/randr/randr.c -@@ -462,6 +462,28 @@ TellChanged(WindowPtr pWin, pointer value) - return WT_WALKCHILDREN; - } - -+void -+RRSetChanged(ScreenPtr pScreen) -+{ -+ /* set changed bits on the master screen only */ -+ ScreenPtr master; -+ rrScrPriv(pScreen); -+ rrScrPrivPtr mastersp; -+ -+ if (pScreen->isGPU) { -+ master = pScreen->current_master; -+ if (!master) -+ return; -+ mastersp = rrGetScrPriv(master); -+ } -+ else { -+ master = pScreen; -+ mastersp = pScrPriv; -+ } -+ -+ mastersp->changed = TRUE; -+} -+ - /* - * Something changed; send events and adjust pointer position - */ -@@ -482,7 +504,7 @@ RRTellChanged(ScreenPtr pScreen) - mastersp = pScrPriv; - } - -- if (pScrPriv->changed) { -+ if (mastersp->changed) { - UpdateCurrentTimeIf(); - if (mastersp->configChanged) { - mastersp->lastConfigTime = currentTime; -diff --git a/randr/randrstr.h b/randr/randrstr.h -index 212b0a9..d61f20e 100644 ---- a/randr/randrstr.h -+++ b/randr/randrstr.h -@@ -480,6 +480,10 @@ extern _X_EXPORT void - RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); - - /* randr.c */ -+/* set a screen change on the primary screen */ -+extern _X_EXPORT void -+RRSetChanged(ScreenPtr pScreen); -+ - /* - * Send all pending events - */ -diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c -index e82d050..d57cc08 100644 ---- a/randr/rrcrtc.c -+++ b/randr/rrcrtc.c -@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged) - if (pScreen) { - rrScrPriv(pScreen); - -- pScrPriv->changed = TRUE; -+ RRSetChanged(pScreen); - /* - * Send ConfigureNotify on any layout change - */ -diff --git a/randr/rrinfo.c b/randr/rrinfo.c -index 1408d6f..fc57bd4 100644 ---- a/randr/rrinfo.c -+++ b/randr/rrinfo.c -@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen, - pScrPriv->minHeight = minHeight; - pScrPriv->maxWidth = maxWidth; - pScrPriv->maxHeight = maxHeight; -- pScrPriv->changed = TRUE; -+ RRSetChanged(pScreen); - pScrPriv->configChanged = TRUE; - } - -diff --git a/randr/rroutput.c b/randr/rroutput.c -index 88781ba..922d61f 100644 ---- a/randr/rroutput.c -+++ b/randr/rroutput.c -@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged) - output->changed = TRUE; - if (pScreen) { - rrScrPriv(pScreen); -- pScrPriv->changed = TRUE; -+ RRSetChanged(pScreen); - if (configChanged) - pScrPriv->configChanged = TRUE; - } -diff --git a/randr/rrscreen.c b/randr/rrscreen.c -index 39340cc..36179ae 100644 ---- a/randr/rrscreen.c -+++ b/randr/rrscreen.c -@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen) - pScrPriv->height = pScreen->height; - pScrPriv->mmWidth = pScreen->mmWidth; - pScrPriv->mmHeight = pScreen->mmHeight; -- pScrPriv->changed = TRUE; -+ RRSetChanged(pScreen); - /* pScrPriv->sizeChanged = TRUE; */ - - RRTellChanged(pScreen); --- -1.8.0.1 - diff --git a/0001-randr-don-t-directly-set-changed-bits-in-randr-scree.patch b/0001-randr-don-t-directly-set-changed-bits-in-randr-scree.patch new file mode 100644 index 0000000..6aaaeb3 --- /dev/null +++ b/0001-randr-don-t-directly-set-changed-bits-in-randr-scree.patch @@ -0,0 +1,110 @@ +From 42ca69172c897713295f7c2b471f0e5d072c920b Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 9 Jan 2013 14:32:47 +1000 +Subject: [PATCH] randr: don't directly set changed bits in randr screen + +Introduce a wrapper interface so we can fix things up for multi-gpu +situations later. + +This just introduces the API for now. + +Signed-off-by: Dave Airlie +Signed-off-by: Fedora X Ninjas +--- + randr/randr.c | 8 ++++++++ + randr/randrstr.h | 4 ++++ + randr/rrcrtc.c | 2 +- + randr/rrinfo.c | 2 +- + randr/rroutput.c | 2 +- + randr/rrscreen.c | 2 +- + 6 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/randr/randr.c b/randr/randr.c +index f0decfc..11f88b2 100644 +--- a/randr/randr.c ++++ b/randr/randr.c +@@ -464,6 +464,14 @@ TellChanged(WindowPtr pWin, pointer value) + return WT_WALKCHILDREN; + } + ++void ++RRSetChanged(ScreenPtr pScreen) ++{ ++ rrScrPriv(pScreen); ++ ++ pScrPriv->changed = TRUE; ++} ++ + /* + * Something changed; send events and adjust pointer position + */ +diff --git a/randr/randrstr.h b/randr/randrstr.h +index 2517479..2babfed 100644 +--- a/randr/randrstr.h ++++ b/randr/randrstr.h +@@ -486,6 +486,10 @@ extern _X_EXPORT void + RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); + + /* randr.c */ ++/* set a screen change on the primary screen */ ++extern _X_EXPORT void ++RRSetChanged(ScreenPtr pScreen); ++ + /* + * Send all pending events + */ +diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c +index 6e2eca5..b3fb5bd 100644 +--- a/randr/rrcrtc.c ++++ b/randr/rrcrtc.c +@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged) + if (pScreen) { + rrScrPriv(pScreen); + +- pScrPriv->changed = TRUE; ++ RRSetChanged(pScreen); + /* + * Send ConfigureNotify on any layout change + */ +diff --git a/randr/rrinfo.c b/randr/rrinfo.c +index 1408d6f..fc57bd4 100644 +--- a/randr/rrinfo.c ++++ b/randr/rrinfo.c +@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen, + pScrPriv->minHeight = minHeight; + pScrPriv->maxWidth = maxWidth; + pScrPriv->maxHeight = maxHeight; +- pScrPriv->changed = TRUE; ++ RRSetChanged(pScreen); + pScrPriv->configChanged = TRUE; + } + +diff --git a/randr/rroutput.c b/randr/rroutput.c +index 88781ba..922d61f 100644 +--- a/randr/rroutput.c ++++ b/randr/rroutput.c +@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged) + output->changed = TRUE; + if (pScreen) { + rrScrPriv(pScreen); +- pScrPriv->changed = TRUE; ++ RRSetChanged(pScreen); + if (configChanged) + pScrPriv->configChanged = TRUE; + } +diff --git a/randr/rrscreen.c b/randr/rrscreen.c +index 39340cc..36179ae 100644 +--- a/randr/rrscreen.c ++++ b/randr/rrscreen.c +@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen) + pScrPriv->height = pScreen->height; + pScrPriv->mmWidth = pScreen->mmWidth; + pScrPriv->mmHeight = pScreen->mmHeight; +- pScrPriv->changed = TRUE; ++ RRSetChanged(pScreen); + /* pScrPriv->sizeChanged = TRUE; */ + + RRTellChanged(pScreen); +-- +1.8.1.4 + diff --git a/0001-randr-make-SetChanged-modify-the-main-protocol-scree.patch b/0001-randr-make-SetChanged-modify-the-main-protocol-scree.patch new file mode 100644 index 0000000..f37b259 --- /dev/null +++ b/0001-randr-make-SetChanged-modify-the-main-protocol-scree.patch @@ -0,0 +1,47 @@ +From 48ea188cac83f2c03913457e1049cc30c27cd395 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 9 Jan 2013 14:32:48 +1000 +Subject: [PATCH] randr: make SetChanged modify the main protocol screen not + the gpu screen + +When SetChanged is called we now modify the main protocol screen, +not the the gpu screen. Since changed stuff should work at the protocol level. + +Signed-off-by: Dave Airlie +Signed-off-by: Fedora X Ninjas +--- + randr/randr.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/randr/randr.c b/randr/randr.c +index 11f88b2..fb0895d 100644 +--- a/randr/randr.c ++++ b/randr/randr.c +@@ -467,9 +467,23 @@ TellChanged(WindowPtr pWin, pointer value) + void + RRSetChanged(ScreenPtr pScreen) + { ++ /* set changed bits on the master screen only */ ++ ScreenPtr master; + rrScrPriv(pScreen); ++ rrScrPrivPtr mastersp; ++ ++ if (pScreen->isGPU) { ++ master = pScreen->current_master; ++ if (!master) ++ return; ++ mastersp = rrGetScrPriv(master); ++ } ++ else { ++ master = pScreen; ++ mastersp = pScrPriv; ++ } + +- pScrPriv->changed = TRUE; ++ mastersp->changed = TRUE; + } + + /* +-- +1.8.1.4 + diff --git a/0001-randr-only-respected-changed-on-the-protocol-screen.patch b/0001-randr-only-respected-changed-on-the-protocol-screen.patch new file mode 100644 index 0000000..e8269f2 --- /dev/null +++ b/0001-randr-only-respected-changed-on-the-protocol-screen.patch @@ -0,0 +1,31 @@ +From 2d05af5ee4844354810cdfcc76eda255a9f6beec Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 9 Jan 2013 14:32:49 +1000 +Subject: [PATCH] randr: only respected changed on the protocol screen + +We don't want to know about changes on the non-protocol screen, +we will fix up setchanged to make sure non-protocol screens update +the protocol screens when they have a change. + +Signed-off-by: Dave Airlie +Signed-off-by: Fedora X Ninjas +--- + randr/randr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/randr/randr.c b/randr/randr.c +index fb0895d..cb6fce7 100644 +--- a/randr/randr.c ++++ b/randr/randr.c +@@ -506,7 +506,7 @@ RRTellChanged(ScreenPtr pScreen) + mastersp = pScrPriv; + } + +- if (pScrPriv->changed) { ++ if (mastersp->changed) { + UpdateCurrentTimeIf(); + if (mastersp->configChanged) { + mastersp->lastConfigTime = currentTime; +-- +1.8.1.4 + diff --git a/0001-randr-report-changes-when-we-disconnect-a-GPU-slave.patch b/0001-randr-report-changes-when-we-disconnect-a-GPU-slave.patch new file mode 100644 index 0000000..685108b --- /dev/null +++ b/0001-randr-report-changes-when-we-disconnect-a-GPU-slave.patch @@ -0,0 +1,61 @@ +From 388c8278cf81848635d8b4af75f0ccc189344acf Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 9 Jan 2013 14:32:50 +1000 +Subject: [PATCH] randr: report changes when we disconnect a GPU slave + +When we disconnect an output/offload slave set the changed bits, +so a later TellChanged can do something. + +Then when we remove a GPU slave device, sent change notification +to the protocol screen. + +This allows hot unplugged USB devices to disappear in clients. + +Signed-off-by: Dave Airlie +Signed-off-by: Fedora X Ninjas +--- + hw/xfree86/common/xf86platformBus.c | 3 ++- + hw/xfree86/modes/xf86RandR12.c | 2 ++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index 2b02e79..4ccb005 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -47,6 +47,7 @@ + #include "Pci.h" + #include "xf86platformBus.h" + ++#include "randrstr.h" + int platformSlotClaimed; + + int xf86_num_platform_devices; +@@ -497,7 +498,7 @@ xf86platformRemoveDevice(int index) + xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL); + + xf86_remove_platform_device(index); +- ++ RRTellChanged(xf86Screens[0]->pScreen); + out: + return; + } +diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c +index 01fc9c5..7f570cf 100644 +--- a/hw/xfree86/modes/xf86RandR12.c ++++ b/hw/xfree86/modes/xf86RandR12.c +@@ -1895,10 +1895,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider) + if (config->randr_provider->offload_sink) { + DetachOffloadGPU(screen); + config->randr_provider->offload_sink = NULL; ++ RRSetChanged(screen); + } + else if (config->randr_provider->output_source) { + DetachOutputGPU(screen); + config->randr_provider->output_source = NULL; ++ RRSetChanged(screen); + } + else if (screen->current_master) + DetachUnboundGPU(screen); +-- +1.8.1.4 + diff --git a/0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch b/0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch deleted file mode 100644 index 9833e84..0000000 --- a/0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 18c470b399f9f29797c1604dc8e1f11782b3f89d Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Wed, 12 Dec 2012 14:14:39 +1000 -Subject: [PATCH] xfree86/hotplug: cleanup properly if the screen fails to - initialise - -Due to another bug, the modesetting/udl driver would fail to init properly -on hotplug, when it did the code didn't clean up properly, and on removing -the device the server could crash. - -Found in F18 testing. - -Signed-off-by: Dave Airlie ---- - hw/xfree86/common/xf86platformBus.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index 0525e39..5866333 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -438,7 +438,12 @@ xf86platformAddDevice(int index) - } - - scr_index = AddGPUScreen(xf86GPUScreens[i]->ScreenInit, 0, NULL); -- -+ if (scr_index == -1) { -+ xf86DeleteScreen(xf86GPUScreens[i]); -+ xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL); -+ xf86NumGPUScreens = old_screens; -+ return -1; -+ } - dixSetPrivate(&xf86GPUScreens[i]->pScreen->devPrivates, - xf86ScreenKey, xf86GPUScreens[i]); - --- -1.8.0.1 - diff --git a/sources b/sources index 43f929c..b67c289 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -56777b1f9d3342eaf5c37c61b9adc6ba xorg-server-20130215.tar.xz +86110278b784e279381b7f6f2295c508 xorg-server-1.14.0.tar.bz2 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 3934d0b..4ec634c 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -8,8 +8,8 @@ # format, and add a PatchN: line. If you want to push something upstream, # check out the master branch, pull, cherry-pick, and push. -%global gitdate 20130215 -%global stable_abi 0 +#global gitdate 20130215 +%global stable_abi 1 %if !0%{?gitdate} || %{stable_abi} # Released ABI versions. Have to keep these manually in sync with the @@ -41,8 +41,8 @@ Summary: X.Org X11 X server Name: xorg-x11-server -Version: 1.13.99.902 -Release: 2%{?gitdate:.%{gitdate}}%{dist} +Version: 1.14.0 +Release: 1%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -105,13 +105,16 @@ Patch7052: 0001-xf86-return-NULL-for-compat-output-if-no-outputs.patch Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch # some hotplug fixes/workaround -Patch7065: 0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch Patch7066: 0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch # autoconfig: send events -Patch7067: 0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch +Patch7067: 0001-randr-don-t-directly-set-changed-bits-in-randr-scree.patch +Patch7068: 0001-randr-make-SetChanged-modify-the-main-protocol-scree.patch +Patch7069: 0001-randr-only-respected-changed-on-the-protocol-screen.patch +Patch7070: 0001-randr-report-changes-when-we-disconnect-a-GPU-slave.patch + # upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06 -Patch7070: 0001-os-use-libunwind-to-generate-backtraces.patch +Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri @@ -580,6 +583,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Thu Mar 07 2013 Peter Hutterer 1.14.0-1 +- xserver 1.14 + * Wed Mar 06 2013 Peter Hutterer 1.13.99.902-2 - Use libunwind for backtraces