nat/amd64-linux-siginfo.c: Move align attribute from typedef to struct
authorPedro Alves <pedro@palves.net>
Fri, 4 Jun 2021 20:44:36 +0000 (21:44 +0100)
committerPedro Alves <pedro@palves.net>
Mon, 7 Jun 2021 22:22:07 +0000 (23:22 +0100)
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  <pedro@palves.net>

* nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move
__attribute__ __aligned__ from the typedef to the struct.

gdb/ChangeLog
gdb/nat/amd64-linux-siginfo.c

index aa8bcb9615ab24f0da5076ce9dfb0417a8c207c7..4859531e1a5b42a72f53f0f233d48d7151b9b543 100644 (file)
@@ -1,3 +1,8 @@
+2021-06-07  Pedro Alves  <pedro@palves.net>
+
+       * nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move
+       __attribute__ __aligned__ from the typedef to the struct.
+
 2021-06-07  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        PR gdb/27847
index e2d2db6e11248be2c1267035b6fcc538e952d289..9ff9361487a9de7678b4fd2354dec29491a64aa1 100644 (file)
@@ -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.  */