[2.32] struct _Unwind_Exception alignment should not depend on compiler flags

Message ID 20201116204659.40340-1-msc@linux.ibm.com
State Not applicable
Headers
Series [2.32] struct _Unwind_Exception alignment should not depend on compiler flags |

Commit Message

Matheus Castanho Nov. 16, 2020, 8:46 p.m. UTC
  From: Florian Weimer <fweimer@redhat.com>

Hi Florian and Tulio,

Could we backport this patch to the 2.32 branch? It would be helpful to fix the
issue downstream.

Thanks,
Matheus Castanho

---8<---

__attribute__((__aligned__)) selects an alignment that depends on
the micro-architecture selected by GCC flags.  Enabling vector
extensions may increase the allignment.  This is a problem when
building glibc as a collection of ELF multilibs with different
GCC flags because ld.so and libc.so/libpthread.so/&c may end up
with a different layout of struct pthread because of the
changing offset of its struct _Unwind_Exception field.

Tested-By: Matheus Castanho <msc@linux.ibm.com>

(cherry picked from commit 30af7c7fa13e17d82c3f1f91536384715844f432)
---
 sysdeps/generic/unwind.h | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

--
2.26.2
  

Comments

Florian Weimer Nov. 16, 2020, 8:50 p.m. UTC | #1
* Matheus Castanho:

> Could we backport this patch to the 2.32 branch? It would be helpful
> to fix the issue downstream.

Sure, looks reasonable.  Do you need it backported further?

Sorry for not being up-to-date with commit capabilities—would you be
able to commit this yourself?

Thanks,
Florian
  
Matheus Castanho Nov. 16, 2020, 8:53 p.m. UTC | #2
On 11/16/20 5:50 PM, Florian Weimer wrote:
> * Matheus Castanho:
> 
>> Could we backport this patch to the 2.32 branch? It would be helpful
>> to fix the issue downstream.
> 
> Sure, looks reasonable.  Do you need it backported further?

No. Only 2.32 is enough.

> 
> Sorry for not being up-to-date with commit capabilities—would you be
> able to commit this yourself?

No, I don't have write permission. So I'd appreciate if either you or Tulio
could push it if that's OK.

Thanks,
Matheus Castanho
  
Florian Weimer Nov. 16, 2020, 8:58 p.m. UTC | #3
* Matheus Castanho:

>> Sorry for not being up-to-date with commit capabilities—would you be
>> able to commit this yourself?
>
> No, I don't have write permission. So I'd appreciate if either you or Tulio
> could push it if that's OK.

You should really apply for sourceware access.  Tulio, would you be able
to handle that?

I'm going to push the backport if my test build (on x86-64) completes.

Thanks,
Florian
  
Tulio Magno Quites Machado Filho Nov. 17, 2020, 6:06 p.m. UTC | #4
Florian Weimer via Libc-alpha <libc-alpha@sourceware.org> writes:

> * Matheus Castanho:
>
>>> Sorry for not being up-to-date with commit capabilities—would you be
>>> able to commit this yourself?
>>
>> No, I don't have write permission. So I'd appreciate if either you or Tulio
>> could push it if that's OK.
>
> You should really apply for sourceware access.  Tulio, would you be able
> to handle that?

Done.

> I'm going to push the backport if my test build (on x86-64) completes.

Thanks!
  

Patch

diff --git a/sysdeps/generic/unwind.h b/sysdeps/generic/unwind.h
index b667a5b652..c229603af3 100644
--- a/sysdeps/generic/unwind.h
+++ b/sysdeps/generic/unwind.h
@@ -75,15 +75,21 @@  typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,

 struct _Unwind_Exception
 {
-  _Unwind_Exception_Class exception_class;
-  _Unwind_Exception_Cleanup_Fn exception_cleanup;
-  _Unwind_Word private_1;
-  _Unwind_Word private_2;
-
-  /* @@@ The IA-64 ABI says that this structure must be double-word aligned.
-     Taking that literally does not make much sense generically.  Instead we
-     provide the maximum alignment required by any type for the machine.  */
-} __attribute__((__aligned__));
+  union
+  {
+    struct
+    {
+      _Unwind_Exception_Class exception_class;
+      _Unwind_Exception_Cleanup_Fn exception_cleanup;
+      _Unwind_Word private_1;
+      _Unwind_Word private_2;
+    };
+
+    /* The IA-64 ABI says that this structure must be double-word aligned.  */
+    _Unwind_Word unwind_exception_align[2]
+      __attribute__ ((__aligned__ (2 * sizeof (_Unwind_Word))));
+  };
+};


 /* The ACTIONS argument to the personality routine is a bitwise OR of one