Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e58c8b6

Browse files
committed
gh-129223: Do not allow the compiler to optimise away symbols for debug sections
1 parent 5c9a63f commit e58c8b6

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

Include/internal/pycore_debug_offsets.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,34 @@ extern "C" {
1717

1818
// Macros to burn global values in custom sections so out-of-process
1919
// profilers can locate them easily.
20-
2120
#define GENERATE_DEBUG_SECTION(name, declaration) \
2221
_GENERATE_DEBUG_SECTION_WINDOWS(name) \
2322
_GENERATE_DEBUG_SECTION_APPLE(name) \
2423
declaration \
25-
_GENERATE_DEBUG_SECTION_LINUX(name)
24+
_GENERATE_DEBUG_SECTION_LINUX(name) \
25+
__attribute__((used))
2626

2727
#if defined(MS_WINDOWS)
2828
#define _GENERATE_DEBUG_SECTION_WINDOWS(name) \
2929
_Pragma(Py_STRINGIFY(section(Py_STRINGIFY(name), read, write))) \
30-
__declspec(allocate(Py_STRINGIFY(name)))
30+
__declspec(allocate(Py_STRINGIFY(name))) \
31+
__declspec(dllexport)
3132
#else
3233
#define _GENERATE_DEBUG_SECTION_WINDOWS(name)
3334
#endif
3435

3536
#if defined(__APPLE__)
3637
#define _GENERATE_DEBUG_SECTION_APPLE(name) \
37-
__attribute__((section(SEG_DATA "," Py_STRINGIFY(name))))
38+
__attribute__((section(SEG_DATA "," Py_STRINGIFY(name)))) \
39+
__attribute__((visibility("default")))
3840
#else
3941
#define _GENERATE_DEBUG_SECTION_APPLE(name)
4042
#endif
4143

4244
#if defined(__linux__) && (defined(__GNUC__) || defined(__clang__))
4345
#define _GENERATE_DEBUG_SECTION_LINUX(name) \
44-
__attribute__((section("." Py_STRINGIFY(name))))
46+
__attribute__((section("." Py_STRINGIFY(name)))) \
47+
__attribute__((visibility("default")))
4548
#else
4649
#define _GENERATE_DEBUG_SECTION_LINUX(name)
4750
#endif

Modules/_testexternalinspection.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,11 @@ get_py_runtime(pid_t pid)
414414
static uintptr_t
415415
get_async_debug(pid_t pid)
416416
{
417-
return search_map_for_section(pid, "AsyncioDebug", "_asyncio.cpython");
417+
uintptr_t result = search_map_for_section(pid, "AsyncioDebug", "_asyncio.cpython");
418+
if (result == 0 && !PyErr_Occurred()) {
419+
PyErr_SetString(PyExc_RuntimeError, "Cannot find AsyncioDebug section");
420+
}
421+
return result;
418422
}
419423

420424

0 commit comments

Comments
 (0)