diff --git a/ebpf/Makefile b/ebpf/Makefile index c555590968..c3012a6534 100644 --- a/ebpf/Makefile +++ b/ebpf/Makefile @@ -1,6 +1,6 @@ GO ?= go -RIDESHARE_REPO ?= korniltsev -RIDESHARE="testdata/rideshare-flask-no-pip" +RIDESHARE_REPO ?= pyroscope +RIDESHARE=testdata/rideshare-flask-no-pip ifeq ($(shell uname -s),Linux) ifeq ($(shell uname -m),x86_64) @@ -29,12 +29,12 @@ python/dwarfdump: git submodule update --init --recursive echo "//go:build amd64 && linux" > python/python_offsets_gen_amd64.go - go run cmd/python_dwarfdump/main.go $(shell find testdata/python-x64 -name libpy\*.so\*) \ + go run cmd/python_dwarfdump/main.go $(shell find testdata/python-x64 -name libpy\*.so\* | grep -v pyston) \ $(shell find testdata/python-x64 | grep -E "/python3\\.[0-9]+") >> python/python_offsets_gen_amd64.go go fmt python/python_offsets_gen_amd64.go echo "//go:build arm64 && linux" > python/python_offsets_gen_arm64.go - go run cmd/python_dwarfdump/main.go $(shell find testdata/python-arm64 -name libpy\*.so\*) \ + go run cmd/python_dwarfdump/main.go $(shell find testdata/python-arm64 -name libpy\*.so\* | grep -v pyston) \ $(shell find testdata/python-arm64 | grep -E "/python3\\.[0-9]+") >> python/python_offsets_gen_arm64.go go fmt python/python_offsets_gen_arm64.go @@ -92,16 +92,19 @@ go/test/arm64: ebpf.arm64.test .phony: rideshare/gen rideshare/gen: - git submodule update --init --recursive - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.8-slim --build-arg="PYTHON_VERSION=3.8-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.9-slim --build-arg="PYTHON_VERSION=3.9-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.10-slim --build-arg="PYTHON_VERSION=3.10-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.11-slim --build-arg="PYTHON_VERSION=3.11-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.12-slim --build-arg="PYTHON_VERSION=3.12-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.13-rc-slim --build-arg="PYTHON_VERSION=3.13-rc-slim" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.8-alpine --build-arg="PYTHON_VERSION=3.8-alpine" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.9-alpine --build-arg="PYTHON_VERSION=3.9-alpine" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.10-alpine --build-arg="PYTHON_VERSION=3.10-alpine" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.11-alpine --build-arg="PYTHON_VERSION=3.11-alpine" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.12-alpine --build-arg="PYTHON_VERSION=3.12-alpine" $(RIDESHARE) - docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.13-rc-alpine --build-arg="PYTHON_VERSION=3.13-rc-alpine" $(RIDESHARE) \ No newline at end of file +# git submodule update --init --recursive +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.8-slim --build-arg="PYTHON_VERSION=3.8-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.9-slim --build-arg="PYTHON_VERSION=3.9-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.10-slim --build-arg="PYTHON_VERSION=3.10-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.11-slim --build-arg="PYTHON_VERSION=3.11-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.12-slim --build-arg="PYTHON_VERSION=3.12-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.13-rc-slim --build-arg="PYTHON_VERSION=3.13-rc-slim" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.8-alpine --build-arg="PYTHON_VERSION=3.8-alpine" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.9-alpine --build-arg="PYTHON_VERSION=3.9-alpine" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.10-alpine --build-arg="PYTHON_VERSION=3.10-alpine" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.11-alpine --build-arg="PYTHON_VERSION=3.11-alpine" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.12-alpine --build-arg="PYTHON_VERSION=3.12-alpine" $(RIDESHARE) +# docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:3.13-rc-alpine --build-arg="PYTHON_VERSION=3.13-rc-alpine" $(RIDESHARE) + docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:ubuntu-18.04 --build-arg="BASE=ubuntu:18.04" --build-arg="FLASK_VERSION=2.0.3" -f $(RIDESHARE)/ubuntu.Dockerfile $(RIDESHARE) + docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:ubuntu-20.04 --build-arg="BASE=ubuntu:20.04" --build-arg="FLASK_VERSION=3.0.3" -f $(RIDESHARE)/ubuntu.Dockerfile $(RIDESHARE) + docker buildx build --platform=linux/amd64,linux/arm64 --push -t $(RIDESHARE_REPO)/ebpf-testdata-rideshare:ubuntu-22.04 --build-arg="BASE=ubuntu:22.04" --build-arg="FLASK_VERSION=3.0.3" -f $(RIDESHARE)/ubuntu.Dockerfile $(RIDESHARE) \ No newline at end of file diff --git a/ebpf/bpf/profile.bpf.c b/ebpf/bpf/profile.bpf.c index e430835e91..5b06a4b6ee 100644 --- a/ebpf/bpf/profile.bpf.c +++ b/ebpf/bpf/profile.bpf.c @@ -5,7 +5,6 @@ #include "bpf_tracing.h" #include "profile.bpf.h" #include "pid.h" -#include "ume.h" #define PF_KTHREAD 0x00200000 @@ -28,12 +27,10 @@ int do_perf_event(struct bpf_perf_event_data *ctx) { return 0; } int flags = 0; - if (pyro_bpf_core_read(&flags, sizeof(flags), &task->flags)) { - bpf_dbg_printk("failed to read task->flags\n"); + if (bpf_core_read(&flags, sizeof(flags), &task->flags)) { return 0; } if (flags & PF_KTHREAD) { - bpf_dbg_printk("skipping kthread %d\n", tgid); return 0; } @@ -46,7 +43,6 @@ int do_perf_event(struct bpf_perf_event_data *ctx) { .padding_ = 0 }; if (bpf_map_update_elem(&pids, &tgid, &unknown, BPF_NOEXIST)) { - bpf_dbg_printk("failed to update pids map. probably concurrent update\n"); return 0; } struct pid_event event = { @@ -123,4 +119,22 @@ int BPF_KPROBE(exec, void *_) { return 0; } +//// sched_process_exit +//SEC("kprobe/sched_process_exit") +//int BPF_KPROBE(sched_process_exit, struct task_struct *task) { +// u32 pid = 0; +// bpf_core_read(&pid, sizeof(pid), &task->pid); +// bpf_printk("sched_process_exit pid=%d\n", pid); +// return 0; +//} +// +//// kernel_clone_args +//SEC("kprobe/kernel_clone") +//int BPF_KPROBE(kernel_clone, struct kernel_clone_args *args) { +// u32 pid = 0; +// bpf_core_read(&pid, sizeof(pid), &args->child_tid); +// bpf_printk("kernel_clone pid=%d\n", pid); +// return 0; +//} + char _license[] SEC("license") = "GPL"; diff --git a/ebpf/bpf/profile.bpf.h b/ebpf/bpf/profile.bpf.h index 6f22c97814..fd2f159950 100644 --- a/ebpf/bpf/profile.bpf.h +++ b/ebpf/bpf/profile.bpf.h @@ -17,18 +17,6 @@ struct pid_config { uint8_t padding_; }; -#define OP_REQUEST_UNKNOWN_PROCESS_INFO 1 -#define OP_PID_DEAD 2 -#define OP_REQUEST_EXEC_PROCESS_INFO 3 - -struct pid_event { - uint32_t op; - uint32_t pid; -}; -struct pid_event e__; - - - @@ -40,11 +28,6 @@ struct { } pids SEC(".maps"); -struct { - __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); - __uint(key_size, sizeof(u32)); - __uint(value_size, sizeof(u32)); -} events SEC(".maps"); struct { diff --git a/ebpf/bpf/pthread_amd64.h b/ebpf/bpf/pthread_amd64.h index 222bf00ac9..4085b1f07d 100644 --- a/ebpf/bpf/pthread_amd64.h +++ b/ebpf/bpf/pthread_amd64.h @@ -7,7 +7,7 @@ #include "vmlinux.h" #include "bpf_helpers.h" -#include "ume.h" +#include "bpf_core_read.h" #include "pyoffsets.h" @@ -15,10 +15,10 @@ #error "Wrong architecture" #endif -static int pthread_getspecific_musl(const struct libc *libc, int32_t key, void **out, const void *tls_base); -static int pthread_getspecific_glibc(const struct libc *libc, int32_t key, void **out, const void *tls_base); +static int pthread_getspecific_musl(void *ctx, const struct libc *libc, int32_t key, void **out, const void *fsbase); +static int pthread_getspecific_glibc(void *ctx, const struct libc *libc, int32_t key, void **out, const void *fsbase); -static __always_inline int pyro_pthread_getspecific(struct libc *libc, int32_t key, void **out) { +static __always_inline int pyro_pthread_getspecific(void *ctx, struct libc *libc, int32_t key, void **out) { if (key == -1) { return -1; } @@ -27,40 +27,46 @@ static __always_inline int pyro_pthread_getspecific(struct libc *libc, int32_t k return -1; } void *tls_base = NULL; + short unsigned int fsindex = 0; - - if (pyro_bpf_core_read(&tls_base, sizeof(tls_base), &task->thread.fsbase)) { + log_debug("pyro_pthread_getspecific(amd64) key=%d pthread_size=%llx o_pthread_specific1stblock=%llx", key, libc->pthread_size, libc->pthread_specific1stblock); + if (bpf_core_read(&tls_base, sizeof(tls_base), &task->thread.fsbase)) { + log_error("pyro_pthread_getspecific(amd64) failed to read fsbase"); + return -1; + } + if (bpf_core_read(&fsindex, sizeof(fsindex), &task->thread.fsindex)) { + log_error("pyro_pthread_getspecific(amd64) failed to read fsindex"); return -1; } + log_debug("pyro_pthread_getspecific(amd64) fsbase = 0x%llx fsindex = 0x%x musl=%d", tls_base, fsindex, libc->musl); if (libc->musl) { - return pthread_getspecific_musl(libc, key, out, tls_base); + return pthread_getspecific_musl(ctx, libc, key, out, tls_base); } - return pthread_getspecific_glibc(libc, key, out, tls_base); + return pthread_getspecific_glibc(ctx, libc, key, out, tls_base); } -static __always_inline int pthread_getspecific_glibc(const struct libc *libc, int32_t key, void **out, const void *tls_base) { - void *tmp = NULL; +static __always_inline int pthread_getspecific_glibc(void *ctx, const struct libc *libc, int32_t key, void **out, const void *fsbase) { + void *tmp[2] = {NULL, NULL}; if (key >= 32) { return -1; // it is possible to implement this branch, but it's not needed as autoTLSkey is almost always 0 } + void *thread_self = NULL; + try_read(thread_self, fsbase + 0x10); + log_debug("pthread_getspecific_glibc(amd64) thread_self=%llx", thread_self); // This assumes autoTLSkey < 32, which means that the TLS is stored in // pthread->specific_1stblock[autoTLSkey] - if (bpf_probe_read_user( - &tmp, - sizeof(tmp), - tls_base + libc->pthread_specific1stblock + key * 0x10 + 0x08)) { - return -1; - } - *out = tmp; + try_read(tmp, thread_self + libc->pthread_specific1stblock + key * 0x10) + log_debug("pthread_getspecific_glibc(amd64) res=%llx %llx", tmp[0], tmp[1]); + *out = tmp[1]; return 0; } -static __always_inline int pthread_getspecific_musl(const struct libc *libc, int32_t key, void **out, - const void *tls_base) { +static __always_inline int pthread_getspecific_musl(void *ctx, const struct libc *libc, int32_t key, void **out, + const void *fsbase) { // example from musl 1.2.4 from alpine 3.18 // static void *__pthread_getspecific(pthread_key_t k) // { @@ -85,16 +91,12 @@ static __always_inline int pthread_getspecific_musl(const struct libc *libc, int // 56409: 48 8b 04 f8 mov rax,QWORD PTR [rax+rdi*8] // 5640d: c3 ret void *tmp = NULL; - - if (bpf_probe_read_user(&tmp,sizeof(tmp), tls_base)) { - return -1; - } - if (bpf_probe_read_user(&tmp, sizeof(tmp), tmp + libc->pthread_specific1stblock)) { - return -1; - } - if (bpf_probe_read_user(&tmp, sizeof(tmp), tmp + key * 0x8)) { - return -1; - } + try_read(tmp, fsbase) + log_debug("pthread_getspecific_musl(amd64) tmp=%llx", tmp); + try_read(tmp, tmp + libc->pthread_specific1stblock) + log_debug("pthread_getspecific_musl(amd64) tmp2=%llx", tmp); + try_read(tmp, tmp + key * 0x8) + log_debug("pthread_getspecific_musl(amd64) res=%llx", tmp); *out = tmp; return 0; } diff --git a/ebpf/bpf/pthread_arm64.h b/ebpf/bpf/pthread_arm64.h index da2a77f028..df334afeff 100644 --- a/ebpf/bpf/pthread_arm64.h +++ b/ebpf/bpf/pthread_arm64.h @@ -7,17 +7,17 @@ #include "vmlinux.h" #include "bpf_helpers.h" -#include "ume.h" +#include "bpf_core_read.h" #include "pyoffsets.h" #if !defined(__TARGET_ARCH_arm64) #error "Wrong architecture" #endif -static int pthread_getspecific_musl(const struct libc *libc, int32_t key, void **out, const void *tls_base); -static int pthread_getspecific_glibc(const struct libc *libc, int32_t key, void **out, const void *tls_base); +static int pthread_getspecific_musl(void *ctx, const struct libc *libc, int32_t key, void **out, const void *tls_base); +static int pthread_getspecific_glibc(void *ctx, const struct libc *libc, int32_t key, void **out, const void *tls_base); -static __always_inline int pyro_pthread_getspecific(struct libc *libc, int32_t key, void **out) { +static __always_inline int pyro_pthread_getspecific(void *ctx, struct libc *libc, int32_t key, void **out) { if (key == -1) { return -1; } @@ -26,22 +26,24 @@ static __always_inline int pyro_pthread_getspecific(struct libc *libc, int32_t k return -1; } void *tls_base = NULL; - - if (pyro_bpf_core_read(&tls_base, sizeof(tls_base), &task->thread.uw.tp_value)) { + log_debug("pyro_pthread_getspecific(arm64) key=%d pthread_size=%llx o_pthread_specific1stblock=%llx", key, libc->pthread_size, libc->pthread_specific1stblock); + if (bpf_core_read(&tls_base, sizeof(tls_base), &task->thread.uw.tp_value)) { + log_error("pyro_pthread_getspecific(arm64) failed to read task->thread.uw.tp_value"); return -1; } + log_debug("pyro_pthread_getspecific(arm64) tls_base=%llx musl=%d", tls_base, libc->musl); if (libc->musl) { - return pthread_getspecific_musl(libc, key, out, tls_base); + return pthread_getspecific_musl(ctx, libc, key, out, tls_base); } else { - return pthread_getspecific_glibc(libc, key, out, tls_base); + return pthread_getspecific_glibc(ctx, libc, key, out, tls_base); } return 0; } -int __always_inline pthread_getspecific_glibc(const struct libc *libc, int32_t key, void **out, const void *tls_base) { +int __always_inline pthread_getspecific_glibc(void *ctx, const struct libc *libc, int32_t key, void **out, const void *tls_base) { void *res = NULL; if (key >= 32) { return -1; // it is possible to implement this branch, but it's not needed as autoTLSkey is almost always 0 @@ -53,17 +55,15 @@ int __always_inline pthread_getspecific_glibc(const struct libc *libc, int32_t k tls_base -= libc->pthread_size; - if (bpf_probe_read_user( - &res, - sizeof(res), - tls_base + libc->pthread_specific1stblock + key * 0x10 + 0x08)) { - return -1; - } + try_read( + res, + tls_base + libc->pthread_specific1stblock + key * 0x10 + 0x08) + log_debug("pthread_getspecific_glibc(arm64) res=%llx", res); *out = res; return 0; } -int __always_inline pthread_getspecific_musl(const struct libc *libc, int32_t key, void **out, const void *tls_base) { +int __always_inline pthread_getspecific_musl(void *ctx, const struct libc *libc, int32_t key, void **out, const void *tls_base) { // example from musl 1.2.4 from alpine 3.18 // static void *__pthread_getspecific(pthread_key_t k) @@ -80,12 +80,9 @@ int __always_inline pthread_getspecific_musl(const struct libc *libc, int32_t ke // 5fc5c: f8605820 ldr x0, [x1, w0, uxtw #3] // 5fc60: d65f03c0 ret void *tmp; - if (bpf_probe_read_user(&tmp,sizeof(tmp), tls_base - libc->pthread_size + libc->pthread_specific1stblock)) { - return -1; - } - if (bpf_probe_read_user(&tmp, sizeof(tmp), tmp + key * 0x8)) { - return -1; - } + try_read (tmp, tls_base - libc->pthread_size + libc->pthread_specific1stblock) + try_read(tmp, tmp + key * 0x8) + log_debug("pthread_getspecific_musl(arm64) res=%llx", tmp); *out = tmp; return 0; } diff --git a/ebpf/bpf/pyoffsets.h b/ebpf/bpf/pyoffsets.h index 195da7fcb7..46ad0528f1 100644 --- a/ebpf/bpf/pyoffsets.h +++ b/ebpf/bpf/pyoffsets.h @@ -5,6 +5,29 @@ #ifndef PYROEBPF_PYOFFSETS_H #define PYROEBPF_PYOFFSETS_H +#include "stacks.h" + + +#define try_read(dst, src) \ + {if (bpf_probe_read_user(&(dst), sizeof((dst)), (src))) { \ + log_error("read failed %llx (%s : %d)", (src), __FILE__, __LINE__); \ + submit_fault_event(ctx, (src)); \ + return -1; \ + }} + +#define try(code) \ + {if ((code)) { \ + log_error("try failed %s : %d", __FILE__, __LINE__); \ + return -1; \ + }} + + +#define PYTHON_STACK_FRAMES_PER_PROG 32 +#define PYTHON_STACK_PROG_CNT 3 +#define PYTHON_STACK_MAX_LEN (PYTHON_STACK_FRAMES_PER_PROG * PYTHON_STACK_PROG_CNT) +#define PYTHON_CLASS_NAME_LEN 32 +#define PYTHON_FUNCTION_NAME_LEN 64 +#define PYTHON_FILE_NAME_LEN 128 enum frame_owner { @@ -28,6 +51,8 @@ typedef struct { int16_t PyCodeObject_co_name; int16_t PyCodeObject_co_varnames; int16_t PyCodeObject_co_localsplusnames; + int16_t PyCodeObject_co_nlocals; + int16_t PyTupleObject_ob_item; int16_t PyVarObject_ob_size; @@ -43,4 +68,76 @@ typedef struct { } py_offset_config; +typedef struct { + int64_t PyCode_Type; + int64_t PyFrame_Type; + int64_t PyBytes_Type; + int64_t PyUnicode_Type; + int64_t PyType_Type; + int64_t PyDict_Type; + int64_t PyNone_Type; + int64_t PyModule_Type; + int64_t PyTuple_Type; + + int64_t o_PyThreadState_dict; + int64_t o_PyThreadState_interp; + int64_t size_PyThreadState; + int64_t o_PyInterpreterState_tstate_head; + int64_t o_PyInterpreterState_finalizing; + int64_t o_PyInterpreterState_modules; + int64_t o_PyInterpreterState_importlib; + int64_t size_PyInterpreterState; +} py_typecheck_data; + + +typedef uint32_t py_symbol_id; + +typedef struct { + struct sample_key k; + uint32_t stack_len; + // instead of storing symbol name here directly, we add it to another + // hashmap with Symbols and only store the ids here + py_symbol_id stack[PYTHON_STACK_MAX_LEN]; +} py_event; + +struct py_str_type { + uint8_t type; + uint8_t size_codepoints; +} ; + +typedef struct { + uint32_t major; + uint32_t minor; + uint32_t patch; +} py_version; + +typedef struct { + char classname[PYTHON_CLASS_NAME_LEN]; + char name[PYTHON_FUNCTION_NAME_LEN]; + char file[PYTHON_FILE_NAME_LEN]; + + struct py_str_type classname_type; + struct py_str_type name_type; + struct py_str_type file_type; + struct py_str_type __padding; + + // NOTE: PyFrameObject also has line number but it is typically just the + // first line of that function and PyCode_Addr2Line needs to be called + // to get the actual line +} py_symbol; + +typedef struct { + int64_t symbol_counter; + py_offset_config offsets; + py_typecheck_data typecheck; + py_version version; + uint32_t cur_cpu; + uint64_t frame_ptr; + int64_t python_stack_prog_call_cnt; + py_symbol sym; + py_event event; + uint64_t padding;// satisfy verifier for hash function +} py_sample_state_t; + + #endif //PYROEBPF_PYOFFSETS_H diff --git a/ebpf/bpf/pyperf.bpf.c b/ebpf/bpf/pyperf.bpf.c index f04ad5e61f..962b67efba 100644 --- a/ebpf/bpf/pyperf.bpf.c +++ b/ebpf/bpf/pyperf.bpf.c @@ -4,6 +4,19 @@ #include "vmlinux.h" #include "bpf_helpers.h" +struct global_config_t { + uint8_t bpf_log_err; + uint8_t bpf_log_debug; + uint8_t typecheck; + uint64_t ns_pid_ino; +}; + +const volatile struct global_config_t global_config; +#define log_error(fmt, ...) if (global_config.bpf_log_err) bpf_printk("[pyperf *error*] " fmt, ##__VA_ARGS__) +#define log_debug(fmt, ...) if (global_config.bpf_log_debug) bpf_printk("[pyperf debug ] "fmt, ##__VA_ARGS__) + + + #include "pthread.bpf.h" #include "pid.h" #include "stacks.h" @@ -11,17 +24,12 @@ #include "pyoffsets.h" #include "hash.h" -#define PYTHON_STACK_FRAMES_PER_PROG 32 -#define PYTHON_STACK_PROG_CNT 3 -#define PYTHON_STACK_MAX_LEN (PYTHON_STACK_FRAMES_PER_PROG * PYTHON_STACK_PROG_CNT) -#define PYTHON_CLASS_NAME_LEN 32 -#define PYTHON_FUNCTION_NAME_LEN 64 -#define PYTHON_FILE_NAME_LEN 128 + enum { PY_ERROR_GENERIC = 1, PY_ERROR_THREAD_STATE = 2, - PY_ERROR_THREAD_STATE_NULL = 3, +// PY_ERROR_THREAD_STATE_NULL = 3, PY_ERROR_TOP_FRAME = 4, PY_ERROR_FRAME_CODE = 5, PY_ERROR_FRAME_PREV = 6, @@ -33,59 +41,39 @@ enum { PY_ERROR_NAME = 12, PY_ERROR_FRAME_OWNER = 13, PY_ERROR_FRAME_OWNER_INVALID = 14, + PY_ERROR_FRAME_TYPECHECK = 15, + PY_ERROR_CODE_TYPECHECK = 16, + PY_ERROR_RESERVED2 = 17, + PY_ERROR__RESERVED3 = 18, - + __PY_ERROR_TOTAL_NUMBER_OF_ERRORS = 19, // not an error }; -struct global_config_t { - uint8_t bpf_log_err; - uint8_t bpf_log_debug; - uint64_t ns_pid_ino; +struct error_stats { + uint32_t errors[__PY_ERROR_TOTAL_NUMBER_OF_ERRORS]; }; -const volatile struct global_config_t global_config; -#define log_error(fmt, ...) if (global_config.bpf_log_err) bpf_printk(fmt, ##__VA_ARGS__) -#define log_debug(fmt, ...) if (global_config.bpf_log_debug) bpf_printk(fmt, ##__VA_ARGS__) +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(max_entries, 1); + __type(key, u32); + __type(value, struct error_stats); +} py_errors SEC(".maps"); + -typedef struct { - uint32_t major; - uint32_t minor; - uint32_t patch; -} py_version; typedef struct { py_offset_config offsets; + py_typecheck_data typecheck; py_version version; struct libc libc; int32_t tssKey; uint8_t collect_kernel; } py_pid_data; -typedef struct { - char classname[PYTHON_CLASS_NAME_LEN]; - char name[PYTHON_FUNCTION_NAME_LEN]; - char file[PYTHON_FILE_NAME_LEN]; - - struct py_str_type classname_type; - struct py_str_type name_type; - struct py_str_type file_type; - struct py_str_type __padding; - - // NOTE: PyFrameObject also has line number but it is typically just the - // first line of that function and PyCode_Addr2Line needs to be called - // to get the actual line -} py_symbol; -typedef uint32_t py_symbol_id; -typedef struct { - struct sample_key k; - uint32_t stack_len; - // instead of storing symbol name here directly, we add it to another - // hashmap with Symbols and only store the ids here - py_symbol_id stack[PYTHON_STACK_MAX_LEN]; -} py_event; #define _STR_CONCAT(str1, str2) str1##str2 #define STR_CONCAT(str1, str2) _STR_CONCAT(str1, str2) @@ -97,16 +85,7 @@ typedef struct { FAIL_COMPILATION_IF(sizeof(py_symbol) == sizeof(struct bpf_perf_event_value)) FAIL_COMPILATION_IF(HASH_LIMIT != PYTHON_STACK_MAX_LEN * sizeof(py_symbol_id)) -typedef struct { - int64_t symbol_counter; - py_offset_config offsets; - uint32_t cur_cpu; - uint64_t frame_ptr; - int64_t python_stack_prog_call_cnt; - py_symbol sym; - py_event event; - uint64_t padding;// satisfy verifier for hash function -} py_sample_state_t; + struct { __uint(type, BPF_MAP_TYPE_HASH); @@ -138,6 +117,9 @@ struct { __uint(max_entries, 10240); } py_pid_config SEC(".maps"); +#include "pytypecheck.h" + + #define PYTHON_PROG_IDX_READ_PYTHON_STACK 0 int read_python_stack(struct bpf_perf_event_data *ctx); @@ -156,9 +138,10 @@ struct { static __always_inline int get_thread_state( + void *ctx, py_pid_data *pid_data, void **out_thread_state) { - return pyro_pthread_getspecific(&pid_data->libc, pid_data->tssKey, out_thread_state); + return pyro_pthread_getspecific(ctx, &pid_data->libc, pid_data->tssKey, out_thread_state); } static __always_inline int submit_sample( @@ -185,8 +168,17 @@ static __always_inline int submit_sample( } static __always_inline int submit_error_sample( - uint8_t err) { //todo replace with more useful log + uint8_t err) { log_error("pyperf_err: %d\n", err); + uint32_t zero = 0; + struct error_stats *stats = bpf_map_lookup_elem(&py_errors, &zero); + if (stats) { + if (err < __PY_ERROR_TOTAL_NUMBER_OF_ERRORS) { + stats->errors[err]++; + } else { + stats->errors[PY_ERROR_GENERIC]++; // should not happen + } + } return -1; } @@ -204,34 +196,20 @@ static __always_inline py_sample_state_t *get_state() { return -1; /* should never happen */ \ } -static __always_inline int get_top_frame(py_pid_data *pid_data, py_sample_state_t *state, void *thread_state) { +static __always_inline int get_top_frame(void *ctx, py_pid_data *pid_data, py_sample_state_t *state, void *thread_state) { if (pid_data->offsets.PyThreadState_frame == -1) { // >= py311 && <= py312 void *cframe; - if (bpf_probe_read_user( - &cframe, - sizeof(void *), - thread_state + pid_data->offsets.PyThreadState_cframe)) { - return -1; - } + try_read(cframe, thread_state + pid_data->offsets.PyThreadState_cframe) + log_debug("cframe %llx", cframe); if (cframe == 0) { return -1; } - if (bpf_probe_read_user( - &state->frame_ptr, - sizeof(void *), - cframe + pid_data->offsets.PyCFrame_current_frame)) { - return -1; - } + try_read(state->frame_ptr, cframe + pid_data->offsets.PyCFrame_current_frame) return 0; } // < py311 && >= py313 - if (bpf_probe_read_user( - &state->frame_ptr, - sizeof(void *), - thread_state + pid_data->offsets.PyThreadState_frame)) { - return -1; - } + try_read(state->frame_ptr, thread_state + pid_data->offsets.PyThreadState_frame) return 0; } @@ -244,6 +222,10 @@ static __always_inline int pyperf_collect_impl(struct bpf_perf_event_data* ctx, GET_STATE(); state->offsets = pid_data->offsets; +#if defined(PY_TYPECHECK_ENABLED) + state->typecheck = pid_data->typecheck; +#endif + state->version = pid_data->version; state->cur_cpu = bpf_get_smp_processor_id(); state->python_stack_prog_call_cnt = 0; @@ -257,39 +239,61 @@ static __always_inline int pyperf_collect_impl(struct bpf_perf_event_data* ctx, // Read PyThreadState of this Thread from TLS - void *thread_state; - if (get_thread_state(pid_data, &thread_state)) { + void *thread_state = NULL; + if (get_thread_state(ctx, pid_data, &thread_state)) { + return submit_error_sample(PY_ERROR_THREAD_STATE); + } + log_debug("thread_state %llx", thread_state); + if (pytypecheck_thread_state(state, thread_state, /* check_interp= */ true)) { return submit_error_sample(PY_ERROR_THREAD_STATE); } // pre-initialize event struct in case any subprogram below fails event->stack_len = 0; - if (thread_state != 0) { - if (get_top_frame(pid_data, state, thread_state)) { - return submit_error_sample(PY_ERROR_TOP_FRAME); - } - // jump to reading first set of Python frames - bpf_tail_call(ctx, &py_progs, PYTHON_PROG_IDX_READ_PYTHON_STACK); - // we won't ever get here + if (thread_state == 0) { + return 0;// not a python thread or not initialized or finalized thread + } + if (get_top_frame(ctx, pid_data, state, thread_state)) { + return submit_error_sample(PY_ERROR_TOP_FRAME); } - return submit_error_sample(PY_ERROR_THREAD_STATE_NULL); + log_debug("top frame %llx", state->frame_ptr); + if (pytypecheck_frame(state, (void*)state->frame_ptr)) { + return submit_error_sample(PY_ERROR_FRAME_TYPECHECK); + } + // jump to reading first set of Python frames + bpf_tail_call(ctx, &py_progs, PYTHON_PROG_IDX_READ_PYTHON_STACK); + // we won't ever get here + return 0; } SEC("perf_event") int pyperf_collect(struct bpf_perf_event_data *ctx) { - u32 pid; + log_debug(" ================ collect sample ================ "); + u32 pid = 0; current_pid(global_config.ns_pid_ino, &pid); if (pid == 0) { return 0; } +#if defined(__TARGET_ARCH_x86) + + uint64_t pid_tgid = bpf_get_current_pid_tgid(); + u32 hostpid = (u32)(pid_tgid >> 32); + + log_debug("pid %d | %d )", pid, hostpid); + log_debug("userspace=%d cs=0x%x)", ctx->regs.cs == 0x33, ctx->regs.cs); +#elif defined(__TARGET_ARCH_arm64) + +#else +#error "Unknown architecture" +#endif + return pyperf_collect_impl(ctx, (pid_t) pid); } -static __always_inline int check_first_arg(void *code_ptr, - py_offset_config *offsets, - py_symbol *symbol, +static __always_inline int check_first_arg(void *ctx, void *code_ptr, + py_sample_state_t *state, bool *out_first_self, bool *out_first_cls) { // Figure out if we want to parse class name, basically checking the name of @@ -300,61 +304,240 @@ static __always_inline int check_first_arg(void *code_ptr, // out from the code object. void *args_ptr; uint64_t args_size; - if (offsets->PyCodeObject_co_varnames == -1) { - if (bpf_probe_read_user( - &args_ptr, sizeof(void *), code_ptr + offsets->PyCodeObject_co_localsplusnames)) { - return -1; - } + log_debug("check_first_arg"); + + if (state->offsets.PyCodeObject_co_varnames == -1) { // was removed in 3.11 // https://github.com/python/cpython/commit/2bde6827ea4f136297b2d882480b981ff26262b6 + try_read(args_ptr, code_ptr + state->offsets.PyCodeObject_co_localsplusnames) /* tuple mapping offsets to names */ } else { - if (bpf_probe_read_user( - &args_ptr, sizeof(void *), code_ptr + offsets->PyCodeObject_co_varnames)) { - return -1; - } + try_read(args_ptr, code_ptr + state->offsets.PyCodeObject_co_varnames) /* tuple of strings (local variable names) */ } if (args_ptr == 0) { + log_debug("args NULL"); *out_first_self = false; *out_first_cls = false; return 0; } - if (bpf_probe_read_user( - &args_size, sizeof(args_size), args_ptr + offsets->PyVarObject_ob_size)) { - return -1; - } + try(pytypecheck_tuple(state, args_ptr)) + log_debug("args_ptr %llx", args_ptr); + + try_read(args_size, args_ptr + state->offsets.PyVarObject_ob_size) if (args_size < 1) { + log_debug("args empty"); *out_first_self = false; *out_first_cls = false; return 0; } - if (bpf_probe_read_user( - &args_ptr, sizeof(void *), args_ptr + offsets->PyTupleObject_ob_item)) { - return -1; - } - if (pystr_read(args_ptr, offsets, symbol->name, sizeof(symbol->name), &symbol->name_type)) { - return -1; - } + try_read(args_ptr, args_ptr + state->offsets.PyTupleObject_ob_item) + log_debug("ob_item %llx", args_ptr); + uint64_t symbol_name = 0; + struct py_str_type symbol_name_type = {}; + try (pystr_read(ctx, args_ptr, state, (char *)&symbol_name, sizeof(symbol_name), &symbol_name_type)) // compare strings as ints to save instructions char self_str[4] = {'s', 'e', 'l', 'f'}; char cls_str[4] = {'c', 'l', 's', '\0'}; - *out_first_self = *(int32_t *) symbol->name == *(int32_t *) self_str; - *out_first_cls = *(int32_t *) symbol->name == *(int32_t *) cls_str; + *out_first_self = (*(int32_t *) &symbol_name) == *(int32_t *) self_str; + *out_first_cls = (*(int32_t *) &symbol_name) == *(int32_t *) cls_str; + log_debug("first arg %s", &symbol_name); + return 0; +} + +#define IGNORE_NAMES_ERROR 1 + + +static __always_inline int get_code_name(void *ctx, void *code_ptr, + py_sample_state_t *state, + py_symbol *symbol) { + void *pystr_ptr; + + // read PyCodeObject's name into symbol + if (read_user_faulty(ctx, + &pystr_ptr, sizeof(void *), code_ptr + state->offsets.PyCodeObject_co_name)) { + log_error("failed to read co_name at %llx", code_ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("CodErr1"); + *((u64 *) symbol->classname) = 0x31727245646f43; // CodErr1 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_NAME; +#endif + } + if (pystr_read(ctx,pystr_ptr, state, symbol->name, sizeof(symbol->name), &symbol->name_type)) { + log_error("failed to read name at %llx", pystr_ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("CodErr2"); + *((u64 *) symbol->classname) = 0x32727245646f43; // CodErr2 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_NAME; +#endif + } + return 0; +} +static __always_inline int get_file_name(void *ctx, + void *code_ptr, + py_sample_state_t *state, + py_symbol *symbol) { + void *pystr_ptr; + // read PyCodeObject's filename into symbol + if (read_user_faulty(ctx, + &pystr_ptr, sizeof(void *), code_ptr + state->offsets.PyCodeObject_co_filename)) { + log_error("failed to read co_filename at %llx", code_ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("FilErr1"); + *((u64 *) symbol->classname) = 0x317272456c6946; // FilErr1 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_FILE_NAME; +#endif + } + if (pystr_ptr == 0) { + log_error("null file name"); + return 0; + } + if (pystr_read(ctx, pystr_ptr, state, symbol->file, sizeof(symbol->file), &symbol->file_type)) { + log_error("failed to read file name at %llx", pystr_ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("FilErr2"); + *((u64 *) symbol->classname) = 0x327272456c6946; // FilErr2 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_FILE_NAME; +#endif + } + return 0; + +} +static __always_inline int get_class_name(void *ctx, void *cur_frame, + void *code_ptr, + py_sample_state_t *state, + py_symbol *symbol) { + bool first_self = false; + bool first_cls = false; + log_debug("get_names"); + if (check_first_arg(ctx, code_ptr, state, &first_self, &first_cls)) { + +#if defined(IGNORE_NAMES_ERROR) + log_debug("ignore_names_error check_first_arg"); + first_self = false; + first_cls = false; +#else + return -PY_ERROR_FIRST_ARG; +#endif + } + log_debug("first_self %d first_cls %d", first_self, first_cls); + if (!first_self && !first_cls) { + return 0; + } + int co_nlocals = 0; + try_read(co_nlocals, code_ptr + state->offsets.PyCodeObject_co_nlocals) + log_debug("co_nlocals %d", co_nlocals); + if (co_nlocals < 1) { + *((u64 *) symbol->classname) = 0x31736c436f4e; // NoCls1 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; + } + // Read class name from $frame->f_localsplus[0]->ob_type->tp_name. + void *ptr = NULL; + if (read_user_faulty(ctx, + &ptr, sizeof(void *), (void *) (cur_frame + state->offsets.VFrame_localsplus))) { + log_error("failed to read f_localsplus at %llx", cur_frame); +#if defined(IGNORE_NAMES_ERROR) + log_error("ErrCls1"); + *((u64 *) symbol->classname) = 0x31736c43727245; // ErrCls1 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_CLASS_NAME; +#endif + } + log_debug("first local %llx", ptr); + if (ptr) { + if (first_self) { + // we are working with an instance, first we need to get type + if (read_user_faulty(ctx, &ptr, sizeof(void *), ptr + state->offsets.PyObject_ob_type)) { + log_error("failed to read ob_type at %llx", ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("ErrCls2"); + *((u64 *) symbol->classname) = 0x32736c43727245; // ErrCls2 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_CLASS_NAME; +#endif + } + log_debug("ob_type %llx", ptr); + if (ptr == NULL) { + // never seen, added just in case + log_error("NilCls2"); + *((u64 *) symbol->classname) = 0x32736c436c694e; // NilCls2 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; + } + + } + // https://github.com/python/cpython/blob/d73501602f863a54c872ce103cd3fa119e38bac9/Include/cpython/object.h#L106 + if (read_user_faulty(ctx, &ptr, sizeof(void *), ptr + state->offsets.PyTypeObject_tp_name)) { + log_error("failed to read tp_name at %llx", ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("ErrCls3"); + *((u64 *) symbol->classname) = 0x33736c43727245; // ErrCls3 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_CLASS_NAME; +#endif + } + log_debug("tp_name %llx", ptr); + long len = bpf_probe_read_user_str(&symbol->classname, sizeof(symbol->classname), ptr); + if (len < 0) { + submit_fault_event(ctx, (void *) ptr); + log_error("failed to read class name at %llx", ptr); +#if defined(IGNORE_NAMES_ERROR) + log_error("ErrCls4"); + *((u64 *) symbol->classname) = 0x34736c43727245; // ErrCls4 + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + return 0; +#else + return -PY_ERROR_CLASS_NAME; +#endif + } + symbol->classname_type.type = PYSTR_TYPE_UTF8; + symbol->classname_type.size_codepoints = len - 1; + } else { + log_error("NullCls"); + // this happens in rideshare flask example under 3.9.18 + // todo: we should be able to get the class name + // https://github.com/fabioz/PyDev.Debugger/blob/2cf10e3fb2ace33b6ef36d66332c82b62815e856/_pydevd_bundle/pydevd_utils.py#L104 + *((u64 *) symbol->classname) = 0x736c436c6c754e; // NullCls + symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; + symbol->classname_type.size_codepoints = 7; + } return 0; } + // return -PY_ERR_XX on error, 0 on success static __always_inline int get_names( void *cur_frame, void *code_ptr, - py_offset_config *offsets, + py_sample_state_t *state, py_symbol *symbol, void *ctx) { - - bool first_self; - bool first_cls; - if (check_first_arg(code_ptr, offsets, symbol, &first_self, &first_cls)) { - return -PY_ERROR_FIRST_ARG; - } - // We re-use the same py_symbol instance across loop iterations, which means // we will have left-over data in the struct. Although this won't affect // correctness of the result because we have '\0' at end of the strings read, @@ -365,63 +548,15 @@ static __always_inline int get_names( // compilation time using the FAIL_COMPILATION_IF macro. bpf_perf_prog_read_value(ctx, (struct bpf_perf_event_value *) symbol, sizeof(py_symbol)); - // Read class name from $frame->f_localsplus[0]->ob_type->tp_name. - if (first_self || first_cls) { - void *ptr; - if (bpf_probe_read_user( - &ptr, sizeof(void *), (void *) (cur_frame + offsets->VFrame_localsplus))) { - bpf_dbg_printk("failed to read f_localsplus at %x\n", cur_frame + offsets->VFrame_localsplus); - return -PY_ERROR_CLASS_NAME; - } - if (ptr) { - if (first_self) { - // we are working with an instance, first we need to get type - if (bpf_probe_read_user(&ptr, sizeof(void *), ptr + offsets->PyObject_ob_type)) { - bpf_dbg_printk("failed to read ob_type at %x\n", ptr); - return -PY_ERROR_CLASS_NAME; - } - } - // https://github.com/python/cpython/blob/d73501602f863a54c872ce103cd3fa119e38bac9/Include/cpython/object.h#L106 - if (bpf_probe_read_user(&ptr, sizeof(void *), ptr + offsets->PyTypeObject_tp_name)) { - bpf_dbg_printk("failed to read tp_name at %x\n", ptr); - return -PY_ERROR_CLASS_NAME; - } - long len = bpf_probe_read_user_str(&symbol->classname, sizeof(symbol->classname), ptr); - if (len < 0) { - bpf_dbg_printk("failed to read class name at %x\n", ptr); - return -PY_ERROR_CLASS_NAME; - } - symbol->classname_type.type = PYSTR_TYPE_UTF8; - symbol->classname_type.size_codepoints = len - 1; - } else { - // this happens in rideshare flask example under 3.9.18 - // todo: we should be able to get the class name - // https://github.com/fabioz/PyDev.Debugger/blob/2cf10e3fb2ace33b6ef36d66332c82b62815e856/_pydevd_bundle/pydevd_utils.py#L104 - *((u64 *) symbol->classname) = 0x736c436c6c754e; // NullCls - symbol->classname_type.type = PYSTR_TYPE_1BYTE | PYSTR_TYPE_ASCII; - symbol->classname_type.size_codepoints = 7; - } + if (get_class_name(ctx, cur_frame, code_ptr, state, symbol)) { + return -PY_ERROR_CLASS_NAME; } - void *pystr_ptr; - // read PyCodeObject's filename into symbol - if (bpf_probe_read_user( - &pystr_ptr, sizeof(void *), code_ptr + offsets->PyCodeObject_co_filename)) { - return -PY_ERROR_FILE_NAME; - } - if (pystr_ptr == 0) { - return 0; - } - if (pystr_read(pystr_ptr, offsets, symbol->file, sizeof(symbol->file), &symbol->file_type)) { - bpf_dbg_printk("failed to read file name at %x\n", pystr_ptr); + if (get_file_name(ctx, code_ptr, state, symbol)) { return -PY_ERROR_FILE_NAME; } - // read PyCodeObject's name into symbol - if (bpf_probe_read_user( - &pystr_ptr, sizeof(void *), code_ptr + offsets->PyCodeObject_co_name)) { - return -PY_ERROR_NAME; - } - if (pystr_read(pystr_ptr, offsets, symbol->name, sizeof(symbol->name), &symbol->name_type)) { + + if (get_code_name(ctx, code_ptr, state, symbol)) { return -PY_ERROR_NAME; } return 0; @@ -432,11 +567,12 @@ static __always_inline int get_names( // since 311 frame_ptr is pointing to _PyInterpreterFrame // returns -PY_ERR_XXX on error, 1 on success, 0 if no more frames static __always_inline int get_frame_data( - void **frame_ptr, - py_offset_config *offsets, + py_sample_state_t *state, py_symbol *symbol, // ctx is only used to call helper to clear symbol, see documentation below void *ctx) { + void **frame_ptr = (void **) &state->frame_ptr; + py_offset_config *offsets = &state->offsets; void *code_ptr; void *cur_frame = *frame_ptr; if (!cur_frame) { @@ -446,16 +582,18 @@ static __always_inline int get_frame_data( if (offsets->PyInterpreterFrame_owner != -1) { // https://github.com/python/cpython/blob/e7331365b488382d906ce6733ab1349ded49c928/Python/traceback.c#L991 char owner = 0; - if (bpf_probe_read_user( + if (read_user_faulty(ctx, &owner, sizeof(owner), (void *) (cur_frame + offsets->PyInterpreterFrame_owner))) { return -PY_ERROR_FRAME_OWNER; } + log_debug("frame owner %llx", owner); if (owner == FRAME_OWNED_BY_CSTACK) { - if (bpf_probe_read_user( + if (read_user_faulty(ctx, frame_ptr, sizeof(void *), (void *) (cur_frame + offsets->VFrame_previous))) { return -PY_ERROR_FRAME_PREV; } cur_frame = *frame_ptr; + log_debug("frame %llx", cur_frame); if (!cur_frame) { return 0; } @@ -466,22 +604,30 @@ static __always_inline int get_frame_data( } } // read PyCodeObject first, if that fails, then no point reading next frame - if (bpf_probe_read_user( + if (read_user_faulty(ctx, &code_ptr, sizeof(void *), (void *) (cur_frame + offsets->VFrame_code))) { return -PY_ERROR_FRAME_CODE; } + log_debug("code %llx", code_ptr); if (!code_ptr) { return 0; // todo learn when this happens, c extension? } + if (pytypecheck_code(state, (void*)code_ptr, (void*)cur_frame)) { + return -PY_ERROR_CODE_TYPECHECK; + } - int res = get_names(cur_frame, code_ptr, offsets, symbol, ctx); + int res = get_names(cur_frame, code_ptr, state, symbol, ctx); if (res < 0) { return res; } + log_debug("sym name %s", symbol->name); + log_debug("sym file %s", symbol->file); + log_debug("sym cls %s", symbol->classname); // read next PyFrameObject/PyInterpreterFrame pointer, update in place - if (bpf_probe_read_user( + if (read_user_faulty(ctx, frame_ptr, sizeof(void *), (void *) (cur_frame + offsets->VFrame_previous))) { + log_error("failed to read f_back at %llx", cur_frame); return -PY_ERROR_FRAME_PREV; } @@ -515,6 +661,7 @@ static __always_inline int get_symbol_id( *out_symbol_id = *symbol_id_ptr; return 0; } + log_error("get_symbol_id failed"); *out_symbol_id = 0; return -1; } @@ -530,7 +677,11 @@ int read_python_stack(struct bpf_perf_event_data *ctx) { py_symbol *sym = &state->sym; #pragma unroll for (int i = 0; i < PYTHON_STACK_FRAMES_PER_PROG; i++) { - last_res = get_frame_data((void **) &state->frame_ptr, &state->offsets, sym, ctx); + log_debug("------- frame %d %llx ---------- ", sample->stack_len, state->frame_ptr); + if (pytypecheck_frame(state, (void*)state->frame_ptr)) { + return submit_error_sample(PY_ERROR_FRAME_TYPECHECK); + } + last_res = get_frame_data(state, sym, ctx); if (last_res < 0) { return submit_error_sample((uint8_t) (-last_res)); } diff --git a/ebpf/bpf/pystr.h b/ebpf/bpf/pystr.h index 736f8b8929..10e7b169f6 100644 --- a/ebpf/bpf/pystr.h +++ b/ebpf/bpf/pystr.h @@ -6,6 +6,7 @@ #define PYROEBPF_PYSTR_H #include "pyoffsets.h" +#include "pytypecheck.h" #define PYSTR_TYPE_1BYTE 1 #define PYSTR_TYPE_2BYTE 2 @@ -15,10 +16,7 @@ #define PYSTR_TYPE_NOT_COMPACT 32 -struct py_str_type { - uint8_t type; - uint8_t size_codepoints; -} ; + struct _object { @@ -47,11 +45,13 @@ typedef struct { } PyASCIIObject; // Read compact strings from PyASCIIObject or PyCompactUnicodeObject -static __always_inline int pystr_read(void *str, py_offset_config *offsets, char *buf, u64 buf_size, struct py_str_type *typ) { +static __always_inline int pystr_read(void *ctx, void *str, py_sample_state_t *state, char *buf, u64 buf_size, struct py_str_type *typ) { + try(pytypecheck_unicode(state, str)) PyASCIIObject pystr = {}; - if (bpf_probe_read_user(&pystr, sizeof(PyASCIIObject), str)) { - return -1; - } + try (bpf_probe_read_user(&pystr, sizeof(PyASCIIObject), str)) + log_debug("pystr_read: compact=%d ascii=%d ", pystr.state.compact, pystr.state.ascii); + log_debug("pystr_read: kind=%d length=%d", pystr.state.kind, pystr.length); + if (pystr.state.compact == 0) { // not implemented, skip typ->type = PYSTR_TYPE_NOT_COMPACT; return 0; @@ -66,15 +66,13 @@ static __always_inline int pystr_read(void *str, py_offset_config *offsets, char void *data; if (pystr.state.ascii) { typ->type = pystr.state.kind | PYSTR_TYPE_ASCII; - data = str + offsets->PyASCIIObject_size; + data = str + state->offsets.PyASCIIObject_size; } else { typ->type = pystr.state.kind; - data = str + offsets->PyCompactUnicodeObject_size; + data = str + state->offsets.PyCompactUnicodeObject_size; } - if (bpf_probe_read_user(buf, sz_bytes, data)) { - return -1; - }; + try (bpf_probe_read_user(buf, sz_bytes, data)) return 0; } diff --git a/ebpf/bpf/pytypecheck.h b/ebpf/bpf/pytypecheck.h new file mode 100644 index 0000000000..cd5e99090c --- /dev/null +++ b/ebpf/bpf/pytypecheck.h @@ -0,0 +1,222 @@ +#ifndef PYROEBPF_PYTYPECHECK_H +#define PYROEBPF_PYTYPECHECK_H + +//#define PY_TYPECHECK_ENABLED + +#if defined(PY_TYPECHECK_ENABLED) + +struct py_object_header { + ssize_t ob_refcnt; + void *ob_type; +}; + + +int pytypecheck_version_supported(py_sample_state_t *state) { + return state->version.minor == 8; +} + +#define pytypecheck_version_check(state) if (!pytypecheck_version_supported(state)) { return 0; } + +static __always_inline int pytypecheck_obj(void *o, uint64_t typ) { + if (typ == 0 || o == 0) { + log_error("[pytypecheck] obj expected type is null"); + return -1; + } + struct py_object_header obj = {}; + try_read(obj, o) + log_debug("[pytypecheck] obj o=%llx ob_type = %llx refcount = %llx ", o, obj.ob_type, obj.ob_refcnt); + if (obj.ob_refcnt < 0) { + log_error("[pytypecheck] obj uaf"); + return -1; + } + if (obj.ob_type != (void *) typ) { + log_error("[pytypecheck] obj type mismatch %llx %llx", obj.ob_type, typ); + return -1; + } + return 0; +} + +static __always_inline int pytypecheck_glibc_header_size(void *o, uint64_t allocationSize) { + u64 mchunk_sz; + try_read(mchunk_sz, o - 0x8) +//#define chunksize(p) (chunksize_nomask (p) & ~(SIZE_BITS)) + mchunk_sz = mchunk_sz & ~(0x7); + + + allocationSize += 0x8; + if (allocationSize & 0xf) { + allocationSize += 0x8; + } + if (mchunk_sz != allocationSize) { + log_error("[pytypecheck] o=%llx allocationSize=%llx mchunk_sz=%llx OK", o, allocationSize, mchunk_sz); + return -1; + } + log_debug("[pytypecheck] o=%llx allocationSize=%llx mchunk_sz=%llx", o, allocationSize, mchunk_sz); + return 0; + +} + +static __always_inline int pytypecheck_interpreter_state(py_sample_state_t *state, void *is) { + pytypecheck_version_check(state) + log_debug("[pytypecheck] is = %llx", is); + void *tstate_head = NULL; + void *modules = NULL; + void *importlib = NULL; + uint32_t finalizing = 0; + + try_read(tstate_head, is + state->typecheck.o_PyInterpreterState_tstate_head) + try_read(modules, is + state->typecheck.o_PyInterpreterState_modules) + try_read(importlib, is + state->typecheck.o_PyInterpreterState_importlib) + try_read(finalizing, is + state->typecheck.o_PyInterpreterState_finalizing) + + log_debug("[pytypecheck] ts = %llx modules = %llx importlib = %llx", tstate_head, modules, importlib); + + if (finalizing) { + log_error("[pytypecheck] interpreter is finalizing"); + return -1; + } + try (pytypecheck_glibc_header_size(is, state->typecheck.size_PyInterpreterState)) + + if (modules) { + try (pytypecheck_obj(modules, state->typecheck.PyDict_Type)) + } else { + log_debug("[pytypecheck] modules is null"); + } + + if (importlib) { + + try (pytypecheck_obj(importlib, state->typecheck.PyModule_Type)) + } else { + log_debug("[pytypecheck] importlib is null"); + } + + log_debug("[pytypecheck] ts = %llx modules = %llx importlib = %llx", tstate_head, modules, importlib); + { + if (tstate_head == 0) { + log_error("[pytypecheck] tstate_head is null"); + return -1; + } + void *dict; + try_read(dict, tstate_head + state->typecheck.o_PyThreadState_dict) + if (dict != 0) { + try (pytypecheck_obj(dict, state->typecheck.PyDict_Type)) + } + try (pytypecheck_glibc_header_size(tstate_head, state->typecheck.size_PyThreadState)) + } + log_debug("[pytypecheck] is %llx ok", is); + return 0; +} + +static __always_inline int pytypecheck_thread_state(py_sample_state_t *state, void *ts, bool check_interp) { + pytypecheck_version_check(state) + log_debug("[pytypecheck] ts %llx", ts); + void *dict=NULL, *interp=NULL; + try_read(dict, ts + state->typecheck.o_PyThreadState_dict) + try_read(interp, ts + state->typecheck.o_PyThreadState_interp) + log_debug("[pytypecheck] %llx dict=%llx interp=%llx", ts, dict, interp); + if (dict != 0) { + if (pytypecheck_obj(dict, state->typecheck.PyDict_Type)) { + return -1; + }; + } + + try (pytypecheck_glibc_header_size(ts, state->typecheck.size_PyThreadState)) + + if (check_interp) { + if (pytypecheck_interpreter_state(state, interp)) { + return -1; + } + } + log_debug("[pytypecheck] ts %llx ok", ts); + + return 0; +} + + +static __always_inline int pytypecheck_frame(py_sample_state_t *state, void *f) { + pytypecheck_version_check(state) + if (f == 0) { + log_debug("[pytypecheck] f %llx", f); + return 0; + } + if (pytypecheck_obj(f, state->typecheck.PyFrame_Type)) { + return -1; + } + log_debug("[pytypecheck] f %llx ok", f); + return 0; +} + +static __always_inline int pytypecheck_code(py_sample_state_t *state, void *code, void *frame) { + pytypecheck_version_check(state) + if (code == 0) { + log_debug("[pytypecheck] code %llx null", code); + return 0; + } + if (pytypecheck_obj(code, state->typecheck.PyCode_Type)) { + return -1; + } + log_debug("[pytypecheck] code %llx ok", code); + return 0; +} + +static __always_inline int pytypecheck_tuple(py_sample_state_t *state, void *tuple) { + pytypecheck_version_check(state) + if (tuple == 0) { + log_debug("[pytypecheck] tuple %llx null", tuple); + return 0; + } + if (pytypecheck_obj(tuple, state->typecheck.PyTuple_Type)) { + return -1; + } + log_debug("[pytypecheck] tuple %llx ok", tuple); + return 0; +} + +static __always_inline int pytypecheck_unicode(py_sample_state_t *state, void *tuple) { + pytypecheck_version_check(state) + if (tuple == 0) { + log_debug("[pytypecheck] unicode %llx null", tuple); + return 0; + } + if (pytypecheck_obj(tuple, state->typecheck.PyUnicode_Type)) { + return -1; + } + log_debug("[pytypecheck] unicode %llx ok", tuple); + return 0; +} + +//PyTypeObject +static __always_inline int pytypecheck_typeobject(py_sample_state_t *state, void *typ) { + pytypecheck_version_check(state) + if (typ == 0) { + log_debug("[pytypecheck] PyTypeObject null"); + return 0; + } + if (pytypecheck_obj(typ, state->typecheck.PyType_Type)) { + return -1; + } + log_debug("[pytypecheck] PyTypeObject %llx ok", typ); + return 0; +} + + + + +#else + +#define pytypecheck_version_supported(state) 1 +#define pytypecheck_version_check(state) 1 +#define pytypecheck_obj(o, typ) 0 +#define pytypecheck_glibc_header_size(o, allocationSize) 0 +#define pytypecheck_interpreter_state(state, is) 0 +#define pytypecheck_thread_state(state, ts, check_interp) 0 +#define pytypecheck_frame(state, f) 0 +#define pytypecheck_code(state, code, frame) 0 +#define pytypecheck_tuple(state, tuple) 0 +#define pytypecheck_unicode(state, tuple) 0 +#define pytypecheck_typeobject(state, typ) 0 + + +#endif + +#endif \ No newline at end of file diff --git a/ebpf/bpf/stacks.h b/ebpf/bpf/stacks.h index afe6bb5722..07f8ef68d0 100644 --- a/ebpf/bpf/stacks.h +++ b/ebpf/bpf/stacks.h @@ -33,4 +33,51 @@ struct { } counts SEC(".maps"); + +#define OP_REQUEST_UNKNOWN_PROCESS_INFO 1 +#define OP_PID_DEAD 2 +#define OP_REQUEST_EXEC_PROCESS_INFO 3 +#define OP_REQUEST_FAULT 4 + +struct pid_event { + uint32_t op; + uint32_t pid; +}; + +struct pid_event_fault { + uint32_t op; + uint32_t pid; + uint64_t fault_addr; +}; + + +struct pid_event e__; +struct pid_event_fault e___; + + +struct { + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); + __uint(key_size, sizeof(u32)); + __uint(value_size, sizeof(u32)); +} events SEC(".maps"); + + +static void submit_fault_event(void *ctx, const void *src); + +static __always_inline int read_user_faulty(void *ctx, void *dst, __u32 size, void *src) { + if (bpf_probe_read_user(dst, size, src) != 0) { + submit_fault_event(ctx, src); + return -1; + } + return 0; +} + +static __always_inline void submit_fault_event(void *ctx, const void *src) { + struct pid_event_fault e; + e.op = OP_REQUEST_FAULT; + e.pid = bpf_get_current_pid_tgid();//todo use namespaced pid + e.fault_addr = (u64)src; + bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &e, sizeof(e)); +} + #endif \ No newline at end of file diff --git a/ebpf/bpf/ume.h b/ebpf/bpf/ume.h deleted file mode 100644 index 3961d50ba5..0000000000 --- a/ebpf/bpf/ume.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef UME_H -#define UME_H - - -#if defined(PYROSCOPE_UME) - -#define pyro_bpf_core_read(dst, sz, src) \ - bpf_probe_read_kernel(dst, sz, src) - - -#else - -#include "bpf_core_read.h" - -#define pyro_bpf_core_read(dst, sz, src) \ - bpf_core_read(dst, sz, src) - - -#endif - -//#define BPF_DEBUG - -#if defined(BPF_DEBUG) -#define bpf_dbg_printk(fmt, args...) bpf_printk(fmt, ##args) -#else -#define bpf_dbg_printk(fmt, args...) -#endif - -#endif // UME_H \ No newline at end of file diff --git a/ebpf/cmd/playground/main.go b/ebpf/cmd/playground/main.go index 799e7ed983..43c3a6282a 100644 --- a/ebpf/cmd/playground/main.go +++ b/ebpf/cmd/playground/main.go @@ -8,7 +8,10 @@ import ( "encoding/json" "flag" "fmt" + "github.com/google/pprof/profile" + "github.com/samber/lo" "os" + "slices" "strconv" "strings" "time" @@ -44,6 +47,12 @@ var collectFreq = flag.Duration("collect.freq", 15*time.Second, "") +var logProfile = flag.Bool("log.profile", true, "prints profiles to stdout") +var logBPF = flag.Bool("log.bpf", false, "") +var logBPFPythonDebug = flag.Bool("log.bpf.python.debug", false, "") +var logBPFPythonError = flag.Bool("log.bpf.python.error", false, "") +var logProfileFormat = flag.String("log.profile.format", "collapsed", "") + var ( config *Config logger log.Logger @@ -73,8 +82,8 @@ func (s splitLog) Log(keyvals ...interface{}) error { } func main() { - config = getConfig() metrics = ebpfmetrics.New(prometheus.DefaultRegisterer) + config = getConfig() logger = &splitLog{ err: log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)), @@ -114,7 +123,7 @@ func main() { func collectProfiles(profiles chan *pushv1.PushRequest) { builders := pprof.NewProfileBuilders(pprof.BuildersOptions{ - SampleRate: int64(config.SampleRate), + SampleRate: int64(config.SessionOptions.SampleRate), PerPIDProfile: true, }) err := pprof.Collect(builders, session) @@ -137,6 +146,9 @@ func collectProfiles(profiles chan *pushv1.PushRequest) { if err != nil { panic(err) } + if *logProfile { + printProfile(builder.Profile, builder.Labels) + } req := &pushv1.PushRequest{Series: []*pushv1.RawProfileSeries{{ Labels: protoLabels, Samples: []*pushv1.RawSample{{ @@ -177,36 +189,24 @@ func ingest(profiles chan *pushv1.PushRequest) { } func convertTargetOptions() sd.TargetsOptions { - return sd.TargetsOptions{ - TargetsOnly: config.TargetsOnly, - Targets: relabelProcessTargets(getProcessTargets(), config.RelabelConfig), - DefaultTarget: config.DefaultTarget, - ContainerCacheSize: config.ContainerCacheSize, + targets := relabelProcessTargets(getProcessTargets(), config.RelabelConfig) + options := config.TargetsOptions + if options.Targets == nil { + options.Targets = targets } + return options } func convertSessionOptions() ebpfspy.SessionOptions { - return ebpfspy.SessionOptions{ - CollectUser: config.CollectUser, - CollectKernel: config.CollectKernel, - SampleRate: config.SampleRate, - UnknownSymbolAddress: config.UnknownSymbolAddress, - UnknownSymbolModuleOffset: config.UnknownSymbolModuleOffset, - PythonEnabled: config.PythonEnabled, - Metrics: metrics, - CacheOptions: config.CacheOptions, - VerifierLogSize: 1024 * 1024 * 20, - PythonBPFErrorLogEnabled: config.PythonBPFLogErr, - PythonBPFDebugLogEnabled: config.PythonBPFLogDebug, - BPFMapsOptions: config.BPFMapsOptions, - } + return config.SessionOptions } func getConfig() *Config { flag.Parse() var config = new(Config) - *config = defaultConfig + *config = defaultConfig() + if *configFile == "" { return config } @@ -221,61 +221,59 @@ func getConfig() *Config { return config } -var defaultConfig = Config{ - CollectUser: true, - CollectKernel: true, - UnknownSymbolModuleOffset: true, - UnknownSymbolAddress: true, - PythonEnabled: true, - SymbolOptions: symtab.SymbolOptions{ - GoTableFallback: true, - PythonFullFilePath: false, - DemangleOptions: demangle.DemangleFull, - }, - CacheOptions: symtab.CacheOptions{ - - PidCacheOptions: symtab.GCacheOptions{ - Size: 239, - KeepRounds: 8, - }, - BuildIDCacheOptions: symtab.GCacheOptions{ - Size: 239, - KeepRounds: 8, +func defaultConfig() Config { + return Config{ + SessionOptions: ebpfspy.SessionOptions{ + CollectUser: true, + CollectKernel: true, + UnknownSymbolModuleOffset: true, + UnknownSymbolAddress: true, + PythonEnabled: true, + CacheOptions: symtab.CacheOptions{ + + PidCacheOptions: symtab.GCacheOptions{ + Size: 239, + KeepRounds: 8, + }, + BuildIDCacheOptions: symtab.GCacheOptions{ + Size: 239, + KeepRounds: 8, + }, + SameFileCacheOptions: symtab.GCacheOptions{ + Size: 239, + KeepRounds: 8, + }, + }, + SymbolOptions: symtab.SymbolOptions{ + GoTableFallback: true, + PythonFullFilePath: false, + DemangleOptions: demangle.DemangleFull, + }, + Metrics: metrics, + SampleRate: 100, + VerifierLogSize: 0, + PythonBPFErrorLogEnabled: false, + PythonBPFDebugLogEnabled: false, + PrintBPFLog: false, + BPFMapsOptions: ebpfspy.BPFMapsOptions{ + PIDMapSize: 2048, + SymbolsMapSize: 16384, + }, }, - SameFileCacheOptions: symtab.GCacheOptions{ - Size: 239, - KeepRounds: 8, + TargetsOptions: sd.TargetsOptions{ + Targets: nil, + TargetsOnly: true, + DefaultTarget: nil, + ContainerCacheSize: 1024, }, - }, - SampleRate: 97, - TargetsOnly: true, - DefaultTarget: nil, - ContainerCacheSize: 1024, - RelabelConfig: nil, - PythonBPFLogErr: true, - PythonBPFLogDebug: true, - BPFMapsOptions: ebpfspy.BPFMapsOptions{ - PIDMapSize: 2048, - SymbolsMapSize: 16384, - }, + RelabelConfig: nil, + } } type Config struct { - CollectUser bool - CollectKernel bool - UnknownSymbolModuleOffset bool - UnknownSymbolAddress bool - PythonEnabled bool - SymbolOptions symtab.SymbolOptions - CacheOptions symtab.CacheOptions - SampleRate int - TargetsOnly bool - DefaultTarget map[string]string - ContainerCacheSize int - RelabelConfig []*RelabelConfig - PythonBPFLogErr bool - PythonBPFLogDebug bool - BPFMapsOptions ebpfspy.BPFMapsOptions + SessionOptions ebpfspy.SessionOptions + TargetsOptions sd.TargetsOptions + RelabelConfig []*RelabelConfig } type RelabelConfig struct { @@ -336,14 +334,22 @@ func getProcessTargets() []sd.DiscoveryTarget { _ = level.Error(logger).Log("err", err, "msg", "reading cgroup", "pid", spid) } } + cmdline, err := os.ReadFile(fmt.Sprintf("/proc/%s/cmdline", spid)) + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + _ = level.Error(logger).Log("err", err, "msg", "reading cmdline", "pid", spid) + } + } + cmdline = bytes.ReplaceAll(cmdline, []byte{0}, []byte(" ")) target := sd.DiscoveryTarget{ - "__process_pid__": spid, - "__meta_process_cwd": cwd, - "__meta_process_exe": strings.TrimSpace(exe), - "__meta_process_comm": strings.TrimSpace(string(comm)), - "__meta_process_cgroup": strings.TrimSpace(string(cgroup)), - "pid": spid, - "exe": exe, + "__process_pid__": spid, + "cwd": cwd, + "exe": strings.TrimSpace(exe), + "comm": strings.TrimSpace(string(comm)), + "cgroup": strings.TrimSpace(string(cgroup)), + "pid": spid, + "cmdline": strings.TrimSpace(string(cmdline)), + "service_name": fmt.Sprintf("%s at %s", string(cmdline), string(cwd)), } res = append(res, target) } @@ -379,3 +385,45 @@ func relabelProcessTargets(targets []sd.DiscoveryTarget, cfg []*RelabelConfig) [ } return res } + +func printProfile(p *profile.Profile, l labels.Labels) { + if *logProfileFormat == "collapsed" { + printProfileCollapsed(p, l) + } else { + fmt.Println(l.String()) + fmt.Println(p.String()) + } +} + +func printProfileCollapsed(p *profile.Profile, l labels.Labels) { + stacks := map[string]int64{} + for _, sample := range p.Sample { + stack := []string{} + for _, location := range sample.Location { + stack = append(stack, location.Line[0].Function.Name) + } + lo.Reverse(stack) + sstack := strings.Join(stack, ";") + stacks[sstack] += sample.Value[0] + } + type entry struct { + v int64 + k string + } + var es []entry + + for k, v := range stacks { + es = append(es, entry{v, k}) + } + slices.SortFunc(es, func(a, b entry) int { + if a.v == b.v { + return strings.Compare(a.k, b.k) + } + return int(a.v - b.v) + }) + fmt.Println(l.String()) + for _, e := range es { + fmt.Printf("%s: %d\n", e.k, e.v) + } + +} diff --git a/ebpf/cmd/python_dwarfdump/main.go b/ebpf/cmd/python_dwarfdump/main.go index 63216fd8e8..a6aa202012 100644 --- a/ebpf/cmd/python_dwarfdump/main.go +++ b/ebpf/cmd/python_dwarfdump/main.go @@ -66,14 +66,19 @@ var pythonFields = []dwarfdump.Need{ {Name: "_typeobject", PrettyName: "PyTypeObject", Fields: []dwarfdump.NeedField{ {"tp_name", "PyTypeObject_tp_name"}, }}, - {Name: "PyThreadState", Fields: []dwarfdump.NeedField{ + {Name: "PyThreadState", Size: true, Fields: []dwarfdump.NeedField{ {"frame", "PyThreadState_frame"}, {"cframe", "PyThreadState_cframe"}, {"current_frame", "PyThreadState_current_frame"}, + {"dict", "PyThreadState_dict"}, + {"interp", "PyThreadState_interp"}, }}, {Name: "_PyCFrame", Fields: []dwarfdump.NeedField{ {"current_frame", "PyCFrame_current_frame"}, }}, + {Name: "pythreads", Fields: []dwarfdump.NeedField{ + {"head", "Pythreads__head"}, + }}, //typedef struct _frame PyFrameObject; {Name: "_frame", PrettyName: "PyFrameObject", Fields: []dwarfdump.NeedField{ {"f_back", "PyFrameObject_f_back"}, @@ -83,6 +88,7 @@ var pythonFields = []dwarfdump.Need{ {Name: "PyCodeObject", Fields: []dwarfdump.NeedField{ {"co_filename", "PyCodeObject_co_filename"}, {"co_name", "PyCodeObject_co_name"}, + {"co_nlocals", "PyCodeObject_co_nlocals"}, {"co_varnames", "PyCodeObject_co_varnames"}, {"co_localsplusnames", "PyCodeObject_co_localsplusnames"}, }}, @@ -110,5 +116,14 @@ var pythonFields = []dwarfdump.Need{ {Name: "PyASCIIObject", PrettyName: "PyASCIIObject", Size: true}, {Name: "PyCompactUnicodeObject", PrettyName: "PyCompactUnicodeObject", Size: true}, - //{Name: "_is", PrettyName: "PyInterpreterState", Fields: []string{}}, + {Name: "_is", PrettyName: "PyInterpreterState", Size: true, Fields: []dwarfdump.NeedField{ + {"finalizing", "PyInterpreterState_finalizing"}, + {"modules", "PyInterpreterState_modules"}, + {"tstate_head", "PyInterpreterState_tstate_head"}, + {"threads", "PyInterpreterState_threads"}, + {"importlib", "PyInterpreterState_importlib"}, + }}, + {Name: "PyConfig", Fields: []dwarfdump.NeedField{ + {Name: "executable", PrintName: "PyConfig_executable"}, + }}, } diff --git a/ebpf/dwarfdump/dwarfdump.go b/ebpf/dwarfdump/dwarfdump.go index a62aae83c0..05b83022b3 100644 --- a/ebpf/dwarfdump/dwarfdump.go +++ b/ebpf/dwarfdump/dwarfdump.go @@ -4,6 +4,7 @@ import ( "debug/dwarf" "debug/elf" "fmt" + "os" "reflect" "strings" ) @@ -193,6 +194,7 @@ type FieldDump struct { } func Dump(elfPath string, fields []Need) []FieldDump { + os.Stderr.WriteString("Dumping " + elfPath + "\n") var err error f, err := elf.Open(elfPath) diff --git a/ebpf/pyrobpf/gen.go b/ebpf/pyrobpf/gen.go index f788d89551..7c3f864837 100644 --- a/ebpf/pyrobpf/gen.go +++ b/ebpf/pyrobpf/gen.go @@ -1,4 +1,4 @@ package pyrobpf -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type pid_event -target amd64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Profile ../bpf/profile.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type pid_event -target arm64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Profile ../bpf/profile.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type pid_event_fault -type global_config_t -type pid_event -target amd64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Profile ../bpf/profile.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type pid_event_fault -type global_config_t -type pid_event -target arm64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Profile ../bpf/profile.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ diff --git a/ebpf/pyrobpf/profile_bpfel_arm64.go b/ebpf/pyrobpf/profile_bpfel_arm64.go index e272315bdb..f1d7d73714 100644 --- a/ebpf/pyrobpf/profile_bpfel_arm64.go +++ b/ebpf/pyrobpf/profile_bpfel_arm64.go @@ -26,6 +26,12 @@ type ProfilePidEvent struct { Pid uint32 } +type ProfilePidEventFault struct { + Op uint32 + Pid uint32 + FaultAddr uint64 +} + type ProfileSampleKey struct { Pid uint32 Flags uint32 diff --git a/ebpf/pyrobpf/profile_bpfel_arm64.o b/ebpf/pyrobpf/profile_bpfel_arm64.o index 8b58dc6b13..b1bb0e082d 100644 Binary files a/ebpf/pyrobpf/profile_bpfel_arm64.o and b/ebpf/pyrobpf/profile_bpfel_arm64.o differ diff --git a/ebpf/pyrobpf/profile_bpfel_x86.go b/ebpf/pyrobpf/profile_bpfel_x86.go index a8163aeb12..ce377a3056 100644 --- a/ebpf/pyrobpf/profile_bpfel_x86.go +++ b/ebpf/pyrobpf/profile_bpfel_x86.go @@ -26,6 +26,12 @@ type ProfilePidEvent struct { Pid uint32 } +type ProfilePidEventFault struct { + Op uint32 + Pid uint32 + FaultAddr uint64 +} + type ProfileSampleKey struct { Pid uint32 Flags uint32 diff --git a/ebpf/pyrobpf/profile_bpfel_x86.o b/ebpf/pyrobpf/profile_bpfel_x86.o index 901593a6a1..2d925d3d18 100644 Binary files a/ebpf/pyrobpf/profile_bpfel_x86.o and b/ebpf/pyrobpf/profile_bpfel_x86.o differ diff --git a/ebpf/pyrobpf/sync.go b/ebpf/pyrobpf/sync.go index 6608bc66cd..3f9590af08 100644 --- a/ebpf/pyrobpf/sync.go +++ b/ebpf/pyrobpf/sync.go @@ -19,6 +19,7 @@ var ( //#define OP_REQUEST_UNKNOWN_PROCESS_INFO 1 //#define OP_PID_DEAD 2 //#define OP_REQUEST_EXEC_PROCESS_INFO 3 +//#define OP_REQUEST_FAULT 4 type PidOp uint32 @@ -26,6 +27,7 @@ var ( PidOpRequestUnknownProcessInfo PidOp = 1 PidOpDead PidOp = 2 PidOpRequestExecProcessInfo PidOp = 3 + PidOpRequestFault PidOp = 4 ) //#define SAMPLE_KEY_FLAG_PYTHON_STACK 1 diff --git a/ebpf/python/gen.go b/ebpf/python/gen.go index 9b1e80c6a3..e4093253fc 100644 --- a/ebpf/python/gen.go +++ b/ebpf/python/gen.go @@ -1,4 +1,4 @@ package python -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type libc -type py_str_type -type py_event -type py_offset_config -target amd64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Perf ../bpf/pyperf.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type libc -type py_str_type -type py_event -type py_offset_config -target arm64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Perf ../bpf/pyperf.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type libc -type py_str_type -type py_event -type py_offset_config -type py_typecheck_data -target amd64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Perf ../bpf/pyperf.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type global_config_t -type libc -type py_str_type -type py_event -type py_offset_config -type py_typecheck_data -target arm64 -cc clang -cflags "-O2 -Wall -Werror -fpie -Wno-unused-variable -Wno-unused-function" Perf ../bpf/pyperf.bpf.c -- -I../bpf/libbpf -I../bpf/vmlinux/ diff --git a/ebpf/python/perf_bpfel_arm64.go b/ebpf/python/perf_bpfel_arm64.go index 9436d715fd..7ab4c3efde 100644 --- a/ebpf/python/perf_bpfel_arm64.go +++ b/ebpf/python/perf_bpfel_arm64.go @@ -12,10 +12,13 @@ import ( "github.com/cilium/ebpf" ) +type PerfErrorStats struct{ Errors [19]uint32 } + type PerfGlobalConfigT struct { BpfLogErr uint8 BpfLogDebug uint8 - _ [6]byte + Typecheck uint8 + _ [5]byte NsPidIno uint64 } @@ -41,6 +44,7 @@ type PerfPyOffsetConfig struct { PyCodeObjectCoName int16 PyCodeObjectCoVarnames int16 PyCodeObjectCoLocalsplusnames int16 + PyCodeObjectCoNlocals int16 PyTupleObjectObItem int16 PyVarObjectObSize int16 PyObjectObType int16 @@ -54,9 +58,10 @@ type PerfPyOffsetConfig struct { } type PerfPyPidData struct { - Offsets PerfPyOffsetConfig - _ [2]byte - Version struct { + Offsets PerfPyOffsetConfig + _ [4]byte + Typecheck PerfPyTypecheckData + Version struct { Major uint32 Minor uint32 Patch uint32 @@ -65,13 +70,19 @@ type PerfPyPidData struct { _ [2]byte TssKey int32 CollectKernel uint8 - _ [3]byte + _ [7]byte } type PerfPySampleStateT struct { - SymbolCounter int64 - Offsets PerfPyOffsetConfig - _ [2]byte + SymbolCounter int64 + Offsets PerfPyOffsetConfig + _ [4]byte + Typecheck PerfPyTypecheckData + Version struct { + Major uint32 + Minor uint32 + Patch uint32 + } CurCpu uint32 FramePtr uint64 PythonStackProgCallCnt int64 @@ -95,6 +106,26 @@ type PerfPySymbol struct { Padding PerfPyStrType } +type PerfPyTypecheckData struct { + PyCodeType int64 + PyFrameType int64 + PyBytesType int64 + PyUnicodeType int64 + PyTypeType int64 + PyDictType int64 + PyNoneType int64 + PyModuleType int64 + PyTupleType int64 + O_PyThreadStateDict int64 + O_PyThreadStateInterp int64 + SizePyThreadState int64 + O_PyInterpreterStateTstateHead int64 + O_PyInterpreterStateFinalizing int64 + O_PyInterpreterStateModules int64 + O_PyInterpreterStateImportlib int64 + SizePyInterpreterState int64 +} + type PerfSampleKey struct { Pid uint32 Flags uint32 @@ -152,6 +183,8 @@ type PerfProgramSpecs struct { // It can be passed ebpf.CollectionSpec.Assign. type PerfMapSpecs struct { Counts *ebpf.MapSpec `ebpf:"counts"` + Events *ebpf.MapSpec `ebpf:"events"` + PyErrors *ebpf.MapSpec `ebpf:"py_errors"` PyPidConfig *ebpf.MapSpec `ebpf:"py_pid_config"` PyProgs *ebpf.MapSpec `ebpf:"py_progs"` PyStateHeap *ebpf.MapSpec `ebpf:"py_state_heap"` @@ -180,6 +213,8 @@ func (o *PerfObjects) Close() error { // It can be passed to LoadPerfObjects or ebpf.CollectionSpec.LoadAndAssign. type PerfMaps struct { Counts *ebpf.Map `ebpf:"counts"` + Events *ebpf.Map `ebpf:"events"` + PyErrors *ebpf.Map `ebpf:"py_errors"` PyPidConfig *ebpf.Map `ebpf:"py_pid_config"` PyProgs *ebpf.Map `ebpf:"py_progs"` PyStateHeap *ebpf.Map `ebpf:"py_state_heap"` @@ -191,6 +226,8 @@ type PerfMaps struct { func (m *PerfMaps) Close() error { return _PerfClose( m.Counts, + m.Events, + m.PyErrors, m.PyPidConfig, m.PyProgs, m.PyStateHeap, diff --git a/ebpf/python/perf_bpfel_arm64.o b/ebpf/python/perf_bpfel_arm64.o index 6a15d39d86..b22694d70e 100644 Binary files a/ebpf/python/perf_bpfel_arm64.o and b/ebpf/python/perf_bpfel_arm64.o differ diff --git a/ebpf/python/perf_bpfel_x86.go b/ebpf/python/perf_bpfel_x86.go index 0be434456f..e25a291853 100644 --- a/ebpf/python/perf_bpfel_x86.go +++ b/ebpf/python/perf_bpfel_x86.go @@ -12,10 +12,13 @@ import ( "github.com/cilium/ebpf" ) +type PerfErrorStats struct{ Errors [19]uint32 } + type PerfGlobalConfigT struct { BpfLogErr uint8 BpfLogDebug uint8 - _ [6]byte + Typecheck uint8 + _ [5]byte NsPidIno uint64 } @@ -41,6 +44,7 @@ type PerfPyOffsetConfig struct { PyCodeObjectCoName int16 PyCodeObjectCoVarnames int16 PyCodeObjectCoLocalsplusnames int16 + PyCodeObjectCoNlocals int16 PyTupleObjectObItem int16 PyVarObjectObSize int16 PyObjectObType int16 @@ -54,9 +58,10 @@ type PerfPyOffsetConfig struct { } type PerfPyPidData struct { - Offsets PerfPyOffsetConfig - _ [2]byte - Version struct { + Offsets PerfPyOffsetConfig + _ [4]byte + Typecheck PerfPyTypecheckData + Version struct { Major uint32 Minor uint32 Patch uint32 @@ -65,13 +70,19 @@ type PerfPyPidData struct { _ [2]byte TssKey int32 CollectKernel uint8 - _ [3]byte + _ [7]byte } type PerfPySampleStateT struct { - SymbolCounter int64 - Offsets PerfPyOffsetConfig - _ [2]byte + SymbolCounter int64 + Offsets PerfPyOffsetConfig + _ [4]byte + Typecheck PerfPyTypecheckData + Version struct { + Major uint32 + Minor uint32 + Patch uint32 + } CurCpu uint32 FramePtr uint64 PythonStackProgCallCnt int64 @@ -95,6 +106,26 @@ type PerfPySymbol struct { Padding PerfPyStrType } +type PerfPyTypecheckData struct { + PyCodeType int64 + PyFrameType int64 + PyBytesType int64 + PyUnicodeType int64 + PyTypeType int64 + PyDictType int64 + PyNoneType int64 + PyModuleType int64 + PyTupleType int64 + O_PyThreadStateDict int64 + O_PyThreadStateInterp int64 + SizePyThreadState int64 + O_PyInterpreterStateTstateHead int64 + O_PyInterpreterStateFinalizing int64 + O_PyInterpreterStateModules int64 + O_PyInterpreterStateImportlib int64 + SizePyInterpreterState int64 +} + type PerfSampleKey struct { Pid uint32 Flags uint32 @@ -152,6 +183,8 @@ type PerfProgramSpecs struct { // It can be passed ebpf.CollectionSpec.Assign. type PerfMapSpecs struct { Counts *ebpf.MapSpec `ebpf:"counts"` + Events *ebpf.MapSpec `ebpf:"events"` + PyErrors *ebpf.MapSpec `ebpf:"py_errors"` PyPidConfig *ebpf.MapSpec `ebpf:"py_pid_config"` PyProgs *ebpf.MapSpec `ebpf:"py_progs"` PyStateHeap *ebpf.MapSpec `ebpf:"py_state_heap"` @@ -180,6 +213,8 @@ func (o *PerfObjects) Close() error { // It can be passed to LoadPerfObjects or ebpf.CollectionSpec.LoadAndAssign. type PerfMaps struct { Counts *ebpf.Map `ebpf:"counts"` + Events *ebpf.Map `ebpf:"events"` + PyErrors *ebpf.Map `ebpf:"py_errors"` PyPidConfig *ebpf.Map `ebpf:"py_pid_config"` PyProgs *ebpf.Map `ebpf:"py_progs"` PyStateHeap *ebpf.Map `ebpf:"py_state_heap"` @@ -191,6 +226,8 @@ type PerfMaps struct { func (m *PerfMaps) Close() error { return _PerfClose( m.Counts, + m.Events, + m.PyErrors, m.PyPidConfig, m.PyProgs, m.PyStateHeap, diff --git a/ebpf/python/perf_bpfel_x86.o b/ebpf/python/perf_bpfel_x86.o index 78e0502a62..7d02a3e81e 100644 Binary files a/ebpf/python/perf_bpfel_x86.o and b/ebpf/python/perf_bpfel_x86.o differ diff --git a/ebpf/python/procinfo.go b/ebpf/python/procinfo.go index 56033beea5..e90ceb9932 100644 --- a/ebpf/python/procinfo.go +++ b/ebpf/python/procinfo.go @@ -3,6 +3,9 @@ package python import ( "bufio" "fmt" + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "path/filepath" "regexp" "strconv" "strings" @@ -21,11 +24,13 @@ type ProcInfo struct { var rePython = regexp.MustCompile("/.*/((?:lib)?python)(\\d+)\\.(\\d+)(?:[mu]?(-pyston\\d.\\d)?(?:\\.so)?)?(?:.1.0)?$") // GetProcInfo parses /proc/pid/map of a python process. -func GetProcInfo(s *bufio.Scanner) (ProcInfo, error) { +func GetProcInfo(l log.Logger, s *bufio.Scanner) (ProcInfo, error) { res := ProcInfo{} i := 0 for s.Scan() { line := s.Bytes() + level.Debug(l).Log("map", string(line)) + m, err := symtab.ParseProcMapLine(line, false) if err != nil { return res, err @@ -58,7 +63,7 @@ func GetProcInfo(s *bufio.Scanner) (ProcInfo, error) { strings.Contains(m.Pathname, "/lib/ld-musl-aarch64.so.1") { res.Musl = append(res.Musl, m) } - if strings.HasSuffix(m.Pathname, "/libc.so.6") || strings.HasSuffix(m.Pathname, "/libc-2") { + if strings.HasSuffix(m.Pathname, "/libc.so.6") || strings.HasPrefix(filepath.Base(m.Pathname), "libc-2.") { res.Glibc = append(res.Glibc, m) } } diff --git a/ebpf/python/procinfo_test.go b/ebpf/python/procinfo_test.go index 920953cbe7..9c74f41599 100644 --- a/ebpf/python/procinfo_test.go +++ b/ebpf/python/procinfo_test.go @@ -56,6 +56,7 @@ ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsysca info, err := GetProcInfo(bufio.NewScanner(bytes.NewReader([]byte(maps)))) require.NoError(t, err) require.Nil(t, info.Musl) + require.NotNil(t, info.Glibc) require.Equal(t, info.Version, Version{3, 6, 0}) require.NotNil(t, info.PythonMaps) require.NotNil(t, info.LibPythonMaps) @@ -116,6 +117,7 @@ ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsysca info, err = GetProcInfo(bufio.NewScanner(bytes.NewReader([]byte(maps)))) require.NoError(t, err) require.NotNil(t, info.Musl) + require.Nil(t, info.Glibc) require.Equal(t, info.Version, Version{3, 11, 0}) require.NotNil(t, info.PythonMaps) require.NotNil(t, info.LibPythonMaps) @@ -128,6 +130,7 @@ ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsysca info, err = GetProcInfo(bufio.NewScanner(bytes.NewReader([]byte(maps)))) require.NoError(t, err) require.Nil(t, info.Musl) + require.Nil(t, info.Glibc) require.Equal(t, info.Version, Version{3, 7, 0}) require.NotNil(t, info.PythonMaps) require.Nil(t, info.LibPythonMaps) @@ -160,6 +163,7 @@ fffff8c25000-fffff8c53000 rw-p 00000000 00:00 0 [stack] info, err = GetProcInfo(bufio.NewScanner(bytes.NewReader([]byte(maps)))) require.NoError(t, err) require.Nil(t, info.Musl) + require.NotNil(t, info.Glibc) require.Equal(t, info.Version, Version{3, 8, 0}) require.Nil(t, info.PythonMaps) require.NotNil(t, info.LibPythonMaps) diff --git a/ebpf/python/pyperf_pid_data.go b/ebpf/python/pyperf_pid_data.go index 62301e788b..0e84adcf8f 100644 --- a/ebpf/python/pyperf_pid_data.go +++ b/ebpf/python/pyperf_pid_data.go @@ -5,20 +5,37 @@ import ( "debug/elf" "fmt" "os" + "reflect" "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/grafana/pyroscope/ebpf/symtab" ) +func printOSRelease(l log.Logger, pid uint32) { + osReleasePath := fmt.Sprintf("/proc/%d/root/etc/os-release", pid) + osReleaseFile, err := os.Open(osReleasePath) + if err != nil { + level.Debug(l).Log("msg", "could not open os-release", "path", osReleasePath) + return + } + defer osReleaseFile.Close() + scanner := bufio.NewScanner(osReleaseFile) + for scanner.Scan() { + level.Debug(l).Log("msg", scanner.Text()) + } + +} + func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidData, error) { mapsFD, err := os.Open(fmt.Sprintf("/proc/%d/maps", pid)) if err != nil { return nil, fmt.Errorf("reading proc maps %d: %w", pid, err) } defer mapsFD.Close() - - info, err := GetProcInfo(bufio.NewScanner(mapsFD)) + l = log.With(l, "pid", pid) + printOSRelease(l, pid) + info, err := GetProcInfo(l, bufio.NewScanner(mapsFD)) if err != nil { return nil, fmt.Errorf("GetPythonProcInfo error %s: %w", fmt.Sprintf("/proc/%d/maps", pid), err) @@ -60,25 +77,55 @@ func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidD data := &PerfPyPidData{} var ( - autoTLSkeyAddr, pyRuntimeAddr uint64 + autoTLSkeyAddr, pyRuntimeAddr int64 + typecheck PerfPyTypecheckData ) baseAddr := base_.StartAddr if ef.FileHeader.Type == elf.ET_EXEC { baseAddr = 0 } + symbolsBind := map[string]*int64{} + bind := func(name string, addr *int64) { + symbolsBind[name] = addr + } + bind("autoTLSkey", &autoTLSkeyAddr) + bind("_PyRuntime", &pyRuntimeAddr) + bind("PyCode_Type", &typecheck.PyCodeType) + bind("PyFrame_Type", &typecheck.PyFrameType) + bind("PyBytes_Type", &typecheck.PyBytesType) + bind("PyUnicode_Type", &typecheck.PyUnicodeType) + bind("PyType_Type", &typecheck.PyTypeType) + bind("PyDict_Type", &typecheck.PyDictType) + bind("_PyNone_Type", &typecheck.PyNoneType) + bind("PyModule_Type", &typecheck.PyModuleType) + bind("PyTuple_Type", &typecheck.PyTupleType) + for _, symbol := range symbols { - switch symbol.Name { - case "autoTLSkey": - autoTLSkeyAddr = baseAddr + symbol.Value - case "_PyRuntime": - pyRuntimeAddr = baseAddr + symbol.Value - default: - continue + if addr, ok := symbolsBind[symbol.Name]; ok { + *addr = int64(baseAddr) + int64(symbol.Value) } } if pyRuntimeAddr == 0 && autoTLSkeyAddr == 0 { return nil, fmt.Errorf("missing symbols pyRuntimeAddr autoTLSkeyAddr %s %v", pythonPath, version) } + typecheck.O_PyThreadStateDict = int64(offsets.PyThreadState_dict) + typecheck.O_PyThreadStateInterp = int64(offsets.PyThreadState_interp) + typecheck.SizePyThreadState = int64(offsets.PyThreadStateSize) + typecheck.O_PyInterpreterStateTstateHead = int64(offsets.PyInterpreterState_tstate_head) + typecheck.O_PyInterpreterStateFinalizing = int64(offsets.PyInterpreterState_finalizing) + typecheck.O_PyInterpreterStateModules = int64(offsets.PyInterpreterState_modules) + typecheck.O_PyInterpreterStateImportlib = int64(offsets.PyInterpreterState_importlib) + typecheck.SizePyInterpreterState = int64(offsets.PyInterpreterStateSize) + if typecheck.O_PyInterpreterStateTstateHead == -1 && + offsets.PyInterpreterState_threads != -1 && offsets.Pythreads__head != -1 { + // moved in 3.11 + // https://github.com/python/cpython/commit/313f92a57bc3887026ec16adb536bb2b7580ce47 + typecheck.O_PyInterpreterStateTstateHead = int64(offsets.PyInterpreterState_threads) + int64(offsets.Pythreads__head) + } + + if err := validateTypeCheck(typecheck); err != nil { + return nil, fmt.Errorf("failed to validate typecheck %w", err) + } data.Version.Major = uint32(version.Major) data.Version.Minor = uint32(version.Minor) @@ -87,10 +134,13 @@ func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidD if err != nil { return nil, fmt.Errorf("failed to get python process libc %w", err) } - data.TssKey, err = GetTSSKey(pid, version, offsets, autoTLSkeyAddr, pyRuntimeAddr, &data.Libc) + data.TssKey, err = GetTSSKey(pid, version, offsets, uint64(autoTLSkeyAddr), uint64(pyRuntimeAddr), &data.Libc) if err != nil { return nil, fmt.Errorf("failed to get python tss key %w", err) } + if data.TssKey != 0 { + level.Warn(l).Log("msg", "tss key is not 0", "tss key", data.TssKey) + } var vframeCode, vframeBack, vframeLocalPlus int16 if version.Compare(Py311) >= 0 { @@ -132,6 +182,7 @@ func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidD PyCodeObjectCoName: offsets.PyCodeObject_co_name, PyCodeObjectCoVarnames: offsets.PyCodeObject_co_varnames, PyCodeObjectCoLocalsplusnames: offsets.PyCodeObject_co_localsplusnames, + PyCodeObjectCoNlocals: offsets.PyCodeObject_co_nlocals, PyTupleObjectObItem: offsets.PyTupleObject_ob_item, VFrameCode: vframeCode, VFramePrevious: vframeBack, @@ -143,6 +194,7 @@ func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidD PyObjectObType: offsets.PyObject_ob_type, PyTypeObjectTpName: offsets.PyTypeObject_tp_name, } + data.Typecheck = typecheck if collectKernel { data.CollectKernel = 1 } else { @@ -150,3 +202,17 @@ func GetPyPerfPidData(l log.Logger, pid uint32, collectKernel bool) (*PerfPyPidD } return data, nil } + +func validateTypeCheck(tc PerfPyTypecheckData) error { + v := reflect.ValueOf(tc) + for i := 0; i < v.NumField(); i++ { + name := v.Type().Field(i).Name + vv := uint64(v.Field(i).Int()) + fmt.Printf("tc %s %v\n", name, vv) + i2 := int64(-1) + if vv == 0 || vv == uint64(i2) { + return fmt.Errorf("field %s is not found", name) + } + } + return nil +} diff --git a/ebpf/python/python_offsets_gen_amd64.go b/ebpf/python/python_offsets_gen_amd64.go index 7fa8456d3b..cecaecf379 100644 --- a/ebpf/python/python_offsets_gen_amd64.go +++ b/ebpf/python/python_offsets_gen_amd64.go @@ -12,12 +12,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -34,6 +39,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.1 testdata/python-x64/3.5.1/lib/libpython3.5m.so.1.0 {3, 5, 1}: { @@ -43,12 +55,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -65,6 +82,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.2 testdata/python-x64/3.5.2/lib/libpython3.5m.so.1.0 {3, 5, 2}: { @@ -74,12 +98,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -96,6 +125,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.3 testdata/python-x64/3.5.3/lib/libpython3.5m.so.1.0 {3, 5, 3}: { @@ -105,12 +141,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -127,6 +168,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.4 testdata/python-x64/3.5.4/lib/libpython3.5m.so.1.0 {3, 5, 4}: { @@ -136,12 +184,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -158,6 +211,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.5 testdata/python-x64/3.5.5/lib/libpython3.5m.so.1.0 {3, 5, 5}: { @@ -167,12 +227,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -189,6 +254,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.6 testdata/python-x64/3.5.6/lib/libpython3.5m.so.1.0 {3, 5, 6}: { @@ -198,12 +270,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -220,6 +297,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.7 testdata/python-x64/3.5.7/lib/libpython3.5m.so.1.0 {3, 5, 7}: { @@ -229,12 +313,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -251,6 +340,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.8 testdata/python-x64/3.5.8/lib/libpython3.5m.so.1.0 {3, 5, 8}: { @@ -260,12 +356,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -282,6 +383,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.9 testdata/python-x64/3.5.9/lib/libpython3.5m.so.1.0 {3, 5, 9}: { @@ -291,12 +399,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -313,6 +426,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.10 testdata/python-x64/3.5.10/lib/libpython3.5m.so.1.0 {3, 5, 10}: { @@ -322,12 +442,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -344,6 +469,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.6.0 testdata/python-x64/3.6.0/lib/libpython3.6m.so.1.0 {3, 6, 0}: { @@ -353,12 +485,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -375,6 +512,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.1 testdata/python-x64/3.6.1/lib/libpython3.6m.so.1.0 {3, 6, 1}: { @@ -384,12 +528,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -406,6 +555,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.2 testdata/python-x64/3.6.2/lib/libpython3.6m.so.1.0 {3, 6, 2}: { @@ -415,12 +571,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -437,6 +598,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.3 testdata/python-x64/3.6.3/lib/libpython3.6m.so.1.0 {3, 6, 3}: { @@ -446,12 +614,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -468,6 +641,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.4 testdata/python-x64/3.6.4/lib/libpython3.6m.so.1.0 {3, 6, 4}: { @@ -477,12 +657,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -499,6 +684,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.5 testdata/python-x64/3.6.5/lib/libpython3.6m.so.1.0 {3, 6, 5}: { @@ -508,12 +700,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -530,6 +727,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.6 testdata/python-x64/3.6.6/lib/libpython3.6m.so.1.0 {3, 6, 6}: { @@ -539,12 +743,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -561,6 +770,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.7 testdata/python-x64/3.6.7/lib/libpython3.6m.so.1.0 {3, 6, 7}: { @@ -570,12 +786,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -592,6 +813,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.8 testdata/python-x64/3.6.8/lib/libpython3.6m.so.1.0 {3, 6, 8}: { @@ -601,12 +829,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -623,6 +856,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.9 testdata/python-x64/3.6.9/lib/libpython3.6m.so.1.0 {3, 6, 9}: { @@ -632,12 +872,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -654,6 +899,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.10 testdata/python-x64/3.6.10/lib/libpython3.6m.so.1.0 {3, 6, 10}: { @@ -663,12 +915,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -685,6 +942,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.11 testdata/python-x64/3.6.11/lib/libpython3.6m.so.1.0 {3, 6, 11}: { @@ -694,12 +958,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -716,6 +985,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.12 testdata/python-x64/3.6.12/lib/libpython3.6m.so.1.0 {3, 6, 12}: { @@ -725,12 +1001,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -747,6 +1028,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.13 testdata/python-x64/3.6.13/lib/libpython3.6m.so.1.0 {3, 6, 13}: { @@ -756,12 +1044,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -778,6 +1071,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.14 testdata/python-x64/3.6.14/lib/libpython3.6m.so.1.0 {3, 6, 14}: { @@ -787,12 +1087,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -809,6 +1114,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.15 testdata/python-x64/3.6.15/lib/libpython3.6m.so.1.0 {3, 6, 15}: { @@ -818,12 +1130,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -840,6 +1157,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.7.0 testdata/python-x64/3.7.0/lib/libpython3.7m.so.1.0 {3, 7, 0}: { @@ -849,12 +1173,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -871,6 +1200,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.1 testdata/python-x64/3.7.1/lib/libpython3.7m.so.1.0 {3, 7, 1}: { @@ -880,12 +1216,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -902,6 +1243,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.2 testdata/python-x64/3.7.2/lib/libpython3.7m.so.1.0 {3, 7, 2}: { @@ -911,12 +1259,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -933,6 +1286,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.3 testdata/python-x64/3.7.3/lib/libpython3.7m.so.1.0 {3, 7, 3}: { @@ -942,12 +1302,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -964,6 +1329,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.4 testdata/python-x64/3.7.4/lib/libpython3.7m.so.1.0 {3, 7, 4}: { @@ -973,12 +1345,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -995,6 +1372,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.5 testdata/python-x64/3.7.5/lib/libpython3.7m.so.1.0 {3, 7, 5}: { @@ -1004,12 +1388,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1026,6 +1415,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.6 testdata/python-x64/3.7.6/lib/libpython3.7m.so.1.0 {3, 7, 6}: { @@ -1035,12 +1431,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1057,6 +1458,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.7 testdata/python-x64/3.7.7/lib/libpython3.7m.so.1.0 {3, 7, 7}: { @@ -1066,12 +1474,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1088,6 +1501,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.8 testdata/python-x64/3.7.8/lib/libpython3.7m.so.1.0 {3, 7, 8}: { @@ -1097,12 +1517,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1119,6 +1544,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.9 testdata/python-x64/3.7.9/lib/libpython3.7m.so.1.0 {3, 7, 9}: { @@ -1128,12 +1560,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1150,6 +1587,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.10 testdata/python-x64/3.7.10/lib/libpython3.7m.so.1.0 {3, 7, 10}: { @@ -1159,12 +1603,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1181,6 +1630,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.11 testdata/python-x64/3.7.11/lib/libpython3.7m.so.1.0 {3, 7, 11}: { @@ -1190,12 +1646,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1212,6 +1673,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.12 testdata/python-x64/3.7.12/lib/libpython3.7m.so.1.0 {3, 7, 12}: { @@ -1221,12 +1689,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1243,6 +1716,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.13 testdata/python-x64/3.7.13/lib/libpython3.7m.so.1.0 {3, 7, 13}: { @@ -1252,12 +1732,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1274,6 +1759,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.14 testdata/python-x64/3.7.14/lib/libpython3.7m.so.1.0 {3, 7, 14}: { @@ -1283,12 +1775,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1305,6 +1802,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.15 testdata/python-x64/3.7.15/lib/libpython3.7m.so.1.0 {3, 7, 15}: { @@ -1314,12 +1818,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1336,6 +1845,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.16 testdata/python-x64/3.7.16/lib/libpython3.7m.so.1.0 {3, 7, 16}: { @@ -1345,12 +1861,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1367,6 +1888,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.17 testdata/python-x64/3.7.17/lib/libpython3.7m.so.1.0 {3, 7, 17}: { @@ -1376,12 +1904,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1398,6 +1931,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.8.0 testdata/python-x64/3.8.0/lib/libpython3.8.so.1.0 {3, 8, 0}: { @@ -1407,12 +1947,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1429,6 +1974,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.1 testdata/python-x64/3.8.1/lib/libpython3.8.so.1.0 {3, 8, 1}: { @@ -1438,12 +1990,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1460,6 +2017,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.2 testdata/python-x64/3.8.2/lib/libpython3.8.so.1.0 {3, 8, 2}: { @@ -1469,12 +2033,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1491,6 +2060,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.3 testdata/python-x64/3.8.3/lib/libpython3.8.so.1.0 {3, 8, 3}: { @@ -1500,12 +2076,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1522,6 +2103,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.4 testdata/python-x64/3.8.4/lib/libpython3.8.so.1.0 {3, 8, 4}: { @@ -1531,12 +2119,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1553,6 +2146,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.5 testdata/python-x64/3.8.5/lib/libpython3.8.so.1.0 {3, 8, 5}: { @@ -1562,12 +2162,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1584,6 +2189,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.6 testdata/python-x64/3.8.6/lib/libpython3.8.so.1.0 {3, 8, 6}: { @@ -1593,12 +2205,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1615,6 +2232,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.7 testdata/python-x64/3.8.7/lib/libpython3.8.so.1.0 {3, 8, 7}: { @@ -1624,12 +2248,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1646,6 +2275,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.8 testdata/python-x64/3.8.8/lib/libpython3.8.so.1.0 {3, 8, 8}: { @@ -1655,12 +2291,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1677,6 +2318,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.9 testdata/python-x64/3.8.9/lib/libpython3.8.so.1.0 {3, 8, 9}: { @@ -1686,12 +2334,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1708,6 +2361,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.10 testdata/python-x64/3.8.10/lib/libpython3.8.so.1.0 {3, 8, 10}: { @@ -1717,12 +2377,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1739,6 +2404,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.11 testdata/python-x64/3.8.11/lib/libpython3.8.so.1.0 {3, 8, 11}: { @@ -1748,12 +2420,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1770,6 +2447,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.12 testdata/python-x64/3.8.12/lib/libpython3.8.so.1.0 {3, 8, 12}: { @@ -1779,12 +2463,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1801,6 +2490,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.13 testdata/python-x64/3.8.13/lib/libpython3.8.so.1.0 {3, 8, 13}: { @@ -1810,12 +2506,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1832,6 +2533,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.14 testdata/python-x64/3.8.14/lib/libpython3.8.so.1.0 {3, 8, 14}: { @@ -1841,12 +2549,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1863,6 +2576,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.15 testdata/python-x64/3.8.15/lib/libpython3.8.so.1.0 {3, 8, 15}: { @@ -1872,12 +2592,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1894,6 +2619,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.16 testdata/python-x64/3.8.16/lib/libpython3.8.so.1.0 {3, 8, 16}: { @@ -1903,12 +2635,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1925,6 +2662,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.17 testdata/python-x64/3.8.17/lib/libpython3.8.so.1.0 {3, 8, 17}: { @@ -1934,12 +2678,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1956,6 +2705,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.18 testdata/python-x64/3.8.18/lib/libpython3.8.so.1.0 {3, 8, 18}: { @@ -1965,12 +2721,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1987,6 +2748,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.9.0 testdata/python-x64/3.9.0/lib/libpython3.9.so.1.0 {3, 9, 0}: { @@ -1996,12 +2764,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2018,6 +2791,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.1 testdata/python-x64/3.9.1/lib/libpython3.9.so.1.0 {3, 9, 1}: { @@ -2027,12 +2807,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2049,6 +2834,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.2 testdata/python-x64/3.9.2/lib/libpython3.9.so.1.0 {3, 9, 2}: { @@ -2058,12 +2850,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2080,6 +2877,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.4 testdata/python-x64/3.9.4/lib/libpython3.9.so.1.0 {3, 9, 4}: { @@ -2089,12 +2893,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2111,6 +2920,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.5 testdata/python-x64/3.9.5/lib/libpython3.9.so.1.0 {3, 9, 5}: { @@ -2120,12 +2936,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2142,6 +2963,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.6 testdata/python-x64/3.9.6/lib/libpython3.9.so.1.0 {3, 9, 6}: { @@ -2151,12 +2979,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2173,6 +3006,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.7 testdata/python-x64/3.9.7/lib/libpython3.9.so.1.0 {3, 9, 7}: { @@ -2182,12 +3022,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2204,6 +3049,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.8 testdata/python-x64/3.9.8/lib/libpython3.9.so.1.0 {3, 9, 8}: { @@ -2213,12 +3065,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2235,6 +3092,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.9 testdata/python-x64/3.9.9/lib/libpython3.9.so.1.0 {3, 9, 9}: { @@ -2244,12 +3108,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2266,6 +3135,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.10 testdata/python-x64/3.9.10/lib/libpython3.9.so.1.0 {3, 9, 10}: { @@ -2275,12 +3151,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2297,6 +3178,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.11 testdata/python-x64/3.9.11/lib/libpython3.9.so.1.0 {3, 9, 11}: { @@ -2306,12 +3194,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2328,6 +3221,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.12 testdata/python-x64/3.9.12/lib/libpython3.9.so.1.0 {3, 9, 12}: { @@ -2337,12 +3237,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2359,6 +3264,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.13 testdata/python-x64/3.9.13/lib/libpython3.9.so.1.0 {3, 9, 13}: { @@ -2368,12 +3280,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2390,6 +3307,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.14 testdata/python-x64/3.9.14/lib/libpython3.9.so.1.0 {3, 9, 14}: { @@ -2399,12 +3323,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2421,6 +3350,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.15 testdata/python-x64/3.9.15/lib/libpython3.9.so.1.0 {3, 9, 15}: { @@ -2430,12 +3366,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2452,6 +3393,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.16 testdata/python-x64/3.9.16/lib/libpython3.9.so.1.0 {3, 9, 16}: { @@ -2461,12 +3409,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2483,6 +3436,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.17 testdata/python-x64/3.9.17/lib/libpython3.9.so.1.0 {3, 9, 17}: { @@ -2492,12 +3452,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2514,6 +3479,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.18 testdata/python-x64/3.9.18/lib/libpython3.9.so.1.0 {3, 9, 18}: { @@ -2523,12 +3495,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2545,6 +3522,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.10.0 testdata/python-x64/3.10.0/lib/libpython3.10.so.1.0 {3, 10, 0}: { @@ -2554,12 +3538,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2576,6 +3565,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.1 testdata/python-x64/3.10.1/lib/libpython3.10.so.1.0 {3, 10, 1}: { @@ -2585,12 +3581,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2607,6 +3608,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.2 testdata/python-x64/3.10.2/lib/libpython3.10.so.1.0 {3, 10, 2}: { @@ -2616,12 +3624,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2638,6 +3651,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.3 testdata/python-x64/3.10.3/lib/libpython3.10.so.1.0 {3, 10, 3}: { @@ -2647,12 +3667,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2669,6 +3694,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.4 testdata/python-x64/3.10.4/lib/libpython3.10.so.1.0 {3, 10, 4}: { @@ -2678,12 +3710,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2700,6 +3737,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.5 testdata/python-x64/3.10.5/lib/libpython3.10.so.1.0 {3, 10, 5}: { @@ -2709,12 +3753,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2731,6 +3780,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.6 testdata/python-x64/3.10.6/lib/libpython3.10.so.1.0 {3, 10, 6}: { @@ -2740,12 +3796,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2762,6 +3823,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.7 testdata/python-x64/3.10.7/lib/libpython3.10.so.1.0 {3, 10, 7}: { @@ -2771,12 +3839,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2793,6 +3866,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.8 testdata/python-x64/3.10.8/lib/libpython3.10.so.1.0 {3, 10, 8}: { @@ -2802,12 +3882,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2824,6 +3909,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.9 testdata/python-x64/3.10.9/lib/libpython3.10.so.1.0 {3, 10, 9}: { @@ -2833,12 +3925,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2855,6 +3952,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.10 testdata/python-x64/3.10.10/lib/libpython3.10.so.1.0 {3, 10, 10}: { @@ -2864,12 +3968,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2886,6 +3995,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.11 testdata/python-x64/3.10.11/lib/libpython3.10.so.1.0 {3, 10, 11}: { @@ -2895,12 +4011,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2917,6 +4038,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.12 testdata/python-x64/3.10.12/lib/libpython3.10.so.1.0 {3, 10, 12}: { @@ -2926,12 +4054,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2948,6 +4081,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.13 testdata/python-x64/3.10.13/lib/libpython3.10.so.1.0 {3, 10, 13}: { @@ -2957,12 +4097,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2979,6 +4124,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.11.0 testdata/python-x64/3.11.0/lib/libpython3.11.so.1.0 {3, 11, 0}: { @@ -2988,12 +4140,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3010,6 +4167,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.1 testdata/python-x64/3.11.1/lib/libpython3.11.so.1.0 {3, 11, 1}: { @@ -3019,12 +4183,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3041,6 +4210,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.2 testdata/python-x64/3.11.2/lib/libpython3.11.so.1.0 {3, 11, 2}: { @@ -3050,12 +4226,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3072,6 +4253,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.3 testdata/python-x64/3.11.3/lib/libpython3.11.so.1.0 {3, 11, 3}: { @@ -3081,12 +4269,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3103,6 +4296,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.4 testdata/python-x64/3.11.4/lib/libpython3.11.so.1.0 {3, 11, 4}: { @@ -3112,12 +4312,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3134,6 +4339,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.5 testdata/python-x64/3.11.5/lib/libpython3.11.so.1.0 {3, 11, 5}: { @@ -3143,12 +4355,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3165,6 +4382,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.6 testdata/python-x64/3.11.6/lib/libpython3.11.so.1.0 {3, 11, 6}: { @@ -3174,12 +4398,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3196,6 +4425,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.7 testdata/python-x64/3.11.7/lib/libpython3.11.so.1.0 {3, 11, 7}: { @@ -3205,12 +4441,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3227,6 +4468,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.8 testdata/python-x64/3.11.8/lib/libpython3.11.so.1.0 {3, 11, 8}: { @@ -3236,12 +4484,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3258,6 +4511,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.12.0 testdata/python-x64/3.12.0/lib/libpython3.12.so.1.0 {3, 12, 0}: { @@ -3267,12 +4527,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3289,6 +4554,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383520, + PyConfig_executable: 336, }, // 3.12.1 testdata/python-x64/3.12.1/lib/libpython3.12.so.1.0 {3, 12, 1}: { @@ -3298,12 +4570,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3320,6 +4597,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383552, + PyConfig_executable: 336, }, // 3.12.2 testdata/python-x64/3.12.2/lib/libpython3.12.so.1.0 {3, 12, 2}: { @@ -3329,12 +4613,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3351,6 +4640,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383552, + PyConfig_executable: 336, }, // 3.13.0 testdata/python-x64/3.13.0a4/libpython3.13.so.1.0 {3, 13, 0}: { @@ -3360,12 +4656,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: -1, PyThreadState_current_frame: 64, + PyThreadState_dict: 120, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: -1, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3382,5 +4683,12 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 924, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 936, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 153552, + PyConfig_executable: 344, }, } diff --git a/ebpf/python/python_offsets_gen_arm64.go b/ebpf/python/python_offsets_gen_arm64.go index 6f55a813f3..96f7fd840f 100644 --- a/ebpf/python/python_offsets_gen_arm64.go +++ b/ebpf/python/python_offsets_gen_arm64.go @@ -12,12 +12,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -34,6 +39,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.1 testdata/python-arm64/3.5.1/lib/libpython3.5m.so.1.0 {3, 5, 1}: { @@ -43,12 +55,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -65,6 +82,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.2 testdata/python-arm64/3.5.2/lib/libpython3.5m.so.1.0 {3, 5, 2}: { @@ -74,12 +98,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -96,6 +125,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.3 testdata/python-arm64/3.5.3/lib/libpython3.5m.so.1.0 {3, 5, 3}: { @@ -105,12 +141,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -127,6 +168,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.4 testdata/python-arm64/3.5.4/lib/libpython3.5m.so.1.0 {3, 5, 4}: { @@ -136,12 +184,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -158,6 +211,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.5 testdata/python-arm64/3.5.5/lib/libpython3.5m.so.1.0 {3, 5, 5}: { @@ -167,12 +227,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -189,6 +254,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.6 testdata/python-arm64/3.5.6/lib/libpython3.5m.so.1.0 {3, 5, 6}: { @@ -198,12 +270,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -220,6 +297,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.7 testdata/python-arm64/3.5.7/lib/libpython3.5m.so.1.0 {3, 5, 7}: { @@ -229,12 +313,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -251,6 +340,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.8 testdata/python-arm64/3.5.8/lib/libpython3.5m.so.1.0 {3, 5, 8}: { @@ -260,12 +356,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -282,6 +383,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.9 testdata/python-arm64/3.5.9/lib/libpython3.5m.so.1.0 {3, 5, 9}: { @@ -291,12 +399,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -313,6 +426,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.5.10 testdata/python-arm64/3.5.10/lib/libpython3.5m.so.1.0 {3, 5, 10}: { @@ -322,12 +442,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 208, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -344,6 +469,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 104, + PyConfig_executable: -1, }, // 3.6.0 testdata/python-arm64/3.6.0/lib/libpython3.6m.so.1.0 {3, 6, 0}: { @@ -353,12 +485,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -375,6 +512,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.1 testdata/python-arm64/3.6.1/lib/libpython3.6m.so.1.0 {3, 6, 1}: { @@ -384,12 +528,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -406,6 +555,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.2 testdata/python-arm64/3.6.2/lib/libpython3.6m.so.1.0 {3, 6, 2}: { @@ -415,12 +571,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -437,6 +598,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.3 testdata/python-arm64/3.6.3/lib/libpython3.6m.so.1.0 {3, 6, 3}: { @@ -446,12 +614,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -468,6 +641,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.4 testdata/python-arm64/3.6.4/lib/libpython3.6m.so.1.0 {3, 6, 4}: { @@ -477,12 +657,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -499,6 +684,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.5 testdata/python-arm64/3.6.5/lib/libpython3.6m.so.1.0 {3, 6, 5}: { @@ -508,12 +700,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -530,6 +727,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.6 testdata/python-arm64/3.6.6/lib/libpython3.6m.so.1.0 {3, 6, 6}: { @@ -539,12 +743,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -561,6 +770,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.7 testdata/python-arm64/3.6.7/lib/libpython3.6m.so.1.0 {3, 6, 7}: { @@ -570,12 +786,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -592,6 +813,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.8 testdata/python-arm64/3.6.8/lib/libpython3.6m.so.1.0 {3, 6, 8}: { @@ -601,12 +829,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -623,6 +856,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.9 testdata/python-arm64/3.6.9/lib/libpython3.6m.so.1.0 {3, 6, 9}: { @@ -632,12 +872,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -654,6 +899,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.10 testdata/python-arm64/3.6.10/lib/libpython3.6m.so.1.0 {3, 6, 10}: { @@ -663,12 +915,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -685,6 +942,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.11 testdata/python-arm64/3.6.11/lib/libpython3.6m.so.1.0 {3, 6, 11}: { @@ -694,12 +958,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -716,6 +985,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.12 testdata/python-arm64/3.6.12/lib/libpython3.6m.so.1.0 {3, 6, 12}: { @@ -725,12 +1001,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -747,6 +1028,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.13 testdata/python-arm64/3.6.13/lib/libpython3.6m.so.1.0 {3, 6, 13}: { @@ -756,12 +1044,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -778,6 +1071,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.14 testdata/python-arm64/3.6.14/lib/libpython3.6m.so.1.0 {3, 6, 14}: { @@ -787,12 +1087,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -809,6 +1114,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.6.15 testdata/python-arm64/3.6.15/lib/libpython3.6m.so.1.0 {3, 6, 15}: { @@ -818,12 +1130,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 2272, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 376, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -840,6 +1157,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: -1, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 16, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 48, + PyInterpreterStateSize: 120, + PyConfig_executable: -1, }, // 3.7.0 testdata/python-arm64/3.7.0/lib/libpython3.7m.so.1.0 {3, 7, 0}: { @@ -849,12 +1173,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -871,6 +1200,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.1 testdata/python-arm64/3.7.1/lib/libpython3.7m.so.1.0 {3, 7, 1}: { @@ -880,12 +1216,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -902,6 +1243,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.2 testdata/python-arm64/3.7.2/lib/libpython3.7m.so.1.0 {3, 7, 2}: { @@ -911,12 +1259,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -933,6 +1286,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.3 testdata/python-arm64/3.7.3/lib/libpython3.7m.so.1.0 {3, 7, 3}: { @@ -942,12 +1302,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -964,6 +1329,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.4 testdata/python-arm64/3.7.4/lib/libpython3.7m.so.1.0 {3, 7, 4}: { @@ -973,12 +1345,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -995,6 +1372,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.5 testdata/python-arm64/3.7.5/lib/libpython3.7m.so.1.0 {3, 7, 5}: { @@ -1004,12 +1388,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1026,6 +1415,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.6 testdata/python-arm64/3.7.6/lib/libpython3.7m.so.1.0 {3, 7, 6}: { @@ -1035,12 +1431,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1057,6 +1458,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.7 testdata/python-arm64/3.7.7/lib/libpython3.7m.so.1.0 {3, 7, 7}: { @@ -1066,12 +1474,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1088,6 +1501,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.8 testdata/python-arm64/3.7.8/lib/libpython3.7m.so.1.0 {3, 7, 8}: { @@ -1097,12 +1517,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1119,6 +1544,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.9 testdata/python-arm64/3.7.9/lib/libpython3.7m.so.1.0 {3, 7, 9}: { @@ -1128,12 +1560,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1150,6 +1587,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.10 testdata/python-arm64/3.7.10/lib/libpython3.7m.so.1.0 {3, 7, 10}: { @@ -1159,12 +1603,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1181,6 +1630,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.11 testdata/python-arm64/3.7.11/lib/libpython3.7m.so.1.0 {3, 7, 11}: { @@ -1190,12 +1646,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1212,6 +1673,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.12 testdata/python-arm64/3.7.12/lib/libpython3.7m.so.1.0 {3, 7, 12}: { @@ -1221,12 +1689,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1243,6 +1716,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.13 testdata/python-arm64/3.7.13/lib/libpython3.7m.so.1.0 {3, 7, 13}: { @@ -1252,12 +1732,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1274,6 +1759,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.14 testdata/python-arm64/3.7.14/lib/libpython3.7m.so.1.0 {3, 7, 14}: { @@ -1283,12 +1775,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1305,6 +1802,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.15 testdata/python-arm64/3.7.15/lib/libpython3.7m.so.1.0 {3, 7, 15}: { @@ -1314,12 +1818,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1336,6 +1845,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.16 testdata/python-arm64/3.7.16/lib/libpython3.7m.so.1.0 {3, 7, 16}: { @@ -1345,12 +1861,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1367,6 +1888,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.7.17 testdata/python-arm64/3.7.17/lib/libpython3.7m.so.1.0 {3, 7, 17}: { @@ -1376,12 +1904,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 96, PyCodeObject_co_name: 104, + PyCodeObject_co_nlocals: 24, PyCodeObject_co_varnames: 64, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1398,6 +1931,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: -1, + PyInterpreterState_modules: 40, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 72, + PyInterpreterStateSize: 2568, + PyConfig_executable: -1, }, // 3.8.0 testdata/python-arm64/3.8.0/lib/libpython3.8.so.1.0 {3, 8, 0}: { @@ -1407,12 +1947,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1429,6 +1974,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.1 testdata/python-arm64/3.8.1/lib/libpython3.8.so.1.0 {3, 8, 1}: { @@ -1438,12 +1990,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1460,6 +2017,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.2 testdata/python-arm64/3.8.2/lib/libpython3.8.so.1.0 {3, 8, 2}: { @@ -1469,12 +2033,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1491,6 +2060,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.3 testdata/python-arm64/3.8.3/lib/libpython3.8.so.1.0 {3, 8, 3}: { @@ -1500,12 +2076,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1522,6 +2103,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.4 testdata/python-arm64/3.8.4/lib/libpython3.8.so.1.0 {3, 8, 4}: { @@ -1531,12 +2119,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1553,6 +2146,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.5 testdata/python-arm64/3.8.5/lib/libpython3.8.so.1.0 {3, 8, 5}: { @@ -1562,12 +2162,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1584,6 +2189,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.6 testdata/python-arm64/3.8.6/lib/libpython3.8.so.1.0 {3, 8, 6}: { @@ -1593,12 +2205,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1615,6 +2232,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.7 testdata/python-arm64/3.8.7/lib/libpython3.8.so.1.0 {3, 8, 7}: { @@ -1624,12 +2248,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1646,6 +2275,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.8 testdata/python-arm64/3.8.8/lib/libpython3.8.so.1.0 {3, 8, 8}: { @@ -1655,12 +2291,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1677,6 +2318,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.9 testdata/python-arm64/3.8.9/lib/libpython3.8.so.1.0 {3, 8, 9}: { @@ -1686,12 +2334,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1708,6 +2361,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.10 testdata/python-arm64/3.8.10/lib/libpython3.8.so.1.0 {3, 8, 10}: { @@ -1717,12 +2377,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1739,6 +2404,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.11 testdata/python-arm64/3.8.11/lib/libpython3.8.so.1.0 {3, 8, 11}: { @@ -1748,12 +2420,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1770,6 +2447,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.12 testdata/python-arm64/3.8.12/lib/libpython3.8.so.1.0 {3, 8, 12}: { @@ -1779,12 +2463,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1801,6 +2490,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.13 testdata/python-arm64/3.8.13/lib/libpython3.8.so.1.0 {3, 8, 13}: { @@ -1810,12 +2506,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1832,6 +2533,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2712, + PyConfig_executable: 272, }, // 3.8.14 testdata/python-arm64/3.8.14/lib/libpython3.8.so.1.0 {3, 8, 14}: { @@ -1841,12 +2549,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1863,6 +2576,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.15 testdata/python-arm64/3.8.15/lib/libpython3.8.so.1.0 {3, 8, 15}: { @@ -1872,12 +2592,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1894,6 +2619,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.16 testdata/python-arm64/3.8.16/lib/libpython3.8.so.1.0 {3, 8, 16}: { @@ -1903,12 +2635,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1925,6 +2662,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.17 testdata/python-arm64/3.8.17/lib/libpython3.8.so.1.0 {3, 8, 17}: { @@ -1934,12 +2678,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1956,6 +2705,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.8.18 testdata/python-arm64/3.8.18/lib/libpython3.8.so.1.0 {3, 8, 18}: { @@ -1965,12 +2721,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -1987,6 +2748,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 48, + PyInterpreterState_modules: 56, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 88, + PyInterpreterStateSize: 2720, + PyConfig_executable: 272, }, // 3.9.0 testdata/python-arm64/3.9.0/lib/libpython3.9.so.1.0 {3, 9, 0}: { @@ -1996,12 +2764,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2018,6 +2791,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.1 testdata/python-arm64/3.9.1/lib/libpython3.9.so.1.0 {3, 9, 1}: { @@ -2027,12 +2807,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2049,6 +2834,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.2 testdata/python-arm64/3.9.2/lib/libpython3.9.so.1.0 {3, 9, 2}: { @@ -2058,12 +2850,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2080,6 +2877,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.4 testdata/python-arm64/3.9.4/lib/libpython3.9.so.1.0 {3, 9, 4}: { @@ -2089,12 +2893,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2111,6 +2920,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.5 testdata/python-arm64/3.9.5/lib/libpython3.9.so.1.0 {3, 9, 5}: { @@ -2120,12 +2936,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2142,6 +2963,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.6 testdata/python-arm64/3.9.6/lib/libpython3.9.so.1.0 {3, 9, 6}: { @@ -2151,12 +2979,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2173,6 +3006,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.7 testdata/python-arm64/3.9.7/lib/libpython3.9.so.1.0 {3, 9, 7}: { @@ -2182,12 +3022,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2204,6 +3049,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.8 testdata/python-arm64/3.9.8/lib/libpython3.9.so.1.0 {3, 9, 8}: { @@ -2213,12 +3065,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2235,6 +3092,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.9 testdata/python-arm64/3.9.9/lib/libpython3.9.so.1.0 {3, 9, 9}: { @@ -2244,12 +3108,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2266,6 +3135,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.10 testdata/python-arm64/3.9.10/lib/libpython3.9.so.1.0 {3, 9, 10}: { @@ -2275,12 +3151,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2297,6 +3178,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.11 testdata/python-arm64/3.9.11/lib/libpython3.9.so.1.0 {3, 9, 11}: { @@ -2306,12 +3194,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2328,6 +3221,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.12 testdata/python-arm64/3.9.12/lib/libpython3.9.so.1.0 {3, 9, 12}: { @@ -2337,12 +3237,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2359,6 +3264,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.13 testdata/python-arm64/3.9.13/lib/libpython3.9.so.1.0 {3, 9, 13}: { @@ -2368,12 +3280,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2390,6 +3307,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5648, + PyConfig_executable: 272, }, // 3.9.14 testdata/python-arm64/3.9.14/lib/libpython3.9.so.1.0 {3, 9, 14}: { @@ -2399,12 +3323,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2421,6 +3350,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.15 testdata/python-arm64/3.9.15/lib/libpython3.9.so.1.0 {3, 9, 15}: { @@ -2430,12 +3366,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2452,6 +3393,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.16 testdata/python-arm64/3.9.16/lib/libpython3.9.so.1.0 {3, 9, 16}: { @@ -2461,12 +3409,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2483,6 +3436,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.17 testdata/python-arm64/3.9.17/lib/libpython3.9.so.1.0 {3, 9, 17}: { @@ -2492,12 +3452,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2514,6 +3479,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.9.18 testdata/python-arm64/3.9.18/lib/libpython3.9.so.1.0 {3, 9, 18}: { @@ -2523,12 +3495,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: -1, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 264, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 360, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2545,6 +3522,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 5656, + PyConfig_executable: 272, }, // 3.10.0 testdata/python-arm64/3.10.0/lib/libpython3.10.so.1.0 {3, 10, 0}: { @@ -2554,12 +3538,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2576,6 +3565,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.1 testdata/python-arm64/3.10.1/lib/libpython3.10.so.1.0 {3, 10, 1}: { @@ -2585,12 +3581,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2607,6 +3608,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.2 testdata/python-arm64/3.10.2/lib/libpython3.10.so.1.0 {3, 10, 2}: { @@ -2616,12 +3624,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2638,6 +3651,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.3 testdata/python-arm64/3.10.3/lib/libpython3.10.so.1.0 {3, 10, 3}: { @@ -2647,12 +3667,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2669,6 +3694,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.4 testdata/python-arm64/3.10.4/lib/libpython3.10.so.1.0 {3, 10, 4}: { @@ -2678,12 +3710,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2700,6 +3737,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.5 testdata/python-arm64/3.10.5/lib/libpython3.10.so.1.0 {3, 10, 5}: { @@ -2709,12 +3753,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2731,6 +3780,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.6 testdata/python-arm64/3.10.6/lib/libpython3.10.so.1.0 {3, 10, 6}: { @@ -2740,12 +3796,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2762,6 +3823,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113520, + PyConfig_executable: 296, }, // 3.10.7 testdata/python-arm64/3.10.7/lib/libpython3.10.so.1.0 {3, 10, 7}: { @@ -2771,12 +3839,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2793,6 +3866,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.8 testdata/python-arm64/3.10.8/lib/libpython3.10.so.1.0 {3, 10, 8}: { @@ -2802,12 +3882,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2824,6 +3909,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.9 testdata/python-arm64/3.10.9/lib/libpython3.10.so.1.0 {3, 10, 9}: { @@ -2833,12 +3925,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2855,6 +3952,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.10 testdata/python-arm64/3.10.10/lib/libpython3.10.so.1.0 {3, 10, 10}: { @@ -2864,12 +3968,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2886,6 +3995,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.11 testdata/python-arm64/3.10.11/lib/libpython3.10.so.1.0 {3, 10, 11}: { @@ -2895,12 +4011,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2917,6 +4038,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.12 testdata/python-arm64/3.10.12/lib/libpython3.10.so.1.0 {3, 10, 12}: { @@ -2926,12 +4054,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2948,6 +4081,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.10.13 testdata/python-arm64/3.10.13/lib/libpython3.10.so.1.0 {3, 10, 13}: { @@ -2957,12 +4097,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: 24, PyThreadState_cframe: 48, PyThreadState_current_frame: -1, + PyThreadState_dict: 152, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: -1, PyFrameObject_f_back: 24, PyFrameObject_f_code: 32, PyFrameObject_f_localsplus: 352, PyCodeObject_co_filename: 104, PyCodeObject_co_name: 112, + PyCodeObject_co_nlocals: 28, PyCodeObject_co_varnames: 72, PyCodeObject_co_localsplusnames: -1, PyTupleObject_ob_item: 24, @@ -2979,6 +4124,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 56, + PyInterpreterState_modules: 856, + PyInterpreterState_tstate_head: 8, + PyInterpreterState_threads: -1, + PyInterpreterState_importlib: 888, + PyInterpreterStateSize: 113528, + PyConfig_executable: 296, }, // 3.11.0 testdata/python-arm64/3.11.0/lib/libpython3.11.so.1.0 {3, 11, 0}: { @@ -2988,12 +4140,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3010,6 +4167,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.1 testdata/python-arm64/3.11.1/lib/libpython3.11.so.1.0 {3, 11, 1}: { @@ -3019,12 +4183,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3041,6 +4210,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.2 testdata/python-arm64/3.11.2/lib/libpython3.11.so.1.0 {3, 11, 2}: { @@ -3050,12 +4226,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3072,6 +4253,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.3 testdata/python-arm64/3.11.3/lib/libpython3.11.so.1.0 {3, 11, 3}: { @@ -3081,12 +4269,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3103,6 +4296,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.4 testdata/python-arm64/3.11.4/lib/libpython3.11.so.1.0 {3, 11, 4}: { @@ -3112,12 +4312,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3134,6 +4339,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.5 testdata/python-arm64/3.11.5/lib/libpython3.11.so.1.0 {3, 11, 5}: { @@ -3143,12 +4355,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3165,6 +4382,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.6 testdata/python-arm64/3.11.6/lib/libpython3.11.so.1.0 {3, 11, 6}: { @@ -3174,12 +4398,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3196,6 +4425,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.7 testdata/python-arm64/3.11.7/libpython3.11.so.1.0 {3, 11, 7}: { @@ -3205,12 +4441,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3227,6 +4468,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.11.8 testdata/python-arm64/3.11.8/libpython3.11.so.1.0 {3, 11, 8}: { @@ -3236,12 +4484,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 128, + PyThreadState_interp: 16, + PyThreadStateSize: 360, PyCFrame_current_frame: 8, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3258,6 +4511,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 48, PyCompactUnicodeObjectSize: 72, + PyInterpreterState_finalizing: 84, + PyInterpreterState_modules: 888, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 8, + PyInterpreterState_importlib: 920, + PyInterpreterStateSize: 107752, + PyConfig_executable: 328, }, // 3.12.0 testdata/python-arm64/3.12.0/lib/libpython3.12.so.1.0 {3, 12, 0}: { @@ -3267,12 +4527,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3289,6 +4554,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383536, + PyConfig_executable: 336, }, // 3.12.1 testdata/python-arm64/3.12.1/libpython3.12.so.1.0 {3, 12, 1}: { @@ -3298,12 +4570,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3320,6 +4597,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383568, + PyConfig_executable: 336, }, // 3.12.2 testdata/python-arm64/3.12.2/libpython3.12.so.1.0 {3, 12, 2}: { @@ -3329,12 +4613,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: 56, PyThreadState_current_frame: -1, + PyThreadState_dict: 112, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: 0, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3351,6 +4640,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 44, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 64, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 383568, + PyConfig_executable: 336, }, // 3.13.0 testdata/python-arm64/3.13.0a4/libpython3.13.so.1.0 {3, 13, 0}: { @@ -3360,12 +4656,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: -1, PyThreadState_current_frame: 64, + PyThreadState_dict: 120, + PyThreadState_interp: 16, + PyThreadStateSize: 288, PyCFrame_current_frame: -1, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3382,6 +4683,13 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 924, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 936, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 153568, + PyConfig_executable: 344, }, // 3.13.0 testdata/python-arm64/3.13.0a1/lib/libpython3.13.so.1.0 {3, 13, 0}: { @@ -3391,12 +4699,17 @@ var pyVersions = map[Version]*UserOffsets{ PyThreadState_frame: -1, PyThreadState_cframe: -1, PyThreadState_current_frame: 64, + PyThreadState_dict: 120, + PyThreadState_interp: 16, + PyThreadStateSize: 280, PyCFrame_current_frame: -1, + Pythreads__head: 8, PyFrameObject_f_back: 16, PyFrameObject_f_code: -1, PyFrameObject_f_localsplus: -1, PyCodeObject_co_filename: 112, PyCodeObject_co_name: 120, + PyCodeObject_co_nlocals: 80, PyCodeObject_co_varnames: -1, PyCodeObject_co_localsplusnames: 96, PyTupleObject_ob_item: 24, @@ -3413,5 +4726,12 @@ var pyVersions = map[Version]*UserOffsets{ PyTssTSize: 8, PyASCIIObjectSize: 40, PyCompactUnicodeObjectSize: 56, + PyInterpreterState_finalizing: 932, + PyInterpreterState_modules: -1, + PyInterpreterState_tstate_head: -1, + PyInterpreterState_threads: 944, + PyInterpreterState_importlib: -1, + PyInterpreterStateSize: 416656, + PyConfig_executable: 344, }, } diff --git a/ebpf/python/sync.go b/ebpf/python/sync.go index 0fc9d8db81..437d7a5be2 100644 --- a/ebpf/python/sync.go +++ b/ebpf/python/sync.go @@ -11,6 +11,7 @@ enum { STACK_STATUS_TRUNCATED = 2, }; + enum { PY_ERROR_GENERIC = 1, PY_ERROR_THREAD_STATE = 2, @@ -24,9 +25,14 @@ enum { PY_ERROR_CLASS_NAME = 10, PY_ERROR_FILE_NAME = 11, PY_ERROR_NAME = 12, - - - + PY_ERROR_FRAME_OWNER = 13, + PY_ERROR_FRAME_OWNER_INVALID = 14, + PY_ERROR_FRAME_TYPECHECK = 15, + PY_ERROR_CODE_TYPECHECK = 16, + PY_ERROR_RESERVED2 = 17, + PY_ERROR_RESERVED3 = 18, + + __PY_ERROR_TOTAL_NUMBER_OF_ERRORS = 19, // not an error }; */ @@ -54,18 +60,25 @@ func (s StackStatus) String() string { type PyError uint8 var ( - PyErrorGeneric PyError = 1 - PyErrorThreadState PyError = 2 - PyErrorThreadStateNull PyError = 3 - PyErrorTopFrame PyError = 4 - PyErrorFrameCode PyError = 5 - PyErrorFramePrev PyError = 6 - PyErrorSymbol PyError = 7 - PyErrorTlsbase PyError = 8 - PyErrorFirstArg PyError = 9 - PyErrorClassName PyError = 10 - PyErrorFileName PyError = 11 - PyErrorName PyError = 12 + PyErrorGeneric PyError = 1 + PyErrorThreadState PyError = 2 + PyErrorThreadStateNull PyError = 3 + PyErrorTopFrame PyError = 4 + PyErrorFrameCode PyError = 5 + PyErrorFramePrev PyError = 6 + PyErrorSymbol PyError = 7 + PyErrorTlsbase PyError = 8 + PyErrorFirstArg PyError = 9 + PyErrorClassName PyError = 10 + PyErrorFileName PyError = 11 + PyErrorName PyError = 12 + PyErrorFrameOwner PyError = 13 + PyErrorFrameOwnerInvalid PyError = 14 + PyErrorFrameTypecheck PyError = 15 + PyErrorCodeTypecheck PyError = 16 + PyErrorReserved2 PyError = 17 + PyErrorReserved3 PyError = 18 + PyErrorTotalNumberOfErrors PyError = 19 ) func (e PyError) String() string { @@ -94,6 +107,20 @@ func (e PyError) String() string { return "PyErrorFileName" case PyErrorName: return "PyErrorName" + case PyErrorFrameOwner: + return "PyErrorFrameOwner" + case PyErrorFrameOwnerInvalid: + return "PyErrorFrameOwnerInvalid" + case PyErrorFrameTypecheck: + return "PyErrorFrameTypecheck" + case PyErrorCodeTypecheck: + return "PyErrorCodeTypecheck" + case PyErrorReserved2: + return "PyErrorReserved2" + case PyErrorReserved3: + return "PyErrorReserved3" + case PyErrorTotalNumberOfErrors: + return "PyErrorTotalNumberOfErrors" default: return fmt.Sprintf("PyError(%d)", e) } diff --git a/ebpf/python/versions.go b/ebpf/python/versions.go index 7633ad590c..e6bead4677 100644 --- a/ebpf/python/versions.go +++ b/ebpf/python/versions.go @@ -88,12 +88,18 @@ type UserOffsets struct { PyThreadState_frame int16 PyThreadState_cframe int16 PyThreadState_current_frame int16 + PyThreadState_dict int16 + PyThreadState_interp int16 + PyThreadStateSize int16 PyCFrame_current_frame int16 + Pythreads__head int16 PyFrameObject_f_back int16 PyFrameObject_f_code int16 PyFrameObject_f_localsplus int16 + PyFrameObjectSize int16 PyCodeObject_co_filename int16 PyCodeObject_co_name int16 + PyCodeObject_co_nlocals int16 PyCodeObject_co_varnames int16 PyCodeObject_co_localsplusnames int16 PyTupleObject_ob_item int16 @@ -110,6 +116,13 @@ type UserOffsets struct { PyTssTSize int16 PyASCIIObjectSize int16 PyCompactUnicodeObjectSize int16 + PyInterpreterState_tstate_head int16 + PyInterpreterState_threads int16 + PyInterpreterState_finalizing int16 + PyInterpreterState_modules int16 + PyInterpreterState_importlib int16 + PyInterpreterStateSize int32 + PyConfig_executable int16 } type GlibcOffsets struct { diff --git a/ebpf/python3_ebpf_expected.txt b/ebpf/python3_ebpf_expected.txt new file mode 100644 index 0000000000..c723bd6e5a --- /dev/null +++ b/ebpf/python3_ebpf_expected.txt @@ -0,0 +1,4 @@ +python3;server.py ;app.py Flask.run;serving.py run_simple;serving.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer._handle_request_noblock;socketserver.py BaseWSGIServer.process_request;socketserver.py BaseWSGIServer.finish_request;socketserver.py WSGIRequestHandler.__init__;serving.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle_one_request;serving.py NullCls.run_wsgi;serving.py execute;app.py Flask.__call__;app.py Flask.wsgi_app;app.py Flask.full_dispatch_request;app.py Flask.dispatch_request;server.py bike;bike.py order_bike;utility.py find_nearest_vehicle +python3;server.py ;app.py Flask.run;serving.py run_simple;serving.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer._handle_request_noblock;socketserver.py BaseWSGIServer.process_request;socketserver.py BaseWSGIServer.finish_request;socketserver.py WSGIRequestHandler.__init__;serving.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle_one_request;serving.py NullCls.run_wsgi;serving.py execute;app.py Flask.__call__;app.py Flask.wsgi_app;app.py Flask.full_dispatch_request;app.py Flask.dispatch_request;server.py car;car.py order_car;utility.py find_nearest_vehicle +python3;server.py ;app.py Flask.run;serving.py run_simple;serving.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer._handle_request_noblock;socketserver.py BaseWSGIServer.process_request;socketserver.py BaseWSGIServer.finish_request;socketserver.py WSGIRequestHandler.__init__;serving.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle_one_request;serving.py NullCls.run_wsgi;serving.py execute;app.py Flask.__call__;app.py Flask.wsgi_app;app.py Flask.full_dispatch_request;app.py Flask.dispatch_request;server.py car;car.py order_car;utility.py find_nearest_vehicle;utility.py check_driver_availability +python3;server.py ;app.py Flask.run;serving.py run_simple;serving.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer.serve_forever;socketserver.py BaseWSGIServer._handle_request_noblock;socketserver.py BaseWSGIServer.process_request;socketserver.py BaseWSGIServer.finish_request;socketserver.py WSGIRequestHandler.__init__;serving.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle;server.py WSGIRequestHandler.handle_one_request;serving.py NullCls.run_wsgi;serving.py execute;app.py Flask.__call__;app.py Flask.wsgi_app;app.py Flask.full_dispatch_request;app.py Flask.dispatch_request;server.py scooter;scooter.py order_scooter;utility.py find_nearest_vehicle \ No newline at end of file diff --git a/ebpf/python_ebpf_test.go b/ebpf/python_ebpf_test.go index 07ca3c7604..693fa47acd 100644 --- a/ebpf/python_ebpf_test.go +++ b/ebpf/python_ebpf_test.go @@ -25,23 +25,29 @@ var pythonEBPFExpected []byte //go:embed python_ebpf_expected_3.11.txt var pythonEBPFExpected311 []byte +//go:embed python3_ebpf_expected.txt +var python3EBPFExpected []byte + func TestEBPFPythonProfiler(t *testing.T) { var testdata = []struct { image string expected []byte }{ - {"korniltsev/ebpf-testdata-rideshare:3.8-slim", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.9-slim", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.10-slim", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.11-slim", pythonEBPFExpected311}, - {"korniltsev/ebpf-testdata-rideshare:3.12-slim", pythonEBPFExpected311}, - {"korniltsev/ebpf-testdata-rideshare:3.13-rc-slim", pythonEBPFExpected311}, - {"korniltsev/ebpf-testdata-rideshare:3.8-alpine", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.9-alpine", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.10-alpine", pythonEBPFExpected}, - {"korniltsev/ebpf-testdata-rideshare:3.11-alpine", pythonEBPFExpected311}, - {"korniltsev/ebpf-testdata-rideshare:3.12-alpine", pythonEBPFExpected311}, - {"korniltsev/ebpf-testdata-rideshare:3.13-rc-alpine", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.8-slim", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.9-slim", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.10-slim", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.11-slim", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.12-slim", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.13-rc-slim", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.8-alpine", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.9-alpine", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.10-alpine", pythonEBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:3.11-alpine", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.12-alpine", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:3.13-rc-alpine", pythonEBPFExpected311}, + {"pyroscope/ebpf-testdata-rideshare:ubuntu-18.04", python3EBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:ubuntu-20.04", python3EBPFExpected}, + {"pyroscope/ebpf-testdata-rideshare:ubuntu-22.04", python3EBPFExpected}, } const ridesharePort = "5000" diff --git a/ebpf/sd/target.go b/ebpf/sd/target.go index 1b03084d94..3d76b3e11f 100644 --- a/ebpf/sd/target.go +++ b/ebpf/sd/target.go @@ -37,13 +37,11 @@ const ( metricValue = "process_cpu" labelMetaPyroscopeOptionsPrefix = "__meta_pyroscope_ebpf_options_" - OptionGoTableFallback = labelMetaPyroscopeOptionsPrefix + "go_table_fallback" - OptionCollectKernel = labelMetaPyroscopeOptionsPrefix + "collect_kernel" - OptionPythonFullFilePath = labelMetaPyroscopeOptionsPrefix + "python_full_file_path" - OptionPythonEnabled = labelMetaPyroscopeOptionsPrefix + "python_enabled" - OptionPythonBPFDebugLogEnabled = labelMetaPyroscopeOptionsPrefix + "python_bpf_debug_log" - OptionPythonBPFErrorLogEnabled = labelMetaPyroscopeOptionsPrefix + "python_bpf_error_log" - OptionDemangle = labelMetaPyroscopeOptionsPrefix + "demangle" + OptionGoTableFallback = labelMetaPyroscopeOptionsPrefix + "go_table_fallback" + OptionCollectKernel = labelMetaPyroscopeOptionsPrefix + "collect_kernel" + OptionPythonFullFilePath = labelMetaPyroscopeOptionsPrefix + "python_full_file_path" + OptionPythonEnabled = labelMetaPyroscopeOptionsPrefix + "python_enabled" + OptionDemangle = labelMetaPyroscopeOptionsPrefix + "demangle" ) type Target struct { diff --git a/ebpf/session.go b/ebpf/session.go index 58f32aa8cf..7bf9948f6c 100644 --- a/ebpf/session.go +++ b/ebpf/session.go @@ -48,6 +48,7 @@ type SessionOptions struct { VerifierLogSize int PythonBPFErrorLogEnabled bool PythonBPFDebugLogEnabled bool + PrintBPFLog bool BPFMapsOptions BPFMapsOptions } @@ -118,6 +119,11 @@ type session struct { pids pids pidExecRequests chan uint32 + bpflogFile *os.File + + faultEvents chan pyrobpf.ProfilePidEventFault + faultWarmupPages map[uint64]struct{} + faultWarmupPagesLock sync.Mutex } func NewSession( @@ -142,6 +148,7 @@ func NewSession( dead: make(map[uint32]struct{}), all: make(map[uint32]procInfoLite), }, + faultWarmupPages: make(map[uint64]struct{}), }, nil } @@ -208,14 +215,16 @@ func (s *session) Start() error { pidInfoRequests := make(chan uint32, 1024) pidExecRequests := make(chan uint32, 1024) deadPIDsEvents := make(chan uint32, 1024) + faultEvents := make(chan pyrobpf.ProfilePidEventFault, 1024) s.pidInfoRequests = pidInfoRequests s.pidExecRequests = pidExecRequests s.deadPIDEvents = deadPIDsEvents - s.wg.Add(4) + s.faultEvents = faultEvents + s.wg.Add(6) s.started = true go func() { defer s.wg.Done() - s.readEvents(eventsReader, pidInfoRequests, pidExecRequests, deadPIDsEvents) + s.readEvents(eventsReader, pidInfoRequests, pidExecRequests, deadPIDsEvents, faultEvents) }() go func() { defer s.wg.Done() @@ -229,6 +238,16 @@ func (s *session) Start() error { defer s.wg.Done() s.processPIDExecRequests(pidExecRequests) }() + go func() { + defer s.wg.Done() + if s.printBPFLogEnabled() { + go s.printBpfLog() + } + }() + go func() { + defer s.wg.Done() + s.processFaultEvents(faultEvents) + }() return nil } @@ -395,6 +414,9 @@ func (s *session) collectRegularProfile(cb pprof.CollectProfilesCallback) error return fmt.Errorf("clear stacks map %w", err) } } + if s.pyperfBpf.PythonStacks != nil { + s.collectPythonMetrics() + } return nil } @@ -459,6 +481,14 @@ func (s *session) stopLocked() { close(s.pidExecRequests) s.pidExecRequests = nil } + if s.pidExecRequests != nil { + close(s.pidExecRequests) + s.pidExecRequests = nil + } + if s.bpflogFile != nil { + _ = s.bpflogFile.Close() + s.bpflogFile = nil + } s.started = false } @@ -573,7 +603,9 @@ func (s *session) WalkStack(sb *stackBuilder, stack []byte, resolver symtab.Symb func (s *session) readEvents(events *perf.Reader, pidConfigRequest chan<- uint32, pidExecRequest chan<- uint32, - deadPIDsEvents chan<- uint32) { + deadPIDsEvents chan<- uint32, + faultEvents chan<- pyrobpf.ProfilePidEventFault, +) { defer events.Close() for { record, err := events.Read() @@ -595,7 +627,7 @@ func (s *session) readEvents(events *perf.Reader, _ = level.Error(s.logger).Log("msg", "perf event record too small", "len", len(record.RawSample)) continue } - e := pyrobpf.ProfilePidEvent{} + e := pyrobpf.ProfilePidEventFault{} e.Op = binary.LittleEndian.Uint32(record.RawSample[0:4]) e.Pid = binary.LittleEndian.Uint32(record.RawSample[4:8]) //_ = level.Debug(s.logger).Log("msg", "perf event record", "op", e.Op, "pid", e.Pid) @@ -618,6 +650,17 @@ func (s *session) readEvents(events *perf.Reader, default: _ = level.Error(s.logger).Log("msg", "pid exec request queue full, dropping event", "pid", e.Pid) } + } else if e.Op == uint32(pyrobpf.PidOpRequestFault) { + if len(record.RawSample) < 16 { + _ = level.Error(s.logger).Log("msg", "perf event record too small for fault", "len", len(record.RawSample)) + continue + } + e.FaultAddr = binary.LittleEndian.Uint64(record.RawSample[8:16]) + select { + case faultEvents <- e: + default: + _ = level.Error(s.logger).Log("msg", "faultEvents queue full, dropping event", "pid", e.Pid) + } } else { _ = level.Error(s.logger).Log("msg", "unknown perf event record", "op", e.Op, "pid", e.Pid) } @@ -750,6 +793,58 @@ func (s *session) processPIDExecRequests(requests chan uint32) { } } +func (s *session) processFaultEvents(events chan pyrobpf.ProfilePidEventFault) { + for e := range events { + s.warmupPage(e) + } +} + +func (s *session) checkWarmupPages(addr uint64) bool { + s.faultWarmupPagesLock.Lock() + defer s.faultWarmupPagesLock.Unlock() + _, ok := s.faultWarmupPages[addr] + if ok { + return false + } + s.faultWarmupPages[addr] = struct{}{} + return true +} +func (s *session) warmupPage(e pyrobpf.ProfilePidEventFault) { + addr := e.FaultAddr + addr &= 0xfffffffffffff000 + if !s.checkWarmupPages(addr) { + return + } + hexAddr := fmt.Sprintf("%x", addr) + _ = level.Debug(s.logger).Log("msg", "warmup page", "addr", hexAddr) + + f, err := os.OpenFile(fmt.Sprintf("/proc/%d/mem", e.Pid), os.O_RDONLY, 0) + if err != nil { + _ = level.Error(s.logger).Log("msg", "open mem", "err", err) + return + } + defer f.Close() + _, err = f.Seek(int64(addr), os.SEEK_SET) + if err != nil { + _ = level.Error(s.logger).Log("msg", "seek mem", "err", err) + return + } + buf := [8]byte{} + _, err = f.Read(buf[:]) + if err != nil { + _ = level.Error(s.logger).Log("msg", "read mem", "err", + err) + return + } + level.Debug(s.logger).Log("msg", "warmup page ok", "addr", hexAddr) +} + +func (s *session) clearWarmupPages() { + s.faultWarmupPagesLock.Lock() + defer s.faultWarmupPagesLock.Unlock() + s.faultWarmupPages = make(map[uint64]struct{}) +} + func (s *session) linkKProbes() error { type hook struct { kprobe string @@ -805,6 +900,7 @@ func (s *session) cleanup() { if s.roundNumber%10 == 0 { s.checkStalePids() } + s.clearWarmupPages() } // iterate over all pids and check if they are alive @@ -900,20 +996,31 @@ func (s *session) pythonEnabled(target *sd.Target) bool { return enabled } -func (s *session) pythonBPFDebugLogEnabled(target *sd.Target) bool { - enabled := s.options.PythonBPFDebugLogEnabled - if v, present := target.GetFlag(sd.OptionPythonBPFDebugLogEnabled); present { - enabled = v +const ( + OptionPythonBPFDebugLogEnabled = "PYROSCOPE_EBPF_PYTHON_BPF_DEBUG_LOG" + OptionPythonBPFErrorLogEnabled = "PYROSCOPE_EBPF_PYTHON_BPF_ERROR_LOG" + OptionPrintBPFLog = "PYROSCOPE_EBPF_PRINT_BPF_LOG" +) + +func (s *session) pythonBPFDebugLogEnabled() bool { + if s.options.PythonBPFDebugLogEnabled { + return true } - return enabled + return os.Getenv(OptionPythonBPFDebugLogEnabled) == "true" } -func (s *session) pythonBPFErrorLogEnabled(target *sd.Target) bool { - enabled := s.options.PythonBPFErrorLogEnabled - if v, present := target.GetFlag(sd.OptionPythonBPFErrorLogEnabled); present { - enabled = v +func (s *session) pythonBPFErrorLogEnabled() bool { + if s.options.PythonBPFErrorLogEnabled { + return true } - return enabled + return os.Getenv(OptionPythonBPFErrorLogEnabled) == "true" +} + +func (s *session) printBPFLogEnabled() bool { + if s.options.PrintBPFLog { + return true + } + return os.Getenv(OptionPrintBPFLog) == "true" } func (s *session) printDebugInfo() { @@ -934,6 +1041,10 @@ func (s *stackBuilder) append(sym string) { s.stack = append(s.stack, sym) } +func (s *session) numCPU() int { + return len(s.perfEvents) +} + func getPIDNamespace() (dev uint64, ino uint64, err error) { stat, err := os.Stat("/proc/self/ns/pid") if err != nil { diff --git a/ebpf/session_bpf_log.go b/ebpf/session_bpf_log.go new file mode 100644 index 0000000000..2a38e99c71 --- /dev/null +++ b/ebpf/session_bpf_log.go @@ -0,0 +1,72 @@ +package ebpfspy + +import ( + "bufio" + "fmt" + "github.com/go-kit/log/level" + "os" + "syscall" +) + +func (s *session) printBpfLog() { + + var ( + f *os.File + err error + ) + fs := []string{ + "/sys/kernel/debug/tracing/trace_pipe", + "/sys/kernel/tracing/trace_pipe", + } + for _, it := range fs { + f, err = os.Open(it) + if err == nil { + break + } + level.Error(s.logger).Log("msg", "error opening trace_pipe", "err", err, "f", it) + } + hint := func() { + level.Debug(s.logger).Log("msg", "trace_pipe not found. BPF log will not be printed.") + level.Debug(s.logger).Log("msg", "try running # mount -t debugfs nodev /sys/kernel/debug && mount -t tracefs nodev /sys/kernel/debug/tracing") + } + if f == nil { + const mountPath = "/pyroscope-tracefs" + + _ = os.Mkdir(mountPath, 0700) + stat, _ := os.Stat(mountPath + "/trace_pipe") + if stat == nil { + level.Warn(s.logger).Log("msg", "trying to mount tracefs", "at", mountPath) + err = syscall.Mount("tracefs", mountPath, "tracefs", 0, "") + if err != nil { + level.Error(s.logger).Log("msg", "error mounting tracefs", "err", err) + hint() + return + } + defer func() { + err = syscall.Unmount(mountPath, 0) + if err != nil { + level.Error(s.logger).Log("msg", "error unmounting tracefs", "err", err) + } + }() + } + f, err = os.Open(mountPath + "/trace_pipe") + if err != nil { + level.Error(s.logger).Log("msg", "error opening trace_pipe", "err", err) + hint() + return + } + } + level.Debug(s.logger).Log("msg", "printing BPF log", "from", f.Name()) + s.mutex.Lock() + if !s.started { + s.mutex.Unlock() + return + } + s.bpflogFile = f + s.mutex.Unlock() + defer f.Close() //todo there is a race here racing with stop + scanner := bufio.NewScanner(f) + for scanner.Scan() { + fmt.Println(scanner.Text()) + } +} diff --git a/ebpf/session_python.go b/ebpf/session_python.go index 7f1e1fc9be..d938043d28 100644 --- a/ebpf/session_python.go +++ b/ebpf/session_python.go @@ -114,6 +114,7 @@ func (s *session) loadPyPerf(cause *sd.Target) (*python.Perf, error) { MapReplacements: map[string]*ebpf.Map{ "stacks": s.bpf.Stacks, "counts": s.bpf.ProfileMaps.Counts, + "events": s.bpf.ProfileMaps.Events, }, } spec, err := python.LoadPerf() @@ -124,13 +125,19 @@ func (s *session) loadPyPerf(cause *sd.Target) (*python.Perf, error) { if err != nil { return nil, fmt.Errorf("unable to get pid namespace %w", err) } + errLogEnabled := s.pythonBPFErrorLogEnabled() + debugLogEnabled := s.pythonBPFDebugLogEnabled() err = spec.RewriteConstants(map[string]interface{}{ "global_config": python.PerfGlobalConfigT{ - BpfLogErr: boolToU8(s.pythonBPFErrorLogEnabled(cause)), - BpfLogDebug: boolToU8(s.pythonBPFDebugLogEnabled(cause)), + BpfLogErr: boolToU8(errLogEnabled), + BpfLogDebug: boolToU8(debugLogEnabled), NsPidIno: nsIno, }, }) + if errLogEnabled || debugLogEnabled { + _ = level.Warn(s.logger).Log("msg", "bpf log enabled (debug or error). Do not use in production.") + } + if err != nil { return nil, fmt.Errorf("pyperf rewrite constants %w", err) } @@ -214,6 +221,32 @@ func (s *session) WalkPythonStack(sb *stackBuilder, stack []byte, target *sd.Tar lo.Reverse(sb.stack[begin:end]) } +func (s *session) collectPythonMetrics() { + var ( + m = s.pyperfBpf.PyErrors + ) + key := uint32(0) + values := make([]python.PerfErrorStats, s.numCPU()) + + err := m.Lookup(key, &values) + + if err != nil { + _ = level.Error(s.logger).Log("msg", "collect python errors", "err", err) + return + } + res := python.PerfErrorStats{} + for _, value := range values { + for j := 0; j < len(value.Errors); j++ { + res.Errors[j] += value.Errors[j] + } + } + for i, v := range res.Errors { + if v != 0 { + _ = level.Error(s.logger).Log("msg", "python error", "error", i, "count", v) + } + } +} + func skipPythonFrame(classname string, filename string, name string) bool { // for now only skip _Py_InitCleanup frames in userspace // https://github.com/python/cpython/blob/9eb2489266c4c1f115b8f72c0728db737cc8a815/Python/specialize.c#L2534 diff --git a/ebpf/symtab/elf/buildid.go b/ebpf/symtab/elf/buildid.go index 8ce993d98c..4ed79b96d6 100644 --- a/ebpf/symtab/elf/buildid.go +++ b/ebpf/symtab/elf/buildid.go @@ -93,7 +93,7 @@ func (f *MMapedElfFile) GNUBuildID() (BuildID, error) { return BuildID{}, fmt.Errorf(".note.gnu.build-id is not a GNU build-id : %s", hex.EncodeToString(data)) } rawBuildID := data[16:] - if len(rawBuildID) != 20 && len(rawBuildID) != 8 { // 8 is xxhash, for example in Container-Optimized OS + if len(rawBuildID) < 8 { return BuildID{}, fmt.Errorf(".note.gnu.build-id has wrong size %s : %s ", f.fpath, hex.EncodeToString(data)) } buildIDHex := hex.EncodeToString(rawBuildID) diff --git a/ebpf/testdata b/ebpf/testdata index e82696abfc..403e395281 160000 --- a/ebpf/testdata +++ b/ebpf/testdata @@ -1 +1 @@ -Subproject commit e82696abfc724799c9be63939d2ba4e5195f6f2f +Subproject commit 403e395281615b1b5d9c6e0c76ae756fe06150d6