Skip to content

Commit 93074b6

Browse files
Update UFTrace to handle new format
Fix thread name being the process name. Simplify Callstack provider. Add extra entry support to Map and Symbol parsers. Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com> Change-Id: I325098d3e6b3d10a09d5004f38c2784a4e6498de
1 parent 9a73718 commit 93074b6

5 files changed

Lines changed: 50 additions & 43 deletions

File tree

tracetypes/org.eclipse.tracecompass.incubator.uftrace.core/src/org/eclipse/tracecompass/incubator/internal/uftrace/core/analysis/UfCallstackProvider.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.eclipse.tracecompass.incubator.callstack.core.instrumented.statesystem.CallStackStateProvider;
1818
import org.eclipse.tracecompass.incubator.internal.uftrace.core.trace.DatEvent;
1919
import org.eclipse.tracecompass.incubator.internal.uftrace.core.trace.UfEventType;
20-
import org.eclipse.tracecompass.incubator.internal.uftrace.core.trace.Uftrace.ExecAspect;
2120
import org.eclipse.tracecompass.incubator.internal.uftrace.core.trace.Uftrace.PidAspect;
2221
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
2322
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
@@ -34,7 +33,6 @@
3433
public class UfCallstackProvider extends CallStackStateProvider {
3534

3635

37-
private final ITmfEventAspect<String> fExecAspect;
3836
private final ITmfEventAspect<Integer> fTidAspect;
3937
private final ITmfEventAspect<Integer> fPidAspect;
4038

@@ -46,14 +44,13 @@ public class UfCallstackProvider extends CallStackStateProvider {
4644
*/
4745
public UfCallstackProvider(@NonNull ITmfTrace trace) {
4846
super(trace);
49-
fExecAspect = (ITmfEventAspect<String>) MultiAspect.<String>create(TmfTraceUtils.getEventAspects(trace, ExecAspect.class), ExecAspect.class);
5047
fTidAspect = (ITmfEventAspect<Integer>) MultiAspect.<Integer>create(TmfTraceUtils.getEventAspects(trace, LinuxTidAspect.class), LinuxTidAspect.class);
5148
fPidAspect = (ITmfEventAspect<Integer>) MultiAspect.<Integer>create(TmfTraceUtils.getEventAspects(trace, PidAspect.class), PidAspect.class);
5249
}
5350

5451
@Override
5552
public int getVersion() {
56-
return 2;
53+
return 3;
5754
}
5855

5956
@Override
@@ -92,11 +89,6 @@ protected boolean considerEvent(@NonNull ITmfEvent event) {
9289
return null;
9390
}
9491

95-
@Override
96-
protected @Nullable String getProcessName(@NonNull ITmfEvent event) {
97-
return fExecAspect.resolve(event);
98-
}
99-
10092
@Override
10193
protected int getProcessId(@NonNull ITmfEvent event) {
10294
Integer resolve = fPidAspect.resolve(event);

tracetypes/org.eclipse.tracecompass.incubator.uftrace.core/src/org/eclipse/tracecompass/incubator/internal/uftrace/core/trace/MapEntry.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public class MapEntry {
3434

3535
private final Perms fPerms;
3636

37+
private final String fExtra;
38+
3739
/**
3840
* A map entry
3941
*
@@ -53,10 +55,12 @@ public class MapEntry {
5355
* inode location of the device
5456
* @param pathName
5557
* file path that backs this mapping (there may be pseudo-paths
56-
* in brackes [])
58+
* in brackets [])
59+
* @param extra
60+
* anything extra, e.g. build info
5761
*/
5862
public MapEntry(long addrLow, long addrHigh, Perms perms, long offset, char deviceMinor, char deviceMajor, long iNode,
59-
String pathName) {
63+
String pathName, String extra) {
6064
fAddrLow = addrLow;
6165
fAddrHigh = addrHigh;
6266
fPerms = perms;
@@ -65,6 +69,7 @@ public MapEntry(long addrLow, long addrHigh, Perms perms, long offset, char devi
6569
fDeviceMinor = deviceMinor;
6670
fINode = iNode;
6771
fPathName = pathName;
72+
fExtra = extra;
6873
}
6974

7075
/**
@@ -142,4 +147,11 @@ public Perms getPerms() {
142147
return fPerms;
143148
}
144149

150+
/**
151+
* @return the extra
152+
*/
153+
public String getExtra() {
154+
return fExtra;
155+
}
156+
145157
}

tracetypes/org.eclipse.tracecompass.incubator.uftrace.core/src/org/eclipse/tracecompass/incubator/internal/uftrace/core/trace/MapParser.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class MapParser {
3737
private static final String SESSION_PATTERN_STRING = "sid\\-([a-fA-F0-9]+)\\.map"; //$NON-NLS-1$
3838
private static final Pattern SESSION_PATTERN = Pattern.compile(SESSION_PATTERN_STRING);
3939
private static final Pattern MAPFILE_PATTERN = Pattern.compile(
40-
"^\\s*([a-fA-F0-9]+)\\-([a-fA-F0-9]+)\\s+([rxwps-]+)\\s+([a-fA-F0-9]+)\\s+([a-fA-F0-9]+)\\:([a-fA-F0-9]+)\\s+([a-fA-F0-9]+)\\s*(\\S+)?$"); //$NON-NLS-1$
40+
"^\\s*([a-fA-F0-9]+)\\-([a-fA-F0-9]+)\\s+([rxwps-]+)\\s+([a-fA-F0-9]+)\\s+([a-fA-F0-9]+)\\:([a-fA-F0-9]+)\\s+([a-fA-F0-9]+)\\s*(\\S*)\\s*(\\S*)"); //$NON-NLS-1$
4141
private final long fSessionId;
4242
private final NavigableMap<Long, MapEntry> fData;
4343

@@ -62,18 +62,19 @@ public static MapParser create(File file) throws IOException {
6262
while (iter.hasNext()) {
6363
String line = iter.next();
6464
Matcher matcher = MAPFILE_PATTERN.matcher(line);
65-
matcher.matches();
66-
long addrLow = Long.parseUnsignedLong(matcher.group(1), 16);
67-
long addrHigh = Long.parseUnsignedLong(matcher.group(2), 16);
68-
Perms perms = Perms.create(matcher.group(3));
69-
long offset = Long.parseLong(matcher.group(4), 16);
70-
char deviceHigh = (char) Integer.parseInt(matcher.group(5), 16);
71-
char deviceLow = (char) Integer.parseInt(matcher.group(6), 16);
72-
long iNode = Long.parseLong(matcher.group(7), 16);
73-
String pathName = matcher.group(8);
74-
75-
entries.put(addrLow,
76-
new MapEntry(addrLow, addrHigh, perms, offset, deviceLow, deviceHigh, iNode, pathName));
65+
if (matcher.matches()) {
66+
long addrLow = Long.parseUnsignedLong(matcher.group(1), 16);
67+
long addrHigh = Long.parseUnsignedLong(matcher.group(2), 16);
68+
Perms perms = Perms.create(matcher.group(3));
69+
long offset = Long.parseLong(matcher.group(4), 16);
70+
char deviceHigh = (char) Integer.parseInt(matcher.group(5), 16);
71+
char deviceLow = (char) Integer.parseInt(matcher.group(6), 16);
72+
long iNode = Long.parseLong(matcher.group(7), 16);
73+
String pathName = matcher.group(8);
74+
String extra = matcher.group(9);
75+
entries.put(addrLow,
76+
new MapEntry(addrLow, addrHigh, perms, offset, deviceLow, deviceHigh, iNode, pathName, extra));
77+
}
7778
}
7879
return new MapParser(sessionId, entries);
7980
}

tracetypes/org.eclipse.tracecompass.incubator.uftrace.core/src/org/eclipse/tracecompass/incubator/internal/uftrace/core/trace/SymParser.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*
3535
*/
3636
public class SymParser {
37-
private static final Pattern REGEX = Pattern.compile("^([a-fA-F\\d]+)\\s+([ABbCcDdGgiNPpRrSsTtUuVvWw\\-\\?])\\s*(.*)$"); //$NON-NLS-1$
37+
private static final Pattern REGEX = Pattern.compile("^([a-fA-F\\d]+)\\s+([a-fA-F\\d]*)\\s*([ABbCcDdGgiNPpRrSsTtUuVvWw\\-\\?])\\s*(.*)$"); //$NON-NLS-1$
3838

3939
/**
4040
* Symbol for
@@ -79,24 +79,26 @@ public String getName() {
7979
* the file is not able to be read.
8080
*/
8181
public static SymParser parse(File file) throws IOException {
82-
LineIterator iter = FileUtils.lineIterator(file);
83-
SymParser sp = new SymParser();
84-
while (iter.hasNext()) {
85-
String line = iter.next();
86-
if (line.startsWith("#")) {
87-
continue;
88-
}
89-
Matcher match = REGEX.matcher(line);
90-
if (!match.matches()) {
91-
throw new IllegalArgumentException("invalid " + line); //$NON-NLS-1$
82+
83+
try (LineIterator iter = FileUtils.lineIterator(file)) {
84+
SymParser sp = new SymParser();
85+
while (iter.hasNext()) {
86+
String line = iter.next();
87+
if (line.startsWith("#")) { //$NON-NLS-1$
88+
continue;
89+
}
90+
Matcher match = REGEX.matcher(line);
91+
if (!match.matches()) {
92+
throw new IllegalArgumentException("Symbol Parser: invalid line: " + line); //$NON-NLS-1$
93+
}
94+
long range = Long.parseUnsignedLong(match.group(1), 16);
95+
char c = match.group(3).charAt(0);
96+
String name = (match.groupCount() < 4) ? "Anonymous" : match.group(4); //$NON-NLS-1$
97+
Symbol sym = new Symbol(c, name);
98+
sp.fMap.put(range, sym);
9299
}
93-
long range = Long.parseUnsignedLong(match.group(1), 16);
94-
char c = match.group(2).charAt(0);
95-
String name = (match.groupCount() < 3) ? "Anonymous" : match.group(3); //$NON-NLS-1$
96-
Symbol sym = new Symbol(c, name);
97-
sp.fMap.put(range, sym);
100+
return sp;
98101
}
99-
return sp;
100102
}
101103

102104
/**

tracetypes/org.eclipse.tracecompass.incubator.uftrace.core/src/org/eclipse/tracecompass/incubator/internal/uftrace/core/trace/Uftrace.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.eclipse.jdt.annotation.Nullable;
3737
import org.eclipse.tracecompass.analysis.os.linux.core.event.aspect.LinuxPidAspect;
3838
import org.eclipse.tracecompass.analysis.os.linux.core.event.aspect.LinuxTidAspect;
39-
import org.eclipse.tracecompass.incubator.analysis.core.aspects.ThreadNameAspect;
39+
import org.eclipse.tracecompass.incubator.analysis.core.aspects.ProcessNameAspect;
4040
import org.eclipse.tracecompass.incubator.internal.uftrace.core.Activator;
4141
import org.eclipse.tracecompass.incubator.internal.uftrace.core.trace.SymParser.Symbol;
4242
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
@@ -376,7 +376,7 @@ public final class PidAspect extends LinuxPidAspect {
376376
*
377377
* @author Matthew Khouzam
378378
*/
379-
public final class ExecAspect extends ThreadNameAspect {
379+
public final class ExecAspect extends ProcessNameAspect {
380380

381381
@Override
382382
public @Nullable String resolve(@NonNull ITmfEvent event) {

0 commit comments

Comments
 (0)