[ltt-dev] [UST PATCH v2] armv5 archs require write alignment

Jason Wessel jason.wessel at windriver.com
Wed May 4 14:49:15 EDT 2011


Reads and writes to unsigned int 32 bit numbers must be address
aligned or the l2 cache can return junk in the high order 16 bits on
reads.

This patch activates the original work done for alignment in ltt for
the UST code.  The config.ac changes will isolate the use of alignment
to the known arch type with the problem.

Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
---
 configure.ac        |   28 +++++++++++++++++++++++++++-
 include/Makefile.am |    1 +
 include/ust/core.h  |    7 ++++---
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index 8ca32ff..1f3cb33 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,8 @@ AC_CONFIG_MACRO_DIR([config])
 AM_INIT_AUTOMAKE([foreign])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 AC_CONFIG_SRCDIR([ustctl/ustctl.c])
-AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_HEADERS([config.h include/ust/config.h])
+AH_TEMPLATE([HAVE_EFFICIENT_UNALIGNED_ACCESS], [Use efficient unaligned access.])
 
 # Checks for programs.
 AC_PROG_CC
@@ -108,6 +109,7 @@ changequote([,])dnl
 	ppc64) LIBFORMAT="elf64-powerpc" ;;
 	s390) LIBFORMAT="elf32-s390" ;;
 	s390x) LIBFORMAT="elf64-s390" ;;
+        armv5) LIBFORMAT="elf32-littlearm"; NO_UNALIGNED_ACCESS=1 ;;
 	arm) LIBFORMAT="elf32-littlearm" ;;
 	mips*) LIBFORMAT="" ;;
 	*) AC_MSG_ERROR([unable to detect library format (unsupported architecture ($host_cpu)?)]) ;;
@@ -115,6 +117,30 @@ esac
 AC_SUBST(LIBFORMAT)
 AC_MSG_RESULT($LIBFORMAT)
 
+if test "x$host_cpu" = "xarm" ; then
+AC_MSG_CHECKING([checking for armv5])
+AC_TRY_COMPILE(
+[
+],
+[
+#ifndef __ARM_ARCH_5TEJ__
+#error "no arm5 here"
+#endif
+],
+[
+	AC_MSG_RESULT([yes])
+	NO_UNALIGNED_ACCESS=1
+]
+,
+[
+	AC_MSG_RESULT([no])
+]
+)
+fi
+if test x$NO_UNALIGNED_ACCESS = x ; then
+AC_DEFINE([HAVE_EFFICIENT_UNALIGNED_ACCESS], [1])
+fi
+
 AC_CONFIG_FILES([
 	Makefile
 	doc/Makefile
diff --git a/include/Makefile.am b/include/Makefile.am
index 2133efd..7f9d15e 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -7,6 +7,7 @@ nobase_include_HEADERS = \
 	ust/probe.h \
 	ust/ust.h \
 	ust/tracectl.h \
+	ust/config.h \
 	ust/core.h \
 	ust/clock.h \
 	ust/type-serializer.h \
diff --git a/include/ust/core.h b/include/ust/core.h
index e781a3a..d0e2750 100644
--- a/include/ust/core.h
+++ b/include/ust/core.h
@@ -19,11 +19,12 @@
 #define UST_CORE_H
 
 #include <sys/types.h>
+#include <ust/config.h>
 
 #define likely(x)	__builtin_expect(!!(x), 1)
 #define unlikely(x)	__builtin_expect(!!(x), 0)
 
-#if defined(CONFIG_LTT) && defined(CONFIG_LTT_ALIGNMENT)
+#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS
 
 /*
  * Calculate the offset needed to align the type.
@@ -42,7 +43,7 @@ static inline int ltt_get_alignment(void)
 	return sizeof(void *);
 }
 
-#else
+#else /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
 
 static inline unsigned int ltt_align(size_t align_drift,
 		 size_t size_of_type)
@@ -56,7 +57,7 @@ static inline int ltt_get_alignment(void)
 {
 	return 0;
 }
-#endif /* defined(CONFIG_LTT) && defined(CONFIG_LTT_ALIGNMENT) */
+#endif /* HAVE_EFFICIENT_UNALIGNED_ACCESS */
 
 
 /* ARRAYS */
-- 
1.7.1





More information about the lttng-dev mailing list