[v2] release the sorted FDE array when deregistering a frame [PR109685]

Message ID ed49c4e3-5598-9fee-66cb-a978af77da3f@in.tum.de
State Not Applicable
Headers
Series [v2] release the sorted FDE array when deregistering a frame [PR109685] |

Checks

Context Check Description
snail/gcc-patch-check fail Git am fail log

Commit Message

Thomas Neumann May 19, 2023, 6:50 p.m. UTC
  Am 19.05.23 um 19:26 schrieb Jeff Law:
>> See:
>> https://gcc.gnu.org/pipermail/gcc-patches/2023-May/617245.html
> I think this needs an update given the other changes in this space.
> 
> jeff

I have included the updated the patch below.



The atomic fastpath bypasses the code that releases the sort
array which was lazily allocated during unwinding. We now
check after deregistering if there is an array to free.

libgcc/ChangeLog:
	* unwind-dw2-fde.c: Free sort array in atomic fast path.
---
  libgcc/unwind-dw2-fde.c | 6 ++++++
  1 file changed, 6 insertions(+)
  

Patch

diff --git a/libgcc/unwind-dw2-fde.c b/libgcc/unwind-dw2-fde.c
index a5786bf729c..32b9e64a1c8 100644
--- a/libgcc/unwind-dw2-fde.c
+++ b/libgcc/unwind-dw2-fde.c
@@ -241,6 +241,12 @@  __deregister_frame_info_bases (const void *begin)
    // And remove
    ob = btree_remove (&registered_frames, range[0]);
    bool empty_table = (range[1] - range[0]) == 0;
+
+  // Deallocate the sort array if any.
+  if (ob && ob->s.b.sorted)
+    {
+      free (ob->u.sort);
+    }
  #else
    init_object_mutex_once ();
    __gthread_mutex_lock (&object_mutex);