Not thread-safe: C++ Exception Processing Crashes in GNU Arm Embedded Toolchain

Bug #1905459 reported by Dave Nadler on 2020-11-24
This bug affects 1 person
Affects Status Importance Assigned to Milestone
GNU Arm Embedded Toolchain

Bug Description

Concurrently throwing C++ exceptions in multiple threads crashes.

This bug has impacted multiple commercial projects, some examples:

Exception unwinding requires some data structures; specifically
the libgcc module unwind-dw2-fde.c has two-three statics.
These statics are protected by a gthread_mutex.

Arm build of libgcc builds gthread_mutex as no-op.
Thus applications cannot provide for example an RTOS
mutex with priority inheritance to protect above statics.
If I understand correctly, ARM toolchain build includes:
which dummies out the gthread functions as inline no-ops;
consequently they cannot be overridden.

A couple different approaches to fix this:

1) Create+use a separate gthreads module to provide weak
no-op functions for the gthreads functions. Thus RTOS users
can provide an alternate implementation of gthreads
appropriate for their RTOS, and non-RTOS users are

2) Use thread-local storage instead of statics in unwind-dw2-fde.c?
Is there a architecture-independent TLS wrapper in gcc libcc?

Please let me know if you agree, and if I can help...
Best Regards, Dave

Dave Nadler (drn-nadler) on 2020-11-25
description: updated
Dave Nadler (drn-nadler) on 2020-12-05
description: updated
summary: - Not thread-safe: C++ Exception Processing in GNU Arm Embedded Toolchain
+ Not thread-safe: C++ Exception Processing Crashes in GNU Arm Embedded
+ Toolchain
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers