From: Pablo Galindo Date: Sun, 28 Oct 2018 15:02:17 +0000 (+0000) Subject: bpo-35064 prefix smelly symbols that appear with COUNT_ALLOCS with _Py_ (GH-10152) X-Git-Tag: v3.8.0a1~645 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49c75a8086c3df9add0779d2479b8f09b95cdf3b;p=python bpo-35064 prefix smelly symbols that appear with COUNT_ALLOCS with _Py_ (GH-10152) Configuring python with ./configure --with-pydebug CFLAGS="-D COUNT_ALLOCS -O0" makes "make smelly" fail as some symbols were being exported without the "Py_" or "_Py" prefixes. --- diff --git a/Include/object.h b/Include/object.h index 2809d3af18..7b07d7d26c 100644 --- a/Include/object.h +++ b/Include/object.h @@ -752,10 +752,10 @@ PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void); #endif /* Py_REF_DEBUG */ #ifdef COUNT_ALLOCS -PyAPI_FUNC(void) inc_count(PyTypeObject *); -PyAPI_FUNC(void) dec_count(PyTypeObject *); -#define _Py_INC_TPALLOCS(OP) inc_count(Py_TYPE(OP)) -#define _Py_INC_TPFREES(OP) dec_count(Py_TYPE(OP)) +PyAPI_FUNC(void) _Py_inc_count(PyTypeObject *); +PyAPI_FUNC(void) _Py_dec_count(PyTypeObject *); +#define _Py_INC_TPALLOCS(OP) _Py_inc_count(Py_TYPE(OP)) +#define _Py_INC_TPFREES(OP) _Py_dec_count(Py_TYPE(OP)) #define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- #define _Py_COUNT_ALLOCS_COMMA , #else diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 9a0881450c..1b36661c84 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -18,7 +18,7 @@ class bytes "PyBytesObject *" "&PyBytes_Type" #include "clinic/bytesobject.c.h" #ifdef COUNT_ALLOCS -Py_ssize_t null_strings, one_strings; +Py_ssize_t _Py_null_strings, _Py_one_strings; #endif static PyBytesObject *characters[UCHAR_MAX + 1]; @@ -66,7 +66,7 @@ _PyBytes_FromSize(Py_ssize_t size, int use_calloc) if (size == 0 && (op = nullstring) != NULL) { #ifdef COUNT_ALLOCS - null_strings++; + _Py_null_strings++; #endif Py_INCREF(op); return (PyObject *)op; @@ -110,7 +110,7 @@ PyBytes_FromStringAndSize(const char *str, Py_ssize_t size) (op = characters[*str & UCHAR_MAX]) != NULL) { #ifdef COUNT_ALLOCS - one_strings++; + _Py_one_strings++; #endif Py_INCREF(op); return (PyObject *)op; @@ -146,14 +146,14 @@ PyBytes_FromString(const char *str) } if (size == 0 && (op = nullstring) != NULL) { #ifdef COUNT_ALLOCS - null_strings++; + _Py_null_strings++; #endif Py_INCREF(op); return (PyObject *)op; } if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL) { #ifdef COUNT_ALLOCS - one_strings++; + _Py_one_strings++; #endif Py_INCREF(op); return (PyObject *)op; diff --git a/Objects/longobject.c b/Objects/longobject.c index ab5ac3456b..26d6c53fa9 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -42,7 +42,7 @@ PyObject *_PyLong_One = NULL; */ static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS]; #ifdef COUNT_ALLOCS -Py_ssize_t quick_int_allocs, quick_neg_int_allocs; +Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs; #endif static PyObject * @@ -54,9 +54,9 @@ get_small_int(sdigit ival) Py_INCREF(v); #ifdef COUNT_ALLOCS if (ival >= 0) - quick_int_allocs++; + _Py_quick_int_allocs++; else - quick_neg_int_allocs++; + _Py_quick_neg_int_allocs++; #endif return v; } diff --git a/Objects/object.c b/Objects/object.c index 0e75014878..de9eb2cb4e 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -93,11 +93,11 @@ static PyTypeObject *type_list; is set, they will be removed from the type_list once the last object is deallocated. */ static int unlist_types_without_objects; -extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs; -extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs; -extern Py_ssize_t null_strings, one_strings; +extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs; +extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs; +extern Py_ssize_t _Py_null_strings, _Py_one_strings; void -dump_counts(FILE* f) +_Py_dump_counts(FILE* f) { PyInterpreterState *interp = _PyInterpreterState_Get(); if (!interp->core_config.show_alloc_count) { @@ -113,17 +113,17 @@ dump_counts(FILE* f) tp->tp_maxalloc); fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, " "empty: %" PY_FORMAT_SIZE_T "d\n", - fast_tuple_allocs, tuple_zero_allocs); + _Py_fast_tuple_allocs, _Py_tuple_zero_allocs); fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, " "neg: %" PY_FORMAT_SIZE_T "d\n", - quick_int_allocs, quick_neg_int_allocs); + _Py_quick_int_allocs, _Py_quick_neg_int_allocs); fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, " "1-strings: %" PY_FORMAT_SIZE_T "d\n", - null_strings, one_strings); + _Py_null_strings, _Py_one_strings); } PyObject * -get_counts(void) +_Py_get_counts(void) { PyTypeObject *tp; PyObject *result; @@ -150,12 +150,12 @@ get_counts(void) } void -inc_count(PyTypeObject *tp) +_Py_inc_count(PyTypeObject *tp) { if (tp->tp_next == NULL && tp->tp_prev == NULL) { /* first time; insert in linked list */ if (tp->tp_next != NULL) /* sanity check */ - Py_FatalError("XXX inc_count sanity check"); + Py_FatalError("XXX _Py_inc_count sanity check"); if (type_list) type_list->tp_prev = tp; tp->tp_next = type_list; @@ -181,7 +181,7 @@ inc_count(PyTypeObject *tp) tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees; } -void dec_count(PyTypeObject *tp) +void _Py_dec_count(PyTypeObject *tp) { tp->tp_frees++; if (unlist_types_without_objects && diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 2e324060ea..288f134811 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -28,8 +28,8 @@ static PyTupleObject *free_list[PyTuple_MAXSAVESIZE]; static int numfree[PyTuple_MAXSAVESIZE]; #endif #ifdef COUNT_ALLOCS -Py_ssize_t fast_tuple_allocs; -Py_ssize_t tuple_zero_allocs; +Py_ssize_t _Py_fast_tuple_allocs; +Py_ssize_t _Py_tuple_zero_allocs; #endif /* Debug statistic to count GC tracking of tuples. @@ -89,7 +89,7 @@ PyTuple_New(Py_ssize_t size) op = free_list[0]; Py_INCREF(op); #ifdef COUNT_ALLOCS - tuple_zero_allocs++; + _Py_tuple_zero_allocs++; #endif return (PyObject *) op; } @@ -97,7 +97,7 @@ PyTuple_New(Py_ssize_t size) free_list[size] = (PyTupleObject *) op->ob_item[0]; numfree[size]--; #ifdef COUNT_ALLOCS - fast_tuple_allocs++; + _Py_fast_tuple_allocs++; #endif /* Inline PyObject_InitVar */ #ifdef Py_TRACE_REFS diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index ec39500d4c..f1579c781d 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -929,7 +929,7 @@ Py_Initialize(void) #ifdef COUNT_ALLOCS -extern void dump_counts(FILE*); +extern void _Py_dump_counts(FILE*); #endif /* Flush stdout and stderr */ @@ -1112,7 +1112,7 @@ Py_FinalizeEx(void) /* Debugging stuff */ #ifdef COUNT_ALLOCS - dump_counts(stderr); + _Py_dump_counts(stderr); #endif /* dump hash stats */ _PyHash_Fini(); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 58ea60595c..f88b273e26 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1340,9 +1340,9 @@ size." static PyObject * sys_getcounts(PyObject *self) { - extern PyObject *get_counts(void); + extern PyObject *_Py_get_counts(void); - return get_counts(); + return _Py_get_counts(); } #endif