From 773655f35716237829e6e252e27165ca4044f930 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 14 Feb 2011 12:03:09 -0500 Subject: [PATCH] UST markers: fix structure alignment for recent gcc GCC 4.5 (and possibly some late 4.4) choose to align structures on large multiples, which breaks the __marker section (adding extra padding between object sections). Increase the structure alignment to fix this issue. Note that kernel tracepoints have recently been changed to use an array of pointers (which are pointing to the actual tracepoint structures), thus removing the requirement for these odd structure alignments. But given that markers are in "maintainance mode", let's do the quick fix and just increase the minimum alignment size. Signed-off-by: Mathieu Desnoyers --- include/ust/marker.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include/ust/marker.h b/include/ust/marker.h index 0f42d5b..a1f55b0 100644 --- a/include/ust/marker.h +++ b/include/ust/marker.h @@ -75,7 +75,11 @@ struct marker { const char *tp_name; /* Optional tracepoint name */ void *tp_cb; /* Optional tracepoint callback */ void *location; /* Address of marker in code */ -} __attribute__((aligned(8))); +} __attribute__((aligned(128)));/* + * Aligned on 128 bytes because it is + * globally visible and gcc happily + * align these on the structure size. + */ #define GET_MARKER(channel, name) (__mark_##channel##_##name) @@ -143,7 +147,7 @@ struct marker { __attribute__((section("__markers_strings"))) \ = #channel "\0" #name "\0" format; \ static struct marker GET_MARKER(channel, name) \ - __attribute__((section("__markers"), aligned(8))) = \ + __attribute__((section("__markers"), aligned(128))) = \ { __mstrtab_##channel##_##name, \ &__mstrtab_##channel##_##name[sizeof(#channel)], \ &__mstrtab_##channel##_##name[sizeof(#channel) + sizeof(#name)], \ -- 2.34.1