Projects
Mega:23.09
libipt
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
_service:tar_scm:libipt.spec
Changed
@@ -1,6 +1,6 @@ Name: libipt -Version: 2.0.5 -Release: 2 +Version: 2.1 +Release: 1 Summary: Intel(R) Processor Trace Decoder Library License: BSD URL: https://github.com/intel/libipt @@ -51,6 +51,14 @@ %{_libdir}/%{name}.so %changelog +* Thu Jan 25 2024 liuchao <liuchao173@huawei.com> - 2.1-1 +- Upgrade to 2.1: + - a new tool 'ptseg' for finding the PSB segment for a given offset. + - a new layer 'evt' representing the trace as a list of events. + - event tracing (cfe and evd packets). + - C11 threads, if available. + - Bug fixes and support for latest processors. + * Thu Feb 16 2023 Wenlong Zhang<zhangwenlong@loongson.cn> - 2.0.5-2 - Add loongarch64 support
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="tar_scm"> <param name="url">git@gitee.com:src-openeuler/libipt.git</param> <param name="scm">git</param> - <param name="revision">openEuler-23.09</param> + <param name="revision">master</param> <param name="exclude">*</param> <param name="extract">*</param> </service>
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_event.3.md
Deleted
@@ -1,291 +0,0 @@ -% PT_QRY_EVENT(3) - -<!--- - ! Copyright (c) 2015-2022, Intel Corporation - ! - ! Redistribution and use in source and binary forms, with or without - ! modification, are permitted provided that the following conditions are met: - ! - ! * Redistributions of source code must retain the above copyright notice, - ! this list of conditions and the following disclaimer. - ! * Redistributions in binary form must reproduce the above copyright notice, - ! this list of conditions and the following disclaimer in the documentation - ! and/or other materials provided with the distribution. - ! * Neither the name of Intel Corporation nor the names of its contributors - ! may be used to endorse or promote products derived from this software - ! without specific prior written permission. - ! - ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - ! POSSIBILITY OF SUCH DAMAGE. - !--> - -# NAME - -pt_qry_event, pt_insn_event, pt_blk_event - query an Intel(R) Processor Trace -decoder for an asynchronous event - - -# SYNOPSIS - -| **\#include `<intel-pt.h>`** -| -| **int pt_qry_event(struct pt_query_decoder \**decoder*,** -| **struct pt_event \**event*, size_t *size*);** -| -| **int pt_insn_event(struct pt_insn_decoder \**decoder*,** -| **struct pt_event \**event*, size_t *size*);** -| -| **int pt_blk_event(struct pt_block_decoder \**decoder*,** -| **struct pt_event \**event*, size_t *size*);** - -Link with *-lipt*. - - -# DESCRIPTION - -**pt_qry_event**(), **pt_insn_event**(), and **pt_blk_event**() provide the next -pending asynchronous event in *decoder*'s Intel Processor Trace (Intel PT) -decode in the *pt_event* object pointed to by the *event* argument. - -The *size* argument must be set to *sizeof(struct pt_event)*. The function will -provide at most *size* bytes of the *pt_event* structure. A newer decoder -library may provide event types that are not yet defined. Those events may be -truncated. - -On success, detailed information about the event is provided in the *pt_event* -object pointed to by the *event* argument. The *pt_event* structure is declared -as: - -~~~{.c} -/** An event. */ -struct pt_event { - /** The type of the event. */ - enum pt_event_type type; - - /** A flag indicating that the event IP has been - * suppressed. - */ - uint32_t ip_suppressed:1; - - /** A flag indicating that the event is for status update. */ - uint32_t status_update:1; - - /** A flag indicating that the event has timing - * information. - */ - uint32_t has_tsc:1; - - /** The time stamp count of the event. - * - * This field is only valid if \@has_tsc is set. - */ - uint64_t tsc; - - /** The number of lost mtc and cyc packets. - * - * This gives an idea about the quality of the \@tsc. The - * more packets were dropped, the less precise timing is. - */ - uint32_t lost_mtc; - uint32_t lost_cyc; - - /* Reserved space for future extensions. */ - uint64_t reserved2; - - /** Event specific data. */ - union { - /** Event: enabled. */ - struct { - /** The address at which tracing resumes. */ - uint64_t ip; - - /** A flag indicating that tracing resumes from the IP - * at which tracing had been disabled before. - */ - uint32_t resumed:1; - } enabled; - - /** Event: disabled. */ - struct { - /** The destination of the first branch inside a - * filtered area. - * - * This field is not valid if \@ip_suppressed is set. - */ - uint64_t ip; - - /* The exact source ip needs to be determined using - * disassembly and the filter configuration. - */ - } disabled; - - ... - } variant; -}; -~~~ - -See the *intel-pt.h* header file for more detail. The common fields of the -*pt_event* structure are described in more detail below: - -type -: The type of the event as a *pt_event_type* enumeration, which is declared - as: - -~~~{.c} -/** Event types. */ -enum pt_event_type { - /* Tracing has been enabled/disabled. */ - ptev_enabled, - ptev_disabled, - - /* Tracing has been disabled asynchronously. */ - ptev_async_disabled, - - /* An asynchronous branch, e.g. interrupt. */ - ptev_async_branch, - - /* A synchronous paging event. */ - ptev_paging, - - /* An asynchronous paging event. */ - ptev_async_paging, - - /* Trace overflow. */ - ptev_overflow, - - /* An execution mode change. */ - ptev_exec_mode, - - /* A transactional execution state change. */ - ptev_tsx, - - /* Trace Stop. */ - ptev_stop, - - /* A synchronous vmcs event. */ - ptev_vmcs, - - /* An asynchronous vmcs event. */ - ptev_async_vmcs, - - /* Execution has stopped. */ - ptev_exstop, - - /* An MWAIT operation completed. */ - ptev_mwait, - - /* A power state was entered. */ - ptev_pwre, - - /* A power state was exited. */ - ptev_pwrx, - - /* A PTWRITE event. */ - ptev_ptwrite, - - /* A timing event. */ - ptev_tick, - - /* A core:bus ratio event. */ - ptev_cbr,
View file
_service:tar_scm:v2.0.5.tar.gz/include/posix/threads.h
Deleted
@@ -1,259 +0,0 @@ -/* - * Copyright (c) 2014-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * - * It looks like there is still no support for C11's threads.h. - * - * We implement the few features we actually need hoping that this file will - * soon go away. - */ - -#ifndef THREADS_H -#define THREADS_H - -#include <pthread.h> - -#ifndef PTHREAD_MUTEX_NORMAL -# define PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_TIMED_NP -#endif - -#include <stdint.h> -#include <stdlib.h> - -enum { - thrd_success = 1, - thrd_error -}; - -struct pt_thread { - pthread_t thread; -}; -typedef struct pt_thread thrd_t; - -typedef int (*thrd_start_t)(void *); - - -struct thrd_args { - thrd_start_t fun; - void *arg; -}; - -static void *thrd_routine(void *arg) -{ - struct thrd_args *args; - int result; - - args = arg; - if (!args) - return (void *) (intptr_t) -1; - - result = -1; - if (args->fun) - result = args->fun(args->arg); - - free(args); - - return (void *) (intptr_t) result; -} - -static inline int thrd_create(thrd_t *thrd, thrd_start_t fun, void *arg) -{ - struct thrd_args *args; - int errcode; - - if (!thrd || !fun) - return thrd_error; - - args = malloc(sizeof(*args)); - if (!args) - return thrd_error; - - args->fun = fun; - args->arg = arg; - - errcode = pthread_create(&thrd->thread, NULL, thrd_routine, args); - if (errcode) { - free(args); - return thrd_error; - } - - return thrd_success; -} - -static inline int thrd_join(thrd_t *thrd, int *res) -{ - void *result; - int errcode; - - if (!thrd) - return thrd_error; - - errcode = pthread_join(thrd->thread, &result); - if (errcode) - return thrd_error; - - if (res) - *res = (int) (intptr_t) result; - - return thrd_success; -} - - -struct pt_mutex { - pthread_mutex_t mutex; -}; -typedef struct pt_mutex mtx_t; - -enum { - mtx_plain = PTHREAD_MUTEX_NORMAL -}; - -static inline int mtx_init(mtx_t *mtx, int type) -{ - int errcode; - - if (!mtx || type != mtx_plain) - return thrd_error; - - errcode = pthread_mutex_init(&mtx->mutex, NULL); - if (errcode) - return thrd_error; - - return thrd_success; -} - -static inline void mtx_destroy(mtx_t *mtx) -{ - if (mtx) - (void) pthread_mutex_destroy(&mtx->mutex); -} - -static inline int mtx_lock(mtx_t *mtx) -{ - int errcode; - - if (!mtx) - return thrd_error; - - errcode = pthread_mutex_lock(&mtx->mutex); - if (errcode) - return thrd_error; - - return thrd_success; -} - -static inline int mtx_unlock(mtx_t *mtx) -{ - int errcode; - - if (!mtx) - return thrd_error; - - errcode = pthread_mutex_unlock(&mtx->mutex); - if (errcode) - return thrd_error; - - return thrd_success; -} - - -struct pt_cond { - pthread_cond_t cond; -}; -typedef struct pt_cond cnd_t; - -static inline int cnd_init(cnd_t *cnd) -{ - int errcode; - - if (!cnd) - return thrd_error; - - errcode = pthread_cond_init(&cnd->cond, NULL); - if (errcode) - return thrd_error; -
View file
_service:tar_scm:v2.0.5.tar.gz/include/windows/threads.h
Deleted
@@ -1,239 +0,0 @@ -/* - * Copyright (c) 2014-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * - * It looks like there is still no support for C11's threads.h. - * - * We implement the few features we actually need hoping that this file will - * soon go away. - */ - -#ifndef THREADS_H -#define THREADS_H - -#include "windows.h" - - -enum { - thrd_success = 1, - thrd_error -}; - - -struct pt_thread { - HANDLE handle; -}; -typedef struct pt_thread thrd_t; - -typedef int (*thrd_start_t)(void *); - - -struct thrd_args { - thrd_start_t fun; - void *arg; -}; - -static DWORD WINAPI thrd_routine(void *arg) -{ - struct thrd_args *args; - int result; - - args = (struct thrd_args *) arg; - if (!args) - return (DWORD) -1; - - result = -1; - if (args->fun) - result = args->fun(args->arg); - - free(args); - - return (DWORD) result; -} - -static inline int thrd_create(thrd_t *thrd, thrd_start_t fun, void *arg) -{ - struct thrd_args *args; - HANDLE handle; - - if (!thrd || !fun) - return thrd_error; - - args = malloc(sizeof(*args)); - if (!args) - return thrd_error; - - args->fun = fun; - args->arg = arg; - - handle = CreateThread(NULL, 0, thrd_routine, args, 0, NULL); - if (!handle) { - free(args); - return thrd_error; - } - - thrd->handle = handle; - return thrd_success; -} - -static inline int thrd_join(thrd_t *thrd, int *res) -{ - DWORD status; - BOOL success; - - if (!thrd) - return thrd_error; - - status = WaitForSingleObject(thrd->handle, INFINITE); - if (status) - return thrd_error; - - if (res) { - DWORD result; - - success = GetExitCodeThread(thrd->handle, &result); - if (!success) { - (void) CloseHandle(thrd->handle); - return thrd_error; - } - - *res = (int) result; - } - - success = CloseHandle(thrd->handle); - if (!success) - return thrd_error; - - return thrd_success; -} - -struct pt_mutex { - CRITICAL_SECTION cs; -}; -typedef struct pt_mutex mtx_t; - -enum { - mtx_plain -}; - -static inline int mtx_init(mtx_t *mtx, int type) -{ - if (!mtx || type != mtx_plain) - return thrd_error; - - InitializeCriticalSection(&mtx->cs); - - return thrd_success; -} - -static inline void mtx_destroy(mtx_t *mtx) -{ - if (mtx) - DeleteCriticalSection(&mtx->cs); -} - -static inline int mtx_lock(mtx_t *mtx) -{ - if (!mtx) - return thrd_error; - - EnterCriticalSection(&mtx->cs); - - return thrd_success; -} - -static inline int mtx_unlock(mtx_t *mtx) -{ - if (!mtx) - return thrd_error; - - LeaveCriticalSection(&mtx->cs); - - return thrd_success; -} - - -struct pt_cond { - CONDITION_VARIABLE cond; -}; -typedef struct pt_cond cnd_t; - -static inline int cnd_init(cnd_t *cnd) -{ - if (!cnd) - return thrd_error; - - InitializeConditionVariable(&cnd->cond); - - return thrd_success; -} - -static inline int cnd_destroy(cnd_t *cnd) -{ - if (!cnd) - return thrd_error; -
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_cpuid.h
Deleted
@@ -1,40 +0,0 @@ -/* - * Copyright (c) 2013-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef PT_CPUID_H -#define PT_CPUID_H - -#include <inttypes.h> - -/* Execute cpuid with @leaf set in the eax register. - * The result is stored in @eax, @ebx, @ecx and @edx. - */ -extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx); - -#endif /* PT_CPUID_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_decoder_function.h
Deleted
@@ -1,129 +0,0 @@ -/* - * Copyright (c) 2013-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef PT_DECODER_FUNCTION_H -#define PT_DECODER_FUNCTION_H - -#include <stdint.h> - -struct pt_query_decoder; -struct pt_packet_decoder; -struct pt_packet; -struct pt_config; - - -/* Intel(R) Processor Trace decoder function flags. */ -enum pt_decoder_function_flag { - /* The decoded packet contains an unconditional branch destination. */ - pdff_tip = 1 << 0, - - /* The decode packet contains unconditional branch destinations. */ - pdff_tnt = 1 << 1, - - /* The decoded packet contains an event. */ - pdff_event = 1 << 2, - - /* The decoded packet marks the end of a PSB header. */ - pdff_psbend = 1 << 3, - - /* The decoded packet contains a non-branch IP update. */ - pdff_fup = 1 << 4, - - /* The decoded packet is unknown to the decoder. */ - pdff_unknown = 1 << 5, - - /* The decoded packet contains timing information. */ - pdff_timing = 1 << 6, - - /* The decoded packet contains padding. */ - pdff_pad = 1 << 7 -}; - -/* An Intel(R) Processor Trace decoder function. */ -struct pt_decoder_function { - /* The function to analyze the next packet. */ - int (*packet)(struct pt_packet_decoder *, struct pt_packet *); - - /* The function to decode the next packet. */ - int (*decode)(struct pt_query_decoder *); - - /* The function to decode the next packet in segment header - * context, i.e. between PSB and ENDPSB. - */ - int (*header)(struct pt_query_decoder *); - - /* Decoder function flags. */ - int flags; -}; - - -/* Fetch the decoder function. - * - * Sets @dfun to the decoder function for decoding the packet at @pos. - * - * Returns 0 on success. - * Returns -pte_internal if @dfun or @config is NULL. - * Returns -pte_nosync if @pos is NULL or outside @config's trace buffer. - * Returns -pte_eos if the opcode is incomplete or missing. - */ -extern int pt_df_fetch(const struct pt_decoder_function **dfun, - const uint8_t *pos, const struct pt_config *config); - - -/* Decoder functions for the various packet types. - * - * Do not call those functions directly! - */ -extern const struct pt_decoder_function pt_decode_unknown; -extern const struct pt_decoder_function pt_decode_pad; -extern const struct pt_decoder_function pt_decode_psb; -extern const struct pt_decoder_function pt_decode_tip; -extern const struct pt_decoder_function pt_decode_tnt_8; -extern const struct pt_decoder_function pt_decode_tnt_64; -extern const struct pt_decoder_function pt_decode_tip_pge; -extern const struct pt_decoder_function pt_decode_tip_pgd; -extern const struct pt_decoder_function pt_decode_fup; -extern const struct pt_decoder_function pt_decode_pip; -extern const struct pt_decoder_function pt_decode_ovf; -extern const struct pt_decoder_function pt_decode_mode; -extern const struct pt_decoder_function pt_decode_psbend; -extern const struct pt_decoder_function pt_decode_tsc; -extern const struct pt_decoder_function pt_decode_cbr; -extern const struct pt_decoder_function pt_decode_tma; -extern const struct pt_decoder_function pt_decode_mtc; -extern const struct pt_decoder_function pt_decode_cyc; -extern const struct pt_decoder_function pt_decode_stop; -extern const struct pt_decoder_function pt_decode_vmcs; -extern const struct pt_decoder_function pt_decode_mnt; -extern const struct pt_decoder_function pt_decode_exstop; -extern const struct pt_decoder_function pt_decode_mwait; -extern const struct pt_decoder_function pt_decode_pwre; -extern const struct pt_decoder_function pt_decode_pwrx; -extern const struct pt_decoder_function pt_decode_ptw; - -#endif /* PT_DECODER_FUNCTION_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/posix/pt_cpuid.c
Deleted
@@ -1,37 +0,0 @@ -/* - * Copyright (c) 2013-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "pt_cpuid.h" - -#include <cpuid.h> - -extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) -{ - __get_cpuid(leaf, eax, ebx, ecx, edx); -}
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_decoder_function.c
Deleted
@@ -1,379 +0,0 @@ -/* - * Copyright (c) 2013-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "pt_decoder_function.h" -#include "pt_packet_decoder.h" -#include "pt_query_decoder.h" -#include "pt_opcodes.h" - -#include "intel-pt.h" - - -const struct pt_decoder_function pt_decode_unknown = { - /* .packet = */ pt_pkt_decode_unknown, - /* .decode = */ pt_qry_decode_unknown, - /* .header = */ pt_qry_decode_unknown, - /* .flags = */ pdff_unknown -}; - -const struct pt_decoder_function pt_decode_pad = { - /* .packet = */ pt_pkt_decode_pad, - /* .decode = */ pt_qry_decode_pad, - /* .header = */ pt_qry_decode_pad, - /* .flags = */ pdff_pad -}; - -const struct pt_decoder_function pt_decode_psb = { - /* .packet = */ pt_pkt_decode_psb, - /* .decode = */ pt_qry_decode_psb, - /* .header = */ NULL, - /* .flags = */ 0 -}; - -const struct pt_decoder_function pt_decode_tip = { - /* .packet = */ pt_pkt_decode_tip, - /* .decode = */ pt_qry_decode_tip, - /* .header = */ NULL, - /* .flags = */ pdff_tip -}; - -const struct pt_decoder_function pt_decode_tnt_8 = { - /* .packet = */ pt_pkt_decode_tnt_8, - /* .decode = */ pt_qry_decode_tnt_8, - /* .header = */ NULL, - /* .flags = */ pdff_tnt -}; - -const struct pt_decoder_function pt_decode_tnt_64 = { - /* .packet = */ pt_pkt_decode_tnt_64, - /* .decode = */ pt_qry_decode_tnt_64, - /* .header = */ NULL, - /* .flags = */ pdff_tnt -}; - -const struct pt_decoder_function pt_decode_tip_pge = { - /* .packet = */ pt_pkt_decode_tip_pge, - /* .decode = */ pt_qry_decode_tip_pge, - /* .header = */ NULL, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_tip_pgd = { - /* .packet = */ pt_pkt_decode_tip_pgd, - /* .decode = */ pt_qry_decode_tip_pgd, - /* .header = */ NULL, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_fup = { - /* .packet = */ pt_pkt_decode_fup, - /* .decode = */ pt_qry_decode_fup, - /* .header = */ pt_qry_header_fup, - /* .flags = */ pdff_fup -}; - -const struct pt_decoder_function pt_decode_pip = { - /* .packet = */ pt_pkt_decode_pip, - /* .decode = */ pt_qry_decode_pip, - /* .header = */ pt_qry_header_pip, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_ovf = { - /* .packet = */ pt_pkt_decode_ovf, - /* .decode = */ pt_qry_decode_ovf, - /* .header = */ NULL, - /* .flags = */ pdff_psbend | pdff_event -}; - -const struct pt_decoder_function pt_decode_mode = { - /* .packet = */ pt_pkt_decode_mode, - /* .decode = */ pt_qry_decode_mode, - /* .header = */ pt_qry_header_mode, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_psbend = { - /* .packet = */ pt_pkt_decode_psbend, - /* .decode = */ pt_qry_decode_psbend, - /* .header = */ NULL, - /* .flags = */ pdff_psbend -}; - -const struct pt_decoder_function pt_decode_tsc = { - /* .packet = */ pt_pkt_decode_tsc, - /* .decode = */ pt_qry_decode_tsc, - /* .header = */ pt_qry_header_tsc, - /* .flags = */ pdff_timing -}; - -const struct pt_decoder_function pt_decode_cbr = { - /* .packet = */ pt_pkt_decode_cbr, - /* .decode = */ pt_qry_decode_cbr, - /* .header = */ pt_qry_header_cbr, - /* .flags = */ pdff_timing | pdff_event -}; - -const struct pt_decoder_function pt_decode_tma = { - /* .packet = */ pt_pkt_decode_tma, - /* .decode = */ pt_qry_decode_tma, - /* .header = */ pt_qry_decode_tma, - /* .flags = */ pdff_timing -}; - -const struct pt_decoder_function pt_decode_mtc = { - /* .packet = */ pt_pkt_decode_mtc, - /* .decode = */ pt_qry_decode_mtc, - /* .header = */ pt_qry_decode_mtc, - /* .flags = */ pdff_timing -}; - -const struct pt_decoder_function pt_decode_cyc = { - /* .packet = */ pt_pkt_decode_cyc, - /* .decode = */ pt_qry_decode_cyc, - /* .header = */ pt_qry_decode_cyc, - /* .flags = */ pdff_timing -}; - -const struct pt_decoder_function pt_decode_stop = { - /* .packet = */ pt_pkt_decode_stop, - /* .decode = */ pt_qry_decode_stop, - /* .header = */ NULL, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_vmcs = { - /* .packet = */ pt_pkt_decode_vmcs, - /* .decode = */ pt_qry_decode_vmcs, - /* .header = */ pt_qry_header_vmcs, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_mnt = { - /* .packet = */ pt_pkt_decode_mnt, - /* .decode = */ pt_qry_decode_mnt, - /* .header = */ pt_qry_header_mnt, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_exstop = { - /* .packet = */ pt_pkt_decode_exstop, - /* .decode = */ pt_qry_decode_exstop, - /* .header = */ NULL, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_mwait = { - /* .packet = */ pt_pkt_decode_mwait, - /* .decode = */ pt_qry_decode_mwait, - /* .header = */ NULL, - /* .flags = */ pdff_event -}; - -const struct pt_decoder_function pt_decode_pwre = { - /* .packet = */ pt_pkt_decode_pwre,
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/windows/pt_cpuid.c
Deleted
@@ -1,43 +0,0 @@ -/* - * Copyright (c) 2013-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "pt_cpuid.h" - -#include <intrin.h> - -extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) -{ - int cpu_info4; - - __cpuid(cpu_info, leaf); - *eax = cpu_info0; - *ebx = cpu_info1; - *ecx = cpu_info2; - *edx = cpu_info3; -}
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-fetch.c
Deleted
@@ -1,693 +0,0 @@ -/* - * Copyright (c) 2014-2022, Intel Corporation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "ptunit.h" - -#include "pt_decoder_function.h" -#include "pt_packet_decoder.h" -#include "pt_query_decoder.h" -#include "pt_encoder.h" -#include "pt_opcodes.h" - -#include "intel-pt.h" - - -/* A test fixture for decoder function fetch tests. */ -struct fetch_fixture { - /* The trace buffer. */ - uint8_t buffer1024; - - /* A trace configuration. */ - struct pt_config config; - - /* A trace encoder. */ - struct pt_encoder encoder; - - /* The test fixture initialization and finalization functions. */ - struct ptunit_result (*init)(struct fetch_fixture *); - struct ptunit_result (*fini)(struct fetch_fixture *); -}; - -static struct ptunit_result ffix_init(struct fetch_fixture *ffix) -{ - memset(ffix->buffer, pt_opc_bad, sizeof(ffix->buffer)); - - memset(&ffix->config, 0, sizeof(ffix->config)); - ffix->config.size = sizeof(ffix->config); - ffix->config.begin = ffix->buffer; - ffix->config.end = ffix->buffer + sizeof(ffix->buffer); - - pt_encoder_init(&ffix->encoder, &ffix->config); - - return ptu_passed(); -} - -static struct ptunit_result ffix_fini(struct fetch_fixture *ffix) -{ - pt_encoder_fini(&ffix->encoder); - - return ptu_passed(); -} - - -static struct ptunit_result fetch_null(struct fetch_fixture *ffix) -{ - const struct pt_decoder_function *dfun; - int errcode; - - errcode = pt_df_fetch(NULL, ffix->config.begin, &ffix->config); - ptu_int_eq(errcode, -pte_internal); - - errcode = pt_df_fetch(&dfun, NULL, &ffix->config); - ptu_int_eq(errcode, -pte_nosync); - - errcode = pt_df_fetch(&dfun, ffix->config.begin, NULL); - ptu_int_eq(errcode, -pte_internal); - - return ptu_passed(); -} - -static struct ptunit_result fetch_empty(struct fetch_fixture *ffix) -{ - const struct pt_decoder_function *dfun; - int errcode; - - errcode = pt_df_fetch(&dfun, ffix->config.end, &ffix->config); - ptu_int_eq(errcode, -pte_eos); - - return ptu_passed(); -} - -static struct ptunit_result fetch_unknown(struct fetch_fixture *ffix) -{ - const struct pt_decoder_function *dfun; - int errcode; - - ffix->config.begin0 = pt_opc_bad; - - errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); - ptu_int_eq(errcode, 0); - ptu_ptr_eq(dfun, &pt_decode_unknown); - - return ptu_passed(); -} - -static struct ptunit_result fetch_unknown_ext(struct fetch_fixture *ffix) -{ - const struct pt_decoder_function *dfun; - int errcode; - - ffix->config.begin0 = pt_opc_ext; - ffix->config.begin1 = pt_ext_bad; - - errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); - ptu_int_eq(errcode, 0); - ptu_ptr_eq(dfun, &pt_decode_unknown); - - return ptu_passed(); -} - -static struct ptunit_result fetch_unknown_ext2(struct fetch_fixture *ffix) -{ - const struct pt_decoder_function *dfun; - int errcode; - - ffix->config.begin0 = pt_opc_ext; - ffix->config.begin1 = pt_ext_ext2; - ffix->config.begin2 = pt_ext2_bad; - - errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); - ptu_int_eq(errcode, 0); - ptu_ptr_eq(dfun, &pt_decode_unknown); - - return ptu_passed(); -} - -static struct ptunit_result fetch_packet(struct fetch_fixture *ffix, - const struct pt_packet *packet, - const struct pt_decoder_function *df) -{ - const struct pt_decoder_function *dfun; - int errcode; - - errcode = pt_enc_next(&ffix->encoder, packet); - ptu_int_ge(errcode, 0); - - errcode = pt_df_fetch(&dfun, ffix->config.begin, &ffix->config); - ptu_int_eq(errcode, 0); - ptu_ptr_eq(dfun, df); - - return ptu_passed(); -} - -static struct ptunit_result fetch_type(struct fetch_fixture *ffix, - enum pt_packet_type type, - const struct pt_decoder_function *dfun) -{ - struct pt_packet packet; - - memset(&packet, 0, sizeof(packet)); - packet.type = type; - - ptu_test(fetch_packet, ffix, &packet, dfun); - - return ptu_passed(); -} - -static struct ptunit_result fetch_tnt_8(struct fetch_fixture *ffix) -{ - struct pt_packet packet; - - memset(&packet, 0, sizeof(packet)); - packet.type = ppt_tnt_8; - packet.payload.tnt.bit_size = 1; - - ptu_test(fetch_packet, ffix, &packet, &pt_decode_tnt_8); - - return ptu_passed(); -} - -static struct ptunit_result fetch_mode_exec(struct fetch_fixture *ffix) -{ - struct pt_packet packet; - - memset(&packet, 0, sizeof(packet));
View file
_service:tar_scm:v2.0.5.tar.gz/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -24,7 +25,13 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.1) + +# Do not add /W3 to MSVC command-line +# +if (POLICY CMP0092) + cmake_policy(SET CMP0092 NEW) +endif () project(PT C) @@ -36,8 +43,8 @@ # a build number and a version extension can be optionally specified. # set(PT_VERSION_MAJOR 2) -set(PT_VERSION_MINOR 0) -set(PT_VERSION_PATCH 5) +set(PT_VERSION_MINOR 1) +set(PT_VERSION_PATCH 0) set(PT_VERSION_BUILD "0" CACHE STRING "") set(PT_VERSION_EXT "" CACHE STRING "") @@ -75,6 +82,7 @@ option(PTDUMP "Enable ptdump, a packet dumper") option(PTXED "Enable ptxed, an instruction flow dumper") option(PTTC "Enable pttc, a test compiler") +option(PTSEG "Enable ptseg, a PSB segment finder") option(PTUNIT "Enable ptunit, a unit test system and libipt unit tests") option(MAN "Enable man pages (requires pandoc)." OFF) option(SIDEBAND "Enable libipt-sb, a sideband correlation library") @@ -86,8 +94,17 @@ if (PTXED OR PEVENT) option(FEATURE_ELF "Support ELF files." OFF) + if (FEATURE_ELF) + add_definitions( + -DFEATURE_ELF + ) + endif (FEATURE_ELF) endif (PTXED OR PEVENT) +if (PEVENT AND NOT SIDEBAND) + message(FATAL_ERROR "PEVENT requires SIDEBAND") +endif () + set(PTT OFF) if (BASH AND PTDUMP AND PTXED AND PTTC) set(PTT ON) @@ -112,12 +129,6 @@ ) endif (PTUNIT) -if (FEATURE_ELF) - add_definitions( - -DFEATURE_ELF - ) -endif (FEATURE_ELF) - if (SIDEBAND) add_definitions( -DFEATURE_SIDEBAND @@ -183,9 +194,11 @@ /D_CRT_SECURE_NO_WARNINGS ) - # enable parallel build - # - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + if (CMAKE_GENERATOR MATCHES "Visual Studio") + # enable parallel build + # + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + endif () if (DEVBUILD) # compiler warnings @@ -231,10 +244,6 @@ link_libraries(pthread) endif (FEATURE_THREADS) - # set the language - # - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") - # windows-like dll export model # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") @@ -261,6 +270,9 @@ HAVE_C_Wno_format_truncation) endif (CMAKE_C_COMPILER_ID MATCHES "Cclang") + add_cflag_if_available("-Wno-debug-disables-optimization" + HAVE_C_Wno_debug_disables_optimization) + # warnings are errors # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") @@ -272,6 +284,10 @@ function(add_ptunit_test_base name) if (PTUNIT) add_executable(${name} ${ARGN}) + set_target_properties(${name} PROPERTIES + C_STANDARD 11 + C_STANDARD_REQUIRED ON + ) target_link_libraries(${name} ptunit) add_test(NAME ${name} COMMAND ${name}) @@ -304,6 +320,9 @@ if (PTTC) add_subdirectory(pttc) endif (PTTC) +if (PTSEG) + add_subdirectory(ptseg) +endif (PTSEG) if (PTUNIT) add_subdirectory(ptunit) endif (PTUNIT)
View file
_service:tar_scm:v2.0.5.tar.gz/LICENSE -> _service:tar_scm:v2.1.tar.gz/LICENSE
Changed
@@ -1,4 +1,5 @@ -Copyright (c) 2013-2022, Intel Corporation +Copyright (c) 2013-2023, Intel Corporation +SPDX-License-Identifier: BSD-3-Clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/README -> _service:tar_scm:v2.1.tar.gz/README
Changed
@@ -26,6 +26,8 @@ ptxed Example implementation of a trace disassembler + ptseg A simple tool to find surrounding PSB packets + pttc A trace test generator ptunit A simple unit test system
View file
_service:tar_scm:v2.1.tar.gz/SECURITY
Added
@@ -0,0 +1,15 @@ +Security Policy +--------------- + +Intel is committed to rapidly addressing security vulnerabilities +affecting our customers and providing clear guidance on the solution, +impact, severity and mitigation. + + +Reporting a Vulnerability +------------------------- + +Please report any security vulnerabilities in this project utilizing the +guidelines here. + +here: https://www.intel.com/content/www/us/en/security-center/vulnerability-handling-guidelines.html
View file
_service:tar_scm:v2.0.5.tar.gz/doc/getting_started.md -> _service:tar_scm:v2.1.tar.gz/doc/getting_started.md
Changed
@@ -2,7 +2,8 @@ ======================== <!--- - ! Copyright (c) 2013-2022, Intel Corporation + ! Copyright (c) 2013-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/howto_build.md -> _service:tar_scm:v2.1.tar.gz/doc/howto_build.md
Changed
@@ -2,7 +2,8 @@ ============================================================================ <!--- - ! Copyright (c) 2013-2022, Intel Corporation + ! Copyright (c) 2013-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: @@ -46,7 +47,7 @@ By default, only the decoder library is built. Other components can be enabled by setting the respective cmake variable to ON. -The following optional components are availble: +The following optional components are available: PTUNIT A simple unit test framework. A collection of unit tests for libipt. @@ -91,8 +92,8 @@ GCOV Support for code coverage using libgcov. - This build variant requires libgcov and is not availble - on Windows. + This build variant requires libgcov and is not + available on Windows. DEVBUILD Enable compiler warnings and turn them into errors.
View file
_service:tar_scm:v2.0.5.tar.gz/doc/howto_capture.md -> _service:tar_scm:v2.1.tar.gz/doc/howto_capture.md
Changed
@@ -2,7 +2,8 @@ ============================================= <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/howto_libipt.md -> _service:tar_scm:v2.1.tar.gz/doc/howto_libipt.md
Changed
@@ -2,7 +2,8 @@ ======================================================== <!--- - ! Copyright (c) 2013-2022, Intel Corporation + ! Copyright (c) 2013-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: @@ -54,6 +55,9 @@ * *events* This layer deals with packet combinations that encode higher-level events. + * *query* This layer deals with the execution flow on branch + level. + * *instruction flow* This layer deals with the execution flow on the instruction level. @@ -72,7 +76,8 @@ * *enc* Packet encoding (packet layer). * *pkt* Packet decoding (packet layer). - * *qry* Event (or query) layer. + * *evt* Event layer. + * *qry* Query layer. * *insn* Instruction flow layer. * *blk* Block layer. @@ -414,6 +419,111 @@ integrate execution flow reconstruction with other functionality more tightly than it would be possible otherwise. +It provides a linear stream of events. Start by configuring and allocating a +`pt_evt_decoder` as shown below: + +~~~{.c} + struct pt_event_decoder *decoder; + struct pt_config config; + int errcode; + + memset(&config, 0, sizeof(config)); + config.size = sizeof(config); + config.begin = <pt buffer begin>; + config.end = <pt buffer end>; + config.cpu = <cpu identifier>; + config.decode.callback = <decode function>; + config.decode.context = <decode context>; + + decoder = pt_evt_alloc_decoder(&config); + if (!decoder) + <handle error>(errcode); +~~~ + +An optional packet decode callback function may be specified in addition to the +mandatory config fields. If specified, the callback function will be called for +packets the decoder does not know about. The decoder will ignore the unknown +packet except for its size in order to skip it. If there is no decode callback +specified, the decoder will abort with `-pte_bad_opc`. In addition to the +callback function pointer, an optional pointer to user-defined context +information can be specified. This context will be passed to the decode +callback function. + +Before the decoder can be used, it needs to be synchronized onto the Intel PT +packet stream. To iterate over synchronization points in the Intel PT packet +stream in forward or backward direction, the event decoder offers the following +two synchronization functions: + + pt_evt_sync_forward() + pt_evt_sync_backward() + + +To manually synchronize the decoder at a synchronization point (i.e. PSB packet) +in the Intel PT packet stream, use the following function: + + pt_evt_sync_set() + + +After successfully synchronizing, the event decoder will start reading the PSB+ +header to initialize its internal state. The following example shows +synchronizing to the first synchronization point: + +~~~{.c} + struct pt_event_decoder *decoder; + uint64_t ip; + int status; + + status = pt_evt_sync_forward(decoder); + if (status < 0) + <handle error>(status); +~~~ + +The decoder will remember the last synchronization packet it decoded. +Subsequent calls to `pt_evt_sync_forward` and `pt_evt_sync_backward` will use +this as their starting point. + +You can get the current decoder position as offset into the Intel PT buffer via: + + pt_evt_get_offset() + + +You can get the position of the last synchronization point as offset into the +Intel PT buffer via: + + pt_evt_get_sync_offset() + + +In addition to an event decoder, you will need an instruction decoder for +decoding and classifying instructions. + + +#### Iterating + +Once the decoder is synchronized, you can iterate over processor trace events by +repeated calls to `pt_evt_next()` as shown in the following example: + +~~~{.c} + struct pt_event_decoder *decoder; + int status; + + for (;;) { + struct pt_event event; + + status = pt_evt_next(decoder, &event, sizeof(event)); + if (status < 0) + break; + + ... + } +~~~ + + +## The Query Layer + +The query layer provides an API for querying processor trace whenever a +non-obvious control-flow decision needs to be made. If further provides +information about asynchronous events. + This section describes how to use the query decoder for reconstructing execution flow. See the instruction flow decoder as an example. Start by configuring and allocating a `pt_query_decoder` as shown below: @@ -786,7 +896,7 @@ status = pt_insn_next(decoder, &insn, sizeof(insn)); - if (insn.iclass != ptic_error) + if (insn.iclass != ptic_unknown) <process instruction>(&insn); if (status < 0) @@ -890,7 +1000,7 @@ status = pt_insn_next(decoder, &insn, sizeof(insn)); - if (insn.iclass != ptic_error) + if (insn.iclass != ptic_unknown) <process instruction>(&insn); if (status < 0) @@ -1265,7 +1375,19 @@ ## Threading -The decoder library API is not thread-safe. Different threads may allocate and -use different decoder objects at the same time. Different decoders must not use -the same image object. Use `pt_image_copy()` to give each decoder its own copy -of a shared master image. +The decoder library API is *partly* thread-safe. Specifically: + + * It's OK for different threads to allocate and use *different* decoder + objects at the same time, but no single decoder object can be used + concurrently by different threads. A decoder allocated in one thread may be + passed to, and used from, another thread, as long as the decoder is not used + concurrently. + + * Different decoder objects must not use the same image object, even if the + decoders are owned by the same thread. You can, however, use + `pt_image_copy()` to give each decoder its own copy of a shared master + image. Copying an image is lightweight and does not copy large amounts of + data. + + * Image section cache objects *can* be shared across threads and be used + concurrently, but only if you build libipt with `FEATURE_THREADS=ON`.
View file
_service:tar_scm:v2.0.5.tar.gz/doc/howto_pttc.md -> _service:tar_scm:v2.1.tar.gz/doc/howto_pttc.md
Changed
@@ -2,7 +2,8 @@ =========================================================================== <!--- - ! Copyright (c) 2013-2022, Intel Corporation + ! Copyright (c) 2013-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/doc/man/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -66,11 +67,11 @@ pt_pkt_alloc_decoder pt_pkt_sync_forward pt_pkt_get_offset + pt_evt_next pt_qry_alloc_decoder pt_qry_sync_forward pt_qry_get_offset pt_qry_cond_branch - pt_qry_event pt_qry_time pt_image_alloc pt_image_add_file @@ -121,8 +122,9 @@ add_man_page_alias(3 pt_qry_time pt_insn_core_bus_ratio) add_man_page_alias(3 pt_qry_time pt_blk_time) add_man_page_alias(3 pt_qry_time pt_blk_core_bus_ratio) -add_man_page_alias(3 pt_qry_event pt_insn_event) -add_man_page_alias(3 pt_qry_event pt_blk_event) +add_man_page_alias(3 pt_evt_next pt_qry_event) +add_man_page_alias(3 pt_evt_next pt_insn_event) +add_man_page_alias(3 pt_evt_next pt_blk_event) add_man_page_alias(3 pt_image_alloc pt_image_free) add_man_page_alias(3 pt_image_alloc pt_image_name) add_man_page_alias(3 pt_image_add_file pt_image_copy)
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_alloc_encoder.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_alloc_encoder.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ALLOC_ENCODER(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_blk_alloc_decoder.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_blk_alloc_decoder.3.md
Changed
@@ -1,7 +1,8 @@ % PT_BLK_ALLOC_DECODER(3) <!--- - ! Copyright (c) 2016-2022, Intel Corporation + ! Copyright (c) 2016-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_blk_get_offset.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_blk_get_offset.3.md
Changed
@@ -1,7 +1,8 @@ % PT_BLK_GET_OFFSET(3) <!--- - ! Copyright (c) 2016-2022, Intel Corporation + ! Copyright (c) 2016-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_blk_next.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_blk_next.3.md
Changed
@@ -1,7 +1,8 @@ % PT_BLK_NEXT(3) <!--- - ! Copyright (c) 2016-2022, Intel Corporation + ! Copyright (c) 2016-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: @@ -94,9 +95,10 @@ /** The instruction class for the last instruction in this block. * - * This field may be set to ptic_error to indicate that the instruction - * class is not available. The block decoder may choose to not provide - * the instruction class in some cases for performance reasons. + * This field may be set to ptic_unknown to indicate that the + * instruction class is not available. The block decoder may choose to + * not provide the instruction class in some cases for performance + * reasons. */ enum pt_insn_class iclass; @@ -174,7 +176,7 @@ iclass : A coarse classification of the last instruction in the block. This may be - *ptic_error* to indicate that the classification is not available. + *ptic_unknown* to indicate that the classification is not available. The block decoder knows the instruction class of the instruction that ended the block most of the time. If it does, it provides this information to
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_blk_sync_forward.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_blk_sync_forward.3.md
Changed
@@ -1,7 +1,8 @@ % PT_BLK_SYNC_FORWARD(3) <!--- - ! Copyright (c) 2016-2022, Intel Corporation + ! Copyright (c) 2016-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_config.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_config.3.md
Changed
@@ -1,7 +1,8 @@ % PT_CONFIG(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_enc_get_config.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_enc_get_config.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ENC_GET_CONFIG(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: @@ -30,9 +31,9 @@ # NAME -pt_enc_get_config, pt_pkt_get_config, pt_qry_get_config, pt_insn_get_config, -pt_blk_get_config - get an Intel(R) Processor Trace encoder/decoder's -configuration +pt_enc_get_config, pt_pkt_get_config, pt_evt_get_config, pt_qry_get_config, +pt_insn_get_config, pt_blk_get_config - get an Intel(R) Processor Trace +encoder/decoder's configuration # SYNOPSIS @@ -46,6 +47,9 @@ | **pt_pkt_get_config(const struct pt_packet_decoder \**decoder*);** | | **const struct pt_config \*** +| **pt_evt_get_config(const struct pt_event_decoder \**decoder*);** +| +| **const struct pt_config \*** | **pt_qry_get_config(const struct pt_query_decoder \**decoder*);** | | **const struct pt_config \*** @@ -73,5 +77,5 @@ # SEE ALSO **pt_config**(3), **pt_alloc_encoder**(3), **pt_pkt_alloc_decoder**(3), -**pt_qry_alloc_decoder**(3), **pt_insn_alloc_decoder**(3), -**pt_blk_alloc_decoder**(3) +**pt_evt_alloc_decoder**(3), **pt_qry_alloc_decoder**(3)**, +**pt_insn_alloc_decoder**(3), **pt_blk_alloc_decoder**(3)
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_enc_get_offset.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_enc_get_offset.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ENC_GET_OFFSET(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/doc/man/pt_evt_alloc_decoder.3.md
Added
@@ -0,0 +1,103 @@ +% PT_EVT_ALLOC_DECODER(3) + +<!--- + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions are met: + ! + ! * Redistributions of source code must retain the above copyright notice, + ! this list of conditions and the following disclaimer. + ! * Redistributions in binary form must reproduce the above copyright notice, + ! this list of conditions and the following disclaimer in the documentation + ! and/or other materials provided with the distribution. + ! * Neither the name of Intel Corporation nor the names of its contributors + ! may be used to endorse or promote products derived from this software + ! without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + !--> + +# NAME + +pt_evt_alloc_decoder, pt_evt_free_decoder - allocate/free an Intel(R) Processor +Trace event decoder + + +# SYNOPSIS + +| **\#include `<intel-pt.h>`** +| +| **struct pt_event_decoder \*** +| **pt_evt_alloc_decoder(const struct pt_config \**config*);** +| +| **void pt_evt_free_decoder(struct pt_event_decoder \**decoder*);** + +Link with *-lipt*. + + +# DESCRIPTION + +A event decoder decodes raw Intel Processor Trace (Intel PT) and combines Intel +PT packets into a stream of Intel PT events. + +This information can be used to reconstruct the execution flow of the traced +code. Decode instructions until the next event, then apply the event. + +**pt_evt_alloc_decoder**() allocates a new event decoder and returns a pointer +to it. The *config* argument points to a *pt_config* object. See +**pt_config**(3). The *config* argument will not be referenced by the returned +decoder but the trace buffer defined by the *config* argument's *begin* and +*end* fields will. + +The returned event decoder needs to be synchronized onto the trace stream before +it can be used. To synchronize the event decoder, use +**pt_evt_sync_forward**(3), **pt_evt_sync_backward**(3), or +**pt_evt_sync_set**(3). + +**pt_evt_free_decoder**() frees the Intel PT event decoder pointed to by +*decoder*. The *decoder* argument must be NULL or point to a decoder that has +been allocated by a call to **pt_evt_alloc_decoder**(). + + +# RETURN VALUE + +**pt_evt_alloc_decoder**() returns a pointer to a *pt_event_decoder* object on +success or NULL in case of an error. + + +# EXAMPLE + +~~~{.c} +int foo(const struct pt_config *config) { + struct pt_event_decoder *decoder; + errcode; + + decoder = pt_evt_alloc_decoder(config); + if (!decoder) + return -pte_nomem; + + errcode = bar(decoder); + + pt_evt_free_decoder(decoder); + return errcode; +} +~~~ + + +# SEE ALSO + +**pt_config**(3), **pt_evt_sync_forward**(3), **pt_evt_sync_backward**(3), +**pt_evt_sync_set**(3), **pt_evt_get_offset**(3), **pt_evt_get_sync_offset**(3), +**pt_evt_get_config**(3), **pt_evt_next**(3)
View file
_service:tar_scm:v2.1.tar.gz/doc/man/pt_evt_get_offset.3.md
Added
@@ -0,0 +1,82 @@ +% PT_EVT_GET_OFFSET(3) + +<!--- + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions are met: + ! + ! * Redistributions of source code must retain the above copyright notice, + ! this list of conditions and the following disclaimer. + ! * Redistributions in binary form must reproduce the above copyright notice, + ! this list of conditions and the following disclaimer in the documentation + ! and/or other materials provided with the distribution. + ! * Neither the name of Intel Corporation nor the names of its contributors + ! may be used to endorse or promote products derived from this software + ! without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + !--> + +# NAME + +pt_evt_get_offset, pt_evt_get_sync_offset - get an Intel(R) Processor Trace +event decoder's current/synchronization trace buffer offset + + +# SYNOPSIS + +| **\#include `<intel-pt.h>`** +| +| **int pt_evt_get_offset(const struct pt_event_decoder \**decoder*,** +| **uint64_t \**offset*);** +| **int pt_evt_get_sync_offset(const struct pt_event_decoder \**decoder*,** +| **uint64_t \**offset*);** + +Link with *-lipt*. + + +# DESCRIPTION + +**pt_evt_get_offset**() provides *decoder*'s current position as offset in +bytes from the beginning of *decoder*'s trace buffer in the unsigned integer +variable pointed to by *offset*. + +**pt_evt_get_sync_offset**() provides *decoder*'s last synchronization point as +offset in bytes from the beginning of *decoder*'s trace buffer in the unsigned +integer variable pointed to by *offset*. + + +# RETURN VALUE + +Both functions return zero on success or a negative *pt_error_code* enumeration +constant in case of an error. + + +# ERRORS + +pte_invalid +: The *decoder* or *offset* argument is NULL. + +pte_nosync +: *decoder* has not been synchronized onto the trace stream. Use + **pt_evt_sync_forward**(3), **pt_evt_sync_backward**(3), or + **pt_evt_sync_set**(3) to synchronize *decoder*. + + +# SEE ALSO + +**pt_evt_alloc_decoder**(3), **pt_evt_free_decoder**(3), +**pt_evt_sync_forward**(3), **pt_evt_sync_backward**(3), +**pt_evt_sync_set**(3), **pt_evt_get_config**(3), **pt_evt_next**(3)
View file
_service:tar_scm:v2.1.tar.gz/doc/man/pt_evt_next.3.md
Added
@@ -0,0 +1,308 @@ +% PT_EVT_NEXT(3) + +<!--- + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions are met: + ! + ! * Redistributions of source code must retain the above copyright notice, + ! this list of conditions and the following disclaimer. + ! * Redistributions in binary form must reproduce the above copyright notice, + ! this list of conditions and the following disclaimer in the documentation + ! and/or other materials provided with the distribution. + ! * Neither the name of Intel Corporation nor the names of its contributors + ! may be used to endorse or promote products derived from this software + ! without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + !--> + +# NAME + +pt_evt_next, pt_qry_event, pt_insn_event, pt_blk_event - query an Intel(R) +Processor Trace decoder for an (asynchronous) event + + +# SYNOPSIS + +| **\#include `<intel-pt.h>`** +| +| **int pt_evt_next(struct pt_event_decoder \**decoder*,** +| **struct pt_event \**event*, size_t *size*);** +| +| **int pt_qry_event(struct pt_query_decoder \**decoder*,** +| **struct pt_event \**event*, size_t *size*);** +| +| **int pt_insn_event(struct pt_insn_decoder \**decoder*,** +| **struct pt_event \**event*, size_t *size*);** +| +| **int pt_blk_event(struct pt_block_decoder \**decoder*,** +| **struct pt_event \**event*, size_t *size*);** + +Link with *-lipt*. + + +# DESCRIPTION + +**pt_evt_next**() provides the next Intel Processor Trace (Intel PT) event in +*decoder*'s Intel PT decode in the *pt_event* object pointed to by the *event* +argument. This function provides asynchronous events as well as synchronous +control-flow events. + +**pt_qry_event**(), **pt_insn_event**(), and **pt_blk_event**() provide the next +pending asynchronous event in *decoder*'s Intel PT decode in the *pt_event* +object pointed to by the *event* argument. Synchronous control-flow events are +interpreted by the decoder and will not be provided through this interface. + +The *size* argument must be set to *sizeof(struct pt_event)*. The function will +provide at most *size* bytes of the *pt_event* structure. A newer decoder +library may provide event types that are not yet defined. Those events may be +truncated. + +On success, detailed information about the event is provided in the *pt_event* +object pointed to by the *event* argument. The *pt_event* structure is declared +as: + +~~~{.c} +/** An event. */ +struct pt_event { + /** The type of the event. */ + enum pt_event_type type; + + /** A flag indicating that the event IP has been + * suppressed. + */ + uint32_t ip_suppressed:1; + + /** A flag indicating that the event is for status update. */ + uint32_t status_update:1; + + /** A flag indicating that the event has timing + * information. + */ + uint32_t has_tsc:1; + + /** The time stamp count of the event. + * + * This field is only valid if \@has_tsc is set. + */ + uint64_t tsc; + + /** The number of lost mtc and cyc packets. + * + * This gives an idea about the quality of the \@tsc. The + * more packets were dropped, the less precise timing is. + */ + uint32_t lost_mtc; + uint32_t lost_cyc; + + /* Reserved space for future extensions. */ + uint64_t reserved2; + + /** Event specific data. */ + union { + /** Event: enabled. */ + struct { + /** The address at which tracing resumes. */ + uint64_t ip; + + /** A flag indicating that tracing resumes from the IP + * at which tracing had been disabled before. + */ + uint32_t resumed:1; + } enabled; + + /** Event: disabled. */ + struct { + /** The destination of the first branch inside a + * filtered area. + * + * This field is not valid if \@ip_suppressed is set. + */ + uint64_t ip; + + /* The exact source ip needs to be determined using + * disassembly and the filter configuration. + */ + } disabled; + + ... + } variant; +}; +~~~ + +See the *intel-pt.h* header file for more detail. The common fields of the +*pt_event* structure are described in more detail below: + +type +: The type of the event as a *pt_event_type* enumeration, which is declared + as: + +~~~{.c} +/** Event types. */ +enum pt_event_type { + /* Tracing has been enabled/disabled. */ + ptev_enabled, + ptev_disabled, + + /* Tracing has been disabled asynchronously. */ + ptev_async_disabled, + + /* An asynchronous branch, e.g. interrupt. */ + ptev_async_branch, + + /* A synchronous paging event. */ + ptev_paging, + + /* An asynchronous paging event. */ + ptev_async_paging, + + /* Trace overflow. */ + ptev_overflow, + + /* An execution mode change. */ + ptev_exec_mode, + + /* A transactional execution state change. */ + ptev_tsx, + + /* Trace Stop. */ + ptev_stop, + + /* A synchronous vmcs event. */ + ptev_vmcs, + + /* An asynchronous vmcs event. */ + ptev_async_vmcs, + + /* Execution has stopped. */ + ptev_exstop, + + /* An MWAIT operation completed. */ + ptev_mwait, + + /* A power state was entered. */ + ptev_pwre, + + /* A power state was exited. */
View file
_service:tar_scm:v2.1.tar.gz/doc/man/pt_evt_sync_forward.3.md
Added
@@ -0,0 +1,127 @@ +% PT_EVT_SYNC_FORWARD(3) + +<!--- + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause + ! + ! Redistribution and use in source and binary forms, with or without + ! modification, are permitted provided that the following conditions are met: + ! + ! * Redistributions of source code must retain the above copyright notice, + ! this list of conditions and the following disclaimer. + ! * Redistributions in binary form must reproduce the above copyright notice, + ! this list of conditions and the following disclaimer in the documentation + ! and/or other materials provided with the distribution. + ! * Neither the name of Intel Corporation nor the names of its contributors + ! may be used to endorse or promote products derived from this software + ! without specific prior written permission. + ! + ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ! POSSIBILITY OF SUCH DAMAGE. + !--> + +# NAME + +pt_evt_sync_forward, pt_evt_sync_backward, pt_evt_sync_set - synchronize an +Intel(R) Processor Trace event decoder + + +# SYNOPSIS + +| **\#include `<intel-pt.h>`** +| +| **int pt_evt_sync_forward(struct pt_event_decoder \**decoder*);** +| **int pt_evt_sync_backward(struct pt_event_decoder \**decoder*);** +| **int pt_evt_sync_set(struct pt_event_decoder \**decoder*,** +| **uint64_t *offset*);** + +Link with *-lipt*. + + +# DESCRIPTION + +These functions synchronize an Intel Processor Trace (Intel PT) event decoder +pointed to by *decoder* onto the trace stream in *decoder*'s trace buffer. + +They search for a Packet Stream Boundary (PSB) packet in the trace stream and, +if successful, set *decoder*'s current position and synchronization position to +that packet and start processing packets. For synchronization to be +successful, there must be a full PSB+ header in the trace stream. + +**pt_evt_sync_forward**() searches in forward direction from *decoder*'s current +position towards the end of the trace buffer. If *decoder* has been newly +allocated and has not been synchronized yet, the search starts from the +beginning of the trace. + +**pt_evt_sync_backward**() searches in backward direction from *decoder*'s +current position towards the beginning of the trace buffer. If *decoder* has +been newly allocated and has not been synchronized yet, the search starts from +the end of the trace. + +**pt_evt_sync_set**() searches at *offset* bytes from the beginning of its trace +buffer. + + +# RETURN VALUE + +All synchronization functions return zero or a positive value on success or a +negative *pt_error_code* enumeration constant in case of an error. + + +# ERRORS + +pte_invalid +: The *decoder* argument is NULL. + +pte_eos +: There is no (further) PSB+ header in the trace stream + (**pt_evt_sync_forward**() and **pt_evt_sync_backward**()) or at *offset* + bytes into the trace buffer (**pt_evt_sync_set**()). + +pte_nosync +: There is no PSB packet at *offset* bytes from the beginning of the trace + (**pt_evt_sync_set**() only). + +pte_bad_opc +: The decoder encountered an unsupported Intel PT packet opcode. + +pte_bad_packet +: The decoder encountered an unsupported Intel PT packet payload. + + +# EXAMPLE + +The following example re-synchronizes an Intel PT event decoder after decode +errors: + +~~~{.c} +int foo(struct pt_event_decoder *decoder) { + for (;;) { + int errcode; + + errcode = pt_evt_sync_forward(decoder); + if (errcode < 0) + return errcode; + + do { + errcode = decode(decoder); + } while (errcode >= 0); + } +} +~~~ + + +# SEE ALSO + +**pt_evt_alloc_decoder**(3), **pt_evt_free_decoder**(3), +**pt_evt_get_offset**(3), **pt_evt_get_sync_offset**(3), +**pt_evt_get_config**(3), **pt_evt_next**(3) \ No newline at end of file
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_image_add_file.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_image_add_file.3.md
Changed
@@ -1,7 +1,8 @@ % PT_IMAGE_ADD_FILE(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_image_alloc.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_image_alloc.3.md
Changed
@@ -1,7 +1,8 @@ % PT_IMAGE_ALLOC(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_image_remove_by_filename.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_image_remove_by_filename.3.md
Changed
@@ -1,7 +1,8 @@ % PT_IMAGE_REMOVE_BY_FILENAME(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_image_set_callback.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_image_set_callback.3.md
Changed
@@ -1,7 +1,8 @@ % PT_IMAGE_SET_CALLBACK(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_insn_alloc_decoder.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_insn_alloc_decoder.3.md
Changed
@@ -1,7 +1,8 @@ % PT_INSN_ALLOC_DECODER(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_insn_get_image.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_insn_get_image.3.md
Changed
@@ -1,7 +1,8 @@ % PT_INSN_GET_IMAGE(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_insn_get_offset.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_insn_get_offset.3.md
Changed
@@ -1,7 +1,8 @@ % PT_INSN_GET_OFFSET(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_insn_next.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_insn_next.3.md
Changed
@@ -1,7 +1,8 @@ % PT_INSN_NEXT(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met: @@ -143,8 +144,8 @@ * reconstructing the execution flow. */ enum pt_insn_class { - /* The instruction could not be classified. */ - ptic_error, + /* The instruction has not been classified. */ + ptic_unknown, /* The instruction is something not listed below. */ ptic_other, @@ -174,7 +175,13 @@ /* The instruction is a jump-like far transfer. * E.g. FAR JMP. */ - ptic_far_jump + ptic_far_jump, + + /* The instruction is a PTWRITE. */ + ptic_ptwrite, + + /* The instruction is an indirect jump or a far transfer. */ + ptic_indirect }; ~~~
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_insn_sync_forward.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_insn_sync_forward.3.md
Changed
@@ -1,7 +1,8 @@ % PT_INSN_SYNC_FORWARD(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_iscache_add_file.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_iscache_add_file.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ISCACHE_ADD_FILE(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_iscache_alloc.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_iscache_alloc.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ISCACHE_ALLOC(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_iscache_read.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_iscache_read.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ISCACHE_READ(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_iscache_set_limit.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_iscache_set_limit.3.md
Changed
@@ -1,7 +1,8 @@ % PT_ISCACHE_SET_LIMIT(3) <!--- - ! Copyright (c) 2017-2022, Intel Corporation + ! Copyright (c) 2017-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_library_version.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_library_version.3.md
Changed
@@ -1,7 +1,8 @@ % PT_LIBRARY_VERSION(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_packet.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_packet.3.md
Changed
@@ -1,7 +1,8 @@ % PT_PACKET(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_pkt_alloc_decoder.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_pkt_alloc_decoder.3.md
Changed
@@ -1,7 +1,8 @@ % PT_PKT_ALLOC_DECODER(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_pkt_get_offset.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_pkt_get_offset.3.md
Changed
@@ -1,7 +1,8 @@ % PT_PKT_GET_OFFSET(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_pkt_sync_forward.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_pkt_sync_forward.3.md
Changed
@@ -1,7 +1,8 @@ % PT_PKT_SYNC_FORWARD(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_alloc_decoder.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_qry_alloc_decoder.3.md
Changed
@@ -1,7 +1,8 @@ % PT_QRY_ALLOC_DECODER(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_cond_branch.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_qry_cond_branch.3.md
Changed
@@ -1,7 +1,8 @@ % PT_QRY_COND_BRANCH(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_get_offset.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_qry_get_offset.3.md
Changed
@@ -1,7 +1,8 @@ % PT_QRY_GET_OFFSET(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_sync_forward.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_qry_sync_forward.3.md
Changed
@@ -1,7 +1,8 @@ % PT_QRY_SYNC_FORWARD(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/doc/man/pt_qry_time.3.md -> _service:tar_scm:v2.1.tar.gz/doc/man/pt_qry_time.3.md
Changed
@@ -1,7 +1,8 @@ % PT_QRY_TIME(3) <!--- - ! Copyright (c) 2015-2022, Intel Corporation + ! Copyright (c) 2015-2023, Intel Corporation + ! SPDX-License-Identifier: BSD-3-Clause ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/include/posix/pt_threads.h
Added
@@ -0,0 +1,257 @@ +/* + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * + * It looks like there is still no support for C11's threads.h. + * + * We implement the few features we actually need hoping that this file will + * soon go away. + */ + +#ifndef PT_THREADS_H +#define PT_THREADS_H + +#include <pthread.h> + +#if !defined(PTHREAD_MUTEX_NORMAL) && defined(PTHREAD_MUTEX_TIMED_NP) +# define PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_TIMED_NP +#endif + +#include <stdint.h> +#include <stdlib.h> + +enum { + thrd_success = 1, + thrd_error +}; + +struct pt_thread { + pthread_t thread; +}; +typedef struct pt_thread thrd_t; + +typedef int (*thrd_start_t)(void *); + + +struct thrd_args { + thrd_start_t fun; + void *arg; +}; + +static void *thrd_routine(void *arg) +{ + struct thrd_args *args; + int result; + + args = arg; + if (!args) + return (void *) (intptr_t) -1; + + result = -1; + if (args->fun) + result = args->fun(args->arg); + + free(args); + + return (void *) (intptr_t) result; +} + +static inline int thrd_create(thrd_t *thrd, thrd_start_t fun, void *arg) +{ + struct thrd_args *args; + int errcode; + + if (!thrd || !fun) + return thrd_error; + + args = malloc(sizeof(*args)); + if (!args) + return thrd_error; + + args->fun = fun; + args->arg = arg; + + errcode = pthread_create(&thrd->thread, NULL, thrd_routine, args); + if (errcode) { + free(args); + return thrd_error; + } + + return thrd_success; +} + +static inline int thrd_join(thrd_t thrd, int *res) +{ + void *result; + int errcode; + + errcode = pthread_join(thrd.thread, &result); + if (errcode) + return thrd_error; + + if (res) + *res = (int) (intptr_t) result; + + return thrd_success; +} + + +struct pt_mutex { + pthread_mutex_t mutex; +}; +typedef struct pt_mutex mtx_t; + +enum { + mtx_plain = PTHREAD_MUTEX_NORMAL +}; + +static inline int mtx_init(mtx_t *mtx, int type) +{ + int errcode; + + if (!mtx || type != mtx_plain) + return thrd_error; + + errcode = pthread_mutex_init(&mtx->mutex, NULL); + if (errcode) + return thrd_error; + + return thrd_success; +} + +static inline void mtx_destroy(mtx_t *mtx) +{ + if (mtx) + (void) pthread_mutex_destroy(&mtx->mutex); +} + +static inline int mtx_lock(mtx_t *mtx) +{ + int errcode; + + if (!mtx) + return thrd_error; + + errcode = pthread_mutex_lock(&mtx->mutex); + if (errcode) + return thrd_error; + + return thrd_success; +} + +static inline int mtx_unlock(mtx_t *mtx) +{ + int errcode; + + if (!mtx) + return thrd_error; + + errcode = pthread_mutex_unlock(&mtx->mutex); + if (errcode) + return thrd_error; + + return thrd_success; +} + + +struct pt_cond { + pthread_cond_t cond; +}; +typedef struct pt_cond cnd_t; + +static inline int cnd_init(cnd_t *cnd) +{ + int errcode; + + if (!cnd) + return thrd_error; + + errcode = pthread_cond_init(&cnd->cond, NULL); + if (errcode) + return thrd_error; + + return thrd_success; +}
View file
_service:tar_scm:v2.0.5.tar.gz/include/pt_compiler.h -> _service:tar_scm:v2.1.tar.gz/include/pt_compiler.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/include/pt_version.h -> _service:tar_scm:v2.1.tar.gz/include/pt_version.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2018-2022, Intel Corporation + * Copyright (c) 2018-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/include/windows/inttypes.h -> _service:tar_scm:v2.1.tar.gz/include/windows/inttypes.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/include/windows/pt_threads.h
Added
@@ -0,0 +1,237 @@ +/* + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * + * It looks like there is still no support for C11's threads.h. + * + * We implement the few features we actually need hoping that this file will + * soon go away. + */ + +#ifndef PT_THREADS_H +#define PT_THREADS_H + +#include "windows.h" + + +enum { + thrd_success = 1, + thrd_error +}; + + +struct pt_thread { + HANDLE handle; +}; +typedef struct pt_thread thrd_t; + +typedef int (*thrd_start_t)(void *); + + +struct thrd_args { + thrd_start_t fun; + void *arg; +}; + +static DWORD WINAPI thrd_routine(void *arg) +{ + struct thrd_args *args; + int result; + + args = (struct thrd_args *) arg; + if (!args) + return (DWORD) -1; + + result = -1; + if (args->fun) + result = args->fun(args->arg); + + free(args); + + return (DWORD) result; +} + +static inline int thrd_create(thrd_t *thrd, thrd_start_t fun, void *arg) +{ + struct thrd_args *args; + HANDLE handle; + + if (!thrd || !fun) + return thrd_error; + + args = malloc(sizeof(*args)); + if (!args) + return thrd_error; + + args->fun = fun; + args->arg = arg; + + handle = CreateThread(NULL, 0, thrd_routine, args, 0, NULL); + if (!handle) { + free(args); + return thrd_error; + } + + thrd->handle = handle; + return thrd_success; +} + +static inline int thrd_join(thrd_t thrd, int *res) +{ + DWORD status; + BOOL success; + + status = WaitForSingleObject(thrd.handle, INFINITE); + if (status) + return thrd_error; + + if (res) { + DWORD result; + + success = GetExitCodeThread(thrd.handle, &result); + if (!success) { + (void) CloseHandle(thrd.handle); + return thrd_error; + } + + *res = (int) result; + } + + success = CloseHandle(thrd.handle); + if (!success) + return thrd_error; + + return thrd_success; +} + +struct pt_mutex { + CRITICAL_SECTION cs; +}; +typedef struct pt_mutex mtx_t; + +enum { + mtx_plain +}; + +static inline int mtx_init(mtx_t *mtx, int type) +{ + if (!mtx || type != mtx_plain) + return thrd_error; + + InitializeCriticalSection(&mtx->cs); + + return thrd_success; +} + +static inline void mtx_destroy(mtx_t *mtx) +{ + if (mtx) + DeleteCriticalSection(&mtx->cs); +} + +static inline int mtx_lock(mtx_t *mtx) +{ + if (!mtx) + return thrd_error; + + EnterCriticalSection(&mtx->cs); + + return thrd_success; +} + +static inline int mtx_unlock(mtx_t *mtx) +{ + if (!mtx) + return thrd_error; + + LeaveCriticalSection(&mtx->cs); + + return thrd_success; +} + + +struct pt_cond { + CONDITION_VARIABLE cond; +}; +typedef struct pt_cond cnd_t; + +static inline int cnd_init(cnd_t *cnd) +{ + if (!cnd) + return thrd_error; + + InitializeConditionVariable(&cnd->cond); + + return thrd_success; +} + +static inline int cnd_destroy(cnd_t *cnd) +{ + if (!cnd) + return thrd_error; + + /* Nothing to do. */ +
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/libipt/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -36,6 +37,7 @@ set(LIBIPT_FILES src/pt_error.c src/pt_packet_decoder.c + src/pt_event_decoder.c src/pt_query_decoder.c src/pt_encoder.c src/pt_sync.c @@ -51,7 +53,6 @@ src/pt_asid.c src/pt_event_queue.c src/pt_packet.c - src/pt_decoder_function.c src/pt_config.c src/pt_insn.c src/pt_block_decoder.c @@ -98,9 +99,12 @@ set_target_properties(libipt PROPERTIES PREFIX "" + IMPORT_PREFIX "" PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/include/intel-pt.h VERSION ${PT_VERSION} SOVERSION ${PT_VERSION_MAJOR} + C_STANDARD 11 + C_STANDARD_REQUIRED ON ) install(TARGETS libipt @@ -127,7 +131,7 @@ add_ptunit_std_test(image src/pt_asid.c) add_ptunit_std_test(sync src/pt_packet.c) add_ptunit_std_test(config) -add_ptunit_std_test(image_section_cache) +add_ptunit_std_test(image_section_cache ${LIBIPT_SECTION_FILES}) add_ptunit_std_test(block_cache) add_ptunit_std_test(msec_cache) @@ -135,14 +139,13 @@ add_ptunit_c_test(query src/pt_encoder.c src/pt_last_ip.c - src/pt_packet_decoder.c + src/pt_event_decoder.c src/pt_sync.c src/pt_tnt_cache.c src/pt_time.c src/pt_event_queue.c src/pt_query_decoder.c src/pt_packet.c - src/pt_decoder_function.c src/pt_packet_decoder.c src/pt_config.c src/pt_time.c @@ -159,14 +162,26 @@ src/pt_packet_decoder.c src/pt_sync.c src/pt_packet.c - src/pt_decoder_function.c src/pt_config.c ) -add_ptunit_c_test(fetch - src/pt_decoder_function.c +add_ptunit_c_test(encoder src/pt_encoder.c src/pt_config.c ) +add_ptunit_c_test(packet_decoder + src/pt_packet_decoder.c + src/pt_packet.c + src/pt_config.c + src/pt_sync.c + src/pt_query_decoder.c + src/pt_event_decoder.c + src/pt_event_queue.c + src/pt_last_ip.c + src/pt_tnt_cache.c + src/pt_time.c +) +add_ptunit_c_test(insn_decoder ${LIBIPT_FILES}) +add_ptunit_c_test(block_decoder ${LIBIPT_FILES}) add_ptunit_cpp_test(cpp) add_ptunit_libraries(cpp libipt)
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/include/intel-pt.h.in -> _service:tar_scm:v2.1.tar.gz/libipt/include/intel-pt.h.in
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -45,6 +46,7 @@ * - Errors * - Configuration * - Packet encoder / decoder + * - Event decoder * - Query decoder * - Traced image * - Instruction flow decoder @@ -55,6 +57,7 @@ struct pt_encoder; struct pt_packet_decoder; +struct pt_event_decoder; struct pt_query_decoder; struct pt_insn_decoder; struct pt_block_decoder; @@ -374,14 +377,66 @@ /** End a block after a jump instruction. */ uint32_t end_on_jump:1; + +#if (LIBIPT_VERSION >= 0x201) + /** Preserve timing calibration on overflow. */ + uint32_t keep_tcal_on_ovf:1; + + /** Enable iflags events. + * + * Use this only when Event Tracing was enabled via + * IA32_RTIT_CTL31. + */ + uint32_t enable_iflags_events:1; +#endif } block; /** Flags for the instruction flow decoder. */ struct { /** Enable tick events for timing updates. */ uint32_t enable_tick_events:1; + +#if (LIBIPT_VERSION >= 0x201) + /** Preserve timing calibration on overflow. */ + uint32_t keep_tcal_on_ovf:1; + + /** Enable iflags events. + * + * Use this only when Event Tracing was enabled via + * IA32_RTIT_CTL31. + */ + uint32_t enable_iflags_events:1; +#endif } insn; +#if (LIBIPT_VERSION >= 0x201) + /** Flags for the query decoder. */ + struct { + /** Preserve timing calibration on overflow. */ + uint32_t keep_tcal_on_ovf:1; + + /** Enable iflags events. + * + * Use this only when Event Tracing was enabled via + * IA32_RTIT_CTL31. + */ + uint32_t enable_iflags_events:1; + } query; + + /** Flags for the event decoder. */ + struct { + /** Preserve timing calibration on overflow. */ + uint32_t keep_tcal_on_ovf:1; + + /** Enable iflags events. + * + * Use this only when Event Tracing was enabled via + * IA32_RTIT_CTL31. + */ + uint32_t enable_iflags_events:1; + } event; +#endif /* (LIBIPT_VERSION >= 0x201) */ + /* Reserve a few bytes for future extensions. */ uint32_t reserved4; } variant; @@ -555,7 +610,11 @@ ppt_mwait, ppt_pwre, ppt_pwrx, - ppt_ptw + ppt_ptw, +#if (LIBIPT_VERSION >= 0x201) + ppt_cfe, + ppt_evd, +#endif }; /** The IP compression. */ @@ -621,6 +680,14 @@ /** The mode.exec csd bit. */ uint32_t csd:1; + +#if (LIBIPT_VERSION >= 0x201) + /** The mode.exec if bit. + * + * Enable Event Tracing to get updates when IF changes. + */ + uint32_t iflag:1; +#endif }; static inline enum pt_exec_mode @@ -637,6 +704,7 @@ { struct pt_packet_mode_exec packet; + memset(&packet, 0, sizeof(packet)); switch (mode) { default: packet.csl = 1; @@ -645,17 +713,13 @@ case ptem_64bit: packet.csl = 1; - packet.csd = 0; break; case ptem_32bit: - packet.csl = 0; packet.csd = 1; break; case ptem_16bit: - packet.csl = 0; - packet.csd = 0; break; } @@ -823,6 +887,92 @@ return -pte_internal; } +#if (LIBIPT_VERSION >= 0x201) +/* Control-flow event types. */ +enum pt_cfe_type { + pt_cfe_intr = 0x01, + pt_cfe_iret = 0x02, + pt_cfe_smi = 0x03, + pt_cfe_rsm = 0x04, + pt_cfe_sipi = 0x05, + pt_cfe_init = 0x06, + pt_cfe_vmentry = 0x07, + pt_cfe_vmexit = 0x08, + pt_cfe_vmexit_intr = 0x09, + pt_cfe_shutdown = 0x0a, + pt_cfe_uintr = 0x0c, + pt_cfe_uiret = 0x0d, +}; + +/* Interrupt vectors defined in Table 6-1 in §6.5 of Vol.1 of the SDM. */ +enum pt_cfe_intr { + pt_cfe_intr_de = 0, /* Divide Error. */ + pt_cfe_intr_db = 1, /* Debug. */ + pt_cfe_intr_nmi = 2, /* Non Maskable Interrupt. */ + pt_cfe_intr_bp = 3, /* Breakpoint. */ + pt_cfe_intr_of = 4, /* Overflow. */ + pt_cfe_intr_br = 5, /* Bound Range Exceeded. */ + pt_cfe_intr_ud = 6, /* Undefined Opcode. */ + pt_cfe_intr_nm = 7, /* Device Not Available. */ + pt_cfe_intr_df = 8, /* Double Fault. */ + pt_cfe_intr_ts = 10, /* Invalid TSS. */ + pt_cfe_intr_np = 11, /* Segment Not Present. */ + pt_cfe_intr_ss = 12, /* Stack Segment Fault. */ + pt_cfe_intr_gp = 13, /* General Protection Fault. */ + pt_cfe_intr_pf = 14, /* Page Fault. */ + pt_cfe_intr_mf = 16, /* Math Fault. */ + pt_cfe_intr_ac = 17, /* Alignment Check. */ + pt_cfe_intr_mc = 18, /* Machine Check. */ + pt_cfe_intr_xm = 19, /* SIMD Floating Point Exception. */ + pt_cfe_intr_ve = 20, /* Virtualization Exception. */ + pt_cfe_intr_cp = 21, /* Control Protection Exception. */ +}; + +/** A CFE packet. */ +struct pt_packet_cfe { + /** The type of control-flow event. */ + enum pt_cfe_type type; + + /** The vector depending on the type: + * + * pt_cfe_intr: the event vector. + * pt_cfe_vmexit_intr: the event vector. + * pt_cfe_sipi: the SIPI vector.
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/posix/pt_section_posix.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/posix/pt_section_posix.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_asid.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_asid.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_block_cache.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_block_cache.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -33,6 +34,13 @@ #include <stdint.h> +#if !defined(__STDC_NO_ATOMICS__) +# include <stdatomic.h> +# define PT_ATOMIC _Atomic +#else +# define PT_ATOMIC /* nothing */ +#endif + /* A block cache entry qualifier. * @@ -184,8 +192,15 @@ /* The number of cache entries. */ uint32_t nentries; - /* A variable-length array of @nentries entries. */ - struct pt_bcache_entry entry; + /* A variable-length array of @nentries entries. + * + * We access entries without locking. + * + * We use atomic operations, if supported, and rely on guaranteed + * atomic operations, otherwise. See section 8.1.1 in Volume 3A of the + * Intel(R) Software Developer's Manual at http://www.intel.com/sdm. + */ + struct pt_bcache_entry PT_ATOMIC entry; }; /* Create a block cache. @@ -219,7 +234,6 @@ * Returns -pte_internal if @index is outside of @bcache. */ extern int pt_bcache_lookup(struct pt_bcache_entry *bce, - const struct pt_block_cache *bcache, - uint64_t index); + struct pt_block_cache *bcache, uint64_t index); #endif /* PT_BLOCK_CACHE_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_block_decoder.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_block_decoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -29,7 +30,7 @@ #ifndef PT_BLOCK_DECODER_H #define PT_BLOCK_DECODER_H -#include "pt_query_decoder.h" +#include "pt_event_decoder.h" #include "pt_image.h" #include "pt_retstack.h" #include "pt_ild.h" @@ -43,8 +44,8 @@ * of trace. */ struct pt_block_decoder { - /* The Intel(R) Processor Trace query decoder. */ - struct pt_query_decoder query; + /* The event decoder. */ + struct pt_event_decoder evdec; /* The configuration flags. * @@ -65,7 +66,17 @@ /* The current address space. */ struct pt_asid asid; - /* The current Intel(R) Processor Trace event. */ + /* The current event. + * + * This will be valid as long as there are events available, i.e. until + * @status is not negative. + * + * The decoder starts by reading the first event after synchronizing + * onto the trace stream. + * + * When it is done processing an event, it fetches the next event for + * the next iteration. + */ struct pt_event event; /* The call/return stack for ret compression. */ @@ -85,14 +96,22 @@ */ uint64_t ip; + /* The last TSC. + * + * We use it to check for time updates when generating tick events. + */ + uint64_t tsc; + + /* The number of lost MTC and CYC packets. */ + uint32_t lost_mtc, lost_cyc; + + /* The last CBR. */ + uint32_t cbr; + /* The current execution mode. */ enum pt_exec_mode mode; - /* The status of the last successful decoder query. - * - * Errors are reported directly; the status is always a non-negative - * pt_status_flag bit-vector. - */ + /* The last status of the event decoder. */ int status; /* A collection of flags defining how to proceed flow reconstruction: @@ -101,12 +120,12 @@ */ uint32_t enabled:1; - /* - process @event. */ - uint32_t process_event:1; - /* - instructions are executed speculatively. */ uint32_t speculative:1; + /* - whether @tsc tracks wall-clock time. */ + uint32_t has_tsc:1; + /* - process @insn/@iext. * * We have started processing events binding to @insn/@iext. The @@ -126,6 +145,15 @@ /* - a ptwrite event has already been bound to @insn/@iext. */ uint32_t bound_ptwrite:1; + + /* - an iret event has already been bound to @insn/@iext. */ + uint32_t bound_iret:1; + + /* - a vmentry event has already been bound to @insn/@iext. */ + uint32_t bound_vmentry:1; + + /* - an uiret event has already been bound to @insn/@iext. */ + uint32_t bound_uiret:1; }; @@ -140,4 +168,21 @@ /* Finalize a block decoder. */ extern void pt_blk_decoder_fini(struct pt_block_decoder *decoder); +static inline const struct pt_config * +pt_blk_config(const struct pt_block_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_evt_config(&decoder->evdec); +} + +static inline const uint8_t *pt_blk_pos(const struct pt_block_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_evt_pos(&decoder->evdec); +} + #endif /* PT_BLOCK_DECODER_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_config.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_config.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_cpu.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_cpu.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -41,14 +42,4 @@ */ extern int pt_cpu_parse(struct pt_cpu *cpu, const char *s); -/* Get the cpu we're running on. - * - * Reads the family/model/stepping of the processor on which this function - * is executed and stores the value in @cpu. - * - * Returns zero on success, a negative error code otherwise. - * Returns -pte_invalid if @cpu is NULL. - */ -extern int pt_cpu_read(struct pt_cpu *cpu); - #endif /* PT_CPU_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_encoder.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_encoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_event_decoder.h
Added
@@ -0,0 +1,170 @@ +/* + * Copyright (c) 2018-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef PT_EVENT_DECODER_H +#define PT_EVENT_DECODER_H + +#include "pt_packet_decoder.h" +#include "pt_event_queue.h" +#include "pt_last_ip.h" +#include "pt_time.h" + +#include "intel-pt.h" + + +/* An Intel PT event decoder. + * + * It decodes sequences of Intel PT packets into events. + */ +struct pt_event_decoder { + /* The Intel PT packet decoder. */ + struct pt_packet_decoder pacdec; + + /* The configuration flags. + * + * Those are our flags set by the user. In @pacdec.config.flags, we + * set the flags we need for the packet decoder. + */ + struct pt_conf_flags flags; + + /* The current packet to be processed. + * + * This will be valid as long as there are packets available. It will + * be of type ppt_invalid when the packet decoder returned an error + * (which will be stored in @status). + * + * The decoder starts by reading the first packet after synchronizing + * onto the trace stream. + * + * When it is done processing a packet, it fetches the next packet for + * the next iteration. + */ + struct pt_packet packet; + + /* The last-ip. */ + struct pt_last_ip ip; + + /* Timing information. */ + struct pt_time time; + + /* Timing calibration. */ + struct pt_time_cal tcal; + + /* Pending (incomplete) events. */ + struct pt_event_queue evq; + + /* The current event. */ + struct pt_event *event; + + /* The last status of the packet decoder. + * + * It will be zero most of the time. Since we fetch new packets at the + * end of an iteration, we need to store the status until the next + * pt_evt_next() call. + */ + int status; + + /* The current mode.exec state. + * + * This is updated when processing mode.exec packets and it is used for + * mapping mode.exec packets to events depending on which part of the + * state changed. + * + * Since we use only one bit for each piece, we need a separate valid + * flag. The below mode.exec state bits are only valid if + * @mode_exec_valid is set. + */ + unsigned int mode_exec_valid:1; + unsigned int iflag:1; + unsigned int csd:1; + unsigned int csl:1; + + /* A collection of flags saying whether: + * + * - tracing is enabled. + */ + unsigned int enabled:1; + + /* - the current packet is already bound and must not be interpreted as + * standalone packet once events have been processed. + */ + unsigned int bound:1; +}; + +/* A special, internal-only event type used for binding packets without + * generating an event. + * + * We alias the tick event since compilers diagnose values outside of the + * enumerated type in switch statements and we want to keep compilers to + * diagnose unhandled cases, which is guarded by the same compiler option. + * + * The tick event is synthesized by higher-level decoders and does not appear + * on event level. + */ +#define ptev_ignore ptev_tick + +/* Initialize the event decoder. + * + * Returns zero on success, a negative error code otherwise. + */ +extern int pt_evt_decoder_init(struct pt_event_decoder *decoder, + const struct pt_config *config); + +/* Finalize the event decoder. */ +extern void pt_evt_decoder_fini(struct pt_event_decoder *decoder); + +static inline const struct pt_config * +pt_evt_config(const struct pt_event_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_pkt_config(&decoder->pacdec); +} + +static inline const uint8_t *pt_evt_pos(const struct pt_event_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_pkt_pos(&decoder->pacdec); +} + +static inline const uint8_t *pt_evt_end(const struct pt_event_decoder *decoder) +{ + const struct pt_config *config; + + config = pt_evt_config(decoder); + if (!config) + return NULL; + + return config->end; +} + +#endif /* PT_EVENT_DECODER_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_event_queue.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_event_queue.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -36,26 +37,36 @@ /* Events are grouped by the packet the event binds to. */ enum pt_event_binding { - evb_psbend, - evb_tip, - evb_fup, - - evb_max + evb_psbend = 1 << 0, + evb_tip = 1 << 1, + evb_fup = 1 << 2, + evb_fup_bound = 1 << 3, + evb_exstop = 1 << 4, + evb_cfe = 1 << 5, }; enum { /* The maximal number of pending events - should be a power of two. */ - evq_max = 8 + evq_max = 16 +}; + +/* An event queue entry. */ +struct pt_evq_entry { + /* The event. */ + struct pt_event event; + + /* The event binding as a bit vector of enum pt_event_binding. */ + uint32_t binding; }; /* A queue of events. */ struct pt_event_queue { - /* A collection of event queues, one per binding. */ - struct pt_event queueevb_maxevq_max; + /* A fixed-sized array of event queue entries. */ + struct pt_evq_entry queueevq_max; - /* The begin and end indices for the above event queues. */ - uint8_t beginevb_max; - uint8_t endevb_max; + /* The begin and end index for the above event queue. */ + uint8_t begin; + uint8_t end; /* A standalone event to be published immediately. */ struct pt_event standalone; @@ -81,7 +92,7 @@ * Returns NULL if @evq is full. */ extern struct pt_event *pt_evq_enqueue(struct pt_event_queue *evq, - enum pt_event_binding evb); + uint32_t evb); /* Dequeue an event. @@ -93,17 +104,29 @@ * Returns NULL if @evq is empty. */ extern struct pt_event *pt_evq_dequeue(struct pt_event_queue *evq, - enum pt_event_binding evb); + uint32_t evb); + +/* Requeue an event. + * + * Adds @ev to @evq for binding @evb, where @ev must be a recently dequeued or + * standalone event of @evq. + * + * Returns a pointer to the event on success. + * Returns NULL if @evq or @ev is NULL or @evb is invalid. + * Returns NULL if @evq is full. + */ +extern struct pt_event *pt_evq_requeue(struct pt_event_queue *evq, + struct pt_event *ev, + uint32_t evb); /* Clear a queue and discard events. * - * Removes all events for binding @evb from @evq. + * Removes all events from @evq. * * Returns zero on success, a negative error code otherwise. * Returns -pte_internal if @evq is NULL or @evb is invalid. */ -extern int pt_evq_clear(struct pt_event_queue *evq, - enum pt_event_binding evb); +extern int pt_evq_clear(struct pt_event_queue *evq); /* Check for emptiness. * @@ -113,8 +136,7 @@ * Returns zero if @evq is not empty. * Returns -pte_internal if @evq is NULL or @evb is invalid. */ -extern int pt_evq_empty(const struct pt_event_queue *evq, - enum pt_event_binding evb); +extern int pt_evq_empty(const struct pt_event_queue *evq, uint32_t evb); /* Check for non-emptiness. * @@ -124,20 +146,29 @@ * Returns zero if @evq is empty. * Returns -pte_internal if @evq is NULL or @evb is invalid. */ -extern int pt_evq_pending(const struct pt_event_queue *evq, - enum pt_event_binding evb); +extern int pt_evq_pending(const struct pt_event_queue *evq, uint32_t evb); /* Find an event by type. * - * Searches @evq for binding @evb for an event of type @evt. + * Searches @evq for an event of type @evt with binding @evb. * * Returns a pointer to the first matching event on success. * Returns NULL if there is no such event. * Returns NULL if @evq is NULL. * Returns NULL if @evb or @evt is invalid. */ -extern struct pt_event *pt_evq_find(struct pt_event_queue *evq, - enum pt_event_binding evb, +extern struct pt_event *pt_evq_find(struct pt_event_queue *evq, uint32_t evb, enum pt_event_type evt); +/* Find an event by binding. + * + * Searches @evq for an event with binding @evb. + * + * Returns a pointer to the first matching event on success. + * Returns NULL if there is no such event. + * Returns NULL if @evq is NULL. + * Returns NULL if @evb is invalid. + */ +extern struct pt_event *pt_evq_peek(struct pt_event_queue *evq, uint32_t evb); + #endif /* PT_EVENT_QUEUE_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_ild.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_ild.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_image.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_image.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -79,8 +80,8 @@ * * Add @section identified by @isid to @image at @vaddr in @asid. If @section * overlaps with existing sections, the existing sections are shrunk, split, or - * removed to accomodate @section. Absence of a section identifier is indicated - * by an @isid of zero. + * removed to accommodate @section. Absence of a section identifier is + * indicated by an @isid of zero. * * Returns zero on success. * Returns -pte_internal if @image, @section, or @asid is NULL.
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_image_section_cache.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_image_section_cache.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,7 +33,11 @@ #include <stdint.h> #if defined(FEATURE_THREADS) -# include <threads.h> +# if !defined(__STDC_NO_THREADS__) +# include <threads.h> +# else +# include "pt_threads.h" +# endif #endif /* defined(FEATURE_THREADS) */ struct pt_section;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_insn.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_insn.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -170,6 +171,28 @@ extern int pt_insn_is_ptwrite(const struct pt_insn *insn, const struct pt_insn_ext *iext); +/* Check if the instruction @insn/@iext is a return-from-interrupt instruction. + * + * Returns non-zero if it is, zero if it isn't (or @insn/@iext is NULL). + */ +extern int pt_insn_is_iret(const struct pt_insn *insn, + const struct pt_insn_ext *iext); + +/* Check if the instruction @insn/@iext is a vmentry instruction. + * + * Returns non-zero if it is, zero if it isn't (or @insn/@iext is NULL). + */ +extern int pt_insn_is_vmentry(const struct pt_insn *insn, + const struct pt_insn_ext *iext); + +/* Check if the instruction @insn/@iext is a return-from-user-interrupt + * instruction. + * + * Returns non-zero if it is, zero if it isn't (or @insn/@iext is NULL). + */ +extern int pt_insn_is_uiret(const struct pt_insn *insn, + const struct pt_insn_ext *iext); + /* Determine the IP of the next instruction. * * Tries to determine the IP of the next instruction without using trace and
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_insn_decoder.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_insn_decoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -121,6 +122,15 @@ /* - a ptwrite event has already been bound to @insn/@iext. */ uint32_t bound_ptwrite:1; + + /* - an iret event has already been bound to @insn/@iext. */ + uint32_t bound_iret:1; + + /* - a vmentry event has already been bound to @insn/@iext. */ + uint32_t bound_vmentry:1; + + /* - an uiret event has already been bound to @insn/@iext. */ + uint32_t bound_uiret:1; }; @@ -136,4 +146,13 @@ /* Finalize an instruction flow decoder. */ extern void pt_insn_decoder_fini(struct pt_insn_decoder *decoder); +static inline const struct pt_config * +pt_insn_config(const struct pt_insn_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_qry_config(&decoder->query); +} + #endif /* PT_INSN_DECODER_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_last_ip.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_last_ip.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_mapped_section.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_mapped_section.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_msec_cache.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_msec_cache.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_opcodes.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_opcodes.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -67,6 +68,8 @@ pt_ext_pwre = 0x22, pt_ext_pwrx = 0xa2, pt_ext_ptw = 0x12, + pt_ext_cfe = 0x13, + pt_ext_evd = 0x53, pt_ext_bad = 0x04 }; @@ -145,7 +148,9 @@ pt_opcs_mwait = 2, pt_opcs_pwre = 2, pt_opcs_pwrx = 2, - pt_opcs_ptw = 2 + pt_opcs_ptw = 2, + pt_opcs_cfe = 2, + pt_opcs_evd = 2, }; /* The psb magic payload. @@ -317,7 +322,25 @@ pt_pl_pwrx_wr_store = 0x400, /* The bit-mask for the autonomous wake reason in the PWRX payload. */ - pt_pl_pwrx_wr_hw = 0x800 + pt_pl_pwrx_wr_hw = 0x800, + + /* The size in bytes of the CFE payload. */ + pt_pl_cfe_size = 2, + + /* The bit mask for the type field in the CFE payload. */ + pt_pl_cfe_type = 0x1f, + + /* The bit mask for the IP bit in the CFE payload. */ + pt_pl_cfe_ip = 0x80, + + /* The size in bytes of the EVD payload field. */ + pt_pl_evd_pl_size = 8, + + /* The size in bytes of the EVD payload. */ + pt_pl_evd_size = 9, + + /* The bit mask for the type field in the EVD payload. */ + pt_pl_evd_type = 0x1f, }; /* Mode packet masks. */ @@ -332,6 +355,7 @@ /* mode.exec */ pt_mob_exec_csl = 0x01, pt_mob_exec_csd = 0x02, + pt_mob_exec_iflag = 0x04, /* mode.tsx */ pt_mob_tsx_intx = 0x01, @@ -384,7 +408,9 @@ ptps_pwre = pt_opcs_pwre + pt_pl_pwre_size, ptps_pwrx = pt_opcs_pwrx + pt_pl_pwrx_size, ptps_ptw_32 = pt_opcs_ptw + 4, - ptps_ptw_64 = pt_opcs_ptw + 8 + ptps_ptw_64 = pt_opcs_ptw + 8, + ptps_cfe = pt_opcs_cfe + pt_pl_cfe_size, + ptps_evd = pt_opcs_evd + pt_pl_evd_size, }; /* Supported address range configurations. */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_packet.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_packet.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -49,6 +50,8 @@ struct pt_packet_pwre; struct pt_packet_pwrx; struct pt_packet_ptw; +struct pt_packet_cfe; +struct pt_packet_evd; /* Read the payload of an Intel PT packet. @@ -107,5 +110,9 @@ const struct pt_config *config); extern int pt_pkt_read_ptw(struct pt_packet_ptw *packet, const uint8_t *pos, const struct pt_config *config); +extern int pt_pkt_read_cfe(struct pt_packet_cfe *packet, const uint8_t *pos, + const struct pt_config *config); +extern int pt_pkt_read_evd(struct pt_packet_evd *packet, const uint8_t *pos, + const struct pt_config *config); #endif /* PT_PACKET_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_packet_decoder.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_packet_decoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -55,38 +56,34 @@ /* Finalize the packet decoder. */ extern void pt_pkt_decoder_fini(struct pt_packet_decoder *); +static inline const struct pt_config * +pt_pkt_config(const struct pt_packet_decoder *decoder) +{ + if (!decoder) + return NULL; -/* Decoder functions for the packet decoder. */ -extern int pt_pkt_decode_unknown(struct pt_packet_decoder *, - struct pt_packet *); -extern int pt_pkt_decode_pad(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_psb(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_tip(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_tnt_8(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_tnt_64(struct pt_packet_decoder *, - struct pt_packet *); -extern int pt_pkt_decode_tip_pge(struct pt_packet_decoder *, - struct pt_packet *); -extern int pt_pkt_decode_tip_pgd(struct pt_packet_decoder *, - struct pt_packet *); -extern int pt_pkt_decode_fup(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_pip(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_ovf(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_mode(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_psbend(struct pt_packet_decoder *, - struct pt_packet *); -extern int pt_pkt_decode_tsc(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_cbr(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_tma(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_mtc(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_cyc(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_stop(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_vmcs(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_mnt(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_exstop(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_mwait(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_pwre(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_pwrx(struct pt_packet_decoder *, struct pt_packet *); -extern int pt_pkt_decode_ptw(struct pt_packet_decoder *, struct pt_packet *); + return &decoder->config; +} + +static inline const uint8_t * +pt_pkt_pos(const struct pt_packet_decoder *decoder) +{ + if (!decoder) + return NULL; + + return decoder->pos; +} + +static inline const uint8_t * +pt_pkt_end(const struct pt_packet_decoder *decoder) +{ + const struct pt_config *config; + + config = pt_pkt_config(decoder); + if (!config) + return NULL; + + return config->end; +} #endif /* PT_PACKET_DECODER_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_query_decoder.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_query_decoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -29,59 +30,50 @@ #ifndef PT_QUERY_DECODER_H #define PT_QUERY_DECODER_H -#include "pt_last_ip.h" +#include "pt_event_decoder.h" #include "pt_tnt_cache.h" -#include "pt_time.h" -#include "pt_event_queue.h" #include "intel-pt.h" -struct pt_decoder_function; - /* An Intel PT query decoder. */ struct pt_query_decoder { - /* The decoder configuration. */ - struct pt_config config; - - /* The current position in the trace buffer. */ - const uint8_t *pos; - - /* The position of the last PSB packet. */ - const uint8_t *sync; + /* The Intel PT event decoder. */ + struct pt_event_decoder evdec; - /* The decoding function for the next packet. */ - const struct pt_decoder_function *next; - - /* The last-ip. */ - struct pt_last_ip ip; + /* The configuration flags. + * + * Those are our flags set by the user. In @evdec.config.flags, we set + * the flags we need for the event decoder. + */ + struct pt_conf_flags flags; /* The cached tnt indicators. */ struct pt_tnt_cache tnt; - /* Timing information. */ - struct pt_time time; - /* The time at the last query (before reading ahead). */ struct pt_time last_time; - /* Timing calibration. */ - struct pt_time_cal tcal; - - /* Pending (incomplete) events. */ - struct pt_event_queue evq; - - /* The current event. */ - struct pt_event *event; - - /* A collection of flags relevant for decoding: + /* The current event to be processed. + * + * This will be valid as long as there are events available, i.e. until + * @status is not negative. * - * - tracing is enabled. + * The decoder starts by reading the first event after synchronizing + * onto the trace stream. + * + * When it is done processing an event, it fetches the next event for + * the next iteration. */ - uint32_t enabled:1; + struct pt_event event; - /* - consume the current packet. */ - uint32_t consume_packet:1; + /* The last status of the event decoder. + * + * It will be zero most of the time. Since we fetch new events at the + * end of an iteration, we need to store the status until the next + * pt_qry_*() call. + */ + int status; }; /* Initialize the query decoder. @@ -94,41 +86,21 @@ /* Finalize the query decoder. */ extern void pt_qry_decoder_fini(struct pt_query_decoder *); -/* Decoder functions (tracing context). */ -extern int pt_qry_decode_unknown(struct pt_query_decoder *); -extern int pt_qry_decode_pad(struct pt_query_decoder *); -extern int pt_qry_decode_psb(struct pt_query_decoder *); -extern int pt_qry_decode_tip(struct pt_query_decoder *); -extern int pt_qry_decode_tnt_8(struct pt_query_decoder *); -extern int pt_qry_decode_tnt_64(struct pt_query_decoder *); -extern int pt_qry_decode_tip_pge(struct pt_query_decoder *); -extern int pt_qry_decode_tip_pgd(struct pt_query_decoder *); -extern int pt_qry_decode_fup(struct pt_query_decoder *); -extern int pt_qry_decode_pip(struct pt_query_decoder *); -extern int pt_qry_decode_ovf(struct pt_query_decoder *); -extern int pt_qry_decode_mode(struct pt_query_decoder *); -extern int pt_qry_decode_psbend(struct pt_query_decoder *); -extern int pt_qry_decode_tsc(struct pt_query_decoder *); -extern int pt_qry_header_tsc(struct pt_query_decoder *); -extern int pt_qry_decode_cbr(struct pt_query_decoder *); -extern int pt_qry_header_cbr(struct pt_query_decoder *); -extern int pt_qry_decode_tma(struct pt_query_decoder *); -extern int pt_qry_decode_mtc(struct pt_query_decoder *); -extern int pt_qry_decode_cyc(struct pt_query_decoder *); -extern int pt_qry_decode_stop(struct pt_query_decoder *); -extern int pt_qry_decode_vmcs(struct pt_query_decoder *); -extern int pt_qry_decode_mnt(struct pt_query_decoder *); -extern int pt_qry_decode_exstop(struct pt_query_decoder *); -extern int pt_qry_decode_mwait(struct pt_query_decoder *); -extern int pt_qry_decode_pwre(struct pt_query_decoder *); -extern int pt_qry_decode_pwrx(struct pt_query_decoder *); -extern int pt_qry_decode_ptw(struct pt_query_decoder *); - -/* Decoder functions (header context). */ -extern int pt_qry_header_fup(struct pt_query_decoder *); -extern int pt_qry_header_pip(struct pt_query_decoder *); -extern int pt_qry_header_mode(struct pt_query_decoder *); -extern int pt_qry_header_vmcs(struct pt_query_decoder *); -extern int pt_qry_header_mnt(struct pt_query_decoder *); +static inline const struct pt_config * +pt_qry_config(const struct pt_query_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_evt_config(&decoder->evdec); +} + +static inline const uint8_t *pt_qry_pos(const struct pt_query_decoder *decoder) +{ + if (!decoder) + return NULL; + + return pt_evt_pos(&decoder->evdec); +} #endif /* PT_QUERY_DECODER_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_retstack.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_retstack.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_section.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_section.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,8 +33,19 @@ #include <stdint.h> #include <stddef.h> +#if !defined(__STDC_NO_ATOMICS__) +# include <stdatomic.h> +# define PT_ATOMIC _Atomic +#else +# define PT_ATOMIC /* nothing */ +#endif + #if defined(FEATURE_THREADS) -# include <threads.h> +# if !defined(__STDC_NO_THREADS__) +# include <threads.h> +# else +# include "pt_threads.h" +# endif #endif /* defined(FEATURE_THREADS) */ #include "intel-pt.h" @@ -78,11 +90,11 @@ * We read this field without locking and only lock the section in order * to install the block cache. * - * We rely on guaranteed atomic operations as specified in section 8.1.1 - * in Volume 3A of the Intel(R) Software Developer's Manual at - * http://www.intel.com/sdm. + * We use atomic operations, if supported, and rely on guaranteed + * atomic operations, otherwise. See section 8.1.1 in Volume 3A of the + * Intel(R) Software Developer's Manual at http://www.intel.com/sdm. */ - struct pt_block_cache *bcache; + struct pt_block_cache * PT_ATOMIC bcache; /* A pointer to the iscache attached to this section. * @@ -162,10 +174,15 @@ * The returned section is not mapped and starts with a user count of one and * instruction caching enabled. * - * Returns a new section on success, NULL otherwise. + * Returns zero on success, a negative pt_error_code otherwise. + * Returns -pte_internal if @psection is NULL. + * Returns -pte_nomem when running out of memory. + * Returns -pte_bad_file if @filename cannot be opened. + * Returns -pte_invalid if @offset lies beyond @file. + * Returns -pte_invalid if @filename is too long. */ -extern struct pt_section *pt_mk_section(const char *file, uint64_t offset, - uint64_t size); +extern int pt_mk_section(struct pt_section **psection, const char *filename, + uint64_t offset, uint64_t size); /* Lock a section. * @@ -265,21 +282,6 @@ */ extern int pt_section_alloc_bcache(struct pt_section *section); -/* Request block caching. - * - * The caller must ensure that @section is mapped. - */ -static inline int pt_section_request_bcache(struct pt_section *section) -{ - if (!section) - return -pte_internal; - - if (section->bcache) - return 0; - - return pt_section_alloc_bcache(section); -} - /* Return @section's block cache, if available. * * The caller must ensure that @section is mapped. @@ -288,12 +290,31 @@ * @section mapped. */ static inline struct pt_block_cache * -pt_section_bcache(const struct pt_section *section) +pt_section_bcache(struct pt_section *section) { if (!section) return NULL; +#if !defined(__STDC_NO_ATOMICS__) + return atomic_load(§ion->bcache); +#else return section->bcache; +#endif +} + +/* Request block caching. + * + * The caller must ensure that @section is mapped. + */ +static inline int pt_section_request_bcache(struct pt_section *section) +{ + struct pt_block_cache *bcache; + + bcache = pt_section_bcache(section); + if (bcache) + return 0; + + return pt_section_alloc_bcache(section); } /* Create the OS-specific file status.
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_section_file.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_section_file.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -33,7 +34,11 @@ #include <stdint.h> #if defined(FEATURE_THREADS) -# include <threads.h> +# if !defined(__STDC_NO_THREADS__) +# include <threads.h> +# else +# include "pt_threads.h" +# endif #endif /* defined(FEATURE_THREADS) */ struct pt_section;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_sync.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_sync.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_time.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_time.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -233,5 +234,7 @@ const struct pt_config *); extern int pt_tcal_update_psb(struct pt_time_cal *, const struct pt_config *); +extern int pt_tcal_update_ovf(struct pt_time_cal *, + const struct pt_config *); #endif /* PT_TIME_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pt_tnt_cache.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pt_tnt_cache.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -72,17 +73,15 @@ */ extern int pt_tnt_cache_query(struct pt_tnt_cache *cache); -/* Update the tnt cache based on Intel PT packets. +/* Add TNT bits to the cache. * - * Updates @cache based on @packet and, if non-null, @config. + * Add the least significant @size bits from @tnt to @cache. * - * Returns zero on success. - * Returns -pte_invalid if @cache or @packet is NULL. - * Returns -pte_bad_packet if @packet appears to be corrupted. - * Returns -pte_bad_context if the tnt cache is not empty. + * Returns zero on success, a negative pt_error_code otherwise. + * Returns -pte_invalid if @cache is NULL. + * Returns -pte_overflow if @cache has not enough space. */ -extern int pt_tnt_cache_update_tnt(struct pt_tnt_cache *cache, - const struct pt_packet_tnt *packet, - const struct pt_config *config); +extern int pt_tnt_cache_add(struct pt_tnt_cache *cache, uint64_t tnt, + uint8_t size); #endif /* PT_TNT_CACHE_H */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-disp-defs.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-disp-defs.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-disp.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-disp.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-disp_default.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-disp_default.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-imm-defs.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-imm-defs.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-imm.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-imm.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-modrm-defs.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-modrm-defs.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-modrm.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-modrm.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/pti-sib.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/pti-sib.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/internal/include/windows/pt_section_windows.h -> _service:tar_scm:v2.1.tar.gz/libipt/internal/include/windows/pt_section_windows.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/posix/pt_section_posix.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/posix/pt_section_posix.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -53,7 +54,7 @@ errcode = stat(filename, &buffer); if (errcode < 0) - return errcode; + return -pte_bad_file; if (buffer.st_size < 0) return -pte_bad_image; @@ -81,7 +82,7 @@ errcode = fstat(fd, &stat); if (errcode) - return -pte_bad_image; + return -pte_bad_file; status = section->status; if (!status) @@ -218,7 +219,7 @@ if (!filename) goto out_unlock; - errcode = -pte_bad_image; + errcode = -pte_bad_file; fd = open(filename, O_RDONLY); if (fd == -1) goto out_unlock; @@ -239,8 +240,10 @@ * if we fail to convert the file descriptor. */ file = fdopen(fd, "rb"); - if (!file) + if (!file) { + errcode = -pte_bad_file; goto out_fd; + } /* We need to keep the file open on success. It will be closed when * the section is unmapped.
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_asid.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_asid.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_block_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_block_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -68,17 +69,16 @@ if (bcache->nentries <= index) return -pte_internal; - /* We rely on guaranteed atomic operations as specified in section 8.1.1 - * in Volume 3A of the Intel(R) Software Developer's Manual at - * http://www.intel.com/sdm. - */ +#if !defined(__STDC_NO_ATOMICS__) + atomic_store(&bcache->entry(uint32_t) index, bce); +#else bcache->entry(uint32_t) index = bce; - +#endif return 0; } int pt_bcache_lookup(struct pt_bcache_entry *bce, - const struct pt_block_cache *bcache, uint64_t index) + struct pt_block_cache *bcache, uint64_t index) { if (!bce || !bcache) return -pte_internal; @@ -86,11 +86,10 @@ if (bcache->nentries <= index) return -pte_internal; - /* We rely on guaranteed atomic operations as specified in section 8.1.1 - * in Volume 3A of the Intel(R) Software Developer's Manual at - * http://www.intel.com/sdm. - */ +#if !defined(__STDC_NO_ATOMICS__) + *bce = atomic_load(&bcache->entry(uint32_t) index); +#else *bce = bcache->entry(uint32_t) index; - +#endif return 0; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_block_decoder.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_block_decoder.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -44,65 +45,86 @@ static int pt_blk_proceed_trailing_event(struct pt_block_decoder *, struct pt_block *); - -static int pt_blk_status(const struct pt_block_decoder *decoder, int flags) +static int pt_blk_fetch_event(struct pt_block_decoder *decoder) { - int status; + struct pt_event *ev; + int errcode; if (!decoder) return -pte_internal; - status = decoder->status; + ev = &decoder->event; + decoder->tsc = ev->tsc; + decoder->has_tsc = ev->has_tsc; + decoder->lost_mtc = ev->lost_mtc; + decoder->lost_cyc = ev->lost_cyc; + + errcode = pt_evt_next(&decoder->evdec, ev, sizeof(*ev)); + if (errcode < 0) { + decoder->status = errcode; + memset(ev, 0xff, sizeof(*ev)); + } + + return 0; +} + +static int pt_blk_status(const struct pt_block_decoder *decoder, int flags) +{ + if (!decoder) + return -pte_internal; - /* Indicate whether tracing is disabled or enabled. - * - * This duplicates the indication in struct pt_insn and covers the case - * where we indicate the status after synchronizing. - */ if (!decoder->enabled) flags |= pts_ip_suppressed; - /* Forward end-of-trace indications. - * - * Postpone it as long as we're still processing events, though. - */ - if ((status & pts_eos) && !decoder->process_event) + if (decoder->status == -pte_eos) flags |= pts_eos; return flags; } -static void pt_blk_reset(struct pt_block_decoder *decoder) +static int pt_blk_reset(struct pt_block_decoder *decoder) { if (!decoder) - return; + return -pte_internal; + decoder->tsc = 0ull; + decoder->lost_mtc = 0u; + decoder->lost_cyc = 0u; + decoder->cbr = 0u; decoder->mode = ptem_unknown; decoder->ip = 0ull; - decoder->status = 0; + decoder->status = -pte_nosync; decoder->enabled = 0; - decoder->process_event = 0; decoder->speculative = 0; + decoder->has_tsc = 0; decoder->process_insn = 0; decoder->bound_paging = 0; decoder->bound_vmcs = 0; decoder->bound_ptwrite = 0; + decoder->bound_iret = 0; + decoder->bound_vmentry = 0; + decoder->bound_uiret = 0; - memset(&decoder->event, 0, sizeof(decoder->event)); + memset(&decoder->event, 0xff, sizeof(decoder->event)); pt_retstack_init(&decoder->retstack); pt_asid_init(&decoder->asid); + + return 0; } -/* Initialize the query decoder flags based on our flags. */ +/* Initialize the event decoder flags based on our flags. */ -static int pt_blk_init_qry_flags(struct pt_conf_flags *qflags, +static int pt_blk_init_evt_flags(struct pt_conf_flags *qflags, const struct pt_conf_flags *flags) { if (!qflags || !flags) return -pte_internal; memset(qflags, 0, sizeof(*qflags)); - + qflags->variant.event.keep_tcal_on_ovf = + flags->variant.block.keep_tcal_on_ovf; + qflags->variant.event.enable_iflags_events = + flags->variant.block.enable_iflags_events; return 0; } @@ -122,12 +144,12 @@ /* The user supplied decoder flags. */ decoder->flags = config.flags; - /* Set the flags we need for the query decoder we use. */ - errcode = pt_blk_init_qry_flags(&config.flags, &decoder->flags); + /* Set the flags we need for the event decoder we use. */ + errcode = pt_blk_init_evt_flags(&config.flags, &decoder->flags); if (errcode < 0) return errcode; - errcode = pt_qry_decoder_init(&decoder->query, &config); + errcode = pt_evt_decoder_init(&decoder->evdec, &config); if (errcode < 0) return errcode; @@ -138,9 +160,7 @@ if (errcode < 0) return errcode; - pt_blk_reset(decoder); - - return 0; + return pt_blk_reset(decoder); } void pt_blk_decoder_fini(struct pt_block_decoder *decoder) @@ -150,7 +170,7 @@ pt_msec_cache_fini(&decoder->scache); pt_image_fini(&decoder->default_image); - pt_qry_decoder_fini(&decoder->query); + pt_evt_decoder_fini(&decoder->evdec); } struct pt_block_decoder * @@ -181,205 +201,284 @@ free(decoder); } -/* Maybe synthesize a tick event. +/* Synthesize a tick event or fetch the next event. * - * If we're not already processing events, check the current time against the - * last event's time. If it changed, synthesize a tick event with the new time. + * We consumed a TIP or TNT event. If the user asked for tick events, rewrite + * the current event, otherwise fetch the next event. * - * Returns zero if no tick event has been created. - * Returns a positive integer if a tick event has been created. - * Returns a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ static int pt_blk_tick(struct pt_block_decoder *decoder, uint64_t ip) { - struct pt_event *ev; - uint64_t tsc; - uint32_t lost_mtc, lost_cyc; - int errcode; - if (!decoder) return -pte_internal; - /* We're not generating tick events if tracing is disabled. */ - if (!decoder->enabled) - return -pte_internal; + if (decoder->flags.variant.block.enable_tick_events) { + struct pt_event *ev; - /* Events already provide a timestamp so there is no need to synthesize - * an artificial tick event. There's no room, either, since this would - * overwrite the in-progress event. - * - * In rare cases where we need to proceed to an event location using - * trace this may cause us to miss a timing update if the event is not - * forwarded to the user. - * - * The only case I can come up with at the moment is a MODE.EXEC binding - * to the TIP IP of a far branch. - */ - if (decoder->process_event) - return 0; + ev = &decoder->event;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_config.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_config.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -75,6 +76,9 @@ case 0x6a: case 0x6c: case 0x8f: + case 0xad: + case 0xae: + case 0xcf: errata->bdm70 = 1; errata->skl014 = 1; errata->skd022 = 1; @@ -96,6 +100,12 @@ case 0x97: case 0x9a: case 0xbf: + case 0xb7: + case 0xb5: + case 0xaa: + case 0xac: + case 0xba: + case 0xcc: errata->bdm70 = 1; errata->skl014 = 1; errata->skd022 = 1; @@ -112,6 +122,9 @@ case 0x86: case 0x96: case 0x9c: + case 0xb6: + case 0xaf: + case 0xdd: errata->apl11 = 1; return 0; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_cpu.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_cpu.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -27,7 +28,6 @@ */ #include "pt_cpu.h" -#include "pt_cpuid.h" #include "intel-pt.h" @@ -35,60 +35,6 @@ #include <stdlib.h> -static const char * const cpu_vendors = { - "", - "GenuineIntel" -}; - -enum { - pt_cpuid_vendor_size = 12 -}; - -union cpu_vendor { - /* The raw data returned from cpuid. */ - struct { - uint32_t ebx; - uint32_t edx; - uint32_t ecx; - } cpuid; - - /* The resulting vendor string. */ - char vendor_stringpt_cpuid_vendor_size; -}; - -static enum pt_cpu_vendor cpu_vendor(void) -{ - union cpu_vendor vendor; - uint32_t eax; - size_t i; - - memset(&vendor, 0, sizeof(vendor)); - eax = 0; - - pt_cpuid(0u, &eax, &vendor.cpuid.ebx, &vendor.cpuid.ecx, - &vendor.cpuid.edx); - - for (i = 0; i < sizeof(cpu_vendors)/sizeof(*cpu_vendors); i++) - if (strncmp(vendor.vendor_string, - cpu_vendorsi, pt_cpuid_vendor_size) == 0) - return (enum pt_cpu_vendor) i; - - return pcv_unknown; -} - -static uint32_t cpu_info(void) -{ - uint32_t eax, ebx, ecx, edx; - - eax = 0; - ebx = 0; - ecx = 0; - edx = 0; - pt_cpuid(1u, &eax, &ebx, &ecx, &edx); - - return eax; -} - int pt_cpu_parse(struct pt_cpu *cpu, const char *s) { const char sep = '/'; @@ -137,28 +83,3 @@ return 0; } - -int pt_cpu_read(struct pt_cpu *cpu) -{ - uint32_t info; - uint16_t family; - - if (!cpu) - return -pte_invalid; - - cpu->vendor = cpu_vendor(); - - info = cpu_info(); - - cpu->family = family = (info>>8) & 0xf; - if (family == 0xf) - cpu->family += (info>>20) & 0xf; - - cpu->model = (info>>4) & 0xf; - if (family == 0x6 || family == 0xf) - cpu->model += (info>>12) & 0xf0; - - cpu->stepping = (info>>0) & 0xf; - - return 0; -}
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_encoder.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_encoder.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -384,6 +385,9 @@ if (packet->payload.mode.bits.exec.csd) mode |= pt_mob_exec_csd; + + if (packet->payload.mode.bits.exec.iflag) + mode |= pt_mob_exec_iflag; break; case pt_mol_tsx: @@ -681,6 +685,42 @@ return (int) (pos - begin); } + case ppt_cfe: { + uint8_t type; + + errcode = pt_reserve(encoder, ptps_cfe); + if (errcode < 0) + return errcode; + + *pos++ = pt_opc_ext; + *pos++ = pt_ext_cfe; + + type = packet->payload.cfe.type & pt_pl_cfe_type; + if (packet->payload.cfe.ip) + type |= pt_pl_cfe_ip; + + *pos++ = type; + *pos++ = packet->payload.cfe.vector; + + encoder->pos = pos; + return (int) (pos - begin); + } + + case ppt_evd: + errcode = pt_reserve(encoder, ptps_evd); + if (errcode < 0) + return errcode; + + *pos++ = pt_opc_ext; + *pos++ = pt_ext_evd; + + *pos++ = packet->payload.evd.type & pt_pl_evd_type; + pos = pt_encode_int(pos, packet->payload.evd.payload, + pt_pl_evd_pl_size); + + encoder->pos = pos; + return (int) (pos - begin); + case ppt_unknown: case ppt_invalid: return -pte_bad_opc;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_error.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_error.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/libipt/src/pt_event_decoder.c
Added
@@ -0,0 +1,3877 @@ +/* + * Copyright (c) 2018-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "pt_event_decoder.h" +#include "pt_compiler.h" +#include "pt_opcodes.h" +#include "pt_config.h" + +#include <stdlib.h> +#include <string.h> +#include <limits.h> + + +/* Initialize the packet decoder flags based on our flags. */ + +static int pt_evt_init_pkt_flags(struct pt_conf_flags *pflags, + const struct pt_conf_flags *flags) +{ + if (!pflags || !flags) + return -pte_internal; + + memset(pflags, 0, sizeof(*pflags)); + + return 0; +} + +static int pt_evt_reset(struct pt_event_decoder *decoder) +{ + if (!decoder) + return -pte_internal; + + decoder->packet.type = ppt_invalid; + decoder->status = -pte_nosync; + decoder->event = NULL; + decoder->enabled = 0; + decoder->bound = 0; + decoder->mode_exec_valid = 0; + + pt_last_ip_init(&decoder->ip); + pt_time_init(&decoder->time); + pt_tcal_init(&decoder->tcal); + pt_evq_init(&decoder->evq); + + return 0; +} + +int pt_evt_decoder_init(struct pt_event_decoder *decoder, + const struct pt_config *uconfig) +{ + struct pt_config config; + int errcode; + + if (!decoder) + return -pte_internal; + + errcode = pt_config_from_user(&config, uconfig); + if (errcode < 0) + return errcode; + + /* The user supplied decoder flags. */ + decoder->flags = config.flags; + + /* Set the flags we need for the packet decoder we use. */ + errcode = pt_evt_init_pkt_flags(&config.flags, &decoder->flags); + if (errcode < 0) + return errcode; + + errcode = pt_pkt_decoder_init(&decoder->pacdec, &config); + if (errcode < 0) + return errcode; + + return pt_evt_reset(decoder); +} + +void pt_evt_decoder_fini(struct pt_event_decoder *decoder) +{ + if (!decoder) + return; + + pt_pkt_decoder_fini(&decoder->pacdec); +} + +struct pt_event_decoder *pt_evt_alloc_decoder(const struct pt_config *config) +{ + struct pt_event_decoder *decoder; + int errcode; + + decoder = malloc(sizeof(*decoder)); + if (!decoder) + return NULL; + + errcode = pt_evt_decoder_init(decoder, config); + if (errcode < 0) { + free(decoder); + return NULL; + } + + return decoder; +} + +void pt_evt_free_decoder(struct pt_event_decoder *decoder) +{ + if (!decoder) + return; + + pt_evt_decoder_fini(decoder); + free(decoder); +} + +/* Fetch the next packet and return zero. + * + * Fetch the next packet using the packet decoder and store away any error + * return for later. + * + * Can be used to return from a packet decode function to indicate that the + * current packet has been processed completely and resulted in an event. + * + * Returns zero on success, a negative pt_error_code otherwise. + */ +static int pt_evt_fetch_packet(struct pt_event_decoder *decoder) +{ + int status; + + if (!decoder) + return -pte_internal; + + /* Skip PAD packets right here. + * + * This isn't strictly necessary but it gives more useful offsets. + */ + do { + status = pt_pkt_next(&decoder->pacdec, &decoder->packet, + sizeof(decoder->packet)); + if (status < 0) { + /* Store any error to be delivered later. */ + decoder->packet.type = ppt_invalid; + decoder->packet.size = 0; + decoder->status = status; + + break; + } + } while (decoder->packet.type == ppt_pad); + + return 0; +} + +static int pt_evt_event_time(struct pt_event *ev, const struct pt_time *time) +{ + int errcode; + + if (!ev || !time) + return -pte_internal; + + errcode = pt_time_query_tsc(&ev->tsc, &ev->lost_mtc, &ev->lost_cyc, + time); + if (errcode < 0) { + if (errcode != -pte_no_time) + return errcode; + } else + ev->has_tsc = 1; + + return 0; +} + +static int pt_evt_event_ip(uint64_t *ip, struct pt_event *ev, + const struct pt_last_ip *last_ip) +{ + int errcode; + + if (!ev) + return -pte_internal; + + errcode = pt_last_ip_query(ip, last_ip);
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_event_queue.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_event_queue.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -39,6 +40,14 @@ return idx; } +static inline uint8_t pt_evq_dec(uint8_t idx) +{ + idx -= 1; + idx %= evq_max; + + return idx; +} + static struct pt_event *pt_event_init(struct pt_event *event) { if (event) @@ -63,19 +72,16 @@ return pt_event_init(&evq->standalone); } -struct pt_event *pt_evq_enqueue(struct pt_event_queue *evq, - enum pt_event_binding evb) +struct pt_event *pt_evq_enqueue(struct pt_event_queue *evq, uint32_t evb) { + struct pt_evq_entry *pentry; uint8_t begin, end, gap, idx; if (!evq) return NULL; - if (evb_max <= evb) - return NULL; - - begin = evq->beginevb; - idx = evq->endevb; + begin = evq->begin; + idx = evq->end; if (evq_max <= begin) return NULL; @@ -90,24 +96,23 @@ if (begin == gap) return NULL; - evq->endevb = end; + evq->end = end; - return pt_event_init(&evq->queueevbidx); + pentry = &evq->queueidx; + pentry->binding = evb; + return pt_event_init(&pentry->event); } -struct pt_event *pt_evq_dequeue(struct pt_event_queue *evq, - enum pt_event_binding evb) +struct pt_event *pt_evq_dequeue(struct pt_event_queue *evq, uint32_t evb) { - uint8_t begin, end; + struct pt_evq_entry entry, *pentry; + uint8_t begin, end, idx; if (!evq) return NULL; - if (evb_max <= evb) - return NULL; - - begin = evq->beginevb; - end = evq->endevb; + begin = evq->begin; + end = evq->end; if (evq_max <= begin) return NULL; @@ -118,37 +123,92 @@ if (begin == end) return NULL; - evq->beginevb = pt_evq_inc(begin); + /* Check the common and fast case first. */ + pentry = &evq->queuebegin; + if ((pentry->binding & evb) != 0) { + evq->begin = pt_evq_inc(begin); + return &pentry->event; + } + + /* Returning elements from the middle of the queue requires copying + * elements to not leave a hole. + * + * First, find the first element matching @evb. Once we found it, move + * it to the beginning of the queue by moving all preceding elements + * down by one position. + */ + idx = begin; + for (;;) { + idx = pt_evq_inc(idx); + if (idx == end) + return NULL; + + pentry = &evq->queueidx; + if ((pentry->binding & evb) != 0) + break; + } + + /* Take a temporary copy of the element we want to return and move down + * preceding elements one-by-one. + */ + entry = *pentry; + for (;;) { + uint8_t prev; - return &evq->queueevbbegin; + prev = pt_evq_dec(idx); + evq->queueidx = evq->queueprev; + + if (prev == begin) + break; + + idx = prev; + } + + /* We already copied the start element one down. Re-use its slot to + * hold the element we want to return. + */ + evq->begin = idx; + pentry = &evq->queuebegin; + *pentry = entry; + return &pentry->event; } -int pt_evq_clear(struct pt_event_queue *evq, enum pt_event_binding evb) +struct pt_event *pt_evq_requeue(struct pt_event_queue *evq, + struct pt_event *ev, uint32_t evb) { - if (!evq) - return -pte_internal; + struct pt_event *rev; + + if (!ev) + return NULL; + + rev = pt_evq_enqueue(evq, evb); + if (!rev) + return NULL; - if (evb_max <= evb) + *rev = *ev; + return rev; +} + +int pt_evq_clear(struct pt_event_queue *evq) +{ + if (!evq) return -pte_internal; - evq->beginevb = 0; - evq->endevb = 0; + evq->begin = 0; + evq->end = 0; return 0; } -int pt_evq_empty(const struct pt_event_queue *evq, enum pt_event_binding evb) +int pt_evq_empty(const struct pt_event_queue *evq, uint32_t evb) { uint8_t begin, end; if (!evq) return -pte_internal; - if (evb_max <= evb) - return -pte_internal; - - begin = evq->beginevb; - end = evq->endevb; + begin = evq->begin; + end = evq->end; if (evq_max <= begin) return -pte_internal; @@ -156,10 +216,15 @@ if (evq_max <= end) return -pte_internal; - return begin == end; + for (; begin != end; begin = pt_evq_inc(begin)) { + if ((evq->queuebegin.binding & evb) != 0) + return 0; + } + + return 1; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_ild.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_ild.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -1162,7 +1163,7 @@ switch (ild->nominal_opcode) { case 0x9A: - if (map == PTI_MAP_0) { + if ((map == PTI_MAP_0) && !mode_64b(ild)) { insn->iclass = ptic_far_call; iext->iclass = PTI_INST_CALL_9A; } @@ -1214,7 +1215,7 @@ return 0; case 0xCE: - if (map == PTI_MAP_0) { + if ((map == PTI_MAP_0) && !mode_64b(ild)) { insn->iclass = ptic_far_call; iext->iclass = PTI_INST_INTO; } @@ -1246,7 +1247,7 @@ return 0; case 0xEA: - if (map == PTI_MAP_0) { + if ((map == PTI_MAP_0) && !mode_64b(ild)) { /* Far jumps are treated as indirect jumps. */ insn->iclass = ptic_far_jump; iext->iclass = PTI_INST_JMP_EA;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_image.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_image.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -43,12 +44,16 @@ if (!str) return NULL; - len = strlen(str); + /* Silently truncate the name if it gets too big. */ + len = strnlen(str, 4096ul); + dup = malloc(len + 1); if (!dup) return NULL; - return strcpy(dup, str); + duplen = 0; + + return memcpy(dup, str, len); } static struct pt_section_list *pt_mk_section_list(struct pt_section *section, @@ -315,9 +320,10 @@ if (errcode < 0) return errcode; - section = pt_mk_section(filename, offset, size); - if (!section) - return -pte_invalid; + section = NULL; + errcode = pt_mk_section(§ion, filename, offset, size); + if (errcode < 0) + return errcode; errcode = pt_image_add(image, section, &asid, vaddr, 0); if (errcode < 0) {
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_image_section_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_image_section_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -42,12 +43,16 @@ if (!str) return NULL; - len = strlen(str); + /* Silently truncate the name if it gets too big. */ + len = strnlen(str, 4096ul); + dup = malloc(len + 1); if (!dup) return NULL; - return strcpy(dup, str); + duplen = 0; + + return memcpy(dup, str, len); } int pt_iscache_init(struct pt_image_section_cache *iscache, const char *name) @@ -975,9 +980,10 @@ if (errcode < 0) return errcode; - section = pt_mk_section(filename, offset, size); - if (!section) - return -pte_invalid; + section = NULL; + errcode = pt_mk_section(§ion, filename, offset, size); + if (errcode < 0) + return errcode; } /* We unlocked @iscache and hold a reference to @section. */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_insn.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_insn.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -95,6 +96,7 @@ case ptic_far_call: case ptic_far_return: case ptic_far_jump: + case ptic_indirect: return 1; } } @@ -169,6 +171,60 @@ } } +int pt_insn_is_iret(const struct pt_insn *insn, + const struct pt_insn_ext *iext) +{ + (void) insn; + + if (!iext) + return 0; + + switch (iext->iclass) { + default: + return 0; + + case PTI_INST_IRET: + case PTI_INST_SYSRET: + case PTI_INST_SYSEXIT: + return 1; + } +} + +int pt_insn_is_vmentry(const struct pt_insn *insn, + const struct pt_insn_ext *iext) +{ + (void) insn; + + if (!iext) + return 0; + + switch (iext->iclass) { + default: + return 0; + + case PTI_INST_VMLAUNCH: + case PTI_INST_VMRESUME: + return 1; + } +} + +int pt_insn_is_uiret(const struct pt_insn *insn, + const struct pt_insn_ext *iext) +{ + (void) insn; + + if (!iext) + return 0; + + switch (iext->iclass) { + default: + return 0; + + case PTI_INST_UIRET: + return 1; + } +} + int pt_insn_next_ip(uint64_t *pip, const struct pt_insn *insn, const struct pt_insn_ext *iext) { @@ -196,7 +252,7 @@ default: return -pte_bad_query; - case ptic_error: + case ptic_unknown: return -pte_bad_insn; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_insn_decoder.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_insn_decoder.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -58,6 +59,9 @@ decoder->bound_paging = 0; decoder->bound_vmcs = 0; decoder->bound_ptwrite = 0; + decoder->bound_iret = 0; + decoder->bound_vmentry = 0; + decoder->bound_uiret = 0; pt_retstack_init(&decoder->retstack); pt_asid_init(&decoder->asid); @@ -99,6 +103,10 @@ return -pte_internal; memset(qflags, 0, sizeof(*qflags)); + qflags->variant.query.keep_tcal_on_ovf = + flags->variant.insn.keep_tcal_on_ovf; + qflags->variant.query.enable_iflags_events = + flags->variant.insn.enable_iflags_events; return 0; } @@ -406,10 +414,7 @@ const struct pt_config * pt_insn_get_config(const struct pt_insn_decoder *decoder) { - if (!decoder) - return NULL; - - return pt_qry_get_config(&decoder->query); + return pt_insn_config(decoder); } int pt_insn_time(struct pt_insn_decoder *decoder, uint64_t *time, @@ -586,9 +591,10 @@ case ptic_far_call: case ptic_far_return: case ptic_far_jump: + case ptic_indirect: break; - case ptic_error: + case ptic_unknown: return -pte_bad_insn; } @@ -711,10 +717,11 @@ case ptic_far_call: case ptic_far_return: case ptic_far_jump: + case ptic_indirect: case ptic_cond_jump: return 1; - case ptic_error: + case ptic_unknown: return -pte_bad_insn; } } @@ -759,6 +766,9 @@ decoder->bound_paging = 0; decoder->bound_vmcs = 0; decoder->bound_ptwrite = 0; + decoder->bound_iret = 0; + decoder->bound_vmentry = 0; + decoder->bound_uiret = 0; return 0; } @@ -819,6 +829,10 @@ ev = &decoder->event; switch (ev->type) { + case ptev_tip: + case ptev_tnt: + return -pte_internal; + case ptev_enabled: case ptev_overflow: case ptev_async_paging: @@ -835,12 +849,24 @@ case ptev_tick: case ptev_cbr: case ptev_mnt: + case ptev_iflags: + case ptev_interrupt: + case ptev_smi: + case ptev_rsm: + case ptev_sipi: + case ptev_init: + case ptev_vmexit: + case ptev_shutdown: + case ptev_uintr: /* We're only interested in events that bind to instructions. */ return 0; case ptev_disabled: + if (ev->status_update) + return 0; + status = pt_insn_at_disabled_event(ev, insn, iext, - &decoder->query.config); + pt_insn_config(decoder)); if (status <= 0) return status; @@ -939,6 +965,99 @@ decoder->bound_ptwrite = 1; return pt_insn_postpone(decoder, insn, iext); + + case ptev_iret: + /* We bind at most one iret event to an instruction. */ + if (decoder->bound_iret) + return 0; + + if (ev->ip_suppressed) { + if (!pt_insn_is_iret(insn, iext)) + return 0; + + /* Fill in the event IP. */ + ev->variant.iret.ip = decoder->ip; + ev->ip_suppressed = 0; + } else { + /* The iret event contains the IP of the iret + * instruction (CLIP) unlike most events that contain + * the IP of the first instruction that did not + * complete (NLIP). + * + * It's easier to handle this case here, as well. + */ + if (decoder->ip != ev->variant.iret.ip) + return 0; + } + + /* We bound an iret event. Make sure we do not bind further + * iret events to this instruction. + */ + decoder->bound_iret = 1; + + return pt_insn_postpone(decoder, insn, iext); + + case ptev_vmentry: + /* We bind at most one vmentry event to an instruction. */ + if (decoder->bound_vmentry) + return 0; + + if (ev->ip_suppressed) { + if (!pt_insn_is_vmentry(insn, iext)) + return 0; + + /* Fill in the event IP. */ + ev->variant.vmentry.ip = decoder->ip; + ev->ip_suppressed = 0; + } else { + /* The vmentry event contains the IP of the vmentry + * instruction (CLIP) unlike most events that contain + * the IP of the first instruction that did not + * complete (NLIP). + * + * It's easier to handle this case here, as well. + */ + if (decoder->ip != ev->variant.vmentry.ip) + return 0; + } + + /* We bound a vmentry event. Make sure we do not bind further + * vmentry events to this instruction. + */ + decoder->bound_vmentry = 1; + + return pt_insn_postpone(decoder, insn, iext); + + case ptev_uiret: + /* We bind at most one uiret event to an instruction. */ + if (decoder->bound_uiret) + return 0; + + if (ev->ip_suppressed) { + if (!pt_insn_is_uiret(insn, iext)) + return 0; + + /* Fill in the event IP. */ + ev->variant.uiret.ip = decoder->ip; + ev->ip_suppressed = 0; + } else { + /* The uiret event contains the IP of the uiret + * instruction (CLIP) unlike most events that contain + * the IP of the first instruction that did not + * complete (NLIP). + * + * It's easier to handle this case here, as well. + */
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_last_ip.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_last_ip.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_msec_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_msec_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_packet.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_packet.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -268,6 +269,7 @@ packet->csl = (mode & pt_mob_exec_csl) != 0; packet->csd = (mode & pt_mob_exec_csd) != 0; + packet->iflag = (mode & pt_mob_exec_iflag) != 0; return ptps_mode; } @@ -574,3 +576,38 @@ return pt_opcs_ptw + size; } + +int pt_pkt_read_cfe(struct pt_packet_cfe *packet, const uint8_t *pos, + const struct pt_config *config) +{ + if (!packet || !pos || !config) + return -pte_internal; + + if (config->end < pos + ptps_cfe) + return -pte_eos; + + pos += pt_opcs_cfe; + + packet->type = pos0 & pt_pl_cfe_type; + packet->vector = pos1; + packet->ip = pos0 & pt_pl_cfe_ip ? 1 : 0; + + return ptps_cfe; +} + +int pt_pkt_read_evd(struct pt_packet_evd *packet, const uint8_t *pos, + const struct pt_config *config) +{ + if (!packet || !pos || !config) + return -pte_internal; + + if (config->end < pos + ptps_evd) + return -pte_eos; + + pos += pt_opcs_evd; + + packet->type = pos0 & pt_pl_evd_type; + packet->payload = pt_pkt_read_value(&pos1, pt_pl_evd_pl_size); + + return ptps_evd; +}
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_packet_decoder.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_packet_decoder.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -27,7 +28,6 @@ */ #include "pt_packet_decoder.h" -#include "pt_decoder_function.h" #include "pt_packet.h" #include "pt_sync.h" #include "pt_config.h" @@ -223,7 +223,8 @@ /* Zero out any unknown bytes. */ if (sizeof(*pkt) < size) { - memset(upkt + sizeof(*pkt), 0, size - sizeof(*pkt)); + memset(((uint8_t *) upkt) + sizeof(*pkt), 0, + size - sizeof(*pkt)); size = sizeof(*pkt); } @@ -233,43 +234,8 @@ return 0; } -int pt_pkt_next(struct pt_packet_decoder *decoder, struct pt_packet *packet, - size_t psize) -{ - const struct pt_decoder_function *dfun; - struct pt_packet pkt, *ppkt; - int errcode, size; - - if (!packet || !decoder) - return -pte_invalid; - - ppkt = psize == sizeof(pkt) ? packet : &pkt; - - errcode = pt_df_fetch(&dfun, decoder->pos, &decoder->config); - if (errcode < 0) - return errcode; - - if (!dfun) - return -pte_internal; - - if (!dfun->packet) - return -pte_internal; - - size = dfun->packet(decoder, ppkt); - if (size < 0) - return size; - - errcode = pkt_to_user(packet, psize, ppkt); - if (errcode < 0) - return errcode; - - decoder->pos += size; - - return size; -} - -int pt_pkt_decode_unknown(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_unknown(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -283,8 +249,8 @@ return size; } -int pt_pkt_decode_pad(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_pad(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { (void) decoder; @@ -297,8 +263,8 @@ return ptps_pad; } -int pt_pkt_decode_psb(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_psb(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -315,8 +281,8 @@ return size; } -int pt_pkt_decode_tip(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_tip(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -334,8 +300,8 @@ return size; } -int pt_pkt_decode_tnt_8(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_tnt_8(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -353,8 +319,8 @@ return size; } -int pt_pkt_decode_tnt_64(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_tnt_64(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -372,8 +338,8 @@ return size; } -int pt_pkt_decode_tip_pge(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_tip_pge(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -391,8 +357,8 @@ return size; } -int pt_pkt_decode_tip_pgd(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_tip_pgd(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -410,8 +376,8 @@ return size; } -int pt_pkt_decode_fup(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_fup(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -429,8 +395,8 @@ return size; } -int pt_pkt_decode_pip(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_pip(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -448,8 +414,8 @@ return size; } -int pt_pkt_decode_ovf(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_ovf(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { (void) decoder; @@ -462,8 +428,8 @@ return ptps_ovf; } -int pt_pkt_decode_mode(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_mode(struct pt_packet_decoder *decoder, + struct pt_packet *packet) { int size; @@ -481,8 +447,8 @@ return size; } -int pt_pkt_decode_psbend(struct pt_packet_decoder *decoder, - struct pt_packet *packet) +static int pt_pkt_decode_psbend(struct pt_packet_decoder *decoder,
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_query_decoder.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_query_decoder.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -27,10 +28,6 @@ */ #include "pt_query_decoder.h" -#include "pt_sync.h" -#include "pt_decoder_function.h" -#include "pt_packet.h" -#include "pt_packet_decoder.h" #include "pt_config.h" #include "pt_opcodes.h" #include "pt_compiler.h" @@ -43,70 +40,62 @@ #include <limits.h> -/* Find a FUP in a PSB+ header. - * - * The packet @decoder must be synchronized onto the trace stream at the - * beginning or somewhere inside a PSB+ header. - * - * It uses @packet to hold trace packets during its search. If the search is - * successful, @packet will contain the first (and hopefully only) FUP packet in - * this PSB+. Otherwise, @packet may contain anything. - * - * Returns one if a FUP packet is found (@packet will contain it). - * Returns zero if no FUP packet is found (@packet is undefined). - * Returns a negative error code otherwise. - */ -static int pt_qry_find_header_fup(struct pt_packet *packet, - struct pt_packet_decoder *decoder) +/* Initialize the event decoder flags based on our flags. */ + +static int pt_qry_init_evt_flags(struct pt_conf_flags *eflags, + const struct pt_conf_flags *flags) { - if (!packet || !decoder) + if (!eflags || !flags) return -pte_internal; - for (;;) { - int errcode; + memset(eflags, 0, sizeof(*eflags)); + eflags->variant.event.keep_tcal_on_ovf = + flags->variant.query.keep_tcal_on_ovf; + eflags->variant.event.enable_iflags_events = + flags->variant.query.enable_iflags_events; - errcode = pt_pkt_next(decoder, packet, sizeof(*packet)); - if (errcode < 0) - return errcode; + return 0; +} - switch (packet->type) { - default: - /* Ignore the packet. */ - break; +static int pt_qry_reset(struct pt_query_decoder *decoder) +{ + if (!decoder) + return -pte_internal; - case ppt_psbend: - /* There's no FUP in here. */ - return 0; + decoder->status = -pte_nosync; - case ppt_fup: - /* Found it. */ - return 1; - } - } + pt_tnt_cache_init(&decoder->tnt); + pt_time_init(&decoder->last_time); + + return 0; } int pt_qry_decoder_init(struct pt_query_decoder *decoder, - const struct pt_config *config) + const struct pt_config *uconfig) { + struct pt_config config; int errcode; if (!decoder) return -pte_invalid; - memset(decoder, 0, sizeof(*decoder)); + errcode = pt_config_from_user(&config, uconfig); + if (errcode < 0) + return errcode; + + /* The user supplied decoder flags. */ + decoder->flags = config.flags; - errcode = pt_config_from_user(&decoder->config, config); + /* Set the flags we need for the event decoder we use. */ + errcode = pt_qry_init_evt_flags(&config.flags, &decoder->flags); if (errcode < 0) return errcode; - pt_last_ip_init(&decoder->ip); - pt_tnt_cache_init(&decoder->tnt); - pt_time_init(&decoder->time); - pt_time_init(&decoder->last_time); - pt_tcal_init(&decoder->tcal); - pt_evq_init(&decoder->evq); + errcode = pt_evt_decoder_init(&decoder->evdec, &config); + if (errcode < 0) + return errcode; - return 0; + return pt_qry_reset(decoder); } struct pt_query_decoder *pt_qry_alloc_decoder(const struct pt_config *config) @@ -129,9 +118,10 @@ void pt_qry_decoder_fini(struct pt_query_decoder *decoder) { - (void) decoder; + if (!decoder) + return; - /* Nothing to do. */ + pt_evt_decoder_fini(&decoder->evdec); } void pt_qry_free_decoder(struct pt_query_decoder *decoder) @@ -140,79 +130,30 @@ free(decoder); } -static void pt_qry_reset(struct pt_query_decoder *decoder) +static int pt_qry_event_pending(const struct pt_event *ev) { - if (!decoder) - return; - - decoder->enabled = 0; - decoder->consume_packet = 0; - decoder->event = NULL; - - pt_last_ip_init(&decoder->ip); - pt_tnt_cache_init(&decoder->tnt); - pt_time_init(&decoder->time); - pt_time_init(&decoder->last_time); - pt_tcal_init(&decoder->tcal); - pt_evq_init(&decoder->evq); -} - -static int pt_qry_will_event(const struct pt_query_decoder *decoder) -{ - const struct pt_decoder_function *dfun; - - if (!decoder) + if (!ev) return -pte_internal; - dfun = decoder->next; - if (!dfun) + switch (ev->type) { + case ptev_tnt: + case ptev_tip: return 0; - if (dfun->flags & pdff_event) + default: return 1; - - if (dfun->flags & pdff_psbend) - return pt_evq_pending(&decoder->evq, evb_psbend); - - if (dfun->flags & pdff_tip) - return pt_evq_pending(&decoder->evq, evb_tip); - - if (dfun->flags & pdff_fup) - return pt_evq_pending(&decoder->evq, evb_fup); - - return 0; -} - -static int pt_qry_will_eos(const struct pt_query_decoder *decoder) -{ - const struct pt_decoder_function *dfun; - int errcode; - - if (!decoder) - return -pte_internal; - - dfun = decoder->next;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_retstack.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_retstack.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_section.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_section.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -37,37 +38,40 @@ #include <string.h> -static char *dupstr(const char *str) -{ - char *dup; - size_t len; - - if (!str) - return NULL; - - len = strlen(str); - dup = malloc(len + 1); - if (!dup) - return NULL; - - return strcpy(dup, str); -} - -struct pt_section *pt_mk_section(const char *filename, uint64_t offset, - uint64_t size) +int pt_mk_section(struct pt_section **psection, const char *filename, + uint64_t offset, uint64_t size) { struct pt_section *section; uint64_t fsize; + size_t flen; void *status; + char *fname; int errcode; - errcode = pt_section_mk_status(&status, &fsize, filename); + if (!psection) + return -pte_internal; + + flen = strnlen(filename, FILENAME_MAX); + if (FILENAME_MAX <= flen) + return -pte_invalid; + + flen += 1; + + fname = malloc(flen); + if (!fname) + return -pte_nomem; + + memcpy(fname, filename, flen); + + errcode = pt_section_mk_status(&status, &fsize, fname); if (errcode < 0) - return NULL; + goto out_fname; /* Fail if the requested @offset lies beyond the end of @file. */ - if (fsize <= offset) + if (fsize <= offset) { + errcode = -pte_invalid; goto out_status; + } /* Truncate @size so the entire range lies within @file. */ fsize -= offset; @@ -75,12 +79,14 @@ size = fsize; section = malloc(sizeof(*section)); - if (!section) + if (!section) { + errcode = -pte_nomem; goto out_status; + } memset(section, 0, sizeof(*section)); - section->filename = dupstr(filename); + section->filename = fname; section->status = status; section->offset = offset; section->size = size; @@ -90,26 +96,32 @@ errcode = mtx_init(§ion->lock, mtx_plain); if (errcode != thrd_success) { - free(section->filename); free(section); + + errcode = -pte_bad_lock; goto out_status; } errcode = mtx_init(§ion->alock, mtx_plain); if (errcode != thrd_success) { mtx_destroy(§ion->lock); - free(section->filename); free(section); + + errcode = -pte_bad_lock; goto out_status; } #endif /* defined(FEATURE_THREADS) */ - return section; + *psection = section; + return 0; out_status: free(status); - return NULL; + +out_fname: + free(fname); + return errcode; } int pt_section_lock(struct pt_section *section) @@ -257,7 +269,7 @@ int pt_section_attach(struct pt_section *section, struct pt_image_section_cache *iscache) { - uint16_t acount, ucount; + uint16_t acount; int errcode; if (!section || !iscache) @@ -267,10 +279,25 @@ if (errcode < 0) return errcode; - ucount = section->ucount; acount = section->acount; if (!acount) { - if (section->iscache || !ucount) + if (section->iscache) { + errcode = -pte_internal; + goto out_unlock; + } + + errcode = pt_section_lock(section); + if (errcode < 0) + goto out_unlock; + + if (!section->ucount) { + (void) pt_section_unlock(section); + errcode = -pte_internal; + goto out_unlock; + } + + errcode = pt_section_unlock(section); + if (errcode < 0) goto out_unlock; section->iscache = iscache; @@ -281,14 +308,27 @@ acount += 1; if (!acount) { - (void) pt_section_unlock_attach(section); - return -pte_overflow; + errcode = -pte_overflow; + goto out_unlock; + } + + if (section->iscache != iscache) { + errcode = -pte_internal; + goto out_unlock; } - if (ucount < acount) + errcode = pt_section_lock(section); + if (errcode < 0) goto out_unlock; - if (section->iscache != iscache) + if (section->ucount < acount) { + (void) pt_section_unlock(section); + errcode = -pte_internal; + goto out_unlock; + } + + errcode = pt_section_unlock(section); + if (errcode < 0) goto out_unlock; section->acount = acount; @@ -297,13 +337,13 @@ out_unlock: (void) pt_section_unlock_attach(section); - return -pte_internal; + return errcode; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_section_file.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_section_file.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_sync.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_sync.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -191,7 +192,7 @@ continue; /* We found a 64bit word's worth of psb payload pattern. */ - current = pt_find_psb(pos, config); + current = pt_find_psb(current, config); if (!current) continue; @@ -238,7 +239,7 @@ continue; /* We found a 64bit word's worth of psb payload pattern. */ - next = pt_find_psb(next, config); + next = pt_find_psb(pos, config); if (!next) continue;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_time.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_time.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -743,3 +744,18 @@ return 0; } + +int pt_tcal_update_ovf(struct pt_time_cal *tcal, + const struct pt_config *config) +{ + if (!tcal || !config) + return -pte_internal; + + tcal->tsc = 0ull; + tcal->cyc_tsc = 0ull; + tcal->cyc_mtc = 0ull; + tcal->ctc = 0; + tcal->have_mtc = 0; + + return 0; +}
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_tnt_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_tnt_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -64,26 +65,28 @@ return taken; } -int pt_tnt_cache_update_tnt(struct pt_tnt_cache *cache, - const struct pt_packet_tnt *packet, - const struct pt_config *config) +int pt_tnt_cache_add(struct pt_tnt_cache *cache, uint64_t tnt, uint8_t size) { - uint8_t bit_size; + uint64_t index; - (void) config; - - if (!cache || !packet) + if (!cache) return -pte_invalid; - if (cache->index) - return -pte_bad_context; + if (!size) + return 0; + + index = cache->index; + if (index) + index <<= size; + else + index = 1ull << (size - 1); - bit_size = packet->bit_size; - if (!bit_size) - return -pte_bad_packet; + if (!index) + return -pte_overflow; - cache->tnt = packet->payload; - cache->index = 1ull << (bit_size - 1); + cache->index = index; + cache->tnt <<= size; + cache->tnt |= tnt & ((1ull << size) - 1); return 0; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/pt_version.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/pt_version.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/src/windows/pt_section_windows.c -> _service:tar_scm:v2.1.tar.gz/libipt/src/windows/pt_section_windows.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -47,14 +48,14 @@ fd = _open(filename, _O_RDONLY); if (fd == -1) - return -pte_bad_image; + return -pte_bad_file; errcode = _fstat(fd, stat); _close(fd); if (errcode) - return -pte_bad_image; + return -pte_bad_file; return 0; } @@ -98,7 +99,7 @@ errcode = _fstat(fd, &stat); if (errcode) - return -pte_bad_image; + return -pte_bad_file; status = section->status; if (!status) @@ -265,26 +266,24 @@ * We will detect changes to the file via fstat(). */ - fh = CreateFileA(filename, GENERIC_READ, FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, - NULL); + fh = CreateFileA(filename, GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (fh == INVALID_HANDLE_VALUE) { - errcode = -pte_bad_image; + errcode = -pte_bad_file; goto out_unlock; } } fd = _open_osfhandle((intptr_t) fh, _O_RDONLY); if (fd == -1) { - errcode = -pte_bad_image; + errcode = -pte_bad_file; goto out_fh; } errcode = check_file_status(section, fd); - if (errcode < 0) { - errcode = -pte_bad_image; + if (errcode < 0) goto out_fd; - } /* We leave the file open on success. It will be closed when the * section is unmapped. @@ -298,7 +297,7 @@ */ file = _fdopen(fd, "rb"); if (!file) { - errcode = -pte_bad_image; + errcode = -pte_bad_file; goto out_fd; }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-asid.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-asid.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-block_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-block_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-block_decoder.c
Added
@@ -0,0 +1,354 @@ +/* + * Copyright (c) 2019-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ptunit.h" + +#include "pt_block_decoder.h" + +#include "intel-pt.h" + + +/* A test fixture providing a decoder operating on a small buffer. */ +struct test_fixture { + /* The packet_decoder. */ + struct pt_block_decoder decoder; + + /* The configuration. */ + struct pt_config config; + + /* The buffer it operates on. */ + uint8_t buffer24; + + /* The test fixture initialization and finalization functions. */ + struct ptunit_result (*init)(struct test_fixture *tfix); + struct ptunit_result (*fini)(struct test_fixture *tfix); +}; + +static struct ptunit_result tfix_init(struct test_fixture *tfix) +{ + struct pt_config *config; + uint8_t *buffer; + int errcode; + + config = &tfix->config; + buffer = tfix->buffer; + + memset(buffer, 0, sizeof(tfix->buffer)); + + pt_config_init(config); + config->begin = buffer; + config->end = buffer + sizeof(tfix->buffer); + + errcode = pt_blk_decoder_init(&tfix->decoder, config); + ptu_int_eq(errcode, 0); + + return ptu_passed(); +} + +static struct ptunit_result decoder_init_null(void) +{ + struct pt_block_decoder decoder; + struct pt_config config; + int errcode; + + memset(&config, 0, sizeof(config)); + + errcode = pt_blk_decoder_init(NULL, &config); + ptu_int_eq(errcode, -pte_internal); + + errcode = pt_blk_decoder_init(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result decoder_fini_null(void) +{ + pt_blk_decoder_fini(NULL); + + return ptu_passed(); +} + +static struct ptunit_result alloc_decoder_null(void) +{ + struct pt_block_decoder *decoder; + + decoder = pt_blk_alloc_decoder(NULL); + ptu_null(decoder); + + return ptu_passed(); +} + +static struct ptunit_result free_decoder_null(void) +{ + pt_blk_free_decoder(NULL); + + return ptu_passed(); +} + +static struct ptunit_result sync_forward_null(void) +{ + int errcode; + + errcode = pt_blk_sync_forward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_backward_null(void) +{ + int errcode; + + errcode = pt_blk_sync_backward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_null(void) +{ + int errcode; + + errcode = pt_blk_sync_set(NULL, 0ull); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_eos(struct test_fixture *tfix) +{ + int errcode; + + errcode = pt_blk_sync_set(&tfix->decoder, sizeof(tfix->buffer) + 1); + ptu_int_eq(errcode, -pte_eos); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_null(void) +{ + struct pt_block_decoder decoder; + uint64_t offset; + int errcode; + + errcode = pt_blk_get_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_blk_get_offset(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_init(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_blk_get_offset(&tfix->decoder, &offset); + ptu_int_eq(errcode, -pte_nosync); + + return ptu_passed(); +} + +static struct ptunit_result get_sync_offset_null(void) +{ + struct pt_block_decoder decoder; + uint64_t offset; + int errcode; + + errcode = pt_blk_get_sync_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_blk_get_sync_offset(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_image_null(void) +{ + const struct pt_image *image; +
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-config.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-config.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -466,6 +467,67 @@ return ptu_passed(); } +static struct ptunit_result cpu_errata_null(void) +{ + struct pt_errata errata; + struct pt_cpu cpu; + int errcode; + + errcode = pt_cpu_errata(&errata, NULL); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_cpu_errata(NULL, &cpu); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result cpu_errata_unknown(void) +{ + struct pt_errata errata; + struct pt_cpu cpu; + int errcode; + + memset(&cpu, 0, sizeof(cpu)); + + errcode = pt_cpu_errata(&errata, &cpu); + ptu_int_eq(errcode, -pte_bad_cpu); + + return ptu_passed(); +} + +static struct ptunit_result cpu_errata_bad_vendor(void) +{ + struct pt_errata errata; + struct pt_cpu cpu; + int errcode; + + memset(&cpu, 0, sizeof(cpu)); + cpu.vendor = (enum pt_cpu_vendor) 0xffff; + + errcode = pt_cpu_errata(&errata, &cpu); + ptu_int_eq(errcode, -pte_bad_cpu); + + return ptu_passed(); +} + +static struct ptunit_result cpu_errata_bad_cpuid(void) +{ + struct pt_errata errata; + struct pt_cpu cpu; + int errcode; + + memset(&cpu, 0, sizeof(cpu)); + cpu.vendor = pcv_intel; + cpu.family = 6; + cpu.model = 63; + + errcode = pt_cpu_errata(&errata, &cpu); + ptu_int_eq(errcode, -pte_bad_cpu); + + return ptu_passed(); +} + int main(int argc, char **argv) { struct ptunit_suite suite; @@ -494,5 +556,10 @@ ptu_run(suite, addr_filter_ip_out_stop_in); ptu_run(suite, addr_filter_ip_in_stop_in); + ptu_run(suite, cpu_errata_null); + ptu_run(suite, cpu_errata_unknown); + ptu_run(suite, cpu_errata_bad_vendor); + ptu_run(suite, cpu_errata_bad_cpuid); + return ptunit_report(&suite); }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-cpp.cpp -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-cpp.cpp
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-cpu.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-cpu.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -29,24 +30,12 @@ #include "ptunit.h" #include "pt_cpu.h" -#include "pt_cpuid.h" #include "intel-pt.h" #include <stdlib.h> -void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, - uint32_t *edx) -{ - (void) leaf; - (void) eax; - (void) ebx; - (void) ecx; - (void) edx; -} - - static struct ptunit_result cpu_valid(void) { struct pt_cpu cpu;
View file
_service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-encoder.c
Added
@@ -0,0 +1,242 @@ +/* + * Copyright (c) 2019-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ptunit.h" + +#include "pt_encoder.h" + +#include "intel-pt.h" + + +/* A test fixture providing a decoder operating on a small buffer. */ +struct test_fixture { + /* The encoder. */ + struct pt_encoder encoder; + + /* The configuration. */ + struct pt_config config; + + /* The buffer it operates on. */ + uint8_t buffer24; + + /* The test fixture initialization and finalization functions. */ + struct ptunit_result (*init)(struct test_fixture *tfix); + struct ptunit_result (*fini)(struct test_fixture *tfix); +}; + +static struct ptunit_result tfix_init(struct test_fixture *tfix) +{ + struct pt_config *config; + uint8_t *buffer; + int errcode; + + config = &tfix->config; + buffer = tfix->buffer; + + memset(buffer, 0, sizeof(tfix->buffer)); + + pt_config_init(config); + config->begin = buffer; + config->end = buffer + sizeof(tfix->buffer); + + errcode = pt_encoder_init(&tfix->encoder, config); + ptu_int_eq(errcode, 0); + + return ptu_passed(); +} + +static struct ptunit_result encoder_init_null(void) +{ + struct pt_encoder encoder; + struct pt_config config; + int errcode; + + memset(&config, 0, sizeof(config)); + + errcode = pt_encoder_init(NULL, &config); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_encoder_init(&encoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result encoder_fini_null(void) +{ + pt_encoder_fini(NULL); + + return ptu_passed(); +} + +static struct ptunit_result alloc_encoder_null(void) +{ + struct pt_encoder *encoder; + + encoder = pt_alloc_encoder(NULL); + ptu_null(encoder); + + return ptu_passed(); +} + +static struct ptunit_result free_encoder_null(void) +{ + pt_free_encoder(NULL); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_null(void) +{ + int errcode; + + errcode = pt_enc_sync_set(NULL, 0ull); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_eos(struct test_fixture *tfix) +{ + int errcode; + + errcode = pt_enc_sync_set(&tfix->encoder, sizeof(tfix->buffer) + 1); + ptu_int_eq(errcode, -pte_eos); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_null(void) +{ + struct pt_encoder encoder; + uint64_t offset; + int errcode; + + errcode = pt_enc_get_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_enc_get_offset(&encoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_init(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_enc_get_offset(&tfix->encoder, &offset); + ptu_int_eq(errcode, 0); + ptu_uint_eq(offset, 0ull); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_get_offset(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_enc_sync_set(&tfix->encoder, 1ull); + ptu_int_eq(errcode, 0); + + errcode = pt_enc_get_offset(&tfix->encoder, &offset); + ptu_int_eq(errcode, 0); + ptu_uint_eq(offset, 1ull); + + return ptu_passed(); +} + +static struct ptunit_result get_config_null(void) +{ + const struct pt_config *config; + + config = pt_enc_get_config(NULL); + ptu_null(config); + + return ptu_passed(); +} + +static struct ptunit_result get_config(struct test_fixture *tfix) +{ + const struct pt_config *config; + + config = pt_enc_get_config(&tfix->encoder); + ptu_ptr(config); + + return ptu_passed(); +} + +static struct ptunit_result next_null(void) +{ + struct pt_encoder encoder;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-event_queue.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-event_queue.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -49,21 +50,6 @@ return ptu_passed(); } -static struct ptunit_result efix_init_pending(struct evq_fixture *efix) -{ - struct pt_event *ev; - int evb; - - pt_evq_init(&efix->evq); - - for (evb = 0; evb < evb_max; ++evb) { - ev = pt_evq_enqueue(&efix->evq, (enum pt_event_binding) evb); - ptu_ptr(ev); - } - - return ptu_passed(); -} - static struct ptunit_result standalone_null(void) { struct pt_event *ev; @@ -86,7 +72,7 @@ return ptu_passed(); } -static struct ptunit_result enqueue_null(enum pt_event_binding evb) +static struct ptunit_result enqueue_null(uint32_t evb) { struct pt_event *ev; @@ -96,7 +82,7 @@ return ptu_passed(); } -static struct ptunit_result dequeue_null(enum pt_event_binding evb) +static struct ptunit_result dequeue_null(uint32_t evb) { struct pt_event *ev; @@ -106,8 +92,22 @@ return ptu_passed(); } +static struct ptunit_result requeue_null(struct evq_fixture *efix, + uint32_t evb) +{ + struct pt_event *ev, lev; + + ev = pt_evq_requeue(NULL, &lev, evb); + ptu_null(ev); + + ev = pt_evq_requeue(&efix->evq, NULL, evb); + ptu_null(ev); + + return ptu_passed(); +} + static struct ptunit_result dequeue_empty(struct evq_fixture *efix, - enum pt_event_binding evb) + uint32_t evb) { struct pt_event *ev; @@ -117,8 +117,7 @@ return ptu_passed(); } -static struct ptunit_result evq_empty(struct evq_fixture *efix, - enum pt_event_binding evb) +static struct ptunit_result evq_empty(struct evq_fixture *efix, uint32_t evb) { int status; @@ -131,8 +130,7 @@ return ptu_passed(); } -static struct ptunit_result evq_pending(struct evq_fixture *efix, - enum pt_event_binding evb) +static struct ptunit_result evq_pending(struct evq_fixture *efix, uint32_t evb) { int status; @@ -145,73 +143,185 @@ return ptu_passed(); } -static struct ptunit_result evq_others_empty(struct evq_fixture *efix, - enum pt_event_binding evb) +static struct ptunit_result enqueue_all_dequeue(struct evq_fixture *efix, + uint32_t enqb, uint32_t deqb, + size_t num) { - int other; + struct pt_event *inevq_max, *outevq_max; + size_t idx; - for (other = 0; other < evb_max; ++other) { - enum pt_event_binding ob; + ptu_uint_le(num, evq_max); - ob = (enum pt_event_binding) other; - if (ob != evb) - ptu_test(evq_empty, efix, ob); + for (idx = 0; idx < num; ++idx) { + inidx = pt_evq_enqueue(&efix->evq, enqb); + ptu_ptr(inidx); + } + + ptu_test(evq_pending, efix, enqb); + ptu_test(evq_empty, efix, ~enqb); + + for (idx = 0; idx < num; ++idx) { + outidx = pt_evq_dequeue(&efix->evq, deqb); + ptu_ptr_eq(outidx, inidx); } + ptu_test(evq_empty, efix, deqb); + return ptu_passed(); } -static struct ptunit_result enqueue_all_dequeue(struct evq_fixture *efix, - enum pt_event_binding evb, - size_t num) +static struct ptunit_result dequeue_requeue_all(struct evq_fixture *efix, + uint32_t enqb, uint32_t reqb, + uint32_t deqb, size_t num) { struct pt_event *inevq_max, *outevq_max; size_t idx; - ptu_uint_le(num, evq_max - 2); + ptu_uint_le(num, evq_max); for (idx = 0; idx < num; ++idx) { - inidx = pt_evq_enqueue(&efix->evq, evb); + inidx = pt_evq_enqueue(&efix->evq, enqb); ptu_ptr(inidx); } - ptu_test(evq_pending, efix, evb); - ptu_test(evq_others_empty, efix, evb); + ptu_test(evq_pending, efix, enqb); + ptu_test(evq_empty, efix, ~enqb); for (idx = 0; idx < num; ++idx) { - outidx = pt_evq_dequeue(&efix->evq, evb); + outidx = pt_evq_dequeue(&efix->evq, enqb); + ptu_ptr_eq(outidx, inidx); + + inidx = pt_evq_requeue(&efix->evq, outidx, reqb); + ptu_ptr(inidx); + } + + ptu_test(evq_pending, efix, reqb); + ptu_test(evq_empty, efix, ~reqb); + + for (idx = 0; idx < num; ++idx) { + outidx = pt_evq_dequeue(&efix->evq, deqb); ptu_ptr_eq(outidx, inidx); } - ptu_test(evq_empty, efix, evb); + ptu_test(evq_empty, efix, deqb); return ptu_passed(); } -static struct ptunit_result enqueue_one_dequeue(struct evq_fixture *efix, - enum pt_event_binding evb, - size_t num) +static struct ptunit_result standalone_requeue_all(struct evq_fixture *efix, + uint32_t reqb, uint32_t deqb, + size_t num) { + struct pt_event *inevq_max, *outevq_max; size_t idx; + ptu_uint_le(num, evq_max); + for (idx = 0; idx < num; ++idx) { + struct pt_event *ev; + + ev = pt_evq_standalone(&efix->evq); + ptu_ptr(ev); + + inidx = pt_evq_requeue(&efix->evq, ev, reqb); + ptu_ptr(inidx); + ptu_ptr_ne(inidx, ev); + }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-ild.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-ild.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -61,7 +62,8 @@ /* Check that an instruction is decoded and classified correctly. */ static struct ptunit_result ptunit_ild_classify(uint8_t *raw, uint8_t size, enum pt_exec_mode mode, - pti_inst_enum_t iclass) + enum pt_insn_class iclass, + pti_inst_enum_t xclass) { struct pt_insn_ext iext; struct pt_insn insn; @@ -78,7 +80,8 @@ ptu_int_eq(errcode, 0); ptu_uint_eq(insn.size, size); - ptu_int_eq(iext.iclass, iclass); + ptu_int_eq(insn.iclass, iclass); + ptu_int_eq(iext.iclass, xclass); return ptu_passed(); } @@ -113,15 +116,15 @@ #define ptu_decode(insn, size, mode) \ ptu_check(ptunit_ild_decode, insn, size, mode) -#define ptu_classify(insn, size, mode, iclass) \ - ptu_check(ptunit_ild_classify, insn, size, mode, iclass) +#define ptu_classify(insn, size, mode, iclass, xclass) \ + ptu_check(ptunit_ild_classify, insn, size, mode, iclass, xclass) /* Macros to also automatically supply the instruction size. */ #define ptu_decode_s(insn, mode) \ ptu_decode(insn, sizeof(insn), mode) -#define ptu_classify_s(insn, mode, iclass) \ - ptu_classify(insn, sizeof(insn), mode, iclass) +#define ptu_classify_s(insn, mode, iclass, xclass) \ + ptu_classify(insn, sizeof(insn), mode, iclass, xclass) #define ptu_invalid_s(insn, mode) \ ptu_check(ptunit_ild_invalid, insn, sizeof(insn), mode) @@ -140,7 +143,7 @@ { uint8_t insn = { 0xE9, 0x60, 0xF9, 0xFF, 0xFF }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_JMP_E9); + ptu_classify_s(insn, ptem_64bit, ptic_jump, PTI_INST_JMP_E9); return ptu_passed(); } @@ -253,7 +256,7 @@ { uint8_t insn = { 0x0f, 0x05 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_SYSCALL); + ptu_classify_s(insn, ptem_64bit, ptic_far_call, PTI_INST_SYSCALL); return ptu_passed(); } @@ -262,7 +265,7 @@ { uint8_t insn = { 0x0f, 0x07 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_SYSRET); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_SYSRET); return ptu_passed(); } @@ -271,7 +274,7 @@ { uint8_t insn = { 0x0f, 0x34 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_SYSENTER); + ptu_classify_s(insn, ptem_64bit, ptic_far_call, PTI_INST_SYSENTER); return ptu_passed(); } @@ -280,7 +283,7 @@ { uint8_t insn = { 0x0f, 0x35 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_SYSEXIT); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_SYSEXIT); return ptu_passed(); } @@ -289,7 +292,7 @@ { uint8_t insn = { 0xcc }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_INT3); + ptu_classify_s(insn, ptem_64bit, ptic_far_call, PTI_INST_INT3); return ptu_passed(); } @@ -298,7 +301,7 @@ { uint8_t insn = { 0xcd, 0x06 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_INT); + ptu_classify_s(insn, ptem_64bit, ptic_far_call, PTI_INST_INT); return ptu_passed(); } @@ -307,7 +310,7 @@ { uint8_t insn = { 0xcf }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_IRET); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_IRET); return ptu_passed(); } @@ -316,7 +319,7 @@ { uint8_t insn = { 0x9a, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_16bit, PTI_INST_CALL_9A); + ptu_classify_s(insn, ptem_16bit, ptic_far_call, PTI_INST_CALL_9A); return ptu_passed(); } @@ -325,7 +328,7 @@ { uint8_t insn = { 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_32bit, PTI_INST_CALL_9A); + ptu_classify_s(insn, ptem_32bit, ptic_far_call, PTI_INST_CALL_9A); return ptu_passed(); } @@ -334,7 +337,7 @@ { uint8_t insn = { 0xff, 0x1c, 0x25, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_CALL_FFr3); + ptu_classify_s(insn, ptem_64bit, ptic_far_call, PTI_INST_CALL_FFr3); return ptu_passed(); } @@ -343,7 +346,7 @@ { uint8_t insn = { 0xff, 0x2c, 0x25, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_JMP_FFr5); + ptu_classify_s(insn, ptem_64bit, ptic_far_jump, PTI_INST_JMP_FFr5); return ptu_passed(); } @@ -352,7 +355,7 @@ { uint8_t insn = { 0xea, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_16bit, PTI_INST_JMP_EA); + ptu_classify_s(insn, ptem_16bit, ptic_far_jump, PTI_INST_JMP_EA); return ptu_passed(); } @@ -361,7 +364,7 @@ { uint8_t insn = { 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_32bit, PTI_INST_JMP_EA); + ptu_classify_s(insn, ptem_32bit, ptic_far_jump, PTI_INST_JMP_EA); return ptu_passed(); } @@ -370,7 +373,7 @@ { uint8_t insn = { 0xca, 0x00, 0x00 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_RET_CA); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_RET_CA); return ptu_passed(); } @@ -379,7 +382,7 @@ { uint8_t insn = { 0x0f, 0x01, 0xc2 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_VMLAUNCH); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_VMLAUNCH); return ptu_passed(); } @@ -388,7 +391,7 @@ { uint8_t insn = { 0x0f, 0x01, 0xc3 }; - ptu_classify_s(insn, ptem_64bit, PTI_INST_VMRESUME); + ptu_classify_s(insn, ptem_64bit, ptic_far_return, PTI_INST_VMRESUME); return ptu_passed();
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-image.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-image.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -208,15 +209,16 @@ return section->size; } -struct pt_section *pt_mk_section(const char *file, uint64_t offset, - uint64_t size) +int pt_mk_section(struct pt_section **psection, const char *filename, + uint64_t offset, uint64_t size) { - (void) file; + (void) psection; + (void) filename; (void) offset; (void) size; /* This function is not used by our tests. */ - return NULL; + return -pte_not_supported; } int pt_section_get(struct pt_section *section)
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-image_section_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-image_section_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2016-2022, Intel Corporation + * Copyright (c) 2016-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -27,491 +28,40 @@ */ #include "pt_image_section_cache.h" +#include "pt_block_cache.h" +#include "pt_section.h" #include "ptunit_threads.h" +#include "ptunit_mkfile.h" #include "intel-pt.h" #include <stdlib.h> +#include <stdio.h> -struct pt_section { - /* The filename. We only support string literals for testing. */ - const char *filename; - - /* The file offset and size. */ - uint64_t offset; - uint64_t size; - - /* The bcache size. */ - uint64_t bcsize; - - /* The iscache back link. */ - struct pt_image_section_cache *iscache; - - /* The file content. */ - uint8_t content0x10; - - /* The use count. */ - int ucount; - - /* The attach count. */ - int acount; - - /* The map count. */ - int mcount; - -#if defined(FEATURE_THREADS) - /* A lock protecting this section. */ - mtx_t lock; - /* A lock protecting the iscache and acount fields. */ - mtx_t alock; -#endif /* defined(FEATURE_THREADS) */ -}; - -extern struct pt_section *pt_mk_section(const char *filename, uint64_t offset, - uint64_t size); - -extern int pt_section_get(struct pt_section *section); -extern int pt_section_put(struct pt_section *section); -extern int pt_section_attach(struct pt_section *section, - struct pt_image_section_cache *iscache); -extern int pt_section_detach(struct pt_section *section, - struct pt_image_section_cache *iscache); - -extern int pt_section_map(struct pt_section *section); -extern int pt_section_map_share(struct pt_section *section); -extern int pt_section_unmap(struct pt_section *section); -extern int pt_section_request_bcache(struct pt_section *section); - -extern const char *pt_section_filename(const struct pt_section *section); -extern uint64_t pt_section_offset(const struct pt_section *section); -extern uint64_t pt_section_size(const struct pt_section *section); -extern int pt_section_memsize(struct pt_section *section, uint64_t *size); - -extern int pt_section_read(const struct pt_section *section, uint8_t *buffer, - uint16_t size, uint64_t offset); - - -struct pt_section *pt_mk_section(const char *filename, uint64_t offset, - uint64_t size) -{ - struct pt_section *section; - - section = malloc(sizeof(*section)); - if (section) { - uint8_t idx; - - memset(section, 0, sizeof(*section)); - section->filename = filename; - section->offset = offset; - section->size = size; - section->ucount = 1; - - for (idx = 0; idx < sizeof(section->content); ++idx) - section->contentidx = idx; - -#if defined(FEATURE_THREADS) - { - int errcode; - - errcode = mtx_init(§ion->lock, mtx_plain); - if (errcode != thrd_success) { - free(section); - section = NULL; - } - - errcode = mtx_init(§ion->alock, mtx_plain); - if (errcode != thrd_success) { - mtx_destroy(§ion->lock); - free(section); - section = NULL; - } - } -#endif /* defined(FEATURE_THREADS) */ - } - - return section; -} - -static int pt_section_lock(struct pt_section *section) -{ - if (!section) - return -pte_internal; - -#if defined(FEATURE_THREADS) - { - int errcode; - - errcode = mtx_lock(§ion->lock); - if (errcode != thrd_success) - return -pte_bad_lock; - } -#endif /* defined(FEATURE_THREADS) */ - - return 0; -} - -static int pt_section_unlock(struct pt_section *section) -{ - if (!section) - return -pte_internal; - -#if defined(FEATURE_THREADS) - { - int errcode; - - errcode = mtx_unlock(§ion->lock); - if (errcode != thrd_success) - return -pte_bad_lock; - } -#endif /* defined(FEATURE_THREADS) */ - - return 0; -} - -static int pt_section_lock_attach(struct pt_section *section) -{ - if (!section) - return -pte_internal; - -#if defined(FEATURE_THREADS) - { - int errcode; - - errcode = mtx_lock(§ion->alock); - if (errcode != thrd_success) - return -pte_bad_lock; - } -#endif /* defined(FEATURE_THREADS) */ - - return 0; -} - -static int pt_section_unlock_attach(struct pt_section *section) -{ - if (!section) - return -pte_internal; - -#if defined(FEATURE_THREADS) - { - int errcode; - - errcode = mtx_unlock(§ion->alock); - if (errcode != thrd_success) - return -pte_bad_lock; - } -#endif /* defined(FEATURE_THREADS) */ - - return 0; -} - -int pt_section_get(struct pt_section *section) -{ - int errcode, ucount; - - if (!section)
View file
_service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-insn_decoder.c
Added
@@ -0,0 +1,354 @@ +/* + * Copyright (c) 2019-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ptunit.h" + +#include "pt_insn_decoder.h" + +#include "intel-pt.h" + + +/* A test fixture providing a decoder operating on a small buffer. */ +struct test_fixture { + /* The packet_decoder. */ + struct pt_insn_decoder decoder; + + /* The configuration. */ + struct pt_config config; + + /* The buffer it operates on. */ + uint8_t buffer24; + + /* The test fixture initialization and finalization functions. */ + struct ptunit_result (*init)(struct test_fixture *tfix); + struct ptunit_result (*fini)(struct test_fixture *tfix); +}; + +static struct ptunit_result tfix_init(struct test_fixture *tfix) +{ + struct pt_config *config; + uint8_t *buffer; + int errcode; + + config = &tfix->config; + buffer = tfix->buffer; + + memset(buffer, 0, sizeof(tfix->buffer)); + + pt_config_init(config); + config->begin = buffer; + config->end = buffer + sizeof(tfix->buffer); + + errcode = pt_insn_decoder_init(&tfix->decoder, config); + ptu_int_eq(errcode, 0); + + return ptu_passed(); +} + +static struct ptunit_result decoder_init_null(void) +{ + struct pt_insn_decoder decoder; + struct pt_config config; + int errcode; + + memset(&config, 0, sizeof(config)); + + errcode = pt_insn_decoder_init(NULL, &config); + ptu_int_eq(errcode, -pte_internal); + + errcode = pt_insn_decoder_init(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result decoder_fini_null(void) +{ + pt_insn_decoder_fini(NULL); + + return ptu_passed(); +} + +static struct ptunit_result alloc_decoder_null(void) +{ + struct pt_insn_decoder *decoder; + + decoder = pt_insn_alloc_decoder(NULL); + ptu_null(decoder); + + return ptu_passed(); +} + +static struct ptunit_result free_decoder_null(void) +{ + pt_insn_free_decoder(NULL); + + return ptu_passed(); +} + +static struct ptunit_result sync_forward_null(void) +{ + int errcode; + + errcode = pt_insn_sync_forward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_backward_null(void) +{ + int errcode; + + errcode = pt_insn_sync_backward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_null(void) +{ + int errcode; + + errcode = pt_insn_sync_set(NULL, 0ull); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_eos(struct test_fixture *tfix) +{ + int errcode; + + errcode = pt_insn_sync_set(&tfix->decoder, sizeof(tfix->buffer) + 1); + ptu_int_eq(errcode, -pte_eos); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_null(void) +{ + struct pt_insn_decoder decoder; + uint64_t offset; + int errcode; + + errcode = pt_insn_get_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_insn_get_offset(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_init(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_insn_get_offset(&tfix->decoder, &offset); + ptu_int_eq(errcode, -pte_nosync); + + return ptu_passed(); +} + +static struct ptunit_result get_sync_offset_null(void) +{ + struct pt_insn_decoder decoder; + uint64_t offset; + int errcode; + + errcode = pt_insn_get_sync_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_insn_get_sync_offset(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_config_null(void) +{ + const struct pt_config *config; +
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-last_ip.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-last_ip.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-mapped_section.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-mapped_section.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-msec_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-msec_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -208,6 +209,8 @@ struct pt_image image; int status; + memset(&mcache, 0, sizeof(mcache)); + status = pt_msec_cache_read(NULL, &msec, &image, 0ull); ptu_int_eq(status, -pte_internal);
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-packet.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-packet.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -272,7 +273,7 @@ } static struct ptunit_result mode_exec(struct packet_fixture *pfix, - enum pt_exec_mode mode) + enum pt_exec_mode mode, int iflag) { struct pt_packet_mode_exec packet; @@ -282,6 +283,7 @@ pfix->packet0.payload.mode.leaf = pt_mol_exec; pfix->packet0.payload.mode.bits.exec.csl = packet.csl; pfix->packet0.payload.mode.bits.exec.csd = packet.csd; + pfix->packet0.payload.mode.bits.exec.iflag = iflag ? 1u : 0u; ptu_test(pfix_test, pfix); @@ -464,6 +466,29 @@ return ptu_passed(); } +static struct ptunit_result cfe(struct packet_fixture *pfix) +{ + pfix->packet0.type = ppt_cfe; + pfix->packet0.payload.cfe.type = pt_cfe_vmexit_intr; + pfix->packet0.payload.cfe.vector = pt_cfe_intr_pf; + pfix->packet0.payload.cfe.ip = 1; + + ptu_test(pfix_test, pfix); + + return ptu_passed(); +} + +static struct ptunit_result evd(struct packet_fixture *pfix) +{ + pfix->packet0.type = ppt_evd; + pfix->packet0.payload.evd.type = pt_evd_vmxq; + pfix->packet0.payload.evd.payload = 0xf000baaa; + + ptu_test(pfix_test, pfix); + + return ptu_passed(); +} + static struct ptunit_result cutoff(struct packet_fixture *pfix, enum pt_packet_type type) { @@ -603,9 +628,9 @@ ptu_run_fp(suite, ip, pfix, ppt_fup, pt_ipc_sext_48, 0x42ull); ptu_run_fp(suite, ip, pfix, ppt_fup, pt_ipc_full, 0x42ull); - ptu_run_fp(suite, mode_exec, pfix, ptem_16bit); - ptu_run_fp(suite, mode_exec, pfix, ptem_32bit); - ptu_run_fp(suite, mode_exec, pfix, ptem_64bit); + ptu_run_fp(suite, mode_exec, pfix, ptem_16bit, 1); + ptu_run_fp(suite, mode_exec, pfix, ptem_32bit, 0); + ptu_run_fp(suite, mode_exec, pfix, ptem_64bit, 1); ptu_run_f(suite, mode_tsx, pfix); ptu_run_f(suite, pip, pfix); @@ -624,6 +649,8 @@ ptu_run_f(suite, pwrx, pfix); ptu_run_fp(suite, ptw, pfix, 0, 1); ptu_run_fp(suite, ptw, pfix, 1, 0); + ptu_run_f(suite, cfe, pfix); + ptu_run_f(suite, evd, pfix); ptu_run_fp(suite, cutoff, pfix, ppt_psb); ptu_run_fp(suite, cutoff_ip, pfix, ppt_tip); @@ -647,213 +674,8 @@ ptu_run_fp(suite, cutoff, pfix, ppt_pwre); ptu_run_fp(suite, cutoff, pfix, ppt_pwrx); ptu_run_fp(suite, cutoff, pfix, ppt_ptw); + ptu_run_fp(suite, cutoff, pfix, ppt_cfe); + ptu_run_fp(suite, cutoff, pfix, ppt_evd); return ptunit_report(&suite); } - - -/* Dummy decode functions to satisfy link dependencies. - * - * As a nice side-effect, we will know if we need to add more tests when - * adding new decoder functions. - */ -struct pt_query_decoder; - -int pt_qry_decode_unknown(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_pad(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_psb(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tip(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tnt_8(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tnt_64(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tip_pge(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tip_pgd(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_fup(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_header_fup(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_pip(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_header_pip(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_ovf(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_mode(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_header_mode(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_psbend(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_decode_tsc(struct pt_query_decoder *d) -{ - (void) d; - - return -pte_internal; -} -int pt_qry_header_tsc(struct pt_query_decoder *d) -{ - (void) d;
View file
_service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-packet_decoder.c
Added
@@ -0,0 +1,277 @@ +/* + * Copyright (c) 2019-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ptunit.h" + +#include "pt_packet_decoder.h" + +#include "intel-pt.h" + + +/* A test fixture providing a decoder operating on a small buffer. */ +struct test_fixture { + /* The packet_decoder. */ + struct pt_packet_decoder decoder; + + /* The configuration. */ + struct pt_config config; + + /* The buffer it operates on. */ + uint8_t buffer24; + + /* The test fixture initialization and finalization functions. */ + struct ptunit_result (*init)(struct test_fixture *tfix); + struct ptunit_result (*fini)(struct test_fixture *tfix); +}; + +static struct ptunit_result tfix_init(struct test_fixture *tfix) +{ + struct pt_config *config; + uint8_t *buffer; + int errcode; + + config = &tfix->config; + buffer = tfix->buffer; + + memset(buffer, 0, sizeof(tfix->buffer)); + + pt_config_init(config); + config->begin = buffer; + config->end = buffer + sizeof(tfix->buffer); + + errcode = pt_pkt_decoder_init(&tfix->decoder, config); + ptu_int_eq(errcode, 0); + + return ptu_passed(); +} + +static struct ptunit_result decoder_init_null(void) +{ + struct pt_packet_decoder decoder; + struct pt_config config; + int errcode; + + memset(&config, 0, sizeof(config)); + + errcode = pt_pkt_decoder_init(NULL, &config); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_pkt_decoder_init(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result decoder_fini_null(void) +{ + pt_pkt_decoder_fini(NULL); + + return ptu_passed(); +} + +static struct ptunit_result alloc_decoder_null(void) +{ + struct pt_packet_decoder *decoder; + + decoder = pt_pkt_alloc_decoder(NULL); + ptu_null(decoder); + + return ptu_passed(); +} + +static struct ptunit_result free_decoder_null(void) +{ + pt_pkt_free_decoder(NULL); + + return ptu_passed(); +} + +static struct ptunit_result sync_forward_null(void) +{ + int errcode; + + errcode = pt_pkt_sync_forward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_backward_null(void) +{ + int errcode; + + errcode = pt_pkt_sync_backward(NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_null(void) +{ + int errcode; + + errcode = pt_pkt_sync_set(NULL, 0ull); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_eos(struct test_fixture *tfix) +{ + int errcode; + + errcode = pt_pkt_sync_set(&tfix->decoder, sizeof(tfix->buffer) + 1); + ptu_int_eq(errcode, -pte_eos); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_null(void) +{ + struct pt_packet_decoder decoder; + uint64_t offset; + int errcode; + + errcode = pt_pkt_get_offset(NULL, &offset); + ptu_int_eq(errcode, -pte_invalid); + + errcode = pt_pkt_get_offset(&decoder, NULL); + ptu_int_eq(errcode, -pte_invalid); + + return ptu_passed(); +} + +static struct ptunit_result get_offset_init(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_pkt_get_offset(&tfix->decoder, &offset); + ptu_int_eq(errcode, -pte_nosync); + + return ptu_passed(); +} + +static struct ptunit_result sync_set_get_offset(struct test_fixture *tfix) +{ + uint64_t offset; + int errcode; + + errcode = pt_pkt_sync_set(&tfix->decoder, 1ull); + ptu_int_eq(errcode, 0); + + errcode = pt_pkt_get_offset(&tfix->decoder, &offset); + ptu_int_eq(errcode, 0); + ptu_uint_eq(offset, 1ull); + + return ptu_passed(); +} + +static struct ptunit_result get_sync_offset_null(void) +{ + struct pt_packet_decoder decoder; + uint64_t offset;
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-query.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-query.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -29,7 +30,6 @@ #include "ptunit.h" #include "pt_last_ip.h" -#include "pt_decoder_function.h" #include "pt_query_decoder.h" #include "pt_encoder.h" #include "pt_opcodes.h" @@ -76,10 +76,25 @@ */ static struct ptunit_result ptu_sync_decoder(struct pt_query_decoder *decoder) { + int errcode; + ptu_ptr(decoder); - decoder->enabled = 1; - (void) pt_df_fetch(&decoder->next, decoder->pos, &decoder->config); + errcode = pt_pkt_sync_set(&decoder->evdec.pacdec, 0ull); + ptu_int_eq(errcode, 0); + + errcode = pt_pkt_next(&decoder->evdec.pacdec, &decoder->evdec.packet, + sizeof(decoder->evdec.packet)); + if (errcode < 0) { + decoder->evdec.packet.type = ppt_invalid; + decoder->evdec.status = errcode; + } + + decoder->evdec.enabled = 1; + + decoder->status = pt_evt_next(&decoder->evdec, &decoder->event, + sizeof(decoder->event)); + return ptu_passed(); } @@ -87,6 +102,7 @@ static struct ptunit_result cutoff(struct pt_query_decoder *decoder, const struct pt_encoder *encoder) { + struct pt_config *config = &decoder->evdec.pacdec.config; uint8_t *pos; ptu_ptr(decoder); @@ -96,9 +112,9 @@ ptu_ptr(pos); pos -= 1; - ptu_ptr_le(decoder->config.begin, pos); + ptu_ptr_le(config->begin, pos); - decoder->config.end = pos; + config->end = pos; return ptu_passed(); } @@ -203,180 +219,6 @@ } static struct ptunit_result -sync_backward_empty_end(struct ptu_decoder_fixture *dfix) -{ - struct pt_query_decoder *decoder = &dfix->decoder; - struct pt_encoder *encoder = &dfix->encoder; - uint64_t sync3, offset, ip; - int errcode; - - /* Check that we can use repeated pt_qry_sync_backward() to iterate over - * synchronization points in backwards order. - * - * There's an empty PSB+ at the end. We skip it. - */ - - errcode = pt_enc_get_offset(encoder, &sync0); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_mode_exec(encoder, ptem_64bit); - pt_encode_psbend(encoder); - - errcode = pt_enc_get_offset(encoder, &sync1); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_mode_exec(encoder, ptem_64bit); - pt_encode_psbend(encoder); - - errcode = pt_enc_get_offset(encoder, &sync2); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_psbend(encoder); - - /* Synchronize repeatedly and check that we reach each PSB in the - * correct order. - */ - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_ge(errcode, 0); - - errcode = pt_qry_get_sync_offset(decoder, &offset); - ptu_int_eq(errcode, 0); - ptu_uint_eq(offset, sync1); - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_ge(errcode, 0); - - errcode = pt_qry_get_sync_offset(decoder, &offset); - ptu_int_eq(errcode, 0); - ptu_uint_eq(offset, sync0); - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_eq(errcode, -pte_eos); - - return ptu_passed(); -} - -static struct ptunit_result -sync_backward_empty_mid(struct ptu_decoder_fixture *dfix) -{ - struct pt_query_decoder *decoder = &dfix->decoder; - struct pt_encoder *encoder = &dfix->encoder; - uint64_t sync3, offset, ip; - int errcode; - - /* Check that we can use repeated pt_qry_sync_backward() to iterate over - * synchronization points in backwards order. - * - * There's an empty PSB+ in the middle. We skip it. - */ - - errcode = pt_enc_get_offset(encoder, &sync0); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_mode_exec(encoder, ptem_64bit); - pt_encode_psbend(encoder); - - errcode = pt_enc_get_offset(encoder, &sync1); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_psbend(encoder); - - errcode = pt_enc_get_offset(encoder, &sync2); - ptu_int_ge(errcode, 0); - - pt_encode_psb(encoder); - pt_encode_mode_exec(encoder, ptem_64bit); - pt_encode_psbend(encoder); - - /* Synchronize repeatedly and check that we reach each PSB in the - * correct order. - */ - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_ge(errcode, 0); - - errcode = pt_qry_get_sync_offset(decoder, &offset); - ptu_int_eq(errcode, 0); - ptu_uint_eq(offset, sync2); - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_ge(errcode, 0); - - errcode = pt_qry_get_sync_offset(decoder, &offset); - ptu_int_eq(errcode, 0); - ptu_uint_eq(offset, sync0); - - errcode = pt_qry_sync_backward(decoder, &ip); - ptu_int_eq(errcode, -pte_eos); - - return ptu_passed(); -} - -static struct ptunit_result -sync_backward_empty_begin(struct ptu_decoder_fixture *dfix) -{ - struct pt_query_decoder *decoder = &dfix->decoder; - struct pt_encoder *encoder = &dfix->encoder; - uint64_t sync3, offset, ip; - int errcode; - - /* Check that we can use repeated pt_qry_sync_backward() to iterate over - * synchronization points in backwards order. - * - * There's an empty PSB+ at the beginning. We skip it. - */ - - errcode = pt_enc_get_offset(encoder, &sync0); - ptu_int_ge(errcode, 0); -
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-retstack.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-retstack.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-section-file.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-section-file.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-section.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-section.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -162,10 +163,12 @@ const char *name; uint8_t bytes = { 0xcc, 0xcc, 0xcc, 0xcc, 0xcc }; uint64_t offset, size; + int errcode; sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); name = pt_section_filename(sfix->section); @@ -182,8 +185,10 @@ static struct ptunit_result create_bad_offset(struct section_fixture *sfix) { - sfix->section = pt_mk_section(sfix->name, 0x10ull, 0x0ull); - ptu_null(sfix->section); + int errcode; + + errcode = pt_mk_section(&sfix->section, sfix->name, 0x10ull, 0x0ull); + ptu_int_eq(errcode, -pte_invalid); return ptu_passed(); } @@ -193,10 +198,12 @@ const char *name; uint8_t bytes = { 0xcc, 0xcc, 0xcc, 0xcc, 0xcc }; uint64_t offset, size; + int errcode; sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, UINT64_MAX); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, UINT64_MAX); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); name = pt_section_filename(sfix->section); @@ -213,7 +220,10 @@ static struct ptunit_result create_empty(struct section_fixture *sfix) { - sfix->section = pt_mk_section(sfix->name, 0x0ull, 0x10ull); + int errcode; + + errcode = pt_mk_section(&sfix->section, sfix->name, 0x0ull, 0x10ull); + ptu_int_eq(errcode, -pte_invalid); ptu_null(sfix->section); return ptu_passed(); @@ -359,7 +369,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->ucount = UINT16_MAX; @@ -380,7 +391,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->acount = UINT16_MAX; @@ -401,7 +413,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->acount = 2; @@ -421,7 +434,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix_write(sfix, bytes); @@ -439,7 +453,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_map(sfix->section); @@ -461,7 +476,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_unmap(sfix->section); @@ -477,7 +493,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->mcount = UINT16_MAX; @@ -497,7 +514,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_get(sfix->section); @@ -523,7 +541,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->ucount += 2; @@ -553,7 +572,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); sfix->section->ucount += 2; @@ -580,7 +600,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_attach(sfix->section, &iscache); @@ -602,7 +623,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_map(sfix->section); @@ -630,7 +652,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section); errcode = pt_section_attach(sfix->section, &iscache); @@ -666,7 +689,8 @@ sfix_write(sfix, bytes); - sfix->section = pt_mk_section(sfix->name, 0x1ull, 0x3ull); + errcode = pt_mk_section(&sfix->section, sfix->name, 0x1ull, 0x3ull); + ptu_int_eq(errcode, 0); ptu_ptr(sfix->section);
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-sync.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-sync.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -36,15 +37,18 @@ /* A test fixture for sync tests. */ struct sync_fixture { - /* The trace buffer. */ - uint8_t buffer1024; - /* A trace configuration. */ struct pt_config config; /* The test fixture initialization and finalization functions. */ struct ptunit_result (*init)(struct sync_fixture *); struct ptunit_result (*fini)(struct sync_fixture *); + + /* The trace buffer. + * + * We need it at the end for overread sanitizer checks. + */ + uint8_t buffer1024; }; static struct ptunit_result sfix_init(struct sync_fixture *sfix) @@ -239,15 +243,16 @@ return ptu_passed(); } -static struct ptunit_result sync_fwd_cutoff(struct sync_fixture *sfix) +static struct ptunit_result sync_fwd_cutoff(struct sync_fixture *sfix, + size_t head, size_t tail) { const uint8_t *sync; int errcode; sfix_encode_psb(sfix->config.begin); sfix_encode_psb(sfix->config.end - ptps_psb); - sfix->config.begin += 1; - sfix->config.end -= 1; + sfix->config.begin += head; + sfix->config.end -= tail; errcode = pt_sync_forward(&sync, sfix->config.begin, &sfix->config); ptu_int_eq(errcode, -pte_eos); @@ -255,15 +260,16 @@ return ptu_passed(); } -static struct ptunit_result sync_bwd_cutoff(struct sync_fixture *sfix) +static struct ptunit_result sync_bwd_cutoff(struct sync_fixture *sfix, + size_t head, size_t tail) { const uint8_t *sync; int errcode; sfix_encode_psb(sfix->config.begin); sfix_encode_psb(sfix->config.end - ptps_psb); - sfix->config.begin += 1; - sfix->config.end -= 1; + sfix->config.begin += head; + sfix->config.end -= tail; errcode = pt_sync_backward(&sync, sfix->config.end, &sfix->config); ptu_int_eq(errcode, -pte_eos); @@ -299,8 +305,10 @@ ptu_run_f(suite, sync_fwd_past, sfix); ptu_run_f(suite, sync_bwd_past, sfix); - ptu_run_f(suite, sync_fwd_cutoff, sfix); - ptu_run_f(suite, sync_bwd_cutoff, sfix); + ptu_run_fp(suite, sync_fwd_cutoff, sfix, 1, 1); + ptu_run_fp(suite, sync_fwd_cutoff, sfix, sizeof(sfix.buffer) - 8, 0); + ptu_run_fp(suite, sync_bwd_cutoff, sfix, 1, 1); + ptu_run_fp(suite, sync_bwd_cutoff, sfix, sizeof(sfix.buffer) - 8, 0); return ptunit_report(&suite); }
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-time.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-time.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/libipt/test/src/ptunit-tnt_cache.c -> _service:tar_scm:v2.1.tar.gz/libipt/test/src/ptunit-tnt_cache.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -158,58 +159,63 @@ return ptu_passed(); } -static struct ptunit_result update_tnt(void) +static struct ptunit_result add_empty(void) { struct pt_tnt_cache tnt_cache; - struct pt_packet_tnt packet; int errcode; pt_tnt_cache_init(&tnt_cache); - packet.bit_size = 4ull; - packet.payload = 8ull; - - errcode = pt_tnt_cache_update_tnt(&tnt_cache, &packet, NULL); + errcode = pt_tnt_cache_add(&tnt_cache, 0x29ull, 7); ptu_int_eq(errcode, 0); - ptu_uint_eq(tnt_cache.tnt, 8ull); - ptu_uint_eq(tnt_cache.index, 1ull << 3); + ptu_uint_eq(tnt_cache.tnt, 0x29ull); + ptu_uint_eq(tnt_cache.index, 0x40); return ptu_passed(); } -static struct ptunit_result update_tnt_not_empty(void) +static struct ptunit_result add_partial(void) { struct pt_tnt_cache tnt_cache; - struct pt_packet_tnt packet; int errcode; - tnt_cache.tnt = 42ull; - tnt_cache.index = 12ull; - - memset(&packet, 0, sizeof(packet)); + pt_tnt_cache_init(&tnt_cache); - errcode = pt_tnt_cache_update_tnt(&tnt_cache, &packet, NULL); - ptu_int_eq(errcode, -pte_bad_context); - ptu_uint_eq(tnt_cache.tnt, 42ull); - ptu_uint_eq(tnt_cache.index, 12ull); + errcode = pt_tnt_cache_add(&tnt_cache, 0x29ull, 3); + ptu_int_eq(errcode, 0); + ptu_uint_eq(tnt_cache.tnt, 0x1ull); + ptu_uint_eq(tnt_cache.index, 0x4); return ptu_passed(); } -static struct ptunit_result update_tnt_null_tnt(void) +static struct ptunit_result add_not_empty(void) { - struct pt_packet_tnt packet; + struct pt_tnt_cache tnt_cache; int errcode; - memset(&packet, 0, sizeof(packet)); + tnt_cache.tnt = 0x23ull; + tnt_cache.index = 0x80ull; - errcode = pt_tnt_cache_update_tnt(NULL, &packet, NULL); + errcode = pt_tnt_cache_add(&tnt_cache, 0x6ull, 4); + ptu_int_eq(errcode, 0); + ptu_uint_eq(tnt_cache.tnt, 0x236ull); + ptu_uint_eq(tnt_cache.index, 0x800ull); + + return ptu_passed(); +} + +static struct ptunit_result add_null_tnt(void) +{ + int errcode; + + errcode = pt_tnt_cache_add(NULL, 0ull, 1); ptu_int_eq(errcode, -pte_invalid); return ptu_passed(); } -static struct ptunit_result update_tnt_null_packet(void) +static struct ptunit_result add_zero_size(void) { struct pt_tnt_cache tnt_cache; int errcode; @@ -217,8 +223,8 @@ tnt_cache.tnt = 42ull; tnt_cache.index = 12ull; - errcode = pt_tnt_cache_update_tnt(&tnt_cache, NULL, NULL); - ptu_int_eq(errcode, -pte_invalid); + errcode = pt_tnt_cache_add(&tnt_cache, 0xffull, 0); + ptu_int_eq(errcode, 0); ptu_uint_eq(tnt_cache.tnt, 42ull); ptu_uint_eq(tnt_cache.index, 12ull); @@ -241,10 +247,11 @@ ptu_run(suite, query_not_taken); ptu_run(suite, query_empty); ptu_run(suite, query_null); - ptu_run(suite, update_tnt); - ptu_run(suite, update_tnt_not_empty); - ptu_run(suite, update_tnt_null_tnt); - ptu_run(suite, update_tnt_null_packet); + ptu_run(suite, add_empty); + ptu_run(suite, add_partial); + ptu_run(suite, add_not_empty); + ptu_run(suite, add_null_tnt); + ptu_run(suite, add_zero_size); return ptunit_report(&suite); }
View file
_service:tar_scm:v2.0.5.tar.gz/pevent/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/pevent/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2014-2022, Intel Corporation +# Copyright (c) 2014-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pevent/include/pevent.h -> _service:tar_scm:v2.1.tar.gz/pevent/include/pevent.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -31,7 +32,7 @@ #include <linux/perf_event.h> -#include "intel-pt.h" +#include "libipt-sb.h" #include <stdint.h> #include <stddef.h> @@ -46,6 +47,8 @@ /* The respective field in struct perf_event_attr. * * We require sample_id_all in struct perf_event_attr to be set. + * + * This field is only valid if \@sample_config is NULL. */ uint64_t sample_type; @@ -53,8 +56,17 @@ uint16_t time_shift; uint32_t time_mult; uint64_t time_zero; + +#if (LIBIPT_SB_VERSION >= 0x201) + /* The sample configuration. */ + struct pev_sample_config *sample_config; +#endif }; +#define pev_config_has(config, field) \ + (config->size >= (offsetof(struct pev_config, field) + \ + sizeof(config->field))) + static inline void pev_config_init(struct pev_config *config) { memset(config, 0, sizeof(*config));
View file
_service:tar_scm:v2.0.5.tar.gz/pevent/src/pevent.c -> _service:tar_scm:v2.1.tar.gz/pevent/src/pevent.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -29,10 +30,6 @@ #include "pevent.h" -#define pev_config_has(config, field) \ - (config->size >= (offsetof(struct pev_config, field) + \ - sizeof(config->field))) - int pev_time_to_tsc(uint64_t *tsc, uint64_t time, const struct pev_config *config) { @@ -43,6 +40,15 @@ if (!tsc || !config) return -pte_internal; + /* "time 0" is for synthesized events, and is not a real time. Using + * the normal conversion for a synthesized time causes problems, so + * just translate it as TSC time 0 ("beginning of time"). + */ + if (!time) { + *tsc = 0; + return 0; + } + if (!pev_config_has(config, time_zero)) return -pte_bad_config; @@ -118,19 +124,72 @@ return -pte_bad_packet; } +static int pev_sample_type(uint64_t *psample_type, const uint64_t *pidentifier, + const struct pev_config *config) +{ + if (!psample_type || !config) + return -pte_internal; + + if (!pev_config_has(config, sample_type)) + return -pte_bad_config; + +#if (LIBIPT_SB_VERSION >= 0x201) + if (pev_config_has(config, sample_config)) { + const struct pev_sample_config *sconfig; + uint64_t identifier; + int sti, nstypes; + + sconfig = config->sample_config; + if (!sconfig || !pidentifier) { + *psample_type = config->sample_type; + return 0; + } + + identifier = *pidentifier; + nstypes = sconfig->nstypes; + for (sti = 0; sti < nstypes; ++sti) { + const struct pev_sample_type *stype; + uint64_t sample_type; + + stype = &sconfig->stypessti; + if (stype->identifier != identifier) + continue; + + sample_type = stype->sample_type; + if (!(sample_type & PERF_SAMPLE_IDENTIFIER)) + return -pte_bad_config; + + *psample_type = sample_type; + return 0; + } + } +#endif + + *psample_type = config->sample_type; + return 0; +} + static int pev_read_samples(struct pev_event *event, const uint8_t *begin, - const uint8_t *end, const struct pev_config *config) + const uint8_t *end, + const struct pev_config *config) { + const uint64_t *pidentifier; const uint8_t *pos; uint64_t sample_type; + int errcode; - if (!event || !begin || !config) + if (!event || !begin || !end || !config) return -pte_internal; - if (!pev_config_has(config, sample_type)) - return -pte_bad_config; + pidentifier = NULL; + pos = (end - sizeof(*pidentifier)); + if (begin <= pos) + pidentifier = (const uint64_t *) pos; + + errcode = pev_sample_type(&sample_type, pidentifier, config); + if (errcode < 0) + return errcode; - sample_type = config->sample_type; pos = begin; if (sample_type & PERF_SAMPLE_TID) { @@ -140,8 +199,6 @@ } if (sample_type & PERF_SAMPLE_TIME) { - int errcode; - event->sample.time = (const uint64_t *) pos; pos += 8; @@ -197,6 +254,9 @@ header = (const struct perf_event_header *) pos; pos += sizeof(*header); + if (header->size < sizeof(*header)) + return -pte_nosync; + if (!header->type || (end < (begin + header->size))) return -pte_eos; @@ -329,38 +389,54 @@ return size; } -static size_t sample_size(const struct pev_event *event) +static int pev_sample_config(size_t *psample_size, uint64_t *psample_type, + const struct pev_event *event) { - size_t size; + uint64_t sample_type; + size_t sample_size; - if (!event) - return 0; + if (!psample_size || !psample_type || !event) + return -pte_internal; - size = 0; + sample_type = 0; + sample_size = 0; if (event->sample.tid) { - size += sizeof(*event->sample.pid); - size += sizeof(*event->sample.tid); + sample_type |= PERF_SAMPLE_TID; + sample_size += sizeof(*event->sample.pid); + sample_size += sizeof(*event->sample.tid); } - if (event->sample.time) - size += sizeof(*event->sample.time); + if (event->sample.time) { + sample_type |= PERF_SAMPLE_TIME; + sample_size += sizeof(*event->sample.time); + } - if (event->sample.id) - size += sizeof(*event->sample.id); + if (event->sample.id) { + sample_type |= PERF_SAMPLE_ID; + sample_size += sizeof(*event->sample.id); + } - if (event->sample.stream_id) - size += sizeof(*event->sample.stream_id); + if (event->sample.stream_id) { + sample_type |= PERF_SAMPLE_STREAM_ID; + sample_size += sizeof(*event->sample.stream_id); + } if (event->sample.cpu) { - size += sizeof(*event->sample.cpu); - size += sizeof(uint32_t); + sample_type |= PERF_SAMPLE_CPU; + sample_size += sizeof(*event->sample.cpu); + sample_size += sizeof(uint32_t); } - if (event->sample.identifier) - size += sizeof(*event->sample.identifier); + if (event->sample.identifier) { + sample_type |= PERF_SAMPLE_IDENTIFIER; + sample_size += sizeof(*event->sample.identifier); + } - return size; + *psample_type = sample_type; + *psample_size = sample_size;
View file
_service:tar_scm:v2.0.5.tar.gz/pevent/test/src/ptunit-pevent.c -> _service:tar_scm:v2.1.tar.gz/pevent/test/src/ptunit-pevent.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2014-2022, Intel Corporation + * Copyright (c) 2014-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -30,6 +31,13 @@ #include "pevent.h" +#include <stdlib.h> +#include <stdio.h> + +#if defined(_MSC_VER) && (_MSC_VER < 1900) +# define snprintf _snprintf_c +#endif + /* A test fixture. */ struct pev_fixture { @@ -46,12 +54,16 @@ /* The perf event configuration. */ struct pev_config config; + /* The sample_type to be tested. */ + uint64_t sample_type; + /* Test samples. */ struct { uint32_t pid, tid; uint64_t time; uint64_t tsc; uint32_t cpu; + uint64_t identifier; } sample; /* The test fixture initialization and finalization functions. */ @@ -69,6 +81,16 @@ pev_config_init(&pfix->config); + pfix->sample_type = 0; + + return ptu_passed(); +} + +static struct ptunit_result pfix_fini(struct pev_fixture *pfix) +{ +#if (LIBIPT_SB_VERSION >= 0x201) + free(pfix->config.sample_config); +#endif return ptu_passed(); } @@ -81,6 +103,7 @@ pfix->config.time_shift = 4; pfix->config.time_mult = 3; + pfix->sample_type = pfix->config.sample_type; pfix->sample.time = 0xa0b00cdeull; pfix->event0.sample.time = &pfix->sample.time; @@ -94,6 +117,7 @@ pfix->config.sample_type |= (uint64_t) PERF_SAMPLE_TID; pfix->config.sample_type |= (uint64_t) PERF_SAMPLE_CPU; + pfix->sample_type = pfix->config.sample_type; pfix->sample.pid = 0xa0; pfix->sample.tid = 0xa1; pfix->sample.cpu = 0xb; @@ -105,6 +129,40 @@ return ptu_passed(); } +#if (LIBIPT_SB_VERSION >= 0x201) +static struct ptunit_result pfix_init_sample_config(struct pev_fixture *pfix) +{ + struct pev_sample_config *sample_config; + + ptu_test(pfix_init, pfix); + + sample_config = malloc(sizeof(*pfix->config.sample_config) + + (3 * sizeof(struct pev_sample_type))); + ptu_ptr(sample_config); + + pfix->config.sample_config = sample_config; + sample_config->nstypes = 3; + sample_config->stypes0.identifier = 1; + sample_config->stypes0.sample_type = (uint64_t) + PERF_SAMPLE_TID | PERF_SAMPLE_IDENTIFIER; + sample_config->stypes1.identifier = 2; + sample_config->stypes1.sample_type = (uint64_t) + PERF_SAMPLE_CPU | PERF_SAMPLE_IDENTIFIER; + sample_config->stypes2.identifier = 3; + sample_config->stypes2.sample_type = (uint64_t) + PERF_SAMPLE_TIME | PERF_SAMPLE_IDENTIFIER; + + pfix->sample_type = sample_config->stypes1.sample_type; + pfix->sample.cpu = 0xb; + pfix->sample.identifier = sample_config->stypes1.identifier; + + pfix->event0.sample.cpu = &pfix->sample.cpu; + pfix->event0.sample.identifier = &pfix->sample.identifier; + + return ptu_passed(); +} +#endif + static struct ptunit_result pfix_read_write(struct pev_fixture *pfix) { uint8_t *begin, *end; @@ -182,19 +240,19 @@ static struct ptunit_result pfix_check_sample(struct pev_fixture *pfix) { - if (pfix->config.sample_type & PERF_SAMPLE_TID) + if (pfix->sample_type & PERF_SAMPLE_TID) ptu_test(pfix_check_sample_tid, pfix); else { ptu_null(pfix->event1.sample.pid); ptu_null(pfix->event1.sample.tid); } - if (pfix->config.sample_type & PERF_SAMPLE_TIME) + if (pfix->sample_type & PERF_SAMPLE_TIME) ptu_test(pfix_check_sample_time, pfix); else ptu_null(pfix->event1.sample.time); - if (pfix->config.sample_type & PERF_SAMPLE_CPU) + if (pfix->sample_type & PERF_SAMPLE_CPU) ptu_test(pfix_check_sample_cpu, pfix); else ptu_null(pfix->event1.sample.cpu); @@ -281,13 +339,13 @@ memset(&config, 0, sizeof(config)); config.time_mult = 1; - errcode = pev_time_to_tsc(&tsc, 0x0ull, &config); + errcode = pev_time_to_tsc(&tsc, 0x1ull, &config); ptu_int_eq(errcode, -pte_bad_config); config.size = sizeof(config); config.time_mult = 0; - errcode = pev_time_to_tsc(&tsc, 0x0ull, &config); + errcode = pev_time_to_tsc(&tsc, 0x1ull, &config); ptu_int_eq(errcode, -pte_bad_config); return ptu_passed(); @@ -363,6 +421,30 @@ return ptu_passed(); } +static struct ptunit_result nosync(uint16_t type) +{ + union { + struct perf_event_header header; + uint8_t buffer128; + } input; + struct pev_config config; + struct pev_event event; + int errcode; + + pev_config_init(&config); + + memset(input.buffer, 0xcc, sizeof(input.buffer)); + input.header.type = type; + input.header.misc = 0; + input.header.size = sizeof(input.header.type); + + errcode = pev_read(&event, input.buffer, + input.buffer + sizeof(input.buffer), &config); + ptu_int_eq(errcode, -pte_nosync); + + return ptu_passed(); +} + static struct ptunit_result bad_string(uint16_t type) { union { @@ -388,19 +470,22 @@ return ptu_passed(); } -static struct ptunit_result mmap(struct pev_fixture *pfix) +static struct ptunit_result record_mmap(struct pev_fixture *pfix) { union { struct pev_record_mmap record; char buffer1024; } mmap; + memset(&mmap, 0, sizeof(mmap)); + mmap.record.pid = 0xa; mmap.record.tid = 0xb; mmap.record.addr = 0xa00100ull;
View file
_service:tar_scm:v2.0.5.tar.gz/ptdump/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/ptdump/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -36,14 +37,6 @@ ../libipt/src/pt_time.c ) -if (CMAKE_HOST_UNIX) - set(PTDUMP_FILES ${PTDUMP_FILES} ../libipt/src/posix/pt_cpuid.c) -endif (CMAKE_HOST_UNIX) - -if (CMAKE_HOST_WIN32) - set(PTDUMP_FILES ${PTDUMP_FILES} ../libipt/src/windows/pt_cpuid.c) -endif (CMAKE_HOST_WIN32) - add_executable(ptdump ${PTDUMP_FILES} )
View file
_service:tar_scm:v2.0.5.tar.gz/ptdump/src/ptdump.c -> _service:tar_scm:v2.1.tar.gz/ptdump/src/ptdump.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -80,6 +81,11 @@ /* Show timing information as delta to the previous value. */ uint32_t show_time_as_delta:1; +#if (LIBIPT_VERSION >= 0x201) + /* Preserve timing calibration on overflow. */ + uint32_t keep_tcal_on_ovf:1; +#endif + /* Quiet mode: Don't print anything but errors. */ uint32_t quiet:1; @@ -214,6 +220,9 @@ printf(" --no-tcal skip timing calibration.\n"); printf(" this will result in errors when CYC packets are encountered.\n"); printf(" --no-wall-clock suppress the no-time error and print relative time.\n"); +#if (LIBIPT_VERSION >= 0x201) + printf(" --keep-tcal-on-ovf preserve timing calibration on overflow.\n"); +#endif #if defined(FEATURE_SIDEBAND) printf(" --sb:compact | --sb show sideband records in compact format.\n"); printf(" --sb:verbose show sideband records in verbose format.\n"); @@ -226,6 +235,8 @@ printf(" load a perf_event sideband stream from <file>.\n"); printf(" an optional offset or range can be given.\n"); printf(" --pevent:sample-type <val> set perf_event_attr.sample_type to <val> (default: 0).\n"); + printf(" --pevent:sample-config <id>:<val>\n"); + printf(" set perf_event_attr.sample_type to <val> for event <id>.\n"); printf(" --pevent:time-zero <val> set perf_event_mmap_page.time_zero to <val> (default: 0).\n"); printf(" --pevent:time-shift <val> set perf_event_mmap_page.time_shift to <val> (default: 0).\n"); printf(" --pevent:time-mult <val> set perf_event_mmap_page.time_mult to <val> (default: 1).\n"); @@ -238,9 +249,8 @@ printf(" --pevent:vdso-ia32 <file> ignored.\n"); #endif /* defined(FEATURE_PEVENT) */ #endif /* defined(FEATURE_SIDEBAND) */ - printf(" --cpu none|auto|f/m/s set cpu to the given value and decode according to:\n"); + printf(" --cpu none|f/m/s set cpu to the given value and decode according to:\n"); printf(" none spec (default)\n"); - printf(" auto current cpu\n"); printf(" f/m/s family/model/stepping\n"); printf(" --mtc-freq <n> set the MTC frequency (IA32_RTIT_CTL17:14) to <n>.\n"); printf(" --nom-freq <n> set the nominal frequency (MSR_PLATFORM_INFO15:8) to <n>.\n"); @@ -581,6 +591,7 @@ { const uint8_t *begin, *end; char *bbegin, *bend; + int len; if (!buffer || !packet) return diag("error printing packet", offset, -pte_internal); @@ -594,16 +605,12 @@ bbegin = buffer->raw; bend = bbegin + sizeof(buffer->raw); - for (; begin < end; ++begin) { - char *pos; - - pos = bbegin; - bbegin += 2; + for (; begin < end; ++begin, bbegin += len) { + size_t size = (size_t) ((uintptr_t) bend - (uintptr_t) bbegin); - if (bend <= bbegin) + len = snprintf(bbegin, size, "%02x", *begin); + if (len != 2) return diag("truncating raw packet", offset, 0); - - sprintf(pos, "%02x", *begin); } return 0; @@ -1096,6 +1103,22 @@ case ppt_ovf: print_field(buffer->opcode, "ovf"); + + if (options->track_time) { +#if (LIBIPT_VERSION >= 0x201) + if (options->keep_tcal_on_ovf) { + int errcode; + + errcode = pt_tcal_update_ovf(&tracking->tcal, + config); + if (errcode < 0) + diag("error calibrating time", + offset, errcode); + } else +#endif + pt_tcal_init(&tracking->tcal); + } + return 0; case ppt_stop: @@ -1181,9 +1204,16 @@ sep = csd0 && csl0 ? ", " : ""; print_field(buffer->opcode, "mode.exec"); +#if (LIBIPT_VERSION < 0x201) print_field(buffer->payload.standard, "%s%s%s", csd, sep, csl); - +#else + print_field(buffer->payload.standard, "%s%s%s%s%s", + csd, sep, csl, + mode->bits.exec.iflag && + (csd0 || csl0) ? ", " : "", + mode->bits.exec.iflag ? "if" : ""); +#endif if (options->show_exec_mode) { const char *em; @@ -1334,6 +1364,60 @@ packet->payload.ptw.ip ? ", ip" : ""); return 0; + +#if (LIBIPT_VERSION >= 0x201) + case ppt_cfe: + print_field(buffer->opcode, "cfe"); + + switch (packet->payload.cfe.type) { + case pt_cfe_intr: + case pt_cfe_vmexit_intr: + case pt_cfe_uintr: + print_field(buffer->payload.standard, "%u: %u%s", + packet->payload.cfe.type, + packet->payload.cfe.vector, + packet->payload.cfe.ip ? ", ip" : ""); + return 0; + + case pt_cfe_sipi: + print_field(buffer->payload.standard, "%u: %x%s", + packet->payload.cfe.type, + packet->payload.cfe.vector, + packet->payload.cfe.ip ? ", ip" : ""); + return 0; + + case pt_cfe_iret: + case pt_cfe_smi: + case pt_cfe_rsm: + case pt_cfe_init: + case pt_cfe_vmentry: + case pt_cfe_vmexit: + case pt_cfe_shutdown: + case pt_cfe_uiret: + break; + } + + print_field(buffer->payload.standard, "%u%s", + packet->payload.cfe.type, + packet->payload.cfe.ip ? ", ip" : ""); + return 0; + + case ppt_evd: + print_field(buffer->opcode, "evd"); + print_field(buffer->payload.standard, "%u: %" PRIx64, + packet->payload.evd.type, + packet->payload.evd.payload); + + switch (packet->payload.evd.type) { + case pt_evd_cr2: + case pt_evd_vmxq: + case pt_evd_vmxr: + break; + } + + return 0; + +#endif /* (LIBIPT_VERSION >= 0x201) */ } return diag("unknown packet", offset, -pte_bad_opc); @@ -1553,6 +1637,58 @@ return 0; } +static int pt_parse_sample_config(struct pt_sb_pevent_config *pevent, + const char *arg) +{ + struct pev_sample_config *sample_config; + uint64_t identifier, sample_type; + uint8_t nstypes; + char *rest; + + if (!pevent || !arg) + return -pte_internal; + + errno = 0; + identifier = strtoull(arg, &rest, 0); + if (errno || (rest == arg)) + return -pte_invalid;
View file
_service:tar_scm:v2.1.tar.gz/ptseg
Added
+(directory)
View file
_service:tar_scm:v2.1.tar.gz/ptseg/CMakeLists.txt
Added
@@ -0,0 +1,32 @@ +# Copyright (c) 2018-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of Intel Corporation nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +add_executable(ptseg + src/ptseg.c +) + +target_link_libraries(ptseg libipt)
View file
_service:tar_scm:v2.1.tar.gz/ptseg/src
Added
+(directory)
View file
_service:tar_scm:v2.1.tar.gz/ptseg/src/ptseg.c
Added
@@ -0,0 +1,366 @@ +/* + * Copyright (c) 2018-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "pt_version.h" + +#include "intel-pt.h" + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <errno.h> + + +static int help(const char *ptseg) +{ + printf("usage: %s <options> <ptfile>:<offset>\n\n", ptseg); + printf("options:\n"); + printf(" --help|-h this text.\n"); + printf(" --version display version information and exit.\n"); + + return 0; +} + +static int usage(const char *ptseg) +{ + help(ptseg); + + return 1; +} + +static int version(const char *ptseg) +{ + pt_print_tool_version(ptseg); + + return 0; +} + +static int internal_error(const char *ptseg) +{ + fprintf(stderr, "%s: internal error.\n", ptseg); + + return 1; +} + +static int bad_option(const char *ptseg, const char *arg) +{ + fprintf(stderr, "%s: unknown option: %s.\n", ptseg, arg); + + return 1; +} + +static int no_ptfile(const char *ptseg) +{ + fprintf(stderr, "%s: missing ptfile.\n", ptseg); + + return 1; +} + +static int trailing_junk(const char *ptseg, const char *arg) +{ + fprintf(stderr, "%s: trailing junk: %s.\n", ptseg, arg); + + return 1; +} + +static int no_filename(const char *ptseg, const char *arg) +{ + fprintf(stderr, "%s: missing file name: %s.\n", ptseg, arg); + + return 1; +} + +static int no_offset(const char *ptseg, const char *arg) +{ + fprintf(stderr, "%s: missing file offset: %s.\n", ptseg, arg); + + return 1; +} + +static int bad_offset(const char *ptseg, const char *arg) +{ + fprintf(stderr, "%s: bad file offset: %s.\n", ptseg, arg); + + return 1; +} + +static int decode_error(const char *ptseg, int errcode) +{ + fprintf(stderr, "%s: decode error: %s.\n", ptseg, + pt_errstr(pt_errcode(errcode))); + + return -errcode; +} + +static int load_file(uint8_t **buffer, size_t *psize, const char *filename, + uint64_t offset, uint64_t size, const char *ptseg) +{ + uint8_t *content; + size_t read; + FILE *file; + long fsize, begin, end; + int errcode; + + if (!buffer || !psize || !filename) + return internal_error(ptseg); + + errno = 0; + file = fopen(filename, "rb"); + if (!file) { + fprintf(stderr, "%s: failed to open %s: %d.\n", + ptseg, filename, errno); + return -1; + } + + errcode = fseek(file, 0, SEEK_END); + if (errcode) { + fprintf(stderr, "%s: failed to determine size of %s: %d.\n", + ptseg, filename, errno); + goto err_file; + } + + fsize = ftell(file); + if (fsize < 0) { + fprintf(stderr, "%s: failed to determine size of %s: %d.\n", + ptseg, filename, errno); + goto err_file; + } + + begin = (long) offset; + if (((uint64_t) begin != offset) || (fsize <= begin)) { + fprintf(stderr, + "%s: bad offset 0x%" PRIx64 " into %s.\n", + ptseg, offset, filename); + goto err_file; + } + + end = fsize; + if (size) { + uint64_t range_end; + + range_end = offset + size; + if ((uint64_t) end < range_end) { + fprintf(stderr, + "%s: bad range 0x%" PRIx64 " in %s.\n", + ptseg, range_end, filename); + goto err_file; + } + + end = (long) range_end; + } + + fsize = end - begin; + + content = malloc((size_t) fsize); + if (!content) { + fprintf(stderr, "%s: failed to allocated memory %s.\n", + ptseg, filename); + goto err_file; + } + + errcode = fseek(file, begin, SEEK_SET); + if (errcode) { + fprintf(stderr, "%s: failed to load %s: %d.\n", + ptseg, filename, errno); + goto err_content; + } + + read = fread(content, (size_t) fsize, 1u, file); + if (read != 1) { + fprintf(stderr, "%s: failed to load %s: %d.\n", + ptseg, filename, errno); + goto err_content; + }
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/pttc/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -43,7 +44,6 @@ set(PTTC_FILES ${PTTC_FILES} src/posix/util.c - ../libipt/src/posix/pt_cpuid.c ) endif (CMAKE_HOST_UNIX) @@ -51,7 +51,6 @@ set(PTTC_FILES ${PTTC_FILES} src/windows/util.c - ../libipt/src/windows/pt_cpuid.c ) endif (CMAKE_HOST_WIN32)
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/errcode.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/errcode.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -79,6 +80,8 @@ err_no_mem, + err_name_too_long, + /* Used for all invalid function arguments. */ err_internal,
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/file.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/file.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -44,13 +45,16 @@ char **line; }; -/* Allocates new text. +/* Turns @s into a new text; @n is the length of @s excluding termination. + * + * On success, the returned text owns @s and @s will be freed by text_free(); + * otherwise @s will be freed by text_alloc() and NULL will be returned. * * Note, if s is NULL or the empty string the text has zero lines. * * Returns a non-NULL text object on success; NULL otherwise. */ -extern struct text *text_alloc(const char *s); +extern struct text *text_alloc(char *s, size_t n); /* Deallocates @t. * If @t is the NULL pointer, nothing happens.
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/parse.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/parse.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -96,6 +97,11 @@ #endif /* defined(FEATURE_SIDEBAND) */ +enum { + /* The maximal size of a label in characters. */ + l_max = 256 +}; + /* Represents the parser. */ struct parser { /* File pointer to the trace output file. */
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/pttc.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/pttc.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/util.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/util.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -30,15 +31,17 @@ #define UTIL_H #include <stdint.h> +#include <stddef.h> -/* Duplicates @s and returns a pointer to it. +/* Duplicates @s into *@d provided the length of @s does not exceed @n bytes. * - * The returned pointer must be freed by the caller. + * The provided pointer must be freed by the caller. * - * Returns the pointer to the duplicate on success; otherwise NULL is - * returned. + * Returns zero on success; a negative enum errcode otherwise. + * Returns -err_name_too_long if the length of @s exceeds @n bytes. + * Returns -err_no_mem when running out of memory. */ -extern char *duplicate_str(const char *s); +extern int duplicate_name(char **d, const char *s, size_t n); /* Converts the string @str into an usigned x-bit value @val using base @base. *
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/include/yasm.h -> _service:tar_scm:v2.1.tar.gz/pttc/include/yasm.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -47,10 +48,11 @@ /* Modifies @s, so it can be used as a label, if @s actually looks like * a label. * - * Returns true if @s looks like a label; false otherwise. - * Returns -err_internal if @l or @name is the NULL pointer. + * @end points one byte beyond the end of the string buffer containing @s. + * + * Returns non-zero if @s looks like a label; zero otherwise. */ -extern int make_label(char *s); +extern int make_label(char *s, const char *end); /* Represents the state of the pt directive parser. The parser uses the * canonical yasm lst file syntax to follow all asm source files that
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/errcode.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/errcode.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -77,6 +78,8 @@ "out of memory", + "name too long", + "internal error", "processing stopped",
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/file.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/file.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -35,32 +36,35 @@ #include <string.h> #include <errno.h> -struct text *text_alloc(const char *s) +struct text *text_alloc(char *s, size_t n) { - size_t n, i; + size_t i; char **line; struct text *t; t = calloc(1, sizeof(struct text)); - if (!t) + if (!t) { + free(s); return NULL; + } /* If s is NULL or empty, there is nothing to do. */ - if (!s || *s == '\0') + if (!s || *s == '\0') { + free(s); return t; + } /* beginning of s is the first line. */ t->n = 1; t->line = calloc(1, sizeof(*t->line)); - if (!t->line) + if (!t->line) { + free(s); goto error; + } - t->line0 = duplicate_str(s); - if (!t->line0) - goto error; + t->line0 = s; /* iterate through all chars and make \r?\n to \0. */ - n = strlen(t->line0); for (i = 0; i < n; i++) { if (t->line0i == '\r') { if (i+1 >= n) { @@ -69,16 +73,22 @@ break; } /* terminate the line string if it's a line end. */ - if (t->line0i+1 == '\n') + if (t->line0i+1 == '\n') { t->line0i = '\0'; + continue; + } + } - } else if (t->line0i == '\n') { + if (t->line0i == '\n') { /* set newline character always to \0. */ t->line0i = '\0'; if (i+1 >= n) { /* the file ends with \n. */ break; } + } + + if (t->line0i == '\0') { /* increase line pointer buffer. */ line = realloc(t->line, (t->n+1) * sizeof(*t->line)); if (!line) @@ -190,11 +200,9 @@ goto error; } - fl->next->filename = duplicate_str(filename); - if (!fl->next->filename) { - errcode = -err_no_mem; + errcode = duplicate_name(&fl->next->filename, filename, FILENAME_MAX); + if (errcode < 0) goto error; - } errno = 0; f = fopen(filename, "rb"); @@ -245,13 +253,12 @@ goto error; } - *t = text_alloc(s); + *t = text_alloc(s, fsize); if (!*t) { errcode = -err_no_mem; goto error; } - free(s); fl->next->text = *t; return 0; @@ -262,7 +269,6 @@ /* filename is closed after reading before handling error. */ fl_free(fl->next); fl->next = NULL; - free(s); text_free(*t); *t = NULL; return errcode;
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/main.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/main.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -42,9 +43,8 @@ "options:\n" " --help|-h this text.\n" " --version display version information and exit.\n" - " --cpu none|auto|f/m/s set cpu to the given value and encode according to:\n" + " --cpu none|f/m/s set cpu to the given value and encode according to:\n" " none spec (default)\n" - " auto current cpu\n" " f/m/s family/model/stepping\n" " <pttfile> the annotated yasm input file.\n", prog); @@ -75,18 +75,6 @@ if (strcmp(arg, "--cpu") == 0) { arg = argvi++; - if (strcmp(arg, "auto") == 0) { - errcode = pt_cpu_read(&options.cpu); - if (errcode < 0) { - fprintf(stderr, - "%s: error reading cpu: %s.\n", - prog, - pt_errstr(pt_errcode(errcode))); - return 1; - } - continue; - } - if (strcmp(arg, "none") == 0) { memset(&options.cpu, 0, sizeof(options.cpu)); continue;
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/parse.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/parse.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -36,17 +37,18 @@ #include <stdlib.h> #include <string.h> #include <errno.h> +#include <limits.h> #if defined(_MSC_VER) && (_MSC_VER < 1900) # define snprintf _snprintf_c #endif -static const char *pt_suffix = ".pt"; -static const char *exp_suffix = ".exp"; +static const char pt_suffix = ".pt"; +static const char exp_suffix = ".exp"; #if defined(FEATURE_SIDEBAND) -static const char *sb_suffix = ".sb"; +static const char sb_suffix = ".sb"; #endif enum { @@ -58,14 +60,16 @@ static void sb_rename_file(struct sb_file *sb) { char filenameFILENAME_MAX; + int len; /* We encode the configuration in the sideband filename. */ switch (sb->format) { case sbf_raw: - strncpy(filename, sb->name, sizeof(filename) - 1); - - /* Make sure @filename is terminated. */ - filenamesizeof(filename) - 1 = 0; + len = snprintf(filename, sizeof(filename), "%s", sb->name); + if ((len < 0) || (sizeof(filename) <= (size_t) len)) { + fprintf(stderr, "error renaming %s.\n", sb->name); + return; + } break; #if defined(FEATURE_PEVENT) @@ -89,7 +93,7 @@ ext_len = (size_t) printed; - suffix_len = strnlen(sb_suffix, sizeof(filename)); + suffix_len = sizeof(sb_suffix) - 1; base_len = strnlen(sb->name, sizeof(filename)); if (base_len < suffix_len) { fprintf(stderr, "error renaming %s.\n", sb->name); @@ -105,12 +109,15 @@ return; } - strncpy(filename, sb->name, base_len); + if (INT_MAX < base_len) { + fprintf(stderr, "error renaming %s.\n", sb->name); + return; + } - printed = snprintf(filename + base_len, - sizeof(filename) - base_len, "%s%s", - extension, sb_suffix); - if (printed < 0) { + printed = snprintf(filename, sizeof(filename), "%.*s%s%s", + (int) base_len, sb->name, extension, + sb_suffix); + if ((printed < 0) || (sizeof(filename) <= (size_t) printed)) { fprintf(stderr, "error renaming %s.\n", sb->name); return; } @@ -126,7 +133,7 @@ } /* Print the name of the sideband file for test.bash. */ - printf("%s\n", filename); + printf("%s ", filename); } #endif /* defined(FEATURE_SIDEBAND) */ @@ -175,8 +182,9 @@ */ static struct parser *p_alloc(const char *pttfile, const struct pt_config *conf) { - size_t n; + size_t n, size; struct parser *p; + int len; if (!conf) return NULL; @@ -192,14 +200,19 @@ if (!p->y) goto error; - n = strlen(p->y->fileroot) + 1; + n = strnlen(p->y->fileroot, FILENAME_MAX - sizeof(pt_suffix)); + if ((FILENAME_MAX - sizeof(pt_suffix)) <= n) + goto error; + + size = n + sizeof(pt_suffix); - p->ptfilename = malloc(n+strlen(pt_suffix)); + p->ptfilename = malloc(size); if (!p->ptfilename) goto error; - strcpy(p->ptfilename, p->y->fileroot); - strcat(p->ptfilename, pt_suffix); + len = snprintf(p->ptfilename, size, "%s%s", p->y->fileroot, pt_suffix); + if ((len < 0) || ((size_t) len != (size - 1))) + goto error; p->pd = pd_alloc(pd_len); if (!p->pd) @@ -224,68 +237,50 @@ } /* Generates an .exp filename following the scheme: - * <fileroot>-<extra>.exp + * <fileroot>-<extra>-cpu_<f>_<m>_<s>.exp */ static char *expfilename(struct parser *p, const char *extra) { - char *filename; - /* reserve enough space to hold the string - * "-cpu_fffff_mmm_sss" + 1 for the trailing null character. - */ - char cpu_suffix19; - size_t n; - - if (!extra) - extra = ""; - *cpu_suffix = '\0'; - - /* determine length of resulting filename, which looks like: - * <fileroot>-<extra>-cpu_<f>_<m>_<s>.exp - */ - n = strlen(p->y->fileroot); + char filenameFILENAME_MAX, cpuext64, *pfname; + int len; - if (*extra != '\0') - /* the extra string is prepended with a -. */ - n += 1 + strlen(extra); + memset(filename, 0, sizeof(filename)); + memset(cpuext, 0, sizeof(cpuext)); if (p->conf->cpu.vendor != pcv_unknown) { struct pt_cpu cpu; - int len; cpu = p->conf->cpu; if (cpu.stepping) - len = sprintf(cpu_suffix, - "-cpu_%" PRIu16 "_%" PRIu8 "_%" PRIu8 "", - cpu.family, cpu.model, cpu.stepping); + len = snprintf(cpuext, sizeof(cpuext), + "-cpu_%" PRIu16 "_%" PRIu8 "_%" PRIu8, + cpu.family, cpu.model, cpu.stepping); else - len = sprintf(cpu_suffix, - "-cpu_%" PRIu16 "_%" PRIu8 "", cpu.family, - cpu.model); + len = snprintf(cpuext, sizeof(cpuext), + "-cpu_%" PRIu16 "_%" PRIu8, cpu.family, + cpu.model); - if (len < 0) + if ((len < 0) || (sizeof(cpuext) <= (size_t) len)) return NULL; - - n += (size_t) len; } - n += strlen(exp_suffix); + if (extra && *extra) + len = snprintf(filename, sizeof(filename), "%s-%s%s%s", + p->y->fileroot, extra, cpuext, exp_suffix); + else + len = snprintf(filename, sizeof(filename), "%s-%s%s", + p->y->fileroot, cpuext, exp_suffix); - /* trailing null character. */ - n += 1; + if ((len < 0) || (sizeof(filename) <= (size_t) len)) + return NULL; - filename = malloc(n); - if (!filename)
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/posix/util.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/posix/util.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/pttc.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/pttc.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/util.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/util.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,6 +29,7 @@ #include "errcode.h" #include "util.h" +#include "parse.h" #include <ctype.h> #include <errno.h> @@ -35,17 +37,26 @@ #include <stdlib.h> #include <string.h> -char *duplicate_str(const char *s) +int duplicate_name(char **d, const char *s, size_t n) { char *dup; + size_t len; - if (!s) - return NULL; + if (!d || !s) + return -err_internal; + + len = strnlen(s, n); + if (n <= len) + return -err_name_too_long; - dup = malloc(strlen(s)+1); + dup = malloc(len + 1); if (!dup) - return NULL; - return strcpy(dup, s); + return -err_no_mem; + + *d = memcpy(dup, s, len); + duplen = 0; + + return 0; } int str_to_uint64(const char *str, uint64_t *val, int base) @@ -155,6 +166,7 @@ int l_append(struct label *l, const char *name, uint64_t addr) { int errcode; + size_t nlen; if (bug_on(!l)) return -err_internal; @@ -162,6 +174,10 @@ if (bug_on(!name)) return -err_internal; + nlen = strnlen(name, (size_t) l_max); + if ((size_t) l_max <= nlen) + return -err_label_name; + /* skip to the last label. */ while (l->next) { l = l->next; @@ -177,11 +193,9 @@ return -err_no_mem; /* save the name. */ - l->next->name = duplicate_str(name); - if (!l->next->name) { - errcode = -err_no_mem; + errcode = duplicate_name(&l->next->name, name, nlen+1); + if (errcode < 0) goto error; - } /* save the address. */ l->next->addr = addr;
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/windows/util.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/windows/util.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -41,7 +42,7 @@ int errcode; int i; - size_t size; + size_t size, len; char *args; STARTUPINFO si; @@ -69,11 +70,18 @@ * all arguments, plus two quotation marks (to make it quoted strings * and allow for spaces in file/path names), plus a space after each * arguments as delimiter (after the last arguments it's a terminating - * zero-byte instead of the space). * + * zero-byte instead of the space). */ size = 0; - for (i = 0; argvi; ++i) - size += strlen(argvi) + 3; + for (i = 0; argvi; ++i) { + len = strnlen(argvi, FILENAME_MAX); + if (FILENAME_MAX <= len) { + errcode = -err_internal; + goto out; + } + + size += len + 3; + } /* allocate command line string */ args = calloc(size, 1); @@ -85,9 +93,15 @@ */ size = 0; for (i = 0; argvi; ++i) { + len = strnlen(argvi, FILENAME_MAX); + if (FILENAME_MAX <= len) { + errcode = -err_internal; + goto out; + } + argssize++ = '"'; - strcpy(args + size, argvi); - size += strlen(argvi); + memcpy(args + size, argvi, len); + size += len; argssize++ = '"'; argssize++ = ' '; }
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/src/yasm.c -> _service:tar_scm:v2.1.tar.gz/pttc/src/yasm.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -153,13 +154,15 @@ return lookup_section_label(l, name, "vstart", vstart); } +static const char key_section = "section"; +static const char key_org = "org"; + int parse_yasm_labels(struct label *l, const struct text *t) { int errcode, no_org_directive; size_t i; uint64_t base_addr; - enum { linelen = 1024 }; - char linelinelen; + char line1024, *end; struct label *length; if (bug_on(!t)) @@ -168,6 +171,7 @@ base_addr = 0; no_org_directive = 1; length = NULL; + end = line + sizeof(line); /* determine base address from org directive and insert special * section labels. @@ -175,24 +179,24 @@ for (i = 0; i < t->n; i++) { char *tmp; - errcode = text_line(t, line, linelen, i); + errcode = text_line(t, line, sizeof(line), i); if (errcode < 0) return errcode; - tmp = strstr(line, "section"); + tmp = strstr(line, key_section); if (tmp) { - tmp += strlen("section"); + tmp += sizeof(key_section) - 1; errcode = parse_section(tmp, l, &length); if (errcode < 0) return errcode; continue; } - tmp = strstr(line, "org"); + tmp = strstr(line, key_org); if (tmp) { char *org; - org = tmp + strlen("org"); + org = tmp + sizeof(key_org) - 1; tmp = strstr(org, ""); if (!tmp) return -err_no_org_directive; @@ -258,17 +262,17 @@ return -err_no_org_directive; for (i = 0; i < t->n; i++) { - char *tmp, *name; + char *tmp; uint64_t addr; - errcode = text_line(t, line, linelen, i); + errcode = text_line(t, line, sizeof(line), i); if (errcode < 0) goto error; /* Change the base on section switches. */ - tmp = strstr(line, "section"); + tmp = strstr(line, key_section); if (tmp) { - tmp += strlen("section"); + tmp += sizeof(key_section) - 1; errcode = lookup_section_vstart(l, tmp, &base_addr); if (errcode < 0) return errcode; @@ -297,7 +301,7 @@ if (!tmp) continue; - if (!make_label(tmp)) { + if (!make_label(tmp, end)) { uint64_t laddr; /* get address in case we find a label later. */ @@ -311,7 +315,7 @@ /* this might be a label now. */ tmp = strtok(NULL, " "); - if (!make_label(tmp)) + if (!make_label(tmp, end)) continue; laddr = addr + base_addr; @@ -325,11 +329,6 @@ goto error; continue; } - name = duplicate_str(tmp); - if (!name) { - errcode = -err_no_mem; - goto error; - } /* there was a label so now an address needs to * be found. @@ -338,7 +337,7 @@ for (i += 1; i < t->n; i++) { int errcode_text; - errcode_text = text_line(t, line, linelen, i); + errcode_text = text_line(t, line, sizeof(line), i); if (errcode_text < 0) { errcode = errcode_text; break; @@ -353,13 +352,13 @@ break; } - errcode = l_append(l, name, laddr); + errcode = l_append(l, tmp, laddr); break; } } if (errcode == -err_label_addr) - fprintf(stderr, "label '%s' has no address\n", name); - free(name); + fprintf(stderr, "label '%s' has no address\n", tmp); + if (errcode < 0) goto error; } @@ -374,14 +373,21 @@ return errcode; } -int make_label(char *s) +int make_label(char *s, const char *end) { - size_t n; + size_t n, size; if (bug_on(!s)) - return -err_internal; + return 0; + + if (bug_on(end <= s)) + return 0; + + size = (size_t) ((uintptr_t) end - (uintptr_t) s); + n = strnlen(s, size); + if (size <= n) + return 0; - n = strlen(s); if (n == 0 || sn-1 != ':') return 0; @@ -430,6 +436,8 @@ */ static int st_set_file(struct state *st, const char *filename, int inc, int n) { + int errcode; + if (bug_on(!st)) return -err_internal; @@ -437,9 +445,10 @@ return -err_internal; free(st->filename); - st->filename = duplicate_str(filename); - if (!st->filename) - return -err_no_mem; + errcode = duplicate_name(&st->filename, filename, FILENAME_MAX); + if (errcode < 0) + return errcode; + st->inc = inc; st->n = n; return 0; @@ -451,10 +460,14 @@ */ static int st_update(struct state *st, const char *s) { + int errcode; + free(st->line); - st->line = duplicate_str(s); - if (!st->line)
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/test/src/test_all_directives.ptt -> _service:tar_scm:v2.1.tar.gz/pttc/test/src/test_all_directives.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/test/src/test_exp_labels.ptt -> _service:tar_scm:v2.1.tar.gz/pttc/test/src/test_exp_labels.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/pttc/test/src/test_label_addr.ptt -> _service:tar_scm:v2.1.tar.gz/pttc/test/src/test_label_addr.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/ptunit/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -40,4 +41,9 @@ ${PTUNIT_FILES} ) +set_target_properties(ptunit PROPERTIES + C_STANDARD 11 + C_STANDARD_REQUIRED ON +) + add_ptunit_c_test(selftest)
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/include/ptunit.h -> _service:tar_scm:v2.1.tar.gz/ptunit/include/ptunit.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/include/ptunit_mkfile.h -> _service:tar_scm:v2.1.tar.gz/ptunit/include/ptunit_mkfile.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/include/ptunit_threads.h -> _service:tar_scm:v2.1.tar.gz/ptunit/include/ptunit_threads.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2015-2022, Intel Corporation + * Copyright (c) 2015-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,7 +33,11 @@ #include "ptunit.h" #if defined(FEATURE_THREADS) -# include <threads.h> +# if !defined(__STDC_NO_THREADS__) +# include <threads.h> +# else +# include "pt_threads.h" +# endif #endif /* defined(FEATURE_THREADS) */ @@ -90,7 +95,7 @@ int thrd, errcodeptu_thrd_max; for (thrd = 0; thrd < tfix->nthreads; ++thrd) - errcodethrd = thrd_join(&tfix->threadsthrd, + errcodethrd = thrd_join(tfix->threadsthrd, &tfix->resultthrd); mtx_destroy(&tfix->lock);
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/src/posix/ptunit_mkfile.c -> _service:tar_scm:v2.1.tar.gz/ptunit/src/posix/ptunit_mkfile.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/src/ptunit.c -> _service:tar_scm:v2.1.tar.gz/ptunit/src/ptunit.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,6 +33,7 @@ #include <stdio.h> #include <inttypes.h> #include <string.h> +#include <limits.h> struct ptunit_srcloc ptunit_mk_srcloc(const char *file, uint32_t line) @@ -211,11 +213,16 @@ static const char *basename(const char *file) { const char *base; + size_t len; if (!file) return NULL; - for (base = file + strlen(file); base != file; base -= 1) { + len = strnlen(file, FILENAME_MAX); + if (FILENAME_MAX <= len) + return NULL; + + for (base = file + len; base != file; base -= 1) { char ch; ch = base-1; @@ -228,7 +235,8 @@ static void ptunit_print_srcloc(const struct ptunit_test *test) { - const char *file; + const char *file, *base; + int prec; switch (test->result.type) { case ptur_passed: @@ -240,11 +248,17 @@ case ptur_failed_unsigned_int: case ptur_failed_pointer: case ptur_failed_str: - file = basename(test->result.failed.where.file); + file = test->result.failed.where.file; if (!file) file = "<unknown>"; - fprintf(stderr, "%s:%" PRIu32 ": ", file, + base = basename(file); + if (!base) + base = file; + + prec = (INT_MAX < FILENAME_MAX ? INT_MAX : FILENAME_MAX); + + fprintf(stderr, "%.*s:%" PRIu32 ": ", prec, base, test->result.failed.where.line); break; }
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/src/windows/ptunit_mkfile.c -> _service:tar_scm:v2.1.tar.gz/ptunit/src/windows/ptunit_mkfile.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptunit/test/src/ptunit-selftest.c -> _service:tar_scm:v2.1.tar.gz/ptunit/test/src/ptunit-selftest.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptxed/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/ptxed/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -45,14 +46,6 @@ ../libipt/src/pt_cpu.c ) -if (CMAKE_HOST_UNIX) - set(PTXED_FILES ${PTXED_FILES} ../libipt/src/posix/pt_cpuid.c) -endif (CMAKE_HOST_UNIX) - -if (CMAKE_HOST_WIN32) - set(PTXED_FILES ${PTXED_FILES} ../libipt/src/windows/pt_cpuid.c) -endif (CMAKE_HOST_WIN32) - if (FEATURE_ELF) set(PTXED_FILES ${PTXED_FILES} src/load_elf.c) endif (FEATURE_ELF)
View file
_service:tar_scm:v2.0.5.tar.gz/ptxed/include/load_elf.h -> _service:tar_scm:v2.1.tar.gz/ptxed/include/load_elf.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptxed/src/load_elf.c -> _service:tar_scm:v2.1.tar.gz/ptxed/src/load_elf.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/ptxed/src/ptxed.c -> _service:tar_scm:v2.1.tar.gz/ptxed/src/ptxed.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2022, Intel Corporation + * Copyright (c) 2013-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -68,6 +69,25 @@ struct pt_block_decoder *block; } variant; + /* Decoder-specific configuration. + * + * We use a set of structs to store the configuration for multiple + * decoders. + * + * - block decoder. + */ + struct { + /* A collection of decoder-specific flags. */ + struct pt_conf_flags flags; + } block; + + /* - instruction flow decoder. */ + struct { + /* A collection of decoder-specific flags. */ + struct pt_conf_flags flags; + } insn; + + /* The image section cache. */ struct pt_image_section_cache *iscache; @@ -127,9 +147,6 @@ /* Print the ip of events. */ uint32_t print_event_ip:1; - /* Request tick events. */ - uint32_t enable_tick_events:1; - #if defined(FEATURE_SIDEBAND) /* Print sideband warnings. */ uint32_t print_sb_warnings:1; @@ -235,6 +252,7 @@ printf(" --event:time print the tsc for events if available.\n"); printf(" --event:ip print the ip of events if available.\n"); printf(" --event:tick request tick events.\n"); + printf(" --event:iflags request iflags events.\n"); printf(" --filter:addr<n>_cfg <cfg> set IA32_RTIT_CTL.ADDRn_CFG to <cfg>.\n"); printf(" --filter:addr<n>_a <base> set IA32_RTIT_ADDRn_A to <base>.\n"); printf(" --filter:addr<n>_b <limit> set IA32_RTIT_ADDRn_B to <limit>.\n"); @@ -255,6 +273,8 @@ printf(" load a perf_event sideband stream from <file>.\n"); printf(" an optional offset or range can be given.\n"); printf(" --pevent:sample-type <val> set perf_event_attr.sample_type to <val> (default: 0).\n"); + printf(" --pevent:sample-config <id>:<val>\n"); + printf(" set perf_event_attr.sample_type to <val> for event <id>.\n"); printf(" --pevent:time-zero <val> set perf_event_mmap_page.time_zero to <val> (default: 0).\n"); printf(" --pevent:time-shift <val> set perf_event_mmap_page.time_shift to <val> (default: 0).\n"); printf(" --pevent:time-mult <val> set perf_event_mmap_page.time_mult to <val> (default: 1).\n"); @@ -278,19 +298,24 @@ #endif /* defined(FEATURE_ELF) */ printf(" --raw <file>:<from>-<to>:<base> load a raw binary from <file> at address <base>.\n"); printf(" an optional offset or range can be given.\n"); - printf(" --cpu none|auto|f/m/s set cpu to the given value and decode according to:\n"); + printf(" --cpu none|f/m/s set cpu to the given value and decode according to:\n"); printf(" none spec (default)\n"); - printf(" auto current cpu\n"); printf(" f/m/s family/model/stepping\n"); printf(" --mtc-freq <n> set the MTC frequency (IA32_RTIT_CTL17:14) to <n>.\n"); printf(" --nom-freq <n> set the nominal frequency (MSR_PLATFORM_INFO15:8) to <n>.\n"); printf(" --cpuid-0x15.eax set the value of cpuid0x15.eax.\n"); printf(" --cpuid-0x15.ebx set the value of cpuid0x15.ebx.\n"); printf(" --insn-decoder use the instruction flow decoder.\n"); +#if (LIBIPT_VERSION >= 0x201) + printf(" --insn:keep-tcal-on-ovf preserve timing calibration on overflow.\n"); +#endif printf(" --block-decoder use the block decoder (default).\n"); printf(" --block:show-blocks show blocks in the output.\n"); printf(" --block:end-on-call set the end-on-call block decoder flag.\n"); printf(" --block:end-on-jump set the end-on-jump block decoder flag.\n"); +#if (LIBIPT_VERSION >= 0x201) + printf(" --block:keep-tcal-on-ovf preserve timing calibration on overflow.\n"); +#endif printf("\n"); #if defined(FEATURE_ELF) printf("You must specify at least one binary or ELF file (--raw|--elf).\n"); @@ -599,9 +624,13 @@ static const char *visualize_iclass(enum pt_insn_class iclass) { switch (iclass) { +#if (LIBIPT_VERSION >= 0x201) + case ptic_unknown: + return "unknown"; +#else case ptic_error: - return "unknown/error"; - + return "error"; +#endif case ptic_other: return "other"; @@ -628,6 +657,11 @@ case ptic_ptwrite: return "ptwrite"; + +#if (LIBIPT_VERSION >= 0x201) + case ptic_indirect: + return "indirect"; +#endif } return "undefined"; @@ -648,9 +682,13 @@ iclass = xed_inst_iclass(inst); switch (insn->iclass) { +#if (LIBIPT_VERSION >= 0x201) + case ptic_unknown: + break; +#else case ptic_error: break; - +#endif case ptic_ptwrite: case ptic_other: switch (category) { @@ -739,10 +777,12 @@ case XED_ICLASS_IRETD: case XED_ICLASS_IRETQ: case XED_ICLASS_SYSRET: + case XED_ICLASS_SYSRET64: case XED_ICLASS_SYSRET_AMD: case XED_ICLASS_SYSEXIT: case XED_ICLASS_VMLAUNCH: case XED_ICLASS_VMRESUME: + case XED_ICLASS_UIRET: return; } break; @@ -752,6 +792,38 @@ return; break; + +#if (LIBIPT_VERSION >= 0x201) + case ptic_indirect: + switch (iclass) { + default: + break; + + case XED_ICLASS_CALL_FAR: + case XED_ICLASS_INT: + case XED_ICLASS_INT1: + case XED_ICLASS_INT3: + case XED_ICLASS_INTO: + case XED_ICLASS_SYSCALL: + case XED_ICLASS_SYSCALL_AMD: + case XED_ICLASS_SYSENTER: + case XED_ICLASS_VMCALL: + case XED_ICLASS_RET_FAR: + case XED_ICLASS_IRET: + case XED_ICLASS_IRETD: + case XED_ICLASS_IRETQ: + case XED_ICLASS_SYSRET: + case XED_ICLASS_SYSRET64: + case XED_ICLASS_SYSRET_AMD: + case XED_ICLASS_SYSEXIT: + case XED_ICLASS_VMLAUNCH: + case XED_ICLASS_VMRESUME: + case XED_ICLASS_JMP_FAR: + case XED_ICLASS_JMP: + return; + } + break; +#endif /* (LIBIPT_VERSION >= 0x201) */ } /* If we get here, @insn->iclass doesn't match XED's classification. */ @@ -1133,6 +1205,130 @@ case ptev_mnt: printf("mnt: %" PRIx64, event->variant.mnt.payload); break; + +#if (LIBIPT_VERSION >= 0x201) + case ptev_tip: + printf("tip: %" PRIx64, event->variant.tip.ip); + break; + + case ptev_tnt: { + uint64_t index; + + printf("tnt: "); + for (index = event->variant.tnt.size; index; index >>= 1) + printf("%s", + (event->variant.tnt.bits & index) ? "!" : ".");
View file
_service:tar_scm:v2.0.5.tar.gz/script/perf-copy-mapped-files.bash -> _service:tar_scm:v2.1.tar.gz/script/perf-copy-mapped-files.bash
Changed
@@ -1,6 +1,7 @@ #! /bin/bash # -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/script/perf-get-opts.bash -> _service:tar_scm:v2.1.tar.gz/script/perf-get-opts.bash
Changed
@@ -1,6 +1,7 @@ #! /bin/bash # -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -113,35 +114,58 @@ gawk_sample_type() { echo $1 | gawk -- ' - BEGIN { RS = "|\n" } - /^TID$/ { config += 0x00002 } - /^TIME$/ { config += 0x00004 } - /^ID$/ { config += 0x00040 } - /^CPU$/ { config += 0x00080 } - /^STREAM$/ { config += 0x00200 } - /^IDENTIFIER$/ { config += 0x10000 } + BEGIN { RS = "|\n" } + /^IP$/ { config += 0x0000001 } + /^TID$/ { config += 0x0000002 } + /^TIME$/ { config += 0x0000004 } + /^ADDR$/ { config += 0x0000008 } + /^READ$/ { config += 0x0000010 } + /^CALLCHAIN$/ { config += 0x0000020 } + /^ID$/ { config += 0x0000040 } + /^CPU$/ { config += 0x0000080 } + /^PERIOD$/ { config += 0x0000100 } + /^STREAM$/ { config += 0x0000200 } + /^STREAM_ID$/ { config += 0x0000200 } + /^RAW$/ { config += 0x0000400 } + /^BRANCH_STACK$/ { config += 0x0000800 } + /^REGS_USER$/ { config += 0x0001000 } + /^STACK_USER$/ { config += 0x0002000 } + /^WEIGHT$/ { config += 0x0004000 } + /^DATA_SRC$/ { config += 0x0008000 } + /^IDENTIFIER$/ { config += 0x0010000 } + /^TRANSACTION$/ { config += 0x0020000 } + /^REGS_INTR$/ { config += 0x0040000 } + /^PHYS_ADDR$/ { config += 0x0080000 } + /^AUX$/ { config += 0x0100000 } + /^CGROUP$/ { config += 0x0200000 } + /^DATA_PAGE_SIZE$/ { config += 0x0400000 } + /^CODE_PAGE_SIZE$/ { config += 0x0800000 } + /^WEIGHT_STRUCT$/ { config += 0x1000000 } END { - if (config != 0) { - printf(" --pevent:sample-type 0x%x", config) - } + printf("0x%lx", config) } ' } -attr_sample_types=$(perf evlist -v -i $file | gawk -F' ' -- ' - BEGIN { RS = "," } - /sample_type/ { print $2 } -' | sort | uniq) - -for attr in $attr_sample_types; do - # We assume at most one attr with and at most one attr without CPU - # - if $(echo $attr | grep -e CPU) ; then - gawk_sample_type $attr - else - gawk_sample_type $attr - fi -done +zero_config=1 +perf script --header-only -i $file | grep -e '^# *event *:' | \ + sed 's/.*id = {\(^}*\)}.*sample_type = \(^,*\),.*/\1:\2/' | \ + while read -r conf; do + ids=$(echo $conf | sed 's/\(^:*\):.*/\1/' | sed 's/,//g') + sts=$(echo $conf | sed 's/.*:\(.*\)/\1/') + + for id in $ids; do + # The reserved zero identifier used for synthesized event + # records uses the same sample type as the first identifier in + # the first event. + # + if (( $zero_config )); then + echo -n " --pevent:sample-config 0:$(gawk_sample_type $sts)" + zero_config=0 + fi + echo -n " --pevent:sample-config $id:$(gawk_sample_type $sts)" + done + done perf evlist -v -i $file | grep intel_pt | gawk -F' ' -- ' BEGIN { RS = "," } @@ -206,8 +230,18 @@ ' fi -for sbfile in $(ls -1 "$(basename $file)"-sideband*.pevent 2>/dev/null); do - if -z "$master" || "$sbfile" == "$master" ; then +fbase="$(basename "$file")" +mbase="$(basename "$master")" +sdir="$(dirname "$master")" +if "$mbase" == "$master" ; then + sdir="$(dirname "$file")" +fi +for sbfile in "$sdir/$fbase"-sideband*.pevent; do + if ! -e "$sbfile" ; then + break + fi + + if -z "$master" || "$sbfile" == "$sdir/$mbase" ; then echo -n " --pevent:primary $sbfile" else echo -n " --pevent:secondary $sbfile"
View file
_service:tar_scm:v2.0.5.tar.gz/script/perf-read-aux.bash -> _service:tar_scm:v2.1.tar.gz/script/perf-read-aux.bash
Changed
@@ -1,6 +1,7 @@ #! /bin/bash # -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/script/perf-read-sideband.bash -> _service:tar_scm:v2.1.tar.gz/script/perf-read-sideband.bash
Changed
@@ -1,6 +1,7 @@ #! /bin/bash # -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/script/test.bash -> _service:tar_scm:v2.1.tar.gz/script/test.bash
Changed
@@ -1,6 +1,7 @@ #! /bin/bash # -# Copyright (c) 2013-2022, Intel Corporation +# Copyright (c) 2013-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -152,8 +153,8 @@ lst=$base.lst - # execute pttc - remove the extra \r in Windows line endings - files=`run "$pttc_cmd" $pttc_arg $cpu "$ptt" | sed 's/\r\n/\n/g'` + # execute pttc to produce input and expected output files + files=`run "$pttc_cmd" $pttc_arg $cpu "$ptt"` ret=$? if $ret != 0 ; then echo "$ptt: $pttc_cmd $pttc_arg failed with $ret" >&2
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/sideband/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2017-2022, Intel Corporation +# Copyright (c) 2017-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -56,9 +57,12 @@ set_target_properties(libipt-sb PROPERTIES PREFIX "" + IMPORT_PREFIX "" PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/include/libipt-sb.h VERSION ${PT_VERSION} SOVERSION ${PT_VERSION_MAJOR} + C_STANDARD 11 + C_STANDARD_REQUIRED ON ) target_link_libraries(libipt-sb libipt)
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/include/libipt-sb.h.in -> _service:tar_scm:v2.1.tar.gz/sideband/include/libipt-sb.h.in
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -33,15 +34,12 @@ #include <stdint.h> #include <stdio.h> +#include "intel-pt.h" + #ifdef __cplusplus extern "C" { #endif -struct pt_image_section_cache; -struct pt_image; -struct pt_event; - - /* A macro to mark functions as exported. */ #ifndef pt_sb_export # if defined(__GNUC__) @@ -185,7 +183,7 @@ * Initialize decoders that have been added since pt_sb_alloc() or since the * last pt_sb_init_decoders() call by fetching their first sideband record. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_init_decoders(struct pt_sb_session *session); @@ -204,7 +202,7 @@ * to @stream according to @flags. Pass a NULL @stream to ask decoders to not * print anything. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_event(struct pt_sb_session *session, struct pt_image **image, @@ -219,7 +217,7 @@ * * Decoders that return an error will be removed from @session and freed. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_dump(struct pt_sb_session *session, FILE *stream, uint32_t flags, uint64_t tsc); @@ -265,7 +263,7 @@ * Adds a section of @size bytes from @filename starting at @offset to @context's * image at @vaddr. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_ctx_mmap(struct pt_sb_session *session, struct pt_sb_context *context, @@ -277,7 +275,7 @@ * Install @context->image in @image. The caller is responsible for holding a * reference to @context as long as its image is in use. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_ctx_switch_to(struct pt_image **image, struct pt_sb_session *session, @@ -310,7 +308,7 @@ * This does not provide a new reference to @context. Use pt_sb_ctx_get() if * you need to keep the context. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_get_context_by_pid(struct pt_sb_context **context, @@ -325,7 +323,7 @@ * Provide a NULL process context in @context if a context for @pid does not * exist in @session. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_find_context_by_pid(struct pt_sb_context **context, @@ -337,7 +335,7 @@ * Future lookups won't find @context but it won't be freed until the last user * puts it. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_remove_context(struct pt_sb_session *session, struct pt_sb_context *context); @@ -369,7 +367,7 @@ /* Fetch the next sideband record and provide its timestamp. * - * Return zero on success, a negative error code otherwise. + * Return zero on success, a negative pt_error_code otherwise. */ int (*fetch)(struct pt_sb_session *session, uint64_t *tsc, void *priv); @@ -400,7 +398,7 @@ * of their next record's timestamp. This allows sideband decoders to * postpone actions until a suitable event. * - * Return zero on success, a negative error code otherwise. + * Return zero on success, a negative pt_error_code otherwise. */ int (*apply)(struct pt_sb_session *session, struct pt_image **image, const struct pt_event *event, void *priv); @@ -411,7 +409,7 @@ * of enum pt_sb_print_flag. A value of zero means that only errors * shall be printed. * - * Return zero on success, a negative error code otherwise. + * Return zero on success, a negative pt_error_code otherwise. */ int (*print)(struct pt_sb_session *session, FILE *stream, uint32_t flags, void *priv); @@ -444,6 +442,35 @@ const struct pt_sb_decoder_config *config); +#if (LIBIPT_SB_VERSION >= 0x201) + +/* A perf event sample type. */ +struct pev_sample_type { + /* The sample identifier. + * + * This corresponds to the PERF_SAMPLE_IDENTIFIER sample that can be + * found at the very end of the event record. + */ + uint64_t identifier; + + /* The sample type. + * + * At least PERF_SAMPLE_IDENTIFIER must be set. + */ + uint64_t sample_type; +}; + +/* A perf event sample configuration. */ +struct pev_sample_config { + /* The number of sample types in this configuration. */ + uint8_t nstypes; + + /* An array of \@nstypes sample types. */ + struct pev_sample_type stypes; +}; + +#endif /* (LIBIPT_SB_VERSION >= 0x201) */ + /* The configuration for a Linux perf event sideband decoder. */ struct pt_sb_pevent_config { /* The size of the config structure in bytes. */ @@ -487,6 +514,8 @@ /* The respective field in struct perf_event_attr. * * We require sample_id_all in struct perf_event_attr to be set. + * + * This field is only valid if \@sample_config is NULL. */ uint64_t sample_type; @@ -511,6 +540,11 @@ * - whether this is a primary decoder (secondary if clear). */ uint32_t primary:1; + +#if (LIBIPT_SB_VERSION >= 0x201) + /* The sample configuration. */ + struct pev_sample_config *sample_config; +#endif }; /* Allocate a Linux perf event sideband decoder. @@ -518,7 +552,7 @@ * Allocates a sideband decoder for the Linux perf event format based on @config * and adds it to @session. * - * Returns zero on success, a negative error code otherwise. + * Returns zero on success, a negative pt_error_code otherwise. */ extern pt_sb_export int pt_sb_alloc_pevent_decoder(struct pt_sb_session *session,
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/internal/include/pt_sb_context.h -> _service:tar_scm:v2.1.tar.gz/sideband/internal/include/pt_sb_context.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/internal/include/pt_sb_decoder.h -> _service:tar_scm:v2.1.tar.gz/sideband/internal/include/pt_sb_decoder.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/internal/include/pt_sb_file.h -> _service:tar_scm:v2.1.tar.gz/sideband/internal/include/pt_sb_file.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/internal/include/pt_sb_pevent.h -> _service:tar_scm:v2.1.tar.gz/sideband/internal/include/pt_sb_pevent.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/internal/include/pt_sb_session.h -> _service:tar_scm:v2.1.tar.gz/sideband/internal/include/pt_sb_session.h
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/src/pt_sb_context.c -> _service:tar_scm:v2.1.tar.gz/sideband/src/pt_sb_context.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -30,7 +31,6 @@ #include "pt_sb_session.h" #include "libipt-sb.h" -#include "intel-pt.h" #include <stdlib.h>
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/src/pt_sb_file.c -> _service:tar_scm:v2.1.tar.gz/sideband/src/pt_sb_file.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/src/pt_sb_pevent.c -> _service:tar_scm:v2.1.tar.gz/sideband/src/pt_sb_pevent.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,8 +29,6 @@ #include "libipt-sb.h" -#include "intel-pt.h" - #ifndef FEATURE_PEVENT @@ -352,6 +351,11 @@ priv->tsc_offset = config->tsc_offset; priv->location = ploc_unknown; +#if (LIBIPT_SB_VERSION >= 0x201) + if (pev_config_has(config, sample_config)) + priv->pev.sample_config = config->sample_config; +#endif + return 0; } @@ -880,12 +884,10 @@ if (errcode < 0) return errcode; - /* Print samples if configured. */ - if (priv->pev.sample_type) { - errcode = pt_sb_pevent_print_samples(event, stream, flags); - if (errcode < 0) - return errcode; - } + /* Print samples that were configured for the record. */ + errcode = pt_sb_pevent_print_samples(event, stream, flags); + if (errcode < 0) + return errcode; if (flags) fprintf(stream, "\n"); @@ -1539,6 +1541,88 @@ event->variant.tick.ip); break; + + case ptev_tip: + return ploc_from_ip(loc, priv, event->variant.tip.ip); + +#if (LIBIPT_VERSION >= 0x201) + case ptev_iflags: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.iflags.ip); + + break; + + case ptev_interrupt: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.interrupt.ip); + + break; + + case ptev_iret: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.iret.ip); + + break; + + case ptev_smi: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.smi.ip); + + break; + + case ptev_rsm: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.rsm.ip); + + break; + + case ptev_init: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.init.ip); + + break; + + case ptev_vmentry: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.vmentry.ip); + + break; + + case ptev_vmexit: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.vmexit.ip); + + break; + + case ptev_shutdown: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.shutdown.ip); + + break; + + case ptev_uintr: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.uintr.ip); + + break; + + case ptev_uiret: + if (!event->ip_suppressed) + return ploc_from_ip(loc, priv, + event->variant.uiret.ip); + + break; +#endif } *loc = ploc_unknown; @@ -1637,7 +1721,7 @@ } break; - }; + } return 0; }
View file
_service:tar_scm:v2.0.5.tar.gz/sideband/src/pt_sb_session.c -> _service:tar_scm:v2.1.tar.gz/sideband/src/pt_sb_session.c
Changed
@@ -1,5 +1,6 @@ /* - * Copyright (c) 2017-2022, Intel Corporation + * Copyright (c) 2017-2023, Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -31,7 +32,6 @@ #include "pt_sb_decoder.h" #include "libipt-sb.h" -#include "intel-pt.h" #include <string.h> #include <stdlib.h>
View file
_service:tar_scm:v2.0.5.tar.gz/test/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/test/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/CMakeLists.txt -> _service:tar_scm:v2.1.tar.gz/test/pevent/CMakeLists.txt
Changed
@@ -1,4 +1,5 @@ -# Copyright (c) 2015-2022, Intel Corporation +# Copyright (c) 2015-2023, Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-comm_exec-mmap-tsc-iret.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-comm_exec-mmap-tsc-iret.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-dump.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-dump.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-dump_verbose.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-dump_verbose.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-fork.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-fork.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-mmap-tip_cached.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-mmap-tip_cached.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-mmap_secondary-tsc.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-mmap_secondary-tsc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-split.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-split.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-tip_pgd-comm_exec-mmap-tsc-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-tip_pgd-comm_exec-mmap-tsc-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-tip_pgd-mmap-tsc-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-tip_pgd-mmap-tsc-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-tip_pgd-switch-tsc-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-tip_pgd-switch-tsc-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-tip_pgd-switch_cpu_wide-tsc-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-tip_pgd-switch_cpu_wide-tsc-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -30,7 +31,7 @@ ; timing is off - delay the event application ; ; opt:ptdump --sb:compact --sb:offset -; opt:ptxed --event:tick --sb:compact --sb:offset --sb:switch +; opt:ptxed --event:tick --event:iflags --sb:compact --sb:offset --sb:switch ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/pevent/src/pevent-warn.ptt -> _service:tar_scm:v2.1.tar.gz/test/pevent/src/pevent-warn.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/apl11.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/apl11.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -42,6 +43,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/182 +; cpu 6/175 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/186 +; cpu 6/204 +; cpu 6/221 ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/apl12-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/apl12-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/apl12-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/apl12-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bad_cpu.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bad_cpu.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bdm64-tip-xabort.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bdm64-tip-xabort.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bdm64-tnt-cond-xabort.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bdm64-tnt-cond-xabort.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bdm64-tnt-ind_call-xabort.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bdm64-tnt-ind_call-xabort.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bdm70-psb_fup-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bdm70-psb_fup-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -55,6 +56,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; ; Variant: sync at the PSB directly preceding the TIP.PGE. ;
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/bdm70-tip_pgd-psb_fup-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/bdm70-tip_pgd-psb_fup-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -55,6 +56,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; ; Variant: sync at an earlier PSB. ;
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_direct-ret_compressed-pic.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_direct-ret_compressed-pic.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_direct-ret_compressed.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_direct-ret_compressed.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_direct-ret_uncompressed.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_direct-ret_uncompressed.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_indirect-ret_compressed.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_indirect-ret_compressed.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_indirect-ret_uncompressed.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_indirect-ret_uncompressed.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/call_indirect_deferred-ret_compressed.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/call_indirect_deferred-ret_compressed.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/cbr-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/cbr-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/cbr-mtc-cyc-mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/cbr-mtc-cyc-mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/cbr-tsc-cyc-tma.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/cbr-tsc-cyc-tma.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/cbr-tsc-tma-mtc-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/cbr-tsc-tma-mtc-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/direct_call-tip_pgd_noip-syscall.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/direct_call-tip_pgd_noip-syscall.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/direct_jump-tip_pgd_noip-far_call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/direct_jump-tip_pgd_noip-far_call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/dump-all-packets.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/dump-all-packets.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -85,6 +86,14 @@ ; @pt p52: pwrx(hw: c1, c6) ; @pt p53: ptw(0: 0x90abcdef, ip) ; @pt p54: ptw(1: 0x1234567890abcdef) +; @pt p55: mode.exec(16bit, if) +; @pt p56: mode.exec(32bit, if) +; @pt p57: mode.exec(64bit, if) +; @pt p58: cfe(2) +; @pt p59: cfe(3, ip) +; @pt p60: cfe(3: 0xf0, ip) +; @pt p61: cfe(1: 14) +; @pt p62: evd(2: 0xf00baa) ; @pt .exp(ptdump) ;%0p01 psbend @@ -141,3 +150,11 @@ ;%0p52 pwrx hw: c1, c6 ;%0p53 ptw 0: 90abcdef, ip ;%0p54 ptw 1: 1234567890abcdef +;%0p55 mode.exec if +;%0p56 mode.exec cs.d, if +;%0p57 mode.exec cs.l, if +;%0p58 cfe 2 +;%0p59 cfe 3, ip +;%0p60 cfe 3, ip +;%0p61 cfe 1: 14 +;%0p62 evd 2: f00baa
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/exstop_ip-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/exstop_ip-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-pip-vmcs-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-pip-vmcs-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-pip-vmcs-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-pip-vmcs-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip-eos.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip-eos.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip_pgd-stop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip_pgd-stop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip_pgd-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip_pgd-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip_pgd-tip_pge_other_ip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip_pgd-tip_pge_other_ip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/fup-tip_pgd_noip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/fup-tip_pgd_noip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/int-iret-cpl_0.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/int-iret-cpl_0.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/int-iret-cpl_3.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/int-iret-cpl_3.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/int-iret.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/int-iret.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/linear-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/linear-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/linear-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/linear-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/loop-tnt-64.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/loop-tnt-64.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/loop-tnt-tnt.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/loop-tnt-tnt.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/loop-tnt.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/loop-tnt.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mode_exec-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mode_exec-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mtc-cyc_calibrate.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mtc-cyc_calibrate.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/test/src/mtc-ovf_keep-cyc.ptt
Added
@@ -0,0 +1,112 @@ +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test MTC and CYC-based timing and OVF. +; +; Variant: calibration preserved on OVF. +; +; opt:ptdump --time --time-delta --keep-tcal-on-ovf +; opt:ptdump --mtc-freq 4 --cpuid-0x15.eax 1 --cpuid-0x15.ebx 4 +; +; opt:ptxed --event:tick --event:time +; opt:ptxed --mtc-freq 4 --cpuid-0x15.eax 1 --cpuid-0x15.ebx 4 +; opt:ptxed --insn:keep-tcal-on-ovf --block:keep-tcal-on-ovf + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: mode.exec(64bit) +; @pt p2: fup(3: %l0) +; @pt p3: tsc(0x1000) +; @pt p4: tma(0x10, 0x40) +; @pt p5: psbend() +l0: nop + +; @pt p6: mtc(0x2) +; @pt p7: cyc(0x100) +; @pt p8: mtc(0x3) + +; @pt p9: cyc(0x80) +; @pt p10: tnt(t) +l1: jne l3 +l2: hlt + +; @pt p11: cyc(0x80) +; @pt p12: mtc(0x4) + +; @pt p13: ovf() +; @pt p14: fup(3: %l3) +l3: nop + +; @pt p15: cyc(0x80) +; @pt p16: tnt(t) +l4: jne l6 +l5: hlt + +l6: nop +l7: hlt +; @pt p17: cyc(0x80) +; @pt p18: fup(1: %l7) +; @pt p19: tip.pgd(0: %l7) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 mode.exec cs.l +;%0p2 fup 3: %?l0 +;%0p3 tsc 1000 tsc +1000 +;%0p4 tma 10, 40 tsc +0 +;%0p5 psbend +;%0p6 mtc 2 tsc +0 +;%p7: calibration error: no timing information +;%p7: error updating time: no calibration +;%0p7 cyc 100 tsc +0 +;%0p8 mtc 3 tsc +40 +;%0p9 cyc 80 tsc +20 +;%0p10 tnt.8 ! +;%0p11 cyc 80 tsc +20 +;%0p12 mtc 4 tsc +0 +;%0p13 ovf +;%0p14 fup 3: %?l3 +;%0p15 cyc 80 tsc +20 +;%0p16 tnt.8 ! +;%0p17 cyc 80 tsc +20 +;%0p18 fup 1: %?l7.2 +;%0p19 tip.pgd 0: %?l7.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;%0l1 # jne l3 +;0000000000001060 tick +;0000000000001080 overflow +;%0l3 # nop +;%0l4 # jne l6 +;00000000000010a0 tick +;%0l6 # nop +;00000000000010c0 disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/mtc-ovf_reset-cyc.ptt
Added
@@ -0,0 +1,114 @@ +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test MTC and CYC-based timing and OVF. +; +; Variant: calibration reset on OVF. +; +; opt:ptdump --time --time-delta +; opt:ptdump --mtc-freq 4 --cpuid-0x15.eax 1 --cpuid-0x15.ebx 4 +; +; opt:ptxed --event:tick --event:time +; opt:ptxed --mtc-freq 4 --cpuid-0x15.eax 1 --cpuid-0x15.ebx 4 + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: mode.exec(64bit) +; @pt p2: fup(3: %l0) +; @pt p3: tsc(0x1000) +; @pt p4: tma(0x10, 0x40) +; @pt p5: psbend() +l0: nop + +; @pt p6: mtc(0x2) +; @pt p7: cyc(0x100) +; @pt p8: mtc(0x3) + +; @pt p9: cyc(0x80) +; @pt p10: tnt(t) +l1: jne l3 +l2: hlt + +; @pt p11: cyc(0x80) +; @pt p12: mtc(0x4) + +; @pt p13: ovf() +; @pt p14: fup(3: %l3) +l3: nop + +; @pt p15: cyc(0x80) +; @pt p16: tnt(t) +l4: jne l6 +l5: hlt + +l6: nop +l7: hlt +; @pt p17: cyc(0x80) +; @pt p18: fup(1: %l7) +; @pt p19: tip.pgd(0: %l7) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 mode.exec cs.l +;%0p2 fup 3: %?l0 +;%0p3 tsc 1000 tsc +1000 +;%0p4 tma 10, 40 tsc +0 +;%0p5 psbend +;%0p6 mtc 2 tsc +0 +;%p7: calibration error: no timing information +;%p7: error updating time: no calibration +;%0p7 cyc 100 tsc +0 +;%0p8 mtc 3 tsc +40 +;%0p9 cyc 80 tsc +20 +;%0p10 tnt.8 ! +;%0p11 cyc 80 tsc +20 +;%0p12 mtc 4 tsc +0 +;%0p13 ovf +;%0p14 fup 3: %?l3 +;%p15: calibration error: no timing information +;%p15: error updating time: no calibration +;%0p15 cyc 80 tsc +0 +;%0p16 tnt.8 ! +;%p17: calibration error: no timing information +;%p17: error updating time: no calibration +;%0p17 cyc 80 tsc +0 +;%0p18 fup 1: %?l7.2 +;%0p19 tip.pgd 0: %?l7.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;%0l1 # jne l3 +;0000000000001060 tick +;0000000000001080 overflow +;%0l3 # nop +;%0l4 # jne l6 +;%0l6 # nop +;0000000000001080 disabled
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mwait-pwre-exstop_ip-fup-ovf.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mwait-pwre-exstop_ip-fup-ovf.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mwait-pwre-exstop_ip-ovf.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mwait-pwre-exstop_ip-ovf.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/mwait-pwre-exstop_ip-pwrx.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/mwait-pwre-exstop_ip-pwrx.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-mnt-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-mnt-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-mnt-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-mnt-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-pwre-pwrx-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-pwre-pwrx-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-timing-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-timing-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-timing-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-timing-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ovf.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ovf.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/pip-far_call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/pip-far_call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/pip-pip_mov_cr3-fail.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/pip-pip_mov_cr3-fail.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/pip-vmcs-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/pip-vmcs-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/pip_mov_cr3-pip_mov_cr3.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/pip_mov_cr3-pip_mov_cr3.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-empty.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-empty.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-exstop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-exstop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-fup-psbend.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-fup-psbend.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-fup-tip_pgd-stop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-fup-tip_pgd-stop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-mnt-fup-psbend.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-mnt-fup-psbend.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-mnt-psbend.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-mnt-psbend.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-ovf-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-ovf-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-ovf-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-ovf-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-pip-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-pip-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-pip-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-pip-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-stop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-stop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-tnt-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-tnt-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-tsx.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-tsx.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-tsx_abort-tip-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-tsx_abort-tip-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-tsx_abort-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-tsx_abort-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-tsx_abort.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-tsx_abort.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb-vmcs.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb-vmcs.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/psb_nofup-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/psb_nofup-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -30,32 +31,37 @@ org 0x100000 bits 64 -; @pt p1: psb() -; @pt p2: psbend() - nop +; @pt p0: psb() +; @pt p1: fup(3: %l1) +; @pt p2: mode.exec(64bit) +; @pt p3: psbend() +l1: nop -; @pt p3: psb() -; @pt p4: fup(3: %l2) -; @pt p5: mode.exec(64bit) -; @pt p6: psbend() +; @pt p4: psb() +; @pt p5: fup(3: %l2) +; @pt p6: mode.exec(64bit) +; @pt p7: psbend() l2: nop -; @pt p7: fup(3: %l3) -; @pt p8: tip.pgd(0: 0) +; @pt p8: fup(3: %l3) +; @pt p9: tip.pgd(0: 0) l3: nop ; @pt .exp(ptxed) +;%0l1 # nop ;%0l2 # nop ;disabled ; @pt .exp(ptdump) -;%0p1 psb -;%0p2 psbend -;%0p3 psb -;%0p4 fup 3: %0l2 -;%0p5 mode.exec cs.l -;%0p6 psbend -;%0p7 fup 3: %0l3 -;%0p8 tip.pgd 0: ???????????????? +;%0p0 psb +;%0p1 fup 3: %0l1 +;%0p2 mode.exec cs.l +;%0p3 psbend +;%0p4 psb +;%0p5 fup 3: %0l2 +;%0p6 mode.exec cs.l +;%0p7 psbend +;%0p8 fup 3: %0l3 +;%0p9 tip.pgd 0: ????????????????
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-bad_opc-resync.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-bad_opc-resync.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-exec-mode.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-exec-mode.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-last-ip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-last-ip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-no-offset-raw.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-no-offset-raw.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-no-offset.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-no-offset.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptdump-trunc-resync.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptdump-trunc-resync.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-evd_cr2-cfe_iret.ptt
Added
@@ -0,0 +1,60 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an unexpected EVD is diagnosed at CFE +; +; Variant: EVD.CR2 followed by CFE.IRET +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: hlt + +; @pt p4: evd(0: 0xf00) +; @pt p5: cfe(2) +; @pt p6: fup(1: %l0) +; @pt p7: tip.pgd(0: %l0) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 0: f00 +;%0p5 cfe 2 +;%0p6 fup 1: %?l0.2 +;%0p7 tip.pgd 0: %?l0.0 + + +; @pt .exp(ptxed) +;%p5, 0: error: unexpected packet context
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-evd_cr2-evd_vmxq.ptt
Added
@@ -0,0 +1,62 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an unexpected EVD is diagnosed at EVD +; +; Variant: EVD.CR2 followed by EVD.VMXQ +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: hlt + +; @pt p4: evd(0: 0xf00) +; @pt p5: evd(1: 0) +; @pt p6: cfe(2) +; @pt p7: fup(1: %l0) +; @pt p8: tip.pgd(0: %l0) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 0: f00 +;%0p5 evd 1: 0 +;%0p6 cfe 2 +;%0p7 fup 1: %?l0.2 +;%0p8 tip.pgd 0: %?l0.0 + + +; @pt .exp(ptxed) +;%p5, 0: error: unexpected packet context
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-evd_vmxq-cfe_intr.ptt
Added
@@ -0,0 +1,60 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an unexpected EVD is diagnosed at CFE +; +; Variant: EVD.VMXQ followed by CFE.INTR +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: hlt + +; @pt p4: evd(1: 0) +; @pt p5: cfe(1: 14) +; @pt p6: fup(1: %l0) +; @pt p7: tip.pgd(0: %l0) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 1: 0 +;%0p5 cfe 1: 14 +;%0p6 fup 1: %?l0.2 +;%0p7 tip.pgd 0: %?l0.0 + + +; @pt .exp(ptxed) +;%p5, 0: error: unexpected packet context
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-evd_vmxr-cfe_rsm.ptt
Added
@@ -0,0 +1,60 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an unexpected EVD is diagnosed at CFE +; +; Variant: EVD.VMXR followed by CFE.RSM +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: hlt + +; @pt p4: evd(2: 0) +; @pt p5: cfe(4) +; @pt p6: fup(1: %l0) +; @pt p7: tip.pgd(0: %l0) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 2: 0 +;%0p5 cfe 4 +;%0p6 fup 1: %?l0.2 +;%0p7 tip.pgd 0: %?l0.0 + + +; @pt .exp(ptxed) +;%p5, 0: error: unexpected packet context
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-evd_vmxr-evd-cr2.ptt
Added
@@ -0,0 +1,62 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an unexpected EVD is diagnosed at EVD +; +; Variant: EVD.VMXR followed by EVD.CR2 +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: hlt + +; @pt p4: evd(2: 0) +; @pt p5: evd(0: 0xf00) +; @pt p6: cfe(8) +; @pt p7: fup(1: %l0) +; @pt p8: tip.pgd(0: %l0) + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 2: 0 +;%0p5 evd 0: f00 +;%0p6 cfe 8 +;%0p7 fup 1: %?l0.2 +;%0p8 tip.pgd 0: %?l0.0 + + +; @pt .exp(ptxed) +;%p5, 0: error: unexpected packet context
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-init-sipi.ptt
Added
@@ -0,0 +1,76 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an INIT followed by SIPI are decoded correctly. +; +; Variant: event tracing enabled +; + +org 0x100000 +bits 64 +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: cfe(6) +; @pt p5: fup(1: %l1) +; @pt p6: tip.pgd(0: %l1) +l1: nop + +; @pt p7: cfe(5: 0xce) +; @pt p8: tip.pge(3: %l2) +l2: nop + +; @pt p9: fup(1: %l3) +; @pt p10: tip.pgd(0: %l3) +l3: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 cfe 6 +;%0p5 fup 1: %?l1.2 +;%0p6 tip.pgd 0: %?l1.0 +;%0p7 cfe 5: ce +;%0p8 tip.pge 3: %?l2 +;%0p9 fup 1: %?l3.2 +;%0p10 tip.pgd 0: %?l3.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;init +;disabled +;sipi: ce +;enabled +;%0l2 # nop +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-int-iret-cpl_0.ptt
Added
@@ -0,0 +1,93 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an INT followed by an IRET are decoded correctly. +; +; Variant: event tracing enabled, cpl-0 tracing +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: evd(0: 0xf00baa) +; @pt p5: cfe(1: 14) +; @pt p6: tip.pge(3: %l5) +; ... +; @pt p7: cfe(2, ip) +; @pt p8: fup(1: %l5) +; @pt p9: tip.pgd(0: %l1) +l1: mov rax, rbx + +; @pt p10: cfe(1: 0x80) +; @pt p11: tip.pge(3: %l7) +; ... +; @pt p12: cfe(2, ip) +; @pt p13: fup(1: %l7) +; @pt p14: tip.pgd(0: %l3) +l2: int 0x80 +l3: nop + +l5: iret +l6: hlt + +l7: iret +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 0: f00baa +;%0p5 cfe 1: 14 +;%0p6 tip.pge 3: %?l5 +;%0p7 cfe 2, ip +;%0p8 fup 1: %?l5.2 +;%0p9 tip.pgd 0: %?l1.0 +;%0p10 cfe 1: 128 +;%0p11 tip.pge 3: %?l7 +;%0p12 cfe 2, ip +;%0p13 fup 1: %?l7.2 +;%0p14 tip.pgd 0: %?l3.0 + + +; @pt .exp(ptxed) +;interrupt 14, cr2: 0000000000f00baa # mov rax, rbx +;enabled +;%0l5 # iret +;iret +;disabled +;interrupt 128 # int 0x80 +;enabled +;%0l7 # iret +;iret +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-int-iret-cpl_3.ptt
Added
@@ -0,0 +1,96 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an INT followed by an IRET are decoded correctly. +; +; Variant: event tracing enabled, cpl-3 tracing +; + +org 0x100000 +bits 64 +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: evd(0: 0xf00baa) +; @pt p5: cfe(1: 14) +; @pt p6: fup(1: %l1) +; @pt p7: tip.pgd(0: %l1) +; ... +; @pt p8: cfe(2) +; @pt p9: tip.pge(3: %l1) +l1: mov rax, rbx + +; @pt p10: cfe(1: 0x80) +; @pt p11: fup(1: %l2) +; @pt p12: tip.pgd(0: %l2) +; ... +; @pt p13: cfe(2) +; @pt p14: tip.pge(3: %l3) +l2: int 0x80 +l3: nop + +; @pt p15: fup(1: %l4) +; @pt p16: tip.pgd(0: %l4) +l4: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 0: f00baa +;%0p5 cfe 1: 14 +;%0p6 fup 1: %?l1.2 +;%0p7 tip.pgd 0: %?l1.0 +;%0p8 cfe 2 +;%0p9 tip.pge 3: %?l1 +;%0p10 cfe 1: 128 +;%0p11 fup 1: %?l2.2 +;%0p12 tip.pgd 0: %?l2.0 +;%0p13 cfe 2 +;%0p14 tip.pge 3: %?l3 +;%0p15 fup 1: %?l4.2 +;%0p16 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;interrupt 14, cr2: 0000000000f00baa # mov rax, rbx +;disabled +;iret +;resumed +;%0l1 # mov rax, rbx +;interrupt 128 # int 0x80 +;disabled +;iret +;enabled +;%0l3 # nop +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-int-iret.ptt
Added
@@ -0,0 +1,104 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an INT followed by an IRET are decoded correctly. +; +; Variant: event tracing enabled +; test that CVE.IRET could be bound to the IRET instruction (artificial) +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: evd(0: 0xf00baa) +; @pt p5: cfe(1: 14) +; @pt p6: fup(1: %l1) +; @pt p7: tip(3: %l5) +; ... +; @pt p8: cfe(2) +; @pt p9: tip(3: %l1) +l1: mov rax, rbx + +; @pt p10: cfe(1: 0x80) +; @pt p11: fup(1: %l2) +; @pt p12: tip(3: %l7) +; ... +; @pt p13: cfe(2) +; @pt p14: tip(3: %l3) +l2: int 0x80 +l3: nop + +; @pt p15: fup(1: %l4) +; @pt p16: tip.pgd(0: %l4) +l4: hlt + +l5: iret +l6: hlt + +l7: iret +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 0: f00baa +;%0p5 cfe 1: 14 +;%0p6 fup 1: %?l1.2 +;%0p7 tip 3: %?l5 +;%0p8 cfe 2 +;%0p9 tip 3: %?l1 +;%0p10 cfe 1: 128 +;%0p11 fup 1: %?l2.2 +;%0p12 tip 3: %?l7 +;%0p13 cfe 2 +;%0p14 tip 3: %?l3 +;%0p15 fup 1: %?l4.2 +;%0p16 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;interrupt 14, cr2: 0000000000f00baa # mov rax, rbx +;interrupt +;%0l5 +;iret +;%0l1 # mov rax, rbx +;interrupt 128 # int 0x80 +;interrupt +;%0l7 +;iret +;%0l3 # nop +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-mode_exec-if.ptt
Added
@@ -0,0 +1,80 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test MODE.EXEC for IF tracing. +; +; opt:ptxed --event:iflags +; + +org 0x1000 +bits 64 + +; @pt p0: psb() +; @pt p1: psbend() + +; @pt p2: mode.exec(64bit) +; @pt p3: tip.pge(3: %l0) +l0: nop + +; @pt p4: mode.exec(64bit, if) +; @pt p5: fup(1: %l2) +l1: sti +l2: nop + +; @pt p6: mode.exec(64bit) +; @pt p7: fup(1: %l4) +l3: cli + +; @pt p8:fup(1: %l4) +; @pt p9:tip.pgd(0: %l4) +l4: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 psbend +;%0p2 mode.exec cs.l +;%0p3 tip.pge 3: %?l0 +;%0p4 mode.exec cs.l, if +;%0p5 fup 1: %?l2.2 +;%0p6 mode.exec cs.l +;%0p7 fup 1: %?l4.2 +;%0p8 fup 1: %?l4.2 +;%0p9 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;enabled +;exec mode: 64-bit +;interrupts disabled +;%0l0 # nop +;%0l1 # sti +;interrupts enabled +;%0l2 # nop +;%0l3 # cli +;interrupts disabled +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-mode_exec-spurious.ptt
Added
@@ -0,0 +1,82 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test spurious MODE.EXEC. +; +; This is an artificial test to ensure that no event decode internal +; events escape to libipt users. +; +; opt:ptxed --event:iflags +; + +org 0x1000 +bits 64 + +; @pt p0: psb() +; @pt p1: mode.exec(64bit) +; @pt p2: psbend() + +; @pt p3: mode.exec(64bit) +; @pt p4: tip.pge(3: %l0) +l0: nop + +; @pt p5: mode.exec(64bit) +; @pt p6: fup(1: %l2) +l1: nop +l2: call rax +l3: hlt + +; @pt p7: mode.exec(64bit) +; @pt p8: tip(1: %l4) +l4: nop + +; @pt p9:fup(1: %l5) +; @pt p10:tip.pgd(0: %l5) +l5: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 mode.exec cs.l +;%0p2 psbend +;%0p3 mode.exec cs.l +;%0p4 tip.pge 3: %?l0 +;%0p5 mode.exec cs.l +;%0p6 fup 1: %?l2.2 +;%0p7 mode.exec cs.l +;%0p8 tip 1: %?l4.2 +;%0p9 fup 1: %?l5.2 +;%0p10 tip.pgd 0: %?l5.0 + + +; @pt .exp(ptxed) +;enabled +;%0l0 # nop +;%0l1 # nop +;%0l2 # call rax +;%0l4 # nop +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-smi-rsm.ptt
Added
@@ -0,0 +1,75 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an SMI followed by an RSM are decoded correctly. +; +; Variant: event tracing enabled +; + +org 0x100000 +bits 64 +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: cfe(3) +; @pt p5: fup(1: %l1) +; @pt p6: tip.pgd(0: %l1) +; ... +; @pt p7: cfe(4) +; @pt p8: tip.pge(3: %l1) +l1: nop + +; @pt p9: fup(1: %l2) +; @pt p10: tip.pgd(0: %l2) +l2: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 cfe 3 +;%0p5 fup 1: %?l1.2 +;%0p6 tip.pgd 0: %?l1.0 +;%0p7 cfe 4 +;%0p8 tip.pge 3: %?l1 +;%0p9 fup 1: %?l2.2 +;%0p10 tip.pgd 0: %?l2.0 + + +; @pt .exp(ptxed) +;%0l0 # nop +;smi +;disabled +;rsm +;resumed +;%0l1 # nop +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-uint-uiret.ptt
Added
@@ -0,0 +1,104 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that an UINTR followed by an UIRET are decoded correctly. +; +; Variant: event tracing enabled +; CVE.UIRET can be bound to UIRET (artificial) +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: cfe(12: 4) +; @pt p5: fup(1: %l1) +; @pt p6: tip(3: %l5) +; ... +; @pt p7: cfe(13, ip) +; @pt p8: fup(1: %l5) +; @pt p9: tip(3: %l1) +l1: nop + +; @pt p10: cfe(12: 5) +; @pt p11: fup(1: %l2) +; @pt p12: tip(3: %l7) +; ... +; @pt p13: cfe(13) +; @pt p14: tip(3: %l3) +l2: nop +l3: nop + +; @pt p15: fup(1: %l4) +; @pt p16: tip.pgd(0: %l4) +l4: hlt + +l5: dd 0xec010ff3; uiret +l6: hlt + +l7: dd 0xec010ff3; uiret +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 cfe 12: 4 +;%0p5 fup 1: %?l1.2 +;%0p6 tip 3: %?l5 +;%0p7 cfe 13, ip +;%0p8 fup 1: %?l5.2 +;%0p9 tip 3: %?l1 +;%0p10 cfe 12: 5 +;%0p11 fup 1: %?l2.2 +;%0p12 tip 3: %?l7 +;%0p13 cfe 13 +;%0p14 tip 3: %?l3 +;%0p15 fup 1: %?l4.2 +;%0p16 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;%0l0 +;uintr 4 +;interrupt +;%0l5 +;uiret +;%0l1 +;uintr 5 +;interrupt +;%0l7 +;uiret +;%0l3 +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-vmexit-vmentry-nonroot.ptt
Added
@@ -0,0 +1,108 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that a VMexit followed by a VMentry are decoded correctly. +; +; Variant: event tracing enabled +; tracing non-root +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: evd(1: 0xf00baa) +; @pt p5: evd(2: 0) +; @pt p6: cfe(9: 14) +; @pt p7: fup(1: %l1) +; @pt p8: tip.pgd(0: %l5) +; ... +; @pt p9: cfe(7) +; @pt p10: tip.pge(3: %l1) +l1: mov rax, rbx + +; @pt p11: evd(2: 10) +; @pt p12: cfe(8) +; @pt p13: fup(1: %l2) +; @pt p14: tip.pgd(0: %l7) +; ... +; @pt p15: cfe(7) +; @pt p16: tip.pge(3: %l3) +l2: cpuid +l3: nop + +; @pt p17: fup(1: %l4) +; @pt p18: tip.pgd(0: %l4) +l4: hlt + +l5: vmresume +l6: hlt + +l7: vmresume +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 1: f00baa +;%0p5 evd 2: 0 +;%0p6 cfe 9: 14 +;%0p7 fup 1: %?l1.2 +;%0p8 tip.pgd 0: %?l5.0 +;%0p9 cfe 7 +;%0p10 tip.pge 3: %?l1 +;%0p11 evd 2: a +;%0p12 cfe 8 +;%0p13 fup 1: %?l2.2 +;%0p14 tip.pgd 0: %?l7.0 +;%0p15 cfe 7 +;%0p16 tip.pge 3: %?l3 +;%0p17 fup 1: %?l4.2 +;%0p18 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;%0l0 +;vmexit, intr: 14, vmxr: 0000000000000000, vmxq: 0000000000f00baa +;disabled +;vmentry +;resumed +;%0l1 +;vmexit, vmxr: 000000000000000a +;disabled +;vmentry +;enabled +;%0l3 +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-vmexit-vmentry-root.ptt
Added
@@ -0,0 +1,88 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that a VMexit followed by a VMentry are decoded correctly. +; +; Variant: event tracing enabled +; tracing root +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() + +; @pt p4: evd(1: 0xf00baa) +; @pt p5: evd(2: 0) +; @pt p6: cfe(9: 14) +; @pt p8: tip.pge(3: %l5) +; ... +; @pt p9: cfe(7) +; @pt p10: tip.pgd(0: %l1) +l1: mov rax, rbx + +; @pt p14: tip.pge(3: %l7) +; ... +; @pt p15: cfe(7) +; @pt p16: tip.pgd(0: %l3) +l2: cpuid +l3: nop + +l5: vmresume +l6: hlt + +l7: vmresume +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 1: f00baa +;%0p5 evd 2: 0 +;%0p6 cfe 9: 14 +;%0p8 tip.pge 3: %?l5 +;%0p9 cfe 7 +;%0p10 tip.pgd 0: %?l1.0 +;%0p14 tip.pge 3: %?l7 +;%0p15 cfe 7 +;%0p16 tip.pgd 0: %?l3.0 + + +; @pt .exp(ptxed) +;vmexit, intr: 14, vmxr: 0000000000000000, vmxq: 0000000000f00baa +;enabled +;%0l5 +;vmentry +;disabled +;enabled +;%0l7 +;vmentry +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet-vmexit-vmentry.ptt
Added
@@ -0,0 +1,107 @@ +; Copyright (c) 2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test that a VMexit followed by a VMentry are decoded correctly. +; +; Variant: event tracing enabled +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: fup(3: %l0) +; @pt p2: mode.exec(64bit, if) +; @pt p3: psbend() +l0: nop + +; @pt p4: evd(1: 0xf00baa) +; @pt p5: evd(2: 0) +; @pt p6: cfe(9: 14) +; @pt p7: fup(1: %l1) +; @pt p8: tip(3: %l5) +; ... +; @pt p9: cfe(7) +; @pt p10: tip(3: %l1) +l1: mov rax, rbx + +; @pt p11: evd(2: 10) +; @pt p12: cfe(8) +; @pt p13: fup(1: %l2) +; @pt p14: tip(3: %l7) +; ... +; @pt p15: cfe(7) +; @pt p16: tip(3: %l3) +l2: cpuid +l3: nop + +; @pt p17: fup(1: %l4) +; @pt p18: tip.pgd(0: %l4) +l4: hlt + +l5: vmresume +l6: hlt + +l7: vmresume +l8: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 fup 3: %0l0 +;%0p2 mode.exec cs.l, if +;%0p3 psbend +;%0p4 evd 1: f00baa +;%0p5 evd 2: 0 +;%0p6 cfe 9: 14 +;%0p7 fup 1: %?l1.2 +;%0p8 tip 3: %?l5 +;%0p9 cfe 7 +;%0p10 tip 3: %?l1 +;%0p11 evd 2: a +;%0p12 cfe 8 +;%0p13 fup 1: %?l2.2 +;%0p14 tip 3: %?l7 +;%0p15 cfe 7 +;%0p16 tip 3: %?l3 +;%0p17 fup 1: %?l4.2 +;%0p18 tip.pgd 0: %?l4.0 + + +; @pt .exp(ptxed) +;%0l0 +;vmexit, intr: 14, vmxr: 0000000000000000, vmxq: 0000000000f00baa +;interrupt +;%0l5 +;vmentry +;%0l1 +;vmexit, vmxr: 000000000000000a +;interrupt +;%0l7 +;vmentry +;%0l3 +;disabled
View file
_service:tar_scm:v2.1.tar.gz/test/src/ptet.ptt
Added
@@ -0,0 +1,179 @@ +; Copyright (c) 2022-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test Event Tracing with BranchEn=0 +; +; We do not stick to a fixed context. The trace contains in-context +; packets as well as context-transition packets in both directions. +; +; opt:ptxed --event:iflags --event:ip +; + +org 0x100000 +bits 64 + +; @pt p0: psb() +; @pt p1: mode.exec(64bit, if) +; @pt p2: psbend() +; @pt p3: mode.exec(32bit) +; @pt p4: fup(3: %l0) +l0: nop +; @pt p5: mode.exec(64bit, if) +; @pt p6: fup(1: %l1) +l1: nop +; @pt p7: evd(0: 0xf00baa) +; @pt p8: cfe(1: 14, ip) +; @pt p9: fup(1: %l2) +l2: nop +; @pt p10: cfe(2) +; @pt p11: cfe(1: 0x80) +; @pt p12: cfe(2, ip) +; @pt p13: fup(1: %l3) +l3: nop +; @pt p14: cfe(3, ip) +; @pt p15: fup(1: %l4) +l4: nop +; @pt p16: cfe(4) +; @pt p17: cfe(6, ip) +; @pt p18: fup(1: %l5) +l5: nop +; @pt p19: cfe(5: 0xce) +; @pt p20: evd(1: 0xf00baa) +; @pt p21: evd(2: 0) +; @pt p22: cfe(9: 14, ip) +; @pt p23: fup(1: %l6) +l6: nop +; @pt p24: cfe(7, ip) +; @pt p25: fup(1: %l6) +; @pt p26: evd(2: 10) +; @pt p27: cfe(8, ip) +; @pt p28: fup(1: %l7) +l7: nop +; @pt p29: cfe(7, ip) +; @pt p30: fup(1: %l8) +l8: nop +; @pt p31: cfe(10, ip) +; @pt p32: fup(1: %l9) +l9: nop +; @pt p33: cfe(12: 4, ip) +; @pt p34: fup(1: %l10) +l10: nop +; @pt p35: cfe(13, ip) +; @pt p36: fup(1: %l11) +l11: nop +; @pt p37: evd(31: 0) +; @pt p38: cfe(1: 128, ip) +; @pt p39: fup(1: %l12) +l12: nop +; @pt p40: evd(31: 0) +; @pt p41: evd(1: 0xf00) +; @pt p42: evd(31: 0) +; @pt p43: evd(2: 0xbaa) +; @pt p44: evd(31: 0) +; @pt p45: cfe(9: 14, ip) +; @pt p46: fup(1: %l13) +l13: nop +; @pt p47: cfe(31, ip) +; @pt p48: fup(1: %l14) +l14: nop +; @pt p49: cfe(31) + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 mode.exec cs.l, if +;%0p2 psbend +;%0p3 mode.exec cs.d +;%0p4 fup 3: %?l0 +;%0p5 mode.exec cs.l, if +;%0p6 fup 1: %?l1.2 +;%0p7 evd 0: f00baa +;%0p8 cfe 1: 14, ip +;%0p9 fup 1: %?l2.2 +;%0p10 cfe 2 +;%0p11 cfe 1: 128 +;%0p12 cfe 2, ip +;%0p13 fup 1: %?l3.2 +;%0p14 cfe 3, ip +;%0p15 fup 1: %?l4.2 +;%0p16 cfe 4 +;%0p17 cfe 6, ip +;%0p18 fup 1: %?l5.2 +;%0p19 cfe 5: ce +;%0p20 evd 1: f00baa +;%0p21 evd 2: 0 +;%0p22 cfe 9: 14, ip +;%0p23 fup 1: %?l6.2 +;%0p24 cfe 7, ip +;%0p25 fup 1: %?l6.2 +;%0p26 evd 2: a +;%0p27 cfe 8, ip +;%0p28 fup 1: %?l7.2 +;%0p29 cfe 7, ip +;%0p30 fup 1: %?l8.2 +;%0p31 cfe 10, ip +;%0p32 fup 1: %?l9.2 +;%0p33 cfe 12: 4, ip +;%0p34 fup 1: %?l10.2 +;%0p35 cfe 13, ip +;%0p36 fup 1: %?l11.2 +;%0p37 evd 31: 0 +;%0p38 cfe 1: 128, ip +;%0p39 fup 1: %?l12.2 +;%0p40 evd 31: 0 +;%0p41 evd 1: f00 +;%0p42 evd 31: 0 +;%0p43 evd 2: baa +;%0p44 evd 31: 0 +;%0p45 cfe 9: 14, ip +;%0p46 fup 1: %?l13.2 +;%0p47 cfe 31, ip +;%0p48 fup 1: %?l14.2 +;%0p49 cfe 31 + + +; @pt .exp(ptxed) +;exec mode: 32-bit, ip: %0l0 +;interrupts disabled, ip: %0l0 +;exec mode: 64-bit, ip: %0l1 +;interrupts enabled, ip: %0l1 +;interrupt 14, cr2: 0000000000f00baa, ip: %0l2 +;iret +;interrupt 128 +;iret, ip: %0l3 +;smi, ip: %0l4 +;rsm +;init, ip: %0l5 +;sipi: ce +;vmexit, intr: 14, vmxr: 0000000000000000, vmxq: 0000000000f00baa, ip: %0l6 +;vmentry, ip: %0l6 +;vmexit, vmxr: 000000000000000a, ip: %0l7 +;vmentry, ip: %0l8 +;shutdown, ip: %0l9 +;uintr 4, ip: %0l10 +;uiret, ip: %0l11 +;interrupt 128, ip: %0l12 +;vmexit, intr: 14, vmxr: 0000000000000baa, vmxq: 0000000000000f00, ip: %0l13
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptw-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptw-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptw.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptw.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-block-stat.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-block-stat.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-block-stat_blocks.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-block-stat_blocks.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_call-fup-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_call-fup-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_call-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_call-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_call-ret_tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_call-ret_tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_call-ret_tnt.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_call-ret_tnt.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_call-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_call-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-end_on_jump-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-end_on_jump-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-insn-stat.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-insn-stat.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-stat_insn.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-stat_insn.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ptxed-tick.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ptxed-tick.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/pwre-exstop_ip-pwrx.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/pwre-exstop_ip-pwrx.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/ret_near_far.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/ret_near_far.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd007.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd007.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -69,8 +70,7 @@ ;%0p0 psb ;%0p1 mode.exec cs.l ;%0p2 fup 3: %?l0 -;%0p3 cyc 3e -;%0p4 cyc 1e +;%0p3 ovf ;%0p5 pad ;%0p6 fup 3: %?l1 ;%0p7 fup 1: %?l2.2
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd010-mode_tsx-fup.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd010-mode_tsx-fup.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd010-psb.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd010-psb.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd010-tip.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd010-tip.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd010-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd010-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skd022.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skd022.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -52,6 +53,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl014-call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl014-call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -56,6 +57,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl014-jmp-jmp.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl014-jmp-jmp.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -56,6 +57,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl014-jmp.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl014-jmp.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -56,6 +57,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; org 0x1000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl014-no_filter.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl014-no_filter.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2017-2022, Intel Corporation +; Copyright (c) 2017-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -47,6 +48,15 @@ ; cpu 6/151 ; cpu 6/154 ; cpu 6/191 +; cpu 6/173 +; cpu 6/174 +; cpu 6/183 +; cpu 6/181 +; cpu 6/170 +; cpu 6/172 +; cpu 6/207 +; cpu 6/186 +; cpu 6/204 ; org 0x100000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl168-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl168-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skl168-mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skl168-mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2018-2022, Intel Corporation +; Copyright (c) 2018-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/skz84.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/skz84.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2020-2022, Intel Corporation +; Copyright (c) 2020-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: @@ -41,6 +42,9 @@ ; cpu 6/106 ; cpu 6/108 ; cpu 6/143 +; cpu 6/173 +; cpu 6/174 +; cpu 6/207 ; org 0x100000
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/syscall-sysret-cpl_0.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/syscall-sysret-cpl_0.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/syscall-sysret-cpl_3.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/syscall-sysret-cpl_3.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/syscall-sysret.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/syscall-sysret.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/sysenter-sysexit-cpl_0.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/sysenter-sysexit-cpl_0.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/sysenter-sysexit-cpl_3.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/sysenter-sysexit-cpl_3.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/sysenter-sysexit.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/sysenter-sysexit.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip-eos.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip-eos.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-direct_call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-direct_call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-direct_jump.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-direct_jump.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-exstop-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-exstop-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-indirect_call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-indirect_call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-indirect_jump.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-indirect_jump.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-mwait-pwre-exstop-pwrx-tip_pge.ptt
Added
@@ -0,0 +1,82 @@ +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; * Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; * Neither the name of Intel Corporation nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +; Test a power event session while tracing is disabled. +; +; Variant: with MWAIT. +; + +org 0x1000 +bits 64 + +; @pt p0: psb() +; @pt p1: mode.exec(64bit) +; @pt p2: fup(3: %l0) +; @pt p3: psbend() +l0: jle l1 +l1: hlt + +; @pt p4: tip.pgd(1: %l1) + +; @pt p5: mwait(7, 1) +; @pt p6: pwre(c1.0) +; @pt p7: exstop() +; @pt p8: pwrx(int: c1, c0) + +; @pt p9: tip.pge(3: %l2) +l2: nop +l3: nop + +; @pt p10:fup(1: %l3) +; @pt p11:tip.pgd(0: %l4) +l4: hlt + + +; @pt .exp(ptdump) +;%0p0 psb +;%0p1 mode.exec cs.l +;%0p2 fup 3: %?l0 +;%0p3 psbend +;%0p4 tip.pgd 1: %?l1.2 +;%0p5 mwait 00000007, 00000001 +;%0p6 pwre c1.0 +;%0p7 exstop +;%0p8 pwrx int: c1, c0 +;%0p9 tip.pge 3: %?l2 +;%0p10 fup 1: %?l3.2 +;%0p11 tip.pgd 0: %?l4.0 + +; @pt .exp(ptxed) +;%0l0 +;disabled +;pwre c1.0 +;mwait 7 1 +;exstop +;pwrx int: c1 (c0) +;enabled +;%0l2 +;disabled
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-pip-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-pip-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-psb-stop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-psb-stop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-stop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-stop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-tnt_not_taken.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-tnt_not_taken.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-tnt_taken.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-tnt_taken.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd-tsx.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd-tsx.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd_noip-far_jump.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd_noip-far_jump.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pgd_noip-mov_cr3.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pgd_noip-mov_cr3.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-exstop.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-exstop.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-fup-tip_pgd-tip_pge.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-fup-tip_pgd-tip_pge.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-ptw-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-ptw-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-ptw-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-ptw-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-pwre-pwrx-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-pwre-pwrx-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-tsx_abort-tip-fup-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-tsx_abort-tip-fup-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tip_pge-tsx_abort-tip_pgd.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tip_pge-tsx_abort-tip_pgd.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tma-reserved_ctc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tma-reserved_ctc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2020-2022, Intel Corporation +; Copyright (c) 2020-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tma-reserved_fc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tma-reserved_fc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2020-2022, Intel Corporation +; Copyright (c) 2020-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tnt-tip_pgd_noip-sysret.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tnt-tip_pgd_noip-sysret.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tnt_n-eos.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tnt_n-eos.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tnt_t-eos.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tnt_t-eos.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/truncated.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/truncated.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-cbr-cyc-tsc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-cbr-cyc-tsc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-cyc_calibrate.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-cyc_calibrate.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-mtc-tma-mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-mtc-tma-mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-cyc-mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-cyc-mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-mtc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-mtc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-no_cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-no_cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-tsc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-cyc-tsc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-cyc_calibrate.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-cyc_calibrate.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cbr-mtc-mtc-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cbr-mtc-mtc-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc-cyc_calibrate.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc-cyc_calibrate.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc-mtc-cyc_calibrate.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc-mtc-cyc_calibrate.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc-tsc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc-tsc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc_absolute.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc_absolute.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc_infreq.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc_infreq.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc_infreq_wrap.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc_infreq_wrap.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc_relative.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc_relative.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma-mtc_wrap.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma-mtc_wrap.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc-tma_zero_fc-cbr-cyc.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc-tma_zero_fc-cbr-cyc.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2016-2022, Intel Corporation +; Copyright (c) 2016-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsc_tma_mtc_gap.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsc_tma_mtc_gap.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsx-abort.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsx-abort.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsx-commit.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsx-commit.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2013-2022, Intel Corporation +; Copyright (c) 2013-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/tsx-no_spurious_commit.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/tsx-no_spurious_commit.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2014-2022, Intel Corporation +; Copyright (c) 2014-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
View file
_service:tar_scm:v2.0.5.tar.gz/test/src/vmcs-far_call.ptt -> _service:tar_scm:v2.1.tar.gz/test/src/vmcs-far_call.ptt
Changed
@@ -1,4 +1,5 @@ -; Copyright (c) 2015-2022, Intel Corporation +; Copyright (c) 2015-2023, Intel Corporation +; SPDX-License-Identifier: BSD-3-Clause ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met:
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2