msg393675 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2021-05-14 16:58 |
When Python is built without --enable-shared, the "Py_FrozenMain" is not exported.
When Python is built with --enable-shared, the "Py_FrozenMain" is exported as expected.
I can reproduce the issue with attached reproduce.tar.gz example:
* build.sh exports "func1" symbol
* build_ar.sh doesn't export the "func1" symbol
The difference is that build.sh links directly two object files (.o) into a binary, whereas build_ar.sh creates a static library (.a) and then link the static library into a binary.
Python is always built with a static library (libpythonVERSION.a) which causes the issue.
A solution is to pass -Wl,--whole-archive option to the linker to export *all* symbols exported by all object files, and not only export symbols of the object files which are used.
I'm not sure why, but "Py_FrozenMain" is the *only* impacted symbol of the whole C API.
This issue was discovered by Petr Viktorin who works on the stable ABI:
https://mail.python.org/archives/list/capi-sig@python.org/thread/5QLI3NUP3OSGLCCIBAQOTX4GEJQBWJ6F/
|
msg393676 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2021-05-14 17:00 |
The "python" binary exports 1610 symbols. With the attached fix, it exports 1611 symbols (+1): "Py_FrozenMain" is also exported :-)
|
msg393693 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2021-05-14 21:14 |
The symbol is not exported on Windows neither. My PR 26126 ("Test Py_FrozenMain()") fails on Windows with:
"_testembed.obj : error LNK2001: unresolved external symbol __imp_Py_FrozenMain"
("__imp_" prefix is added by Windows DLL loader.)
|
msg404596 - (view) |
Author: Petr Viktorin (petr.viktorin) *  |
Date: 2021-10-21 13:04 |
> I'm not sure why, but "Py_FrozenMain" is the *only* impacted symbol of the whole C API.
Apparently, on some platforms `PyModule_Create2` and `PyModule_FromDefAndSpec2` don't appear either.
Should I rename the issue to cover these as well?
|
msg404723 - (view) |
Author: Petr Viktorin (petr.viktorin) *  |
Date: 2021-10-22 08:12 |
New changeset 276468dddb46c54980c782c09cdb53bd90755752 by Petr Viktorin in branch 'main':
bpo-43795: Add a test for Stable ABI symbol availability using ctypes (GH-26354)
https://github.com/python/cpython/commit/276468dddb46c54980c782c09cdb53bd90755752
|
msg404748 - (view) |
Author: Petr Viktorin (petr.viktorin) *  |
Date: 2021-10-22 10:35 |
Repurposing this bug to track all symbols that don't appear in some configurations.
- `Py_FrozenMain` should be added to stable ABI when this is fixed. It was left out of the 3.10 stable ABI for only this reason. See discussion here: https://mail.python.org/archives/list/capi-sig@python.org/thread/5QLI3NUP3OSGLCCIBAQOTX4GEJQBWJ6F/
- `PyModule_Create2` and `PyModule_FromDefAndSpec2` are "temporarily" excluded from tests in `Tools/scripts/stable_abi.py`'s `gen_ctypes_test`, so that all the other symbols can get regression testing. When this issue is fixed, that special case should be removed.
|
msg406980 - (view) |
Author: Jakub Kulik (kulikjak) * |
Date: 2021-11-25 08:55 |
On Solaris (and most likely several other platforms), `PyThread_get_thread_native_id` is also not available.
|
msg410401 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-12 15:19 |
> On Solaris (and most likely several other platforms), `PyThread_get_thread_native_id` is also not available.
Oh, I added an explicit test for that in my PR 30556.
> `Py_FrozenMain` should be added to stable ABI
I suggest to first fix the issue (export the symbol), and then write a second PR to add it to the stable ABI.
|
msg410503 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-13 18:24 |
New changeset 6be848922bc0f4c632c255c39de82a45b6480286 by Victor Stinner in branch 'main':
bpo-44133: Link Python executable with object files (GH-30556)
https://github.com/python/cpython/commit/6be848922bc0f4c632c255c39de82a45b6480286
|
msg410504 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-13 18:27 |
> New changeset 6be848922bc0f4c632c255c39de82a45b6480286 by Victor Stinner in branch 'main':
> bpo-44133: Link Python executable with object files (GH-30556)
Sadly, Py_FrozenMain() is still missing on Windows. See:
https://github.com/python/cpython/pull/30556#issuecomment-1012032712
Until Windows also exports the symbol, I don't think that we can add the symbol to the stable ABI.
I prefer to not backport the change since it's always risky to break the build system on a stable branch.
If someone wants to fix the Windows build to also export Py_FrozenMain(), please open a new issue.
I consider that the initial issue is fixed, so I close the issue.
|
msg410756 - (view) |
Author: Jakub Kulik (kulikjak) * |
Date: 2022-01-17 10:40 |
>> On Solaris (and most likely several other platforms), `PyThread_get_thread_native_id` is also not available.
> Oh, I added an explicit test for that in my PR 30556.
Now it started failing on a different place:
======================================================================
FAIL: test_export_symbols (test.test_capi.CAPITest) (name='PyThread_get_thread_native_id')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/..../cpython-main/Lib/test/test_capi.py", line 662, in test_export_symbols
self.assertTrue(hasattr(ctypes.pythonapi, name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: False is not true
Looking at the test, is the expectation that all OSes must implement it since 3.11?
|
msg410757 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-17 11:22 |
Oh no, I expected that the new way to build Python would also export PyThread_get_thread_native_id() on Solaris. I reopen the issue.
Can you please specify your configure command? Can you check without Python if the symbol is exported or not? If you use --enable-shared, check in libpython, otherwise check in the "python" binary.
|
msg410762 - (view) |
Author: Jakub Kulik (kulikjak) * |
Date: 2022-01-17 11:47 |
Ah, sorry, I could have described the issue better. It's not a problem with exporting, PyThread_get_thread_native_id() isn't available on Solaris (and possibly other platforms) at all.
https://github.com/python/cpython/blob/main/Include/pythread.h#L28
https://github.com/python/cpython/blob/main/Python/thread_pthread.h#L329
The reason I didn't implement it yet is that Solaris doesn't expose anything like native thread id. We do have functions like `_lwp_self()` or `pthread_self()` or `thr_self()` but neither of them returns id where "value may be used to uniquely identify this particular thread system-wide". (I presume that means that no other thread of no other process running on a given system would return the same number - all these functions return single digit numbers so there is no way they are unique system wide).
If necessary, I guess that such a number can be created by masking pid and thread id together, but then there's a question of how it is supposed to be used (because OS would not understand it).
|
msg410776 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-17 13:03 |
> Ah, sorry, I could have described the issue better. It's not a problem with exporting, PyThread_get_thread_native_id() isn't available on Solaris (and possibly other platforms) at all.
Oh ok, it's a simple bug in my test. I wrote GH-30636 to fix it.
|
msg410787 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2022-01-17 13:49 |
New changeset 16901c0482734dbd389b09ca3edfcf3e22faeed7 by Victor Stinner in branch 'main':
bpo-44133: Skip PyThread_get_thread_native_id() if not available (GH-30636)
https://github.com/python/cpython/commit/16901c0482734dbd389b09ca3edfcf3e22faeed7
|
msg416378 - (view) |
Author: Petr Viktorin (petr.viktorin) *  |
Date: 2022-03-30 15:55 |
> Ah, sorry, I could have described the issue better. It's not a problem with exporting, PyThread_get_thread_native_id() isn't available on Solaris (and possibly other platforms) at all.
Jakub, does this mean test_stable_abi_ctypes fails on Solaris?
Are there any other missing functions?
I opened bpo-47169 to improve the situation.
|
msg416475 - (view) |
Author: Jakub Kulik (kulikjak) * |
Date: 2022-04-01 08:55 |
Yes, it still does, and PyThread_get_thread_native_id is the only symbol missing.
|
|
Date |
User |
Action |
Args |
2022-04-11 14:59:45 | admin | set | github: 88299 |
2022-04-01 08:55:02 | kulikjak | set | messages:
+ msg416475 |
2022-03-30 15:55:23 | petr.viktorin | set | messages:
+ msg416378 |
2022-01-17 13:50:21 | vstinner | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
2022-01-17 13:49:31 | vstinner | set | messages:
+ msg410787 |
2022-01-17 13:03:55 | vstinner | set | messages:
+ msg410776 |
2022-01-17 13:03:25 | vstinner | set | stage: resolved -> patch review pull_requests:
+ pull_request28839 |
2022-01-17 11:47:39 | kulikjak | set | messages:
+ msg410762 |
2022-01-17 11:22:42 | vstinner | set | status: closed -> open resolution: fixed -> (no value) messages:
+ msg410757
|
2022-01-17 10:40:39 | kulikjak | set | messages:
+ msg410756 |
2022-01-13 18:28:02 | vstinner | set | title: Some C-API symbols (e.g. Py_FrozenMain) are not always exported -> Some C-API symbols (e.g. Py_FrozenMain) are not always exported on Unix |
2022-01-13 18:27:51 | vstinner | set | status: open -> closed resolution: fixed messages:
+ msg410504
stage: patch review -> resolved |
2022-01-13 18:24:37 | vstinner | set | messages:
+ msg410503 |
2022-01-12 15:19:37 | vstinner | set | messages:
+ msg410401 |
2022-01-12 12:38:07 | vstinner | set | pull_requests:
+ pull_request28757 |
2021-12-01 09:20:15 | shihai1991 | set | nosy:
+ shihai1991 pull_requests:
+ pull_request28101
|
2021-11-25 08:55:51 | kulikjak | set | nosy:
+ kulikjak messages:
+ msg406980
|
2021-10-22 10:35:46 | petr.viktorin | set | messages:
+ msg404748 title: "Py_FrozenMain" symbol is not exported -> Some C-API symbols (e.g. Py_FrozenMain) are not always exported |
2021-10-22 08:12:16 | miss-islington | set | nosy:
+ miss-islington pull_requests:
+ pull_request27425
|
2021-10-22 08:12:11 | petr.viktorin | set | messages:
+ msg404723 |
2021-10-21 13:04:00 | petr.viktorin | set | nosy:
+ petr.viktorin messages:
+ msg404596
|
2021-05-14 21:14:48 | vstinner | set | messages:
+ msg393693 |
2021-05-14 17:05:10 | vstinner | set | keywords:
+ patch stage: patch review pull_requests:
+ pull_request24769 |
2021-05-14 17:00:16 | vstinner | set | messages:
+ msg393676 |
2021-05-14 16:58:44 | vstinner | create | |