diff options
Diffstat (limited to 'sideband/internal/include/pt_sb_context.h')
| -rw-r--r-- | sideband/internal/include/pt_sb_context.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/sideband/internal/include/pt_sb_context.h b/sideband/internal/include/pt_sb_context.h new file mode 100644 index 0000000000000..f65b0a470af52 --- /dev/null +++ b/sideband/internal/include/pt_sb_context.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017-2018, 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_SB_CONTEXT_H +#define PT_SB_CONTEXT_H + +#include <stdint.h> + +struct pt_image; + + +/* The ABI of the process. */ +enum pt_sb_abi { + pt_sb_abi_unknown, + pt_sb_abi_x64, + pt_sb_abi_x32, + pt_sb_abi_ia32 +}; + +struct pt_sb_context { + /* The next context in a linear list of process contexts. + * + * I do not expect more than a few processes per tracing session. And + * if we had many processes, we'd also have trace spanning many context + * switches and sideband decode won't be the bottleneck. + * + * This field is owned by the sideband tracing session to which this + * context belongs. + */ + struct pt_sb_context *next; + + /* The memory image of that process. + * + * You must hold a reference to this context as long as @image is used. + */ + struct pt_image *image; + + /* The ABI of the process. + * + * This may be relevant for some but not all sideband formats. + * + * This field is collectively owned by all sideband decoders. + */ + enum pt_sb_abi abi; + + /* We identify processes by their process id. + * + * Intel PT provides CR3 and VMCS Base to identify address-spaces and + * notifies us about changes. But at least on Linux, we don't get the + * CR3 and all sideband records refer to pid/tid, so we're using those. + */ + uint32_t pid; + + /* The number of current users. + * + * We remove a context when the process exits but we keep the context + * object and its image alive as long as they are used. + */ + uint16_t ucount; +}; + +/* Allocate a context. + * + * Allocate a context and an image. The optional @name argument is given to the + * context's image. + * + * The context's use-count is initialized to one. Use pt_sb_ctx_put() to free + * the returned context and its image. + * + * Returns a non-NULL context or NULL when out of memory. + */ +extern struct pt_sb_context *pt_sb_ctx_alloc(const char *name); + +#endif /* PT_SB_CONTEXT_H */ |
