summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2018-06-28 14:39:37 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2018-08-24 15:51:39 +0200
commit0d51b6d87e3ad85b669fa11445fe71dbd6936e3d (patch)
tree6ba3c578fdbcebfae63f4e1e41d931e4c29efadd
parentleon,grspw_pkt: remove incorrect comment on SMP not being tested (diff)
downloadrtems-0d51b6d87e3ad85b669fa11445fe71dbd6936e3d.tar.bz2
capture: prevent unaligned access when reading time
LLVM warns about this: cpukit/libmisc/capture/capture.c:405:30: warning: taking address of packed member 'time' of class or structure 'rtems_capture_record' may result in an unaligned pointer value [-Waddress-of-packed-member] rtems_capture_get_time (&in.time); And on sparc it generates an unaligned trap which makes smpcapture01 and smpcapture02 test to fail on sparc.
-rw-r--r--cpukit/libmisc/capture/capture.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/cpukit/libmisc/capture/capture.c b/cpukit/libmisc/capture/capture.c
index 19a90c5954..4d40b8f630 100644
--- a/cpukit/libmisc/capture/capture.c
+++ b/cpukit/libmisc/capture/capture.c
@@ -387,6 +387,7 @@ rtems_capture_record_open (rtems_tcb* tcb,
if (ptr != NULL)
{
rtems_capture_record in;
+ rtems_capture_time time;
++cpu->count;
@@ -402,7 +403,8 @@ rtems_capture_record_open (rtems_tcb* tcb,
rtems_capture_task_real_priority (tcb) |
(rtems_capture_task_curr_priority (tcb) << 8));
- rtems_capture_get_time (&in.time);
+ rtems_capture_get_time (&time);
+ in.time = time; /* need this since in is a packed struct */
ptr = rtems_capture_record_append(ptr, &in, sizeof(in));
}