From 9722444cb4bbdb06d9d808c833922ddf39e258bd Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Wed, 16 Oct 2013 18:34:32 -0400 Subject: [PATCH] ctf: Take alignment into consideration for Strings too The alignment was not taken into consideration at all when reading strings. It seemed to work so far for standardly-aligned fields, but it stopped being the case with funky alignments. This seems to fix bug #419536. Change-Id: I4bbcb4dff2e8b68f0d86557d84b158131a9945d7 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/17438 Reviewed-by: Matthew Khouzam IP-Clean: Matthew Khouzam Tested-by: Matthew Khouzam --- .../linuxtools/ctf/core/event/types/FloatDefinition.java | 7 +++++-- .../linuxtools/ctf/core/event/types/IntegerDefinition.java | 3 +++ .../linuxtools/ctf/core/event/types/StringDefinition.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/FloatDefinition.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/FloatDefinition.java index 14a8b2ada8..cd3311d51a 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/FloatDefinition.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/FloatDefinition.java @@ -86,11 +86,14 @@ public class FloatDefinition extends Definition { @Override public void read(BitBuffer input) { - int exp = declaration.getExponent(); - int mant = declaration.getMantissa(); + /* Offset the buffer position wrt the current alignment */ int align = (int) declaration.getAlignment(); int pos = input.position() + ((align - (input.position() % align)) % align); input.position(pos); + + final int exp = declaration.getExponent(); + final int mant = declaration.getMantissa(); + if ((exp + mant) == 32) { value = readRawFloat32(input, mant, exp); } else if ((exp + mant) == 64) { diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/IntegerDefinition.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/IntegerDefinition.java index e0718b2c24..812976cfb8 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/IntegerDefinition.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/IntegerDefinition.java @@ -95,9 +95,12 @@ public class IntegerDefinition extends SimpleDatatypeDefinition { @Override public void read(BitBuffer input) { final long longNegBit = 0x0000000080000000L; + + /* Offset the buffer position wrt the current alignment */ int align = (int) declaration.getAlignment(); int pos = input.position() + ((align - (input.position() % align)) % align); input.position(pos); + boolean signed = declaration.isSigned(); int length = declaration.getLength(); long bits = 0; diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/StringDefinition.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/StringDefinition.java index 5b5d5bc644..9fa9708f35 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/StringDefinition.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/event/types/StringDefinition.java @@ -101,6 +101,11 @@ public class StringDefinition extends Definition { @Override public void read(BitBuffer input) { + /* Offset the buffer position wrt the current alignment */ + int align = (int) declaration.getAlignment(); + int pos = input.position() + ((align - (input.position() % align)) % align); + input.position(pos); + string.setLength(0); char c = (char) input.getInt(8, false); -- 2.34.1