summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--backends/ChangeLog4
-rw-r--r--backends/linux-core-note.c2
-rw-r--r--configure.ac13
-rw-r--r--lib/ChangeLog5
-rw-r--r--lib/eu-config.h8
-rw-r--r--libcpu/ChangeLog4
-rw-r--r--libcpu/memory-access.h2
-rw-r--r--libdw/ChangeLog4
-rw-r--r--libdw/memory-access.h2
-rw-r--r--libelf/ChangeLog4
-rw-r--r--libelf/gelf_xlate.c2
12 files changed, 51 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index c0034ba4..cb87833c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * configure.ac: Check if the compiler supports
+ __attribute__((gcc_struct)).
+
2017-09-19 Mark Wielaard <mark@klomp.org>
* README: Add basic build instructions.
diff --git a/backends/ChangeLog b/backends/ChangeLog
index 79b50ebf..8c3f42c6 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * linux-core-note.c: Use attribute_packed.
+
2017-04-27 Ulf Hermann <ulf.hermann@qt.io>
* Makefile.am: Use dso_LDFLAGS.
diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c
index 67638d70..08282ba4 100644
--- a/backends/linux-core-note.c
+++ b/backends/linux-core-note.c
@@ -111,7 +111,7 @@ struct EBLHOOK(prstatus)
FIELD (INT, pr_fpvalid);
}
#ifdef ALIGN_PRSTATUS
- __attribute__ ((packed, aligned (ALIGN_PRSTATUS)))
+ attribute_packed __attribute__ ((aligned (ALIGN_PRSTATUS)))
#endif
;
diff --git a/configure.ac b/configure.ac
index fb18dfc8..4ab8816a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -143,6 +143,19 @@ if test "$ac_cv_visibility" = "yes"; then
[Defined if __attribute__((visibility())) is supported])
fi
+AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))],
+ ac_cv_gcc_struct, [dnl
+save_CFLAGS="$CFLAGS"
+CFLAGS="$save_CFLAGS -Werror"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
+struct test { int x; } __attribute__((gcc_struct));
+])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no)
+CFLAGS="$save_CFLAGS"])
+if test "$ac_cv_gcc_struct" = "yes"; then
+ AC_DEFINE([HAVE_GCC_STRUCT], [1],
+ [Defined if __attribute__((gcc_struct)) is supported])
+fi
+
AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl
save_CFLAGS="$CFLAGS"
CFLAGS="$save_CFLAGS -fPIC -Werror"
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 23c0f41b..61230453 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * eu-config.h: Define attribute_packed to either
+ __attribute__((packed)) or __attribute__((packed, gcc_struct)).
+
2017-04-27 Ulf Hermann <ulf.hermann@qt.io>
* eu-config.h: Define attribute_hidden to be empty if the compiler
diff --git a/lib/eu-config.h b/lib/eu-config.h
index 07098282..135803e7 100644
--- a/lib/eu-config.h
+++ b/lib/eu-config.h
@@ -75,6 +75,14 @@
#define attribute_hidden /* empty */
#endif
+#ifdef HAVE_GCC_STRUCT
+#define attribute_packed \
+ __attribute__ ((packed, gcc_struct))
+#else
+#define attribute_packed \
+ __attribute__ ((packed))
+#endif
+
/* Define ALLOW_UNALIGNED if the architecture allows operations on
unaligned memory locations. */
#define SANITIZE_UNDEFINED 1
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
index 173defe6..c710e5af 100644
--- a/libcpu/ChangeLog
+++ b/libcpu/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * memory-access.h: Use attribute_packed.
+
2017-02-27 Ulf Hermann <ulf.hermann@qt.io>
* Makefile.am: Use fpic_CFLAGS.
diff --git a/libcpu/memory-access.h b/libcpu/memory-access.h
index 44210e2f..779825fa 100644
--- a/libcpu/memory-access.h
+++ b/libcpu/memory-access.h
@@ -90,7 +90,7 @@ union unaligned
int16_t s2;
int32_t s4;
int64_t s8;
- } __attribute__ ((packed));
+ } attribute_packed;
static inline uint16_t
read_2ubyte_unaligned (const void *p)
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index c13344af..94e9c9ab 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * memory-access.h: Use attribute_packed.
+
2017-02-27 Ulf Hermann <ulf.hermann@qt.io>
* libdwP.h: Use attribute_hidden.
diff --git a/libdw/memory-access.h b/libdw/memory-access.h
index a749b5a9..afb651fc 100644
--- a/libdw/memory-access.h
+++ b/libdw/memory-access.h
@@ -170,7 +170,7 @@ union unaligned
int16_t s2;
int32_t s4;
int64_t s8;
- } __attribute__ ((packed));
+ } attribute_packed;
# define read_2ubyte_unaligned(Dbg, Addr) \
read_2ubyte_unaligned_1 ((Dbg)->other_byte_order, (Addr))
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 9793d068..7bd9e1bc 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-18 Ulf Hermann <ulf.hermann@qt.io>
+
+ * gelf_xlate.c: Use attribute_packed.
+
2017-04-27 Ulf Hermann <ulf.hermann@qt.io>
* libelfP.h: Use attribute_hidden.
diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c
index f3d3b7a0..479f1436 100644
--- a/libelf/gelf_xlate.c
+++ b/libelf/gelf_xlate.c
@@ -74,7 +74,7 @@ union unaligned
uint16_t u16;
uint32_t u32;
uint64_t u64;
- } __attribute__ ((packed));
+ } attribute_packed;
#define FETCH(Bits, ptr) (((const union unaligned *) ptr)->u##Bits)
#define STORE(Bits, ptr, val) (((union unaligned *) ptr)->u##Bits = val)