From 58d494e4e885915ac387de8aa74f810d4d160bb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fredrik=20Markstr=C3=B6m?= Date: Fri, 16 May 2014 09:10:07 +0800 Subject: [PATCH] Fix: alignment problems on targets not supporting unaligned access. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Accessing floats, doubles and 64 bit int at unaligned addresses is not supported on all configurations of arm processors and if it is it's emulated and slow. This patch replaces direct assignments with memcpy. Signed-off-by: Fredrik Markström Signed-off-by: Roy Li Acked-by: Mathieu Desnoyers Signed-off-by: David Goulet --- src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c index 762d60464..8c6dc96ff 100644 --- a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c +++ b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c @@ -222,7 +222,7 @@ int visit_node_load(struct filter_parser_ctx *ctx, struct ir_op *node) if (!insn) return -ENOMEM; insn->op = FILTER_OP_LOAD_S64; - *(int64_t *) insn->data = node->u.load.u.num; + memcpy(insn->data, &node->u.load.u.num, sizeof(int64_t)); ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len); free(insn); return ret; @@ -237,7 +237,7 @@ int visit_node_load(struct filter_parser_ctx *ctx, struct ir_op *node) if (!insn) return -ENOMEM; insn->op = FILTER_OP_LOAD_DOUBLE; - *(double *) insn->data = node->u.load.u.flt; + memcpy(insn->data, &node->u.load.u.flt, sizeof(double)); ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len); free(insn); return ret; -- 2.34.1