Skip to content

free-threaded c_stack_refs offset between different python versions using the same wheel #527

Description

@ddorian

From #515 (comment)

3.14.4 appended datastack_cached_chunk to PyThreadState, moving _PyThreadStateImpl.c_stack_refs from 912 to 920 inside a released series. A greenlet wheel built for one 3.14.x read the wrong word on another, and 3.5.4 started dereferencing it. Rows 1 and 2 are that bug; rows 3 and 4 are the working tree resolving the offset at runtime instead.

uv run --no-project freethread_abi_skew.py
Cross-version check for the free-threaded c_stack_refs offset (issue #515).
building the working tree for 3.14.6...
building the working tree for 3.14.3...

greenlet 3.5.5 wheel, on cpython-3.14.3+freethreaded
    3.14.3 | greenlet 3.5.5 | c_stack_refs at n/a
    -> segv

greenlet 3.5.5 wheel, on cpython-3.14.6+freethreaded
    3.14.6 | greenlet 3.5.5 | c_stack_refs at n/a
    switch ok
    -> ok

working tree built for 3.14.6, on cpython-3.14.3+freethreaded
    3.14.3 | greenlet 3.5.6.dev0 | c_stack_refs at 912
    switch ok
    -> ok

working tree built for 3.14.3, on cpython-3.14.6+freethreaded
    3.14.6 | greenlet 3.5.6.dev0 | c_stack_refs at 920
    switch ok
    -> ok

freethread_abi_skew.py

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions