Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [pushed] [gdb/build, clang] Fix ignored aligned attribute
@ 2026-06-12 10:41 Tom de Vries
  2026-06-12 13:24 ` Tom Tromey
  2026-06-12 13:26 ` Pedro Alves
  0 siblings, 2 replies; 5+ messages in thread
From: Tom de Vries @ 2026-06-12 10:41 UTC (permalink / raw)
  To: gdb-patches

PR build/34279 reports a build failure with clang.

This is a regression since commit 6c85ef111b0 ("[gdb] Use using instead of
typedef"), which did:
...
-typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
+using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
...

The problem is that clang ignores the attribute.

Fix this by reverting this part of the commit.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34279
---
 gdb/nat/amd64-linux-siginfo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c
index 8f1e4acc47e..99faccabf37 100644
--- a/gdb/nat/amd64-linux-siginfo.c
+++ b/gdb/nat/amd64-linux-siginfo.c
@@ -203,7 +203,7 @@ struct compat_siginfo_t
 };
 
 /* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
-using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
+typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
 
 struct __attribute__ ((__aligned__ (8))) compat_x32_siginfo_t
 {

base-commit: 4cdc9a9d93571737476034869dd8caaecb5ca35d
-- 
2.51.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] [gdb/build, clang] Fix ignored aligned attribute
  2026-06-12 10:41 [pushed] [gdb/build, clang] Fix ignored aligned attribute Tom de Vries
@ 2026-06-12 13:24 ` Tom Tromey
  2026-06-16  7:26   ` Tom de Vries
  2026-06-12 13:26 ` Pedro Alves
  1 sibling, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2026-06-12 13:24 UTC (permalink / raw)
  To: Tom de Vries; +Cc: gdb-patches

>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:

Tom> PR build/34279 reports a build failure with clang.
Tom> This is a regression since commit 6c85ef111b0 ("[gdb] Use using instead of
Tom> typedef"), which did:
Tom> ...
Tom> -typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
Tom> +using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
Tom> ...

Tom> The problem is that clang ignores the attribute.

Very surprising.

Tom>  /* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
Tom> -using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
Tom> +typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
 
I think if we need this to remain a typedef, a comment explaining the
reason would be good.

Tom

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] [gdb/build, clang] Fix ignored aligned attribute
  2026-06-12 10:41 [pushed] [gdb/build, clang] Fix ignored aligned attribute Tom de Vries
  2026-06-12 13:24 ` Tom Tromey
@ 2026-06-12 13:26 ` Pedro Alves
  2026-06-16  6:27   ` Tom de Vries
  1 sibling, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2026-06-12 13:26 UTC (permalink / raw)
  To: Tom de Vries, gdb-patches

On 2026-06-12 11:41, Tom de Vries wrote:
> PR build/34279 reports a build failure with clang.
> 
> This is a regression since commit 6c85ef111b0 ("[gdb] Use using instead of
> typedef"), which did:
> ...
> -typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
> +using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
> ...
> 
> The problem is that clang ignores the attribute.

FYI, this form:

  using B [[gnu::aligned (4)]] = long;

works the same with gcc and clang.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] [gdb/build, clang] Fix ignored aligned attribute
  2026-06-12 13:26 ` Pedro Alves
@ 2026-06-16  6:27   ` Tom de Vries
  0 siblings, 0 replies; 5+ messages in thread
From: Tom de Vries @ 2026-06-16  6:27 UTC (permalink / raw)
  To: Pedro Alves, gdb-patches

On 6/12/26 3:26 PM, Pedro Alves wrote:
> On 2026-06-12 11:41, Tom de Vries wrote:
>> PR build/34279 reports a build failure with clang.
>>
>> This is a regression since commit 6c85ef111b0 ("[gdb] Use using instead of
>> typedef"), which did:
>> ...
>> -typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
>> +using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
>> ...
>>
>> The problem is that clang ignores the attribute.
> 
> FYI, this form:
> 
>    using B [[gnu::aligned (4)]] = long;
> 
> works the same with gcc and clang.
> 

Hi Pedro,

thanks for this suggestion.

I've used this approach in a follow-up patch ( 
https://sourceware.org/pipermail/gdb-patches/2026-June/228041.html ).

Thanks,
- Tom

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] [gdb/build, clang] Fix ignored aligned attribute
  2026-06-12 13:24 ` Tom Tromey
@ 2026-06-16  7:26   ` Tom de Vries
  0 siblings, 0 replies; 5+ messages in thread
From: Tom de Vries @ 2026-06-16  7:26 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches, Pedro Alves

On 6/12/26 3:24 PM, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
> 
> Tom> PR build/34279 reports a build failure with clang.
> Tom> This is a regression since commit 6c85ef111b0 ("[gdb] Use using instead of
> Tom> typedef"), which did:
> Tom> ...
> Tom> -typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
> Tom> +using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
> Tom> ...
> 
> Tom> The problem is that clang ignores the attribute.
> 
> Very surprising.
> 
> Tom>  /* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
> Tom> -using compat_x32_clock_t = long __attribute__ ((__aligned__ (4)));
> Tom> +typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
>   
> I think if we need this to remain a typedef, a comment explaining the
> reason would be good.

I ended up using a suggestion of Pedro ( 
https://sourceware.org/pipermail/gdb-patches/2026-June/228041.html ):
...
-typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
+using compat_x32_clock_t [[gnu::aligned (4)]] = long;
...
so I guess such a comment is not needed.

FWIW and FTR, I also looked into other ways to fix this.

Using the packed template works:
...
diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c
index 99faccabf37..30a1107d3ea 100644
--- a/gdb/nat/amd64-linux-siginfo.c
+++ b/gdb/nat/amd64-linux-siginfo.c
@@ -18,6 +18,7 @@
     along with this program.  If not, see 
<http://www.gnu.org/licenses/>.  */

  #include <signal.h>
+#include "gdbsupport/packed.h"
  #include "amd64-linux-siginfo.h"

  #define GDB_SI_SIZE 128
@@ -202,9 +203,6 @@ struct compat_siginfo_t
    } _sifields;
  };

-/* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
-typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
-
  struct __attribute__ ((__aligned__ (8))) compat_x32_siginfo_t
  {
    int si_signo;
@@ -244,8 +242,8 @@ struct __attribute__ ((__aligned__ (8))) 
compat_x32_siginfo_t
        unsigned int _pid;
        unsigned int _uid;
        int _status;
-      compat_x32_clock_t _utime;
-      compat_x32_clock_t _stime;
+      packed<long> _utime;
+      packed<long> _stime;
      } _sigchld;

      /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
@@ -478,10 +476,8 @@ compat_x32_siginfo_from_siginfo 
(compat_x32_siginfo_t *to,
  	  to->cpt_si_pid = from_ptrace.cpt_si_pid;
  	  to->cpt_si_uid = from_ptrace.cpt_si_uid;
  	  to->cpt_si_status = from_ptrace.cpt_si_status;
-	  memcpy (&to->cpt_si_utime, &from_ptrace.cpt_si_utime,
-		  sizeof (to->cpt_si_utime));
-	  memcpy (&to->cpt_si_stime, &from_ptrace.cpt_si_stime,
-		  sizeof (to->cpt_si_stime));
+	  to->cpt_si_utime = from_ptrace.cpt_si_utime;
+	  to->cpt_si_stime = from_ptrace.cpt_si_stime;
  	  break;
  	case SIGILL:
  	case SIGFPE:
...

Likewise, tagging the struct with attribute packed:
...
diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c
index 99faccabf37..8279acd4117 100644
--- a/gdb/nat/amd64-linux-siginfo.c
+++ b/gdb/nat/amd64-linux-siginfo.c
@@ -202,9 +202,6 @@ struct compat_siginfo_t
    } _sifields;
  };

-/* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
-typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
-
  struct __attribute__ ((__aligned__ (8))) compat_x32_siginfo_t
  {
    int si_signo;
@@ -239,13 +236,13 @@ struct __attribute__ ((__aligned__ (8))) 
compat_x32_siginfo_t
      } _rt;

      /* SIGCHLD */
-    struct
+    struct __attribute__((packed))
      {
        unsigned int _pid;
        unsigned int _uid;
        int _status;
-      compat_x32_clock_t _utime;
-      compat_x32_clock_t _stime;
+      long _utime;
+      long _stime;
      } _sigchld;

      /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
...

Thanks,
- Tom

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-06-16  7:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-12 10:41 [pushed] [gdb/build, clang] Fix ignored aligned attribute Tom de Vries
2026-06-12 13:24 ` Tom Tromey
2026-06-16  7:26   ` Tom de Vries
2026-06-12 13:26 ` Pedro Alves
2026-06-16  6:27   ` Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox