Skip to content

Conversation

@encukou
Copy link
Member

@encukou encukou commented Nov 11, 2025

This is an exported symbol; it should have our prefix.

@encukou
Copy link
Member Author

encukou commented Nov 11, 2025

@pablogsal, you probably know the compilation magic here. Can we change the name?

Copy link
Member

@vstinner vstinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@pablogsal
Copy link
Member

@pablogsal, you probably know the compilation magic here. Can we change the name?

Yes, as long as we don't change the name of the section where it ends. If the tests pass (and are executed) we are good 👍

@kumaraditya303
Copy link
Contributor

This is an exported symbol; it should have our prefix.

I had never heard of that requirement, OOI how would symbols exported from vendored libs such as mimalloc be handled?

@pablogsal
Copy link
Member

pablogsal commented Nov 11, 2025

how would symbols exported from vendored libs such as mimalloc be handled?

They are not exported in the dynamic table. What @encukou is talking about is the symbols we export in the dynamic table of either the executable of the libpython.so. These are the symbols you can link against. The 3rd party ones or the mimalloc ones don't end there unless I have missed something

@kumaraditya303
Copy link
Contributor

The 3rd party ones or the mimalloc ones don't end there unless I have missed something

I ran make smelly on free-threaded build and I think the output suggests that mimalloc symbols are exported.

Check that libpython3.15td.a only exports symbols starting with Py or _Py
+ nm --no-sort libpython3.15td.a
Ignore 42312 local symbols

Smelly symbol: _PY_TIMEOUT_MAX (type: S)
Smelly symbol: __AsyncioDebug (type: S)
Smelly symbol: __mi_abandoned_await_readers (type: T)
Smelly symbol: __mi_abandoned_collect (type: T)
Smelly symbol: __mi_abandoned_default (type: C)
Smelly symbol: __mi_abandoned_pool_visit_blocks (type: T)
Smelly symbol: __mi_abandoned_reclaim_all (type: T)
Smelly symbol: __mi_arena_alloc (type: T)
Smelly symbol: __mi_arena_alloc_aligned (type: T)
Smelly symbol: __mi_arena_collect (type: T)
Smelly symbol: __mi_arena_contains (type: T)
Smelly symbol: __mi_arena_free (type: T)
Smelly symbol: __mi_arena_id_none (type: T)
Smelly symbol: __mi_arena_memid_is_os_allocated (type: T)
Smelly symbol: __mi_arena_memid_is_suitable (type: T)
Smelly symbol: __mi_arena_unsafe_destroy_all (type: T)
Smelly symbol: __mi_assert_fail (type: T)
Smelly symbol: __mi_bin (type: T)
Smelly symbol: __mi_bin_size (type: T)
Smelly symbol: __mi_bitmap_claim (type: T)
Smelly symbol: __mi_bitmap_claim_across (type: T)
Smelly symbol: __mi_bitmap_is_any_claimed (type: T)
Smelly symbol: __mi_bitmap_is_any_claimed_across (type: T)
Smelly symbol: __mi_bitmap_is_claimed (type: T)
Smelly symbol: __mi_bitmap_is_claimed_across (type: T)
Smelly symbol: __mi_bitmap_try_claim (type: T)
Smelly symbol: __mi_bitmap_try_find_claim_field (type: T)
Smelly symbol: __mi_bitmap_try_find_from_claim (type: T)
Smelly symbol: __mi_bitmap_try_find_from_claim_across (type: T)
Smelly symbol: __mi_bitmap_try_find_from_claim_pred (type: T)
Smelly symbol: __mi_bitmap_unclaim (type: T)
Smelly symbol: __mi_bitmap_unclaim_across (type: T)
Smelly symbol: __mi_clock_end (type: T)
Smelly symbol: __mi_clock_now (type: T)
Smelly symbol: __mi_clock_start (type: T)
Smelly symbol: __mi_commit_mask_committed_size (type: T)
Smelly symbol: __mi_commit_mask_next_run (type: T)
Smelly symbol: __mi_current_thread_count (type: T)
Smelly symbol: __mi_deferred_free (type: T)
Smelly symbol: __mi_error_message (type: T)
Smelly symbol: __mi_fprintf (type: T)
Smelly symbol: __mi_fputs (type: T)
Smelly symbol: __mi_free_delayed_block (type: T)
Smelly symbol: __mi_free_generic (type: T)
Smelly symbol: __mi_heap_area_init (type: T)
Smelly symbol: __mi_heap_area_visit_blocks (type: T)
Smelly symbol: __mi_heap_collect_abandon (type: T)
Smelly symbol: __mi_heap_collect_retired (type: T)
Smelly symbol: __mi_heap_default (type: S)
Smelly symbol: __mi_heap_delayed_free_all (type: T)
Smelly symbol: __mi_heap_delayed_free_partial (type: T)
Smelly symbol: __mi_heap_destroy_pages (type: T)
Smelly symbol: __mi_heap_empty (type: S)
Smelly symbol: __mi_heap_init_ex (type: T)
Smelly symbol: __mi_heap_main_get (type: T)
Smelly symbol: __mi_heap_malloc_zero (type: T)
Smelly symbol: __mi_heap_malloc_zero_ex (type: T)
Smelly symbol: __mi_heap_memid_is_suitable (type: T)
Smelly symbol: __mi_heap_random_next (type: T)
Smelly symbol: __mi_heap_realloc_zero (type: T)
Smelly symbol: __mi_heap_set_default_direct (type: T)
Smelly symbol: __mi_heap_unsafe_destroy_all (type: T)
Smelly symbol: __mi_is_main_thread (type: T)
Smelly symbol: __mi_malloc_generic (type: T)
Smelly symbol: __mi_numa_node_count (type: C)
Smelly symbol: __mi_options_init (type: T)
Smelly symbol: __mi_os_alloc (type: T)
Smelly symbol: __mi_os_alloc_aligned (type: T)
Smelly symbol: __mi_os_alloc_aligned_at_offset (type: T)
Smelly symbol: __mi_os_alloc_huge_os_pages (type: T)
Smelly symbol: __mi_os_commit (type: T)
Smelly symbol: __mi_os_decommit (type: T)
Smelly symbol: __mi_os_free (type: T)
Smelly symbol: __mi_os_free_ex (type: T)
Smelly symbol: __mi_os_get_aligned_hint (type: T)
Smelly symbol: __mi_os_good_alloc_size (type: T)
Smelly symbol: __mi_os_has_overcommit (type: T)
Smelly symbol: __mi_os_has_virtual_reserve (type: T)
Smelly symbol: __mi_os_init (type: T)
Smelly symbol: __mi_os_large_page_size (type: T)
Smelly symbol: __mi_os_numa_node_count_get (type: T)
Smelly symbol: __mi_os_numa_node_get (type: T)
Smelly symbol: __mi_os_page_size (type: T)
Smelly symbol: __mi_os_protect (type: T)
Smelly symbol: __mi_os_purge (type: T)
Smelly symbol: __mi_os_purge_ex (type: T)
Smelly symbol: __mi_os_random_weak (type: T)
Smelly symbol: __mi_os_reset (type: T)
Smelly symbol: __mi_os_unprotect (type: T)
Smelly symbol: __mi_os_use_large_page (type: T)
Smelly symbol: __mi_padding_shrink (type: T)
Smelly symbol: __mi_page_abandon (type: T)
Smelly symbol: __mi_page_empty (type: C)
Smelly symbol: __mi_page_free (type: T)
Smelly symbol: __mi_page_free_collect (type: T)
Smelly symbol: __mi_page_malloc (type: T)
Smelly symbol: __mi_page_ptr_unalign (type: T)
Smelly symbol: __mi_page_queue_append (type: T)
Smelly symbol: __mi_page_reclaim (type: T)
Smelly symbol: __mi_page_retire (type: T)
Smelly symbol: __mi_page_try_use_delayed_free (type: T)
Smelly symbol: __mi_page_unfull (type: T)
Smelly symbol: __mi_page_use_delayed_free (type: T)
Smelly symbol: __mi_preloading (type: T)
Smelly symbol: __mi_prim_alloc (type: T)
Smelly symbol: __mi_prim_alloc_huge_os_pages (type: T)
Smelly symbol: __mi_prim_clock_now (type: T)
Smelly symbol: __mi_prim_commit (type: T)
Smelly symbol: __mi_prim_decommit (type: T)
Smelly symbol: __mi_prim_free (type: T)
Smelly symbol: __mi_prim_getenv (type: T)
Smelly symbol: __mi_prim_mem_init (type: T)
Smelly symbol: __mi_prim_numa_node (type: T)
Smelly symbol: __mi_prim_numa_node_count (type: T)
Smelly symbol: __mi_prim_out_stderr (type: T)
Smelly symbol: __mi_prim_process_info (type: T)
Smelly symbol: __mi_prim_protect (type: T)
Smelly symbol: __mi_prim_random_buf (type: T)
Smelly symbol: __mi_prim_reset (type: T)
Smelly symbol: __mi_prim_thread_associate_default_heap (type: T)
Smelly symbol: __mi_prim_thread_done_auto_done (type: T)
Smelly symbol: __mi_prim_thread_init_auto_done (type: T)
Smelly symbol: __mi_process_is_initialized (type: S)
Smelly symbol: __mi_random_init (type: T)
Smelly symbol: __mi_random_init_weak (type: T)
Smelly symbol: __mi_random_next (type: T)
Smelly symbol: __mi_random_reinit_if_weak (type: T)
Smelly symbol: __mi_random_split (type: T)
Smelly symbol: __mi_segment_huge_page_reset (type: T)
Smelly symbol: __mi_segment_map_allocated_at (type: T)
Smelly symbol: __mi_segment_map_freed_at (type: T)
Smelly symbol: __mi_segment_page_abandon (type: T)
Smelly symbol: __mi_segment_page_alloc (type: T)
Smelly symbol: __mi_segment_page_free (type: T)
Smelly symbol: __mi_segment_page_start (type: T)
Smelly symbol: __mi_segment_thread_collect (type: T)
Smelly symbol: __mi_stat_counter_increase (type: T)
Smelly symbol: __mi_stat_decrease (type: T)
Smelly symbol: __mi_stat_increase (type: T)
Smelly symbol: __mi_stats_done (type: T)
Smelly symbol: __mi_stats_main (type: S)
Smelly symbol: __mi_strlcat (type: T)
Smelly symbol: __mi_strlcpy (type: T)
Smelly symbol: __mi_strlen (type: T)
Smelly symbol: __mi_strnicmp (type: T)
Smelly symbol: __mi_strnlen (type: T)
Smelly symbol: __mi_thread_data_collect (type: T)
Smelly symbol: __mi_thread_done (type: T)
Smelly symbol: __mi_thread_id (type: T)
Smelly symbol: __mi_tld_init (type: T)
Smelly symbol: __mi_toupper (type: T)
Smelly symbol: __mi_trace_message (type: T)
Smelly symbol: __mi_verbose_message (type: T)
Smelly symbol: __mi_warning_message (type: T)

@encukou
Copy link
Member Author

encukou commented Nov 12, 2025

Mimalloc is an exception in make smelly; I guess that's something to look at before switching to mimalloc by default?

@encukou encukou merged commit 909f76d into python:main Nov 12, 2025
44 checks passed
@encukou encukou deleted the py-prefix-asynciodebug branch November 13, 2025 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants