update to new C roles and directives
diff --git a/Doc/c-api/gcsupport.rst b/Doc/c-api/gcsupport.rst
index 4517929..2a4fda4 100644
--- a/Doc/c-api/gcsupport.rst
+++ b/Doc/c-api/gcsupport.rst
@@ -30,40 +30,40 @@
 
 Constructors for container types must conform to two rules:
 
-#. The memory for the object must be allocated using :cfunc:`PyObject_GC_New`
-   or :cfunc:`PyObject_GC_NewVar`.
+#. The memory for the object must be allocated using :c:func:`PyObject_GC_New`
+   or :c:func:`PyObject_GC_NewVar`.
 
 #. Once all the fields which may contain references to other containers are
-   initialized, it must call :cfunc:`PyObject_GC_Track`.
+   initialized, it must call :c:func:`PyObject_GC_Track`.
 
 
-.. cfunction:: TYPE* PyObject_GC_New(TYPE, PyTypeObject *type)
+.. c:function:: TYPE* PyObject_GC_New(TYPE, PyTypeObject *type)
 
-   Analogous to :cfunc:`PyObject_New` but for container objects with the
+   Analogous to :c:func:`PyObject_New` but for container objects with the
    :const:`Py_TPFLAGS_HAVE_GC` flag set.
 
 
-.. cfunction:: TYPE* PyObject_GC_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
+.. c:function:: TYPE* PyObject_GC_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
 
-   Analogous to :cfunc:`PyObject_NewVar` but for container objects with the
+   Analogous to :c:func:`PyObject_NewVar` but for container objects with the
    :const:`Py_TPFLAGS_HAVE_GC` flag set.
 
    .. versionchanged:: 2.5
-      This function used an :ctype:`int` type for *size*. This might require
+      This function used an :c:type:`int` type for *size*. This might require
       changes in your code for properly supporting 64-bit systems.
 
 
-.. cfunction:: TYPE* PyObject_GC_Resize(TYPE, PyVarObject *op, Py_ssize_t newsize)
+.. c:function:: TYPE* PyObject_GC_Resize(TYPE, PyVarObject *op, Py_ssize_t newsize)
 
-   Resize an object allocated by :cfunc:`PyObject_NewVar`.  Returns the
+   Resize an object allocated by :c:func:`PyObject_NewVar`.  Returns the
    resized object or *NULL* on failure.
 
    .. versionchanged:: 2.5
-      This function used an :ctype:`int` type for *newsize*. This might
+      This function used an :c:type:`int` type for *newsize*. This might
       require changes in your code for properly supporting 64-bit systems.
 
 
-.. cfunction:: void PyObject_GC_Track(PyObject *op)
+.. c:function:: void PyObject_GC_Track(PyObject *op)
 
    Adds the object *op* to the set of container objects tracked by the
    collector.  The collector can run at unexpected times so objects must be
@@ -72,44 +72,44 @@
    end of the constructor.
 
 
-.. cfunction:: void _PyObject_GC_TRACK(PyObject *op)
+.. c:function:: void _PyObject_GC_TRACK(PyObject *op)
 
-   A macro version of :cfunc:`PyObject_GC_Track`.  It should not be used for
+   A macro version of :c:func:`PyObject_GC_Track`.  It should not be used for
    extension modules.
 
 Similarly, the deallocator for the object must conform to a similar pair of
 rules:
 
 #. Before fields which refer to other containers are invalidated,
-   :cfunc:`PyObject_GC_UnTrack` must be called.
+   :c:func:`PyObject_GC_UnTrack` must be called.
 
-#. The object's memory must be deallocated using :cfunc:`PyObject_GC_Del`.
+#. The object's memory must be deallocated using :c:func:`PyObject_GC_Del`.
 
 
-.. cfunction:: void PyObject_GC_Del(void *op)
+.. c:function:: void PyObject_GC_Del(void *op)
 
-   Releases memory allocated to an object using :cfunc:`PyObject_GC_New` or
-   :cfunc:`PyObject_GC_NewVar`.
+   Releases memory allocated to an object using :c:func:`PyObject_GC_New` or
+   :c:func:`PyObject_GC_NewVar`.
 
 
-.. cfunction:: void PyObject_GC_UnTrack(void *op)
+.. c:function:: void PyObject_GC_UnTrack(void *op)
 
    Remove the object *op* from the set of container objects tracked by the
-   collector.  Note that :cfunc:`PyObject_GC_Track` can be called again on
+   collector.  Note that :c:func:`PyObject_GC_Track` can be called again on
    this object to add it back to the set of tracked objects.  The deallocator
    (:attr:`tp_dealloc` handler) should call this for the object before any of
    the fields used by the :attr:`tp_traverse` handler become invalid.
 
 
-.. cfunction:: void _PyObject_GC_UNTRACK(PyObject *op)
+.. c:function:: void _PyObject_GC_UNTRACK(PyObject *op)
 
-   A macro version of :cfunc:`PyObject_GC_UnTrack`.  It should not be used for
+   A macro version of :c:func:`PyObject_GC_UnTrack`.  It should not be used for
    extension modules.
 
 The :attr:`tp_traverse` handler accepts a function parameter of this type:
 
 
-.. ctype:: int (*visitproc)(PyObject *object, void *arg)
+.. c:type:: int (*visitproc)(PyObject *object, void *arg)
 
    Type of the visitor function passed to the :attr:`tp_traverse` handler.
    The function should be called with an object to traverse as *object* and
@@ -121,7 +121,7 @@
 The :attr:`tp_traverse` handler must have the following type:
 
 
-.. ctype:: int (*traverseproc)(PyObject *self, visitproc visit, void *arg)
+.. c:type:: int (*traverseproc)(PyObject *self, visitproc visit, void *arg)
 
    Traversal function for a container object.  Implementations must call the
    *visit* function for each object directly contained by *self*, with the
@@ -130,12 +130,12 @@
    object argument.  If *visit* returns a non-zero value that value should be
    returned immediately.
 
-To simplify writing :attr:`tp_traverse` handlers, a :cfunc:`Py_VISIT` macro is
+To simplify writing :attr:`tp_traverse` handlers, a :c:func:`Py_VISIT` macro is
 provided.  In order to use this macro, the :attr:`tp_traverse` implementation
 must name its arguments exactly *visit* and *arg*:
 
 
-.. cfunction:: void Py_VISIT(PyObject *o)
+.. c:function:: void Py_VISIT(PyObject *o)
 
    Call the *visit* callback, with arguments *o* and *arg*. If *visit* returns
    a non-zero value, then return it.  Using this macro, :attr:`tp_traverse`
@@ -151,15 +151,15 @@
 
    .. versionadded:: 2.4
 
-The :attr:`tp_clear` handler must be of the :ctype:`inquiry` type, or *NULL*
+The :attr:`tp_clear` handler must be of the :c:type:`inquiry` type, or *NULL*
 if the object is immutable.
 
 
-.. ctype:: int (*inquiry)(PyObject *self)
+.. c:type:: int (*inquiry)(PyObject *self)
 
    Drop references that may have created reference cycles.  Immutable objects
    do not have to define this method since they can never directly create
    reference cycles.  Note that the object must still be valid after calling
-   this method (don't just call :cfunc:`Py_DECREF` on a reference).  The
+   this method (don't just call :c:func:`Py_DECREF` on a reference).  The
    collector will call this method if it detects that this object is involved
    in a reference cycle.