/* sframe-state.h - The SFrame state for stacktracing. Copyright (C) 2023 Free Software Foundation, Inc. This file is part of libsframest. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SFRAME_STATE_H #define SFRAME_STATE_H #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "ansidecl.h" #include "sframe-api.h" #include "sframe-stacktrace-api.h" #include "sframe-stacktrace-regs.h" /* glibc's elf.h will bring this in future. */ #ifndef PT_SFRAME #define PT_SFRAME 0x6474e554 #endif /* SFrame stacktrace data. */ struct sframest_info { /* Reference to the SFrame section in process memory. */ const char *buf; /* Length in bytes of the SFrame section in memory. */ uint64_t buflen; /* Text segment's virtual address. */ uint64_t text_vma; /* Text segment's length in bytes. */ uint64_t text_size; /* SFrame segment's virtual address. */ uint64_t sframe_vma; /* SFrame decoder context. For access to decoded SFrame information. */ sframe_decoder_ctx *dctx; }; /* List of SFrame stacktrace info objects. Typically used to represent SFrame stacktrace info for set of shared libraries of a program. */ struct sframest_info_list { /* Number of entries allocated. */ int alloced; /* Number of entries used. */ int used; /* (Array) List of SFrame stacktrace info objects. */ struct sframest_info *entry; }; /* SFrame stacktracing context. */ struct sframest_ctx { /* File descriptor for the process memory. */ int fd; /* SFrame stacktrace info for program. */ struct sframest_info prog_sfinfo; /* SFrame stacktrace info for its DSOs. */ struct sframest_info_list dsos_sfinfo; }; void sframe_unwind_init_debug (void); int sframe_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED, void *data); bool sframest_sfinfo_addr_range_p (struct sframest_info *sfinfo, uint64_t addr); struct sframest_info *sframest_get_sfinfo (struct sframest_ctx *sf, uint64_t raddr); struct sframest_info *sframe_find_context (struct sframest_ctx *sf, uint64_t addr); void sframe_free_cfi (struct sframest_ctx *sf); #endif /* SFRAME_STATE_H. */