From acba092b0f744d4218c9ce28fe55d5117109807a Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Sat, 8 Nov 2014 11:09:13 +0100 Subject: [PATCH] lttng: Fix system calls for LTTng 2.6 kernel traces The "syscall entry" and "syscall exit" events were renamed in LTTng 2.6. This patch adds a new trace layout, which extends the base LTTng definitions, but updates the system call event names. "syscall exit" also had to be changed to a prefix, because LTTng 2.6 now lists the syscall name in exits too. We don't make use of it though, so it shouldn't affect other tracers who don't. Also required updating the CFV/RV to only display the non-prefix part of the syscall name, no matter what layout is used underneat. Change-Id: I9061b0dff92daa11894d951c09ed3dffe80e4d1b Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/36199 Reviewed-by: Matthew Khouzam Tested-by: Hudson CI --- .../META-INF/MANIFEST.MF | 2 +- .../layout/IKernelAnalysisEventLayout.java | 2 +- .../core/trace/layout/Lttng26EventLayout.java | 49 +++++++++++++++++++ .../core/trace/layout/LttngEventLayout.java | 25 +++++----- .../kernel/LttngKernelStateProvider.java | 45 +++++++---------- .../kernel/core/trace/LttngKernelTrace.java | 22 +++++++-- .../META-INF/MANIFEST.MF | 1 + .../ControlFlowPresentationProvider.java | 17 ++++++- .../ResourcesPresentationProvider.java | 13 ++++- 9 files changed, 130 insertions(+), 46 deletions(-) create mode 100644 org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/Lttng26EventLayout.java diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF index ed86556391..a5340e28c0 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF @@ -15,7 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.tracecompass.tmf.ctf.core, org.eclipse.tracecompass.lttng2.control.core Export-Package: org.eclipse.tracecompass.internal.lttng2.kernel.core;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui,org.eclipse.tracecompass.lttng2.kernel.core.tests", - org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout;x-friends:="org.eclipse.tracecompass.lttng2.kernel.core.tests", + org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout;x-friends:="org.eclipse.tracecompass.lttng2.kernel.core.tests,org.eclipse.tracecompass.lttng2.kernel.ui", org.eclipse.tracecompass.lttng2.kernel.core.analysis.cpuusage, org.eclipse.tracecompass.lttng2.kernel.core.analysis.kernel, org.eclipse.tracecompass.lttng2.kernel.core.event.matching, diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/IKernelAnalysisEventLayout.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/IKernelAnalysisEventLayout.java index 14ae0ff8e9..e10ff790ef 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/IKernelAnalysisEventLayout.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/IKernelAnalysisEventLayout.java @@ -55,7 +55,7 @@ public interface IKernelAnalysisEventLayout { String eventStatedumpProcessState(); String eventSyscallEntryPrefix(); String eventCompatSyscallEntryPrefix(); - String eventSyscallExit(); + String eventSyscallExitPrefix(); // ------------------------------------------------------------------------ // Event field names diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/Lttng26EventLayout.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/Lttng26EventLayout.java new file mode 100644 index 0000000000..f441a5d8c2 --- /dev/null +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/Lttng26EventLayout.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2014 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Alexandre Montplaisir - Initial API and implementation + ******************************************************************************/ + +package org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout; + +/** + * This file defines all the known event and field names for LTTng kernel + * traces, for versions of lttng-modules 2.6 and above. + * + * @author Alexandre Montplaisir + */ +public class Lttng26EventLayout extends LttngEventLayout { + + private Lttng26EventLayout() {} + + private static final Lttng26EventLayout INSTANCE = new Lttng26EventLayout(); + + public static Lttng26EventLayout getInstance() { + return INSTANCE; + } + + // ------------------------------------------------------------------------ + // New event names in these versions + // ------------------------------------------------------------------------ + + @Override + public String eventSyscallEntryPrefix() { + return "syscall_entry_"; //$NON-NLS-1$ + } + + @Override + public String eventCompatSyscallEntryPrefix() { + return "compat_syscall_entry_"; //$NON-NLS-1$ + } + + @Override + public String eventSyscallExitPrefix() { + return "syscall_exit_"; //$NON-NLS-1$ + } +} diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/LttngEventLayout.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/LttngEventLayout.java index 20443e86c7..caae5710d4 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/LttngEventLayout.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/trace/layout/LttngEventLayout.java @@ -19,8 +19,8 @@ import org.eclipse.jdt.annotation.NonNull; import com.google.common.collect.ImmutableList; /** - * This file defines all the known event and field names for LTTng 2.0 kernel - * traces. + * This file defines all the known event and field names for LTTng kernel + * traces, for versions of lttng-modules up to 2.5. * * These should not be externalized, since they need to match exactly what the * tracer outputs. If you want to localize them in a view, you should do a @@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableList; public class LttngEventLayout implements IKernelAnalysisEventLayout { /* Event names */ - private static final String EXIT_SYSCALL = "exit_syscall"; private static final String IRQ_HANDLER_ENTRY = "irq_handler_entry"; private static final String IRQ_HANDLER_EXIT = "irq_handler_exit"; private static final String SOFTIRQ_ENTRY = "softirq_entry"; @@ -48,8 +47,9 @@ public class LttngEventLayout implements IKernelAnalysisEventLayout { private static final String SCHED_PROCESS_FREE = "sched_process_free"; private static final String STATEDUMP_PROCESS_STATE = "lttng_statedump_process_state"; - private static final String SYSCALL_PREFIX = "sys_"; - private static final String COMPAT_SYSCALL_PREFIX = "compat_sys_"; + private static final String SYSCALL_ENTRY_PREFIX = "sys_"; + private static final String COMPAT_SYSCALL_ENTRY_PREFIX = "compat_sys_"; + private static final String SYSCALL_EXIT_PREFIX = "exit_syscall"; /* Field names */ private static final String IRQ = "irq"; @@ -64,7 +64,7 @@ public class LttngEventLayout implements IKernelAnalysisEventLayout { private static final String CHILD_TID = "child_tid"; /** All instances are the same. Only provide a static instance getter */ - private LttngEventLayout() { + protected LttngEventLayout() { } private static final IKernelAnalysisEventLayout INSTANCE = new LttngEventLayout(); @@ -139,19 +139,20 @@ public class LttngEventLayout implements IKernelAnalysisEventLayout { public String eventStatedumpProcessState() { return STATEDUMP_PROCESS_STATE; } - @Override - public String eventSyscallExit() { - return EXIT_SYSCALL; - } @Override public String eventSyscallEntryPrefix() { - return SYSCALL_PREFIX; + return SYSCALL_ENTRY_PREFIX; } @Override public String eventCompatSyscallEntryPrefix() { - return COMPAT_SYSCALL_PREFIX; + return COMPAT_SYSCALL_ENTRY_PREFIX; + } + + @Override + public String eventSyscallExitPrefix() { + return SYSCALL_EXIT_PREFIX; } // ------------------------------------------------------------------------ diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/analysis/kernel/LttngKernelStateProvider.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/analysis/kernel/LttngKernelStateProvider.java index fa9f219511..dc82941da7 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/analysis/kernel/LttngKernelStateProvider.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/analysis/kernel/LttngKernelStateProvider.java @@ -50,9 +50,8 @@ public class LttngKernelStateProvider extends AbstractTmfStateProvider { * Version number of this state provider. Please bump this if you modify the * contents of the generated state history in some way. */ - private static final int VERSION = 4; + private static final int VERSION = 5; - private static final int SYSCALL_EXIT_INDEX = 0; private static final int IRQ_HANDLER_ENTRY_INDEX = 1; private static final int IRQ_HANDLER_EXIT_INDEX = 2; private static final int SOFT_IRQ_ENTRY_INDEX = 3; @@ -99,7 +98,6 @@ public class LttngKernelStateProvider extends AbstractTmfStateProvider { private static Map buildEventNames(IKernelAnalysisEventLayout layout) { ImmutableMap.Builder builder = ImmutableMap.builder(); - builder.put(layout.eventSyscallExit(), SYSCALL_EXIT_INDEX); builder.put(layout.eventIrqHandlerEntry(), IRQ_HANDLER_ENTRY_INDEX); builder.put(layout.eventIrqHandlerExit(), IRQ_HANDLER_EXIT_INDEX); builder.put(layout.eventSoftIrqEntry(), SOFT_IRQ_ENTRY_INDEX); @@ -169,25 +167,6 @@ public class LttngKernelStateProvider extends AbstractTmfStateProvider { int intval = (idx == null ? -1 : idx.intValue()); switch (intval) { - case SYSCALL_EXIT_INDEX: - { - /* Clear the current system call on the process */ - quark = ss.getQuarkRelativeAndAdd(currentThreadNode, Attributes.SYSTEM_CALL); - value = TmfStateValue.nullValue(); - ss.modifyAttribute(ts, value, quark); - - /* Put the process' status back to user mode */ - quark = ss.getQuarkRelativeAndAdd(currentThreadNode, Attributes.STATUS); - value = StateValues.PROCESS_STATUS_RUN_USERMODE_VALUE; - ss.modifyAttribute(ts, value, quark); - - /* Put the CPU's status back to user mode */ - quark = ss.getQuarkRelativeAndAdd(currentCPUNode, Attributes.STATUS); - value = StateValues.CPU_STATUS_RUN_USERMODE_VALUE; - ss.modifyAttribute(ts, value, quark); - } - break; - case IRQ_HANDLER_ENTRY_INDEX: { Integer irqId = ((Long) event.getContent().getField(fLayout.fieldIrq()).getValue()).intValue(); @@ -470,10 +449,6 @@ public class LttngKernelStateProvider extends AbstractTmfStateProvider { { if (eventName.startsWith(fLayout.eventSyscallEntryPrefix()) || eventName.startsWith(fLayout.eventCompatSyscallEntryPrefix())) { - /* - * This is a replacement for the old sys_enter event. Now - * syscall names are listed into the event type - */ /* Assign the new system call to the process */ quark = ss.getQuarkRelativeAndAdd(currentThreadNode, Attributes.SYSTEM_CALL); @@ -489,7 +464,25 @@ public class LttngKernelStateProvider extends AbstractTmfStateProvider { quark = ss.getQuarkRelativeAndAdd(currentCPUNode, Attributes.STATUS); value = StateValues.CPU_STATUS_RUN_SYSCALL_VALUE; ss.modifyAttribute(ts, value, quark); + + } else if (eventName.startsWith(fLayout.eventSyscallExitPrefix())) { + + /* Clear the current system call on the process */ + quark = ss.getQuarkRelativeAndAdd(currentThreadNode, Attributes.SYSTEM_CALL); + value = TmfStateValue.nullValue(); + ss.modifyAttribute(ts, value, quark); + + /* Put the process' status back to user mode */ + quark = ss.getQuarkRelativeAndAdd(currentThreadNode, Attributes.STATUS); + value = StateValues.PROCESS_STATUS_RUN_USERMODE_VALUE; + ss.modifyAttribute(ts, value, quark); + + /* Put the CPU's status back to user mode */ + quark = ss.getQuarkRelativeAndAdd(currentCPUNode, Attributes.STATUS); + value = StateValues.CPU_STATUS_RUN_USERMODE_VALUE; + ss.modifyAttribute(ts, value, quark); } + } break; } // End of big switch diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java index c40b60625c..bd225baaa6 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java @@ -14,6 +14,7 @@ package org.eclipse.tracecompass.lttng2.kernel.core.trace; import java.nio.BufferOverflowException; +import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -27,6 +28,7 @@ import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.IKernel import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.Lttng26EventLayout; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; @@ -42,7 +44,8 @@ public class LttngKernelTrace extends CtfTmfTrace { * Supported Linux kernel tracers */ private enum OriginTracer { - LTTNG(LttngEventLayout.getInstance()); + LTTNG(LttngEventLayout.getInstance()), + LTTNG26(Lttng26EventLayout.getInstance()); private final @NonNull IKernelAnalysisEventLayout fLayout; @@ -84,13 +87,24 @@ public class LttngKernelTrace extends CtfTmfTrace { @Override public void initTrace(IResource resource, String path, Class eventType) throws TmfTraceException { + super.initTrace(resource, path, eventType); + /* * Set the 'fOriginTracer' in accordance to what is found in the * metadata */ - fOriginTracer = OriginTracer.LTTNG; - - super.initTrace(resource, path, eventType); + Map traceEnv = this.getCTFTrace().getEnvironment(); + String tracerName = traceEnv.get("tracer_name"); //$NON-NLS-1$ + String tracerMajor = traceEnv.get("tracer_major"); //$NON-NLS-1$ + String tracerMinor = traceEnv.get("tracer_minor"); //$NON-NLS-1$ + + if ("\"lttng-modules\"".equals(tracerName) && //$NON-NLS-1$ + tracerMajor != null && (Integer.valueOf(tracerMajor) >= 2) && + tracerMinor != null && (Integer.valueOf(tracerMinor) >= 6)) { + fOriginTracer = OriginTracer.LTTNG26; + } else { + fOriginTracer = OriginTracer.LTTNG; + } } /** diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF index af51de2a35..ebf598cb35 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.tracecompass.tmf.core;bundle-version="0.1.0", org.eclipse.tracecompass.tmf.ui;bundle-version="0.1.0", + org.eclipse.tracecompass.tmf.ctf.core;bundle-version="0.1.0", org.eclipse.tracecompass.lttng2.control.core;bundle-version="0.1.0", org.eclipse.tracecompass.lttng2.control.ui;bundle-version="0.1.0", org.eclipse.tracecompass.lttng2.kernel.core;bundle-version="0.1.0" diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java b/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java index 0ce58bff6d..a962bb6251 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java +++ b/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java @@ -23,9 +23,11 @@ import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.tracecompass.internal.lttng2.kernel.core.Attributes; import org.eclipse.tracecompass.internal.lttng2.kernel.core.StateValues; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.IKernelAnalysisEventLayout; import org.eclipse.tracecompass.internal.lttng2.kernel.ui.Activator; import org.eclipse.tracecompass.internal.lttng2.kernel.ui.Messages; import org.eclipse.tracecompass.lttng2.kernel.core.analysis.kernel.LttngKernelAnalysis; +import org.eclipse.tracecompass.lttng2.kernel.core.trace.LttngKernelTrace; import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException; import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException; @@ -34,6 +36,7 @@ import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException; import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval; import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue; import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.StateItem; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent; @@ -200,7 +203,19 @@ public class ControlFlowPresentationProvider extends TimeGraphPresentationProvid if (!value.getStateValue().isNull()) { ITmfStateValue state = value.getStateValue(); gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE)); - Utils.drawText(gc, state.toString().substring(4), bounds.x, bounds.y - 2, bounds.width, true, true); + + /* + * Remove the "sys_" or "syscall_entry_" or similar from what we + * draw in the rectangle. This depends on the trace's event layout. + */ + int beginIndex = 0; + ITmfTrace trace = entry.getTrace(); + if (trace instanceof LttngKernelTrace) { + IKernelAnalysisEventLayout layout = ((LttngKernelTrace) trace).getEventLayout(); + beginIndex = layout.eventSyscallEntryPrefix().length(); + } + + Utils.drawText(gc, state.toString().substring(beginIndex), bounds.x, bounds.y - 2, bounds.width, true, true); } } catch (AttributeNotFoundException | TimeRangeException e) { Activator.getDefault().logError("Error in ControlFlowPresentationProvider", e); //$NON-NLS-1$ diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java b/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java index 373ac575d4..44d14cab79 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java +++ b/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java @@ -24,10 +24,12 @@ import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.tracecompass.internal.lttng2.kernel.core.Attributes; import org.eclipse.tracecompass.internal.lttng2.kernel.core.StateValues; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.IKernelAnalysisEventLayout; import org.eclipse.tracecompass.internal.lttng2.kernel.ui.Activator; import org.eclipse.tracecompass.internal.lttng2.kernel.ui.Messages; import org.eclipse.tracecompass.internal.lttng2.kernel.ui.views.resources.ResourcesEntry.Type; import org.eclipse.tracecompass.lttng2.kernel.core.analysis.kernel.LttngKernelAnalysis; +import org.eclipse.tracecompass.lttng2.kernel.core.trace.LttngKernelTrace; import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException; import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException; @@ -36,6 +38,7 @@ import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException; import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval; import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue; import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.StateItem; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent; @@ -330,7 +333,15 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider attribute = Attributes.EXEC_NAME; } else if (status == StateValues.CPU_STATUS_RUN_SYSCALL) { attribute = Attributes.SYSTEM_CALL; - beginIndex = 4; // skip the 'sys_' + /* + * Remove the "sys_" or "syscall_entry_" or similar from what we + * draw in the rectangle. This depends on the trace's event layout. + */ + ITmfTrace trace = entry.getTrace(); + if (trace instanceof LttngKernelTrace) { + IKernelAnalysisEventLayout layout = ((LttngKernelTrace) trace).getEventLayout(); + beginIndex = layout.eventSyscallEntryPrefix().length(); + } } if (attribute != null) { int quark = ss.getQuarkAbsolute(Attributes.THREADS, Integer.toString(currentThreadId), attribute); -- 2.34.1