Skip to content

Commit d1adfb1

Browse files
authored
Merge branch 'main' into pdb-realpath-pseudofs-problem
2 parents 6779597 + 726e8e8 commit d1adfb1

90 files changed

Lines changed: 1195 additions & 503 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ jobs:
191191
macOS
192192
${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
193193
needs: build-context
194-
if: needs.build-context.outputs.run-tests == 'true'
194+
if: needs.build-context.outputs.run-macos == 'true'
195195
strategy:
196196
fail-fast: false
197197
matrix:
@@ -217,7 +217,7 @@ jobs:
217217
${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
218218
${{ fromJSON(matrix.bolt) && '(bolt)' || '' }}
219219
needs: build-context
220-
if: needs.build-context.outputs.run-tests == 'true'
220+
if: needs.build-context.outputs.run-ubuntu == 'true'
221221
strategy:
222222
fail-fast: false
223223
matrix:
@@ -248,7 +248,7 @@ jobs:
248248
runs-on: ${{ matrix.os }}
249249
timeout-minutes: 60
250250
needs: build-context
251-
if: needs.build-context.outputs.run-tests == 'true'
251+
if: needs.build-context.outputs.run-ubuntu == 'true'
252252
strategy:
253253
fail-fast: false
254254
matrix:
@@ -304,7 +304,7 @@ jobs:
304304
runs-on: ${{ matrix.os }}
305305
timeout-minutes: 60
306306
needs: build-context
307-
if: needs.build-context.outputs.run-tests == 'true'
307+
if: needs.build-context.outputs.run-ubuntu == 'true'
308308
strategy:
309309
fail-fast: false
310310
matrix:
@@ -368,7 +368,7 @@ jobs:
368368
build-android:
369369
name: Android (${{ matrix.arch }})
370370
needs: build-context
371-
if: needs.build-context.outputs.run-tests == 'true'
371+
if: needs.build-context.outputs.run-android == 'true'
372372
timeout-minutes: 60
373373
strategy:
374374
fail-fast: false
@@ -390,7 +390,7 @@ jobs:
390390
build-ios:
391391
name: iOS
392392
needs: build-context
393-
if: needs.build-context.outputs.run-tests == 'true'
393+
if: needs.build-context.outputs.run-ios == 'true'
394394
timeout-minutes: 60
395395
runs-on: macos-15
396396
steps:
@@ -413,15 +413,15 @@ jobs:
413413
build-wasi:
414414
name: 'WASI'
415415
needs: build-context
416-
if: needs.build-context.outputs.run-tests == 'true'
416+
if: needs.build-context.outputs.run-wasi == 'true'
417417
uses: ./.github/workflows/reusable-wasi.yml
418418

419419
test-hypothesis:
420420
name: "Hypothesis tests on Ubuntu"
421421
runs-on: ubuntu-24.04
422422
timeout-minutes: 60
423423
needs: build-context
424-
if: needs.build-context.outputs.run-tests == 'true'
424+
if: needs.build-context.outputs.run-ubuntu == 'true'
425425
env:
426426
OPENSSL_VER: 3.0.18
427427
PYTHONSTRICTEXTENSIONBUILD: 1
@@ -528,7 +528,7 @@ jobs:
528528
runs-on: ${{ matrix.os }}
529529
timeout-minutes: 60
530530
needs: build-context
531-
if: needs.build-context.outputs.run-tests == 'true'
531+
if: needs.build-context.outputs.run-ubuntu == 'true'
532532
strategy:
533533
fail-fast: false
534534
matrix:
@@ -581,7 +581,7 @@ jobs:
581581
# ${{ '' } is a hack to nest jobs under the same sidebar category.
582582
name: Sanitizers${{ '' }} # zizmor: ignore[obfuscation]
583583
needs: build-context
584-
if: needs.build-context.outputs.run-tests == 'true'
584+
if: needs.build-context.outputs.run-ubuntu == 'true'
585585
strategy:
586586
fail-fast: false
587587
matrix:
@@ -606,7 +606,7 @@ jobs:
606606
runs-on: ubuntu-latest
607607
timeout-minutes: 60
608608
needs: build-context
609-
if: needs.build-context.outputs.run-tests == 'true'
609+
if: needs.build-context.outputs.run-ubuntu == 'true'
610610
steps:
611611
- uses: actions/checkout@v4
612612
with:
@@ -706,50 +706,39 @@ jobs:
706706
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
707707
with:
708708
allowed-failures: >-
709+
build-ios,
709710
build-windows-msi,
710711
build-ubuntu-ssltests-awslc,
711712
build-ubuntu-ssltests-openssl,
712713
test-hypothesis,
713714
cifuzz,
714715
allowed-skips: >-
716+
${{ !fromJSON(needs.build-context.outputs.run-docs) && 'check-docs,' || '' }}
715717
${{
716-
!fromJSON(needs.build-context.outputs.run-docs)
718+
needs.build-context.outputs.run-tests != 'true'
717719
&& '
718-
check-docs,
720+
check-autoconf-regen,
721+
check-generated-files,
719722
'
720723
|| ''
721724
}}
725+
${{ !fromJSON(needs.build-context.outputs.run-windows-tests) && 'build-windows,' || '' }}
726+
${{ !fromJSON(needs.build-context.outputs.run-ci-fuzz) && 'cifuzz,' || '' }}
727+
${{ !fromJSON(needs.build-context.outputs.run-macos) && 'build-macos,' || '' }}
722728
${{
723-
needs.build-context.outputs.run-tests != 'true'
729+
!fromJSON(needs.build-context.outputs.run-ubuntu)
724730
&& '
725-
check-autoconf-regen,
726-
check-generated-files,
727-
build-macos,
728731
build-ubuntu,
729732
build-ubuntu-ssltests-awslc,
730733
build-ubuntu-ssltests-openssl,
731-
build-android,
732-
build-ios,
733-
build-wasi,
734734
test-hypothesis,
735735
build-asan,
736736
build-san,
737737
cross-build-linux,
738738
'
739739
|| ''
740740
}}
741-
${{
742-
!fromJSON(needs.build-context.outputs.run-windows-tests)
743-
&& '
744-
build-windows,
745-
'
746-
|| ''
747-
}}
748-
${{
749-
!fromJSON(needs.build-context.outputs.run-ci-fuzz)
750-
&& '
751-
cifuzz,
752-
'
753-
|| ''
754-
}}
741+
${{ !fromJSON(needs.build-context.outputs.run-android) && 'build-android,' || '' }}
742+
${{ !fromJSON(needs.build-context.outputs.run-ios) && 'build-ios,' || '' }}
743+
${{ !fromJSON(needs.build-context.outputs.run-wasi) && 'build-wasi,' || '' }}
755744
jobs: ${{ toJSON(needs) }}

.github/workflows/reusable-context.yml

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,51 @@ on: # yamllint disable-line rule:truthy
1717
# || 'falsy-branch'
1818
# }}
1919
#
20+
run-android:
21+
description: Whether to run the Android tests
22+
value: ${{ jobs.compute-changes.outputs.run-android }} # bool
23+
run-ci-fuzz:
24+
description: Whether to run the CIFuzz job
25+
value: ${{ jobs.compute-changes.outputs.run-ci-fuzz }} # bool
2026
run-docs:
2127
description: Whether to build the docs
2228
value: ${{ jobs.compute-changes.outputs.run-docs }} # bool
29+
run-ios:
30+
description: Whether to run the iOS tests
31+
value: ${{ jobs.compute-changes.outputs.run-ios }} # bool
32+
run-macos:
33+
description: Whether to run the macOS tests
34+
value: ${{ jobs.compute-changes.outputs.run-macos }} # bool
2335
run-tests:
2436
description: Whether to run the regular tests
2537
value: ${{ jobs.compute-changes.outputs.run-tests }} # bool
26-
run-windows-tests:
27-
description: Whether to run the Windows tests
28-
value: ${{ jobs.compute-changes.outputs.run-windows-tests }} # bool
38+
run-ubuntu:
39+
description: Whether to run the Ubuntu tests
40+
value: ${{ jobs.compute-changes.outputs.run-ubuntu }} # bool
41+
run-wasi:
42+
description: Whether to run the WASI tests
43+
value: ${{ jobs.compute-changes.outputs.run-wasi }} # bool
2944
run-windows-msi:
3045
description: Whether to run the MSI installer smoke tests
3146
value: ${{ jobs.compute-changes.outputs.run-windows-msi }} # bool
32-
run-ci-fuzz:
33-
description: Whether to run the CIFuzz job
34-
value: ${{ jobs.compute-changes.outputs.run-ci-fuzz }} # bool
47+
run-windows-tests:
48+
description: Whether to run the Windows tests
49+
value: ${{ jobs.compute-changes.outputs.run-windows-tests }} # bool
3550

3651
jobs:
3752
compute-changes:
3853
name: Create context from changed files
3954
runs-on: ubuntu-latest
4055
timeout-minutes: 10
4156
outputs:
57+
run-android: ${{ steps.changes.outputs.run-android }}
4258
run-ci-fuzz: ${{ steps.changes.outputs.run-ci-fuzz }}
4359
run-docs: ${{ steps.changes.outputs.run-docs }}
60+
run-ios: ${{ steps.changes.outputs.run-ios }}
61+
run-macos: ${{ steps.changes.outputs.run-macos }}
4462
run-tests: ${{ steps.changes.outputs.run-tests }}
63+
run-ubuntu: ${{ steps.changes.outputs.run-ubuntu }}
64+
run-wasi: ${{ steps.changes.outputs.run-wasi }}
4565
run-windows-msi: ${{ steps.changes.outputs.run-windows-msi }}
4666
run-windows-tests: ${{ steps.changes.outputs.run-windows-tests }}
4767
steps:

Doc/c-api/gcsupport.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ The :c:member:`~PyTypeObject.tp_traverse` handler must have the following type:
232232
object argument. If *visit* returns a non-zero value that value should be
233233
returned immediately.
234234
235+
The traversal function must not have any side effects. Implementations
236+
may not modify the reference counts of any Python objects nor create or
237+
destroy any Python objects.
238+
235239
To simplify writing :c:member:`~PyTypeObject.tp_traverse` handlers, a :c:func:`Py_VISIT` macro is
236240
provided. In order to use this macro, the :c:member:`~PyTypeObject.tp_traverse` implementation
237241
must name its arguments exactly *visit* and *arg*:

Doc/c-api/typeobj.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,6 +1569,11 @@ and :c:data:`PyType_Type` effectively act as defaults.)
15691569
but the instance has no strong reference to the elements inside it, as they
15701570
are allowed to be removed even if the instance is still alive).
15711571

1572+
.. warning::
1573+
The traversal function must not have any side effects. It must not
1574+
modify the reference counts of any Python objects nor create or destroy
1575+
any Python objects.
1576+
15721577
Note that :c:func:`Py_VISIT` requires the *visit* and *arg* parameters to
15731578
:c:func:`!local_traverse` to have these specific names; don't name them just
15741579
anything.

Doc/library/calendar.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ interpreted as prescribed by the ISO 8601 standard. Year 0 is 1 BC, year -1 is
158158

159159
:class:`TextCalendar` instances have the following methods:
160160

161+
.. method:: prweek(theweek, width)
162+
163+
Print a week's calendar as returned by :meth:`formatweek` and without a
164+
final newline.
165+
161166

162167
.. method:: formatday(theday, weekday, width)
163168

Doc/library/exceptions.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,12 @@ their subgroups based on the types of the contained exceptions.
978978
raises a :exc:`TypeError` if any contained exception is not an
979979
:exc:`Exception` subclass.
980980

981+
.. impl-detail::
982+
983+
The ``excs`` parameter may be any sequence, but lists and tuples are
984+
specifically processed more efficiently here. For optimal performance,
985+
pass a tuple as ``excs``.
986+
981987
.. attribute:: message
982988

983989
The ``msg`` argument to the constructor. This is a read-only attribute.

Doc/whatsnew/3.15.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,6 +1236,12 @@ Build changes
12361236
modules that are missing or packaged separately.
12371237
(Contributed by Stan Ulbrych and Petr Viktorin in :gh:`139707`.)
12381238

1239+
* Annotating anonymous mmap usage is now supported if Linux kernel supports
1240+
:manpage:`PR_SET_VMA_ANON_NAME <PR_SET_VMA(2const)>` (Linux 5.17 or newer).
1241+
Annotations are visible in ``/proc/<pid>/maps`` if the kernel supports the feature
1242+
and :option:`-X dev <-X>` is passed to the Python or Python is built in :ref:`debug mode <debug-build>`.
1243+
(Contributed by Donghee Na in :gh:`141770`)
1244+
12391245

12401246
Porting to Python 3.15
12411247
======================

Include/cpython/pyerrors.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ typedef struct {
1818
PyException_HEAD
1919
PyObject *msg;
2020
PyObject *excs;
21+
PyObject *excs_str;
2122
} PyBaseExceptionGroupObject;
2223

2324
typedef struct {

Include/internal/pycore_mmap.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ifndef Py_INTERNAL_MMAP_H
2+
#define Py_INTERNAL_MMAP_H
3+
4+
#ifdef __cplusplus
5+
extern "C" {
6+
#endif
7+
8+
#ifndef Py_BUILD_CORE
9+
# error "this header requires Py_BUILD_CORE define"
10+
#endif
11+
12+
#include "pycore_pystate.h"
13+
14+
#if defined(HAVE_PR_SET_VMA_ANON_NAME) && defined(__linux__)
15+
# include <linux/prctl.h>
16+
# include <sys/prctl.h>
17+
#endif
18+
19+
#if defined(HAVE_PR_SET_VMA_ANON_NAME) && defined(__linux__)
20+
static inline void
21+
_PyAnnotateMemoryMap(void *addr, size_t size, const char *name)
22+
{
23+
#ifndef Py_DEBUG
24+
if (!_Py_GetConfig()->dev_mode) {
25+
return;
26+
}
27+
#endif
28+
assert(strlen(name) < 80);
29+
int old_errno = errno;
30+
prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (unsigned long)addr, size, name);
31+
/* Ignore errno from prctl */
32+
/* See: https://bugzilla.redhat.com/show_bug.cgi?id=2302746 */
33+
errno = old_errno;
34+
}
35+
#else
36+
static inline void
37+
_PyAnnotateMemoryMap(void *Py_UNUSED(addr), size_t Py_UNUSED(size), const char *Py_UNUSED(name))
38+
{
39+
}
40+
#endif
41+
42+
#ifdef __cplusplus
43+
}
44+
#endif
45+
#endif // !Py_INTERNAL_MMAP_H

Include/internal/pycore_stackref.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,13 +479,6 @@ PyStackRef_AsPyObjectBorrow(_PyStackRef stackref)
479479

480480
#define PyStackRef_IsDeferred(ref) (((ref).bits & Py_TAG_BITS) == Py_TAG_DEFERRED)
481481

482-
static inline PyObject *
483-
PyStackRef_NotDeferred_AsPyObject(_PyStackRef stackref)
484-
{
485-
assert(!PyStackRef_IsDeferred(stackref));
486-
return (PyObject *)stackref.bits;
487-
}
488-
489482
static inline PyObject *
490483
PyStackRef_AsPyObjectSteal(_PyStackRef stackref)
491484
{

0 commit comments

Comments
 (0)