From: Pedro Alves Date: Fri, 4 Jun 2021 20:44:36 +0000 (+0100) Subject: nat/amd64-linux-siginfo.c: Move align attribute from typedef to struct X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d8ca8e9facb184d67ce1aca9196ed8446e7e2a09;p=binutils-gdb.git nat/amd64-linux-siginfo.c: Move align attribute from typedef to struct Compiling GDB with current git Clang (future 13) fails with (among other problems), this issue: $ make nat/amd64-linux-siginfo.o CXX nat/amd64-linux-siginfo.o src/gdb/nat/amd64-linux-siginfo.c:590:35: warning: passing 4-byte aligned argument to 8-byte aligned parameter 1 of 'compat_x32_siginfo_from_siginfo' may result in an unaligned pointer access [-Walign-mismatch] compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf, ^ 1 warning generated. The problem is that: - The flagged code is casting to "struct compat_x32_siginfo" pointer directly instead of to a pointer to the compat_x32_siginfo_t typedef. The called function is declared with a compat_x32_siginfo_t typedef pointer parameter. - Only the typedef has the __aligned__ attribute. Fix this by moving the attribute to the struct, so both struct and typedef have the same alignment. The next patch removes the typedefs. gdb/ChangeLog: yyyy-mm-dd Pedro Alves * nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move __attribute__ __aligned__ from the typedef to the struct. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aa8bcb9615a..4859531e1a5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-06-07 Pedro Alves + + * nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move + __attribute__ __aligned__ from the typedef to the struct. + 2021-06-07 Andrew Burgess PR gdb/27847 diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c index e2d2db6e112..9ff9361487a 100644 --- a/gdb/nat/amd64-linux-siginfo.c +++ b/gdb/nat/amd64-linux-siginfo.c @@ -206,7 +206,7 @@ typedef struct compat_siginfo /* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes. */ typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t; -typedef struct compat_x32_siginfo +typedef struct __attribute__ ((__aligned__ (8))) compat_x32_siginfo { int si_signo; int si_errno; @@ -263,7 +263,7 @@ typedef struct compat_x32_siginfo int _fd; } _sigpoll; } _sifields; -} compat_x32_siginfo_t __attribute__ ((__aligned__ (8))); +} compat_x32_siginfo_t; /* To simplify usage of siginfo fields. */