Skip to content

Commit 8f5cacf

Browse files
ctf: Update alignment parser to support CTF2
Add verification to AlignmentParser to match CTF2 specs here. https://diamon.org/ctf/ Change-Id: I86b1ede3f0b74ae9f9dd40087580013c13a092a7 Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
1 parent 89429cf commit 8f5cacf

1 file changed

Lines changed: 29 additions & 2 deletions

File tree

  • ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/event/metadata/tsdl

ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/event/metadata/tsdl/AlignmentParser.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@
1515

1616
import org.eclipse.tracecompass.ctf.parser.CTFParser;
1717
import org.eclipse.tracecompass.internal.ctf.core.event.metadata.ICommonTreeParser;
18+
import org.eclipse.tracecompass.internal.ctf.core.event.metadata.JsonStructureFieldMemberMetadataNode;
1819
import org.eclipse.tracecompass.internal.ctf.core.event.metadata.JsonStructureFieldMetadataNode;
1920
import org.eclipse.tracecompass.internal.ctf.core.event.metadata.ParseException;
2021
import org.eclipse.tracecompass.internal.ctf.core.event.types.ICTFMetadataNode;
22+
import org.eclipse.tracecompass.internal.ctf.core.utils.JsonMetadataStrings;
23+
24+
import com.google.gson.JsonElement;
25+
import com.google.gson.JsonObject;
2126

2227
/**
2328
* Alignment parser, we define byte-packed types as aligned on the byte size,
@@ -91,13 +96,35 @@ public Long parse(ICTFMetadataNode tree, ICommonTreeParserParameter param) throw
9196
}
9297

9398
return alignment;
94-
} else if (tree instanceof JsonStructureFieldMetadataNode) {
95-
long alignment = ((JsonStructureFieldMetadataNode) tree).getMinimumAlignment();
99+
} else if (tree instanceof JsonStructureFieldMetadataNode structTree) {
100+
long alignment = structTree.getMinimumAlignment();
101+
96102
if (!isValidAlignment(alignment)) {
97103
throw new ParseException(INVALID_VALUE_FOR_ALIGNMENT + " : " //$NON-NLS-1$
98104
+ alignment);
99105
}
100106
return alignment;
107+
} else if (tree instanceof JsonStructureFieldMemberMetadataNode structTree) {
108+
JsonElement fieldClassElement = structTree.getFieldClass();
109+
if (fieldClassElement == null || !fieldClassElement.isJsonObject()) {
110+
throw new ParseException(getClass().getName() + " fieldclass must be a json object."); //$NON-NLS-1$
111+
}
112+
JsonObject fieldclass = fieldClassElement.getAsJsonObject();
113+
if (fieldclass.has(JsonMetadataStrings.ALIGNMENT)) {
114+
JsonElement alignmentElement = fieldclass.get(JsonMetadataStrings.ALIGNMENT);
115+
if (alignmentElement == null || !alignmentElement.isJsonPrimitive()) {
116+
throw new ParseException(INVALID_VALUE_FOR_ALIGNMENT + " : " //$NON-NLS-1$
117+
+ alignmentElement);
118+
}
119+
long alignment = alignmentElement.getAsLong();
120+
if (!isValidAlignment(alignment)) {
121+
throw new ParseException(INVALID_VALUE_FOR_ALIGNMENT + " : " //$NON-NLS-1$
122+
+ alignment);
123+
}
124+
return alignment;
125+
}
126+
// Return default alignment when not specified
127+
return 1L;
101128
}
102129

103130
throw new ParseException(INVALID_VALUE_FOR_ALIGNMENT); // $NON-NLS-1$

0 commit comments

Comments
 (0)