7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Module Name: extrace - Support for interpreter execution tracing
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * All rights reserved.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Redistribution and use in source and binary forms, with or without
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * modification, are permitted provided that the following conditions
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 1. Redistributions of source code must retain the above copyright
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * notice, this list of conditions, and the following disclaimer,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * without modification.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 2. Redistributions in binary form must reproduce at minimum a disclaimer
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * substantially similar to the "NO WARRANTY" disclaimer below
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * ("Disclaimer") and any redistribution must be conditioned upon
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * including a substantially similar Disclaimer requirement for further
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * binary redistribution.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 3. Neither the names of the above-listed copyright holders nor the names
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * of any contributors may be used to endorse or promote products derived
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * from this software without specific prior written permission.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Alternatively, this software may be distributed under the terms of the
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * GNU General Public License ("GPL") version 2 as published by the Free
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Software Foundation.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * NO WARRANTY
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * POSSIBILITY OF SUCH DAMAGES.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekstatic ACPI_OPERAND_OBJECT *AcpiGbl_TraceMethodObject = NULL;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/* Local prototypes */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekstatic const char *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExInterpreterTraceEnabled
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Name - Whether method name should be matched,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * this should be checked before starting
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: TRUE if interpreter trace is enabled.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Check whether interpreter trace is enabled
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Check if tracing is enabled */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!(AcpiGbl_TraceFlags & ACPI_TRACE_ENABLED))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Check if tracing is filtered:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 1. If the tracer is started, AcpiGbl_TraceMethodObject should have
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * been filled by the trace starter
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 2. If the tracer is not started, AcpiGbl_TraceMethodName should be
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * matched if it is specified
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 3. If the tracer is oneshot style, AcpiGbl_TraceMethodName should
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * not be cleared by the trace stopper during the first match
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if ((AcpiGbl_TraceFlags & ACPI_TRACE_ONESHOT) &&
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExGetTraceEventName
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Type - Trace event type
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Trace event name.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Used to obtain the full trace event name.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekstatic const char *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return "Method";
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return "Opcode";
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return "Region";
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExTracePoint
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Type - Trace event type
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Begin - TRUE if before execution
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Aml - Executed AML address
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Pathname - Object path
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Internal interpreter execution trace.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "%s %s [0x%p:%s] execution.\n",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "%s %s [0x%p] execution.\n",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExStartTraceMethod
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: MethodNode - Node of the method
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * ObjDesc - The method object
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * WalkState - current state, NULL if not yet executing
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Start control method execution trace
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Enabled = AcpiExInterpreterTraceEnabled (Pathname);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, TRUE,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExStopTraceMethod
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: MethodNode - Node of the method
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * ObjDesc - The method object
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * WalkState - current state, NULL if not yet executing
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Stop control method execution trace
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Enabled = AcpiExInterpreterTraceEnabled (NULL);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, FALSE,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Check whether the tracer should be stopped */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Disable further tracing if type is one-shot */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExStartTraceOpcode
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Op - The parser opcode object
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * WalkState - current state, NULL if not yet executing
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Start opcode execution trace
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TRACE_POINT (ACPI_TRACE_AML_OPCODE, TRUE,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiExStopTraceOpcode
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Op - The parser opcode object
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * WalkState - current state, NULL if not yet executing
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Stop opcode execution trace
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/