diff options
author | Eugene Tarassov | 2013-01-11 21:01:08 +0000 |
---|---|---|
committer | Eugene Tarassov | 2013-01-11 21:01:08 +0000 |
commit | 16387d39e690adc0fcc57bda550f1b5f484ec8a8 (patch) | |
tree | b43882346b564e14c4e29a4574b2ca1331c3c27a /agent/tcf/framework/cpudefs.c | |
parent | b7f7b495a498969aa31efcb1483580fba05df279 (diff) | |
download | org.eclipse.tcf.agent-16387d39e690adc0fcc57bda550f1b5f484ec8a8.tar.gz org.eclipse.tcf.agent-16387d39e690adc0fcc57bda550f1b5f484ec8a8.tar.xz org.eclipse.tcf.agent-16387d39e690adc0fcc57bda550f1b5f484ec8a8.zip |
TCF Agent: added support for register bit-fields in expressions
Diffstat (limited to 'agent/tcf/framework/cpudefs.c')
-rw-r--r-- | agent/tcf/framework/cpudefs.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/agent/tcf/framework/cpudefs.c b/agent/tcf/framework/cpudefs.c index a59cb3ed..35910e87 100644 --- a/agent/tcf/framework/cpudefs.c +++ b/agent/tcf/framework/cpudefs.c @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others. + * Copyright (c) 2007, 2013 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. @@ -491,7 +491,12 @@ void read_location_pieces(Context * ctx, StackFrame * frame, else { rbf = pbf = (uint8_t *)tmp_alloc(piece->reg->size); } - if (read_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + if (frame == NULL) { + if (context_read_reg(ctx, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } + else { + if (read_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } if (!piece->reg->big_endian != !big_endian) swap_bytes(rbf, piece->reg->size); } else if (piece->value) { @@ -540,7 +545,12 @@ void write_location_pieces(Context * ctx, StackFrame * frame, else { rbf = pbf = (uint8_t *)tmp_alloc(piece->reg->size); } - if (read_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + if (frame == NULL) { + if (context_read_reg(ctx, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } + else { + if (read_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } if (!piece->reg->big_endian != !big_endian) swap_bytes(rbf, piece->reg->size); } else if (piece->value) { @@ -564,7 +574,12 @@ void write_location_pieces(Context * ctx, StackFrame * frame, } if (piece->reg) { if (!piece->reg->big_endian != !big_endian) swap_bytes(rbf, piece->reg->size); - if (write_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + if (frame == NULL) { + if (context_write_reg(ctx, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } + else { + if (write_reg_bytes(frame, piece->reg, 0, piece->reg->size, rbf) < 0) exception(errno); + } } else if (piece->value) { assert(0); |