]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fix assert in __deregister_frame_info_bases
authorThomas Neumann <tneumann@users.sourceforge.net>
Fri, 23 Sep 2022 13:57:13 +0000 (15:57 +0200)
committerThomas Neumann <tneumann@users.sourceforge.net>
Mon, 26 Sep 2022 13:12:02 +0000 (15:12 +0200)
When using the atomic fast path deregistering can fail during
program shutdown if the lookup structures are already destroyed.
The assert in __deregister_frame_info_bases takes that into
account. In the non-fast-path case however is not aware of
program shutdown, which caused a compiler error on such platforms.
We fix that by introducing a constant for in_shutdown in
non-fast-path builds.
We also drop the destructor priority, as it is not supported on
all platforms and we no longer rely upon the priority anyway.

libgcc/ChangeLog:
* unwind-dw2-fde.c: Introduce a constant for in_shutdown
for the non-fast-path case. Drop destructor priority.

libgcc/unwind-dw2-fde.c

index d237179f4ea96ae38b24b05f2f218bd7e12a9abe..3c0cc654ec0e23c26d00e9f3a644f304647185af 100644 (file)
@@ -51,7 +51,7 @@ static struct btree registered_frames;
 static bool in_shutdown;
 
 static void
-release_registered_frames (void) __attribute__ ((destructor (110)));
+release_registered_frames (void) __attribute__ ((destructor));
 static void
 release_registered_frames (void)
 {
@@ -67,6 +67,8 @@ static void
 init_object (struct object *ob);
 
 #else
+/* Without fast path frame deregistration must always succeed.  */
+static const int in_shutdown = 0;
 
 /* The unseen_objects list contains objects that have been registered
    but not yet categorized in any way.  The seen_objects list has had