[libc-commits] [libc] [libc][docs] improvements to docgen, adds threads.h implementation status docs (PR #89134)

Michael Flanders via libc-commits libc-commits at lists.llvm.org
Wed Apr 17 13:26:15 PDT 2024


https://github.com/Flandini updated https://github.com/llvm/llvm-project/pull/89134

>From 9835ca669f51d70ed22e150c1dc5b6c0e92feed1 Mon Sep 17 00:00:00 2001
From: Michael Flanders <flanders.michaelk at gmail.com>
Date: Wed, 17 Apr 2024 12:30:21 -0700
Subject: [PATCH 1/3] adds docgen api json schema

adds macros to standard header implementation status rst docs

adds threads.h docgen json file and rst file

adds threads.h impl status to status toctree index.rst
---
 libc/docs/ctype.rst                      |   8 +-
 libc/docs/fenv.rst                       |  77 +++++++++++++++-
 libc/docs/index.rst                      |   1 +
 libc/docs/signal.rst                     |  47 +++++++++-
 libc/docs/stdbit.rst                     |  74 ++++++++++++++-
 libc/docs/threads.rst                    | 110 +++++++++++++++++++++++
 libc/utils/docgen/docgen-api-schema.json |  47 ++++++++++
 libc/utils/docgen/docgen.py              |  99 +++++++++++++++-----
 libc/utils/docgen/fenv.json              |  81 ++++++++++++++++-
 libc/utils/docgen/signal.json            |  63 +++++++++----
 libc/utils/docgen/stdbit.json            |  94 ++++++++++++++-----
 libc/utils/docgen/threads.json           |  89 ++++++++++++++++++
 12 files changed, 719 insertions(+), 71 deletions(-)
 create mode 100644 libc/docs/threads.rst
 create mode 100644 libc/utils/docgen/docgen-api-schema.json
 create mode 100644 libc/utils/docgen/threads.json

diff --git a/libc/docs/ctype.rst b/libc/docs/ctype.rst
index 7d77dadccc9ba3..55c29f7f1bba19 100644
--- a/libc/docs/ctype.rst
+++ b/libc/docs/ctype.rst
@@ -1,7 +1,11 @@
 .. include:: check.rst
 
-ctype.h Functions
-=================
+=======
+ctype.h
+=======
+
+Functions
+=========
 
 .. list-table::
   :widths: auto
diff --git a/libc/docs/fenv.rst b/libc/docs/fenv.rst
index 1dee5515e1174b..eb4c4688b28a88 100644
--- a/libc/docs/fenv.rst
+++ b/libc/docs/fenv.rst
@@ -1,7 +1,80 @@
 .. include:: check.rst
 
-fenv.h Functions
-================
+======
+fenv.h
+======
+
+Macros
+======
+
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard
+  * - FE_ALL_EXCEPT
+    - |check|
+    - 7.6.12
+  * - FE_DEC_DOWNWARD
+    -
+    - 7.6.14
+  * - FE_DEC_TONEAREST
+    -
+    - 7.6.14
+  * - FE_DEC_TONEARESTFROMZERO
+    -
+    - 7.6.14
+  * - FE_DEC_TOWARDZERO
+    -
+    - 7.6.14
+  * - FE_DEC_UPWARD
+    -
+    - 7.6.14
+  * - FE_DFL_ENV
+    - |check|
+    - 7.6.17
+  * - FE_DFL_MODE
+    -
+    - 7.6.11
+  * - FE_DIVBYZERO
+    - |check|
+    - 7.6.9
+  * - FE_DOWNARD
+    - |check|
+    - 7.6.13
+  * - FE_INEXACT
+    - |check|
+    - 7.6.9
+  * - FE_INVALID
+    - |check|
+    - 7.6.9
+  * - FE_OVERFLOW
+    - |check|
+    - 7.6.9
+  * - FE_TONEAREST
+    - |check|
+    - 7.6.13
+  * - FE_TONEARESTFROMZERO
+    -
+    - 7.6.13
+  * - FE_TOWARDZERO
+    - |check|
+    - 7.6.13
+  * - FE_UNDERFLOW
+    - |check|
+    - 7.6.9
+  * - FE_UPWARD
+    - |check|
+    - 7.6.13
+  * - __STDC_VERSION_FENV_H__
+    -
+    - 7.6.5
+
+Functions
+=========
 
 .. list-table::
   :widths: auto
diff --git a/libc/docs/index.rst b/libc/docs/index.rst
index 11d5ae197d7189..f71920b058d83f 100644
--- a/libc/docs/index.rst
+++ b/libc/docs/index.rst
@@ -71,6 +71,7 @@ stages there is no ABI stability in any form.
    c23
    ctype
    signal
+   threads
 
 .. toctree::
    :hidden:
diff --git a/libc/docs/signal.rst b/libc/docs/signal.rst
index 7903bb439cb337..0806e796a58b37 100644
--- a/libc/docs/signal.rst
+++ b/libc/docs/signal.rst
@@ -1,7 +1,50 @@
 .. include:: check.rst
 
-signal.h Functions
-==================
+========
+signal.h
+========
+
+Macros
+======
+
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard
+  * - SIGABRT
+    - |check|
+    - 7.14.3
+  * - SIGFPE
+    - |check|
+    - 7.14.3
+  * - SIGILL
+    - |check|
+    - 7.14.3
+  * - SIGINT
+    - |check|
+    - 7.14.3
+  * - SIGSEGV
+    - |check|
+    - 7.14.3
+  * - SIGTERM
+    - |check|
+    - 7.14.3
+  * - SIG_DFL
+    -
+    - 7.14.3
+  * - SIG_ERR
+    -
+    - 7.14.3
+  * - SIG_IGN
+    -
+    - 7.14.3
+
+Functions
+=========
 
 .. list-table::
   :widths: auto
diff --git a/libc/docs/stdbit.rst b/libc/docs/stdbit.rst
index 0a12b2b6d7b513..8ca4de4e035984 100644
--- a/libc/docs/stdbit.rst
+++ b/libc/docs/stdbit.rst
@@ -1,7 +1,77 @@
 .. include:: check.rst
 
-stdbit.h Functions
-==================
+========
+stdbit.h
+========
+
+Macros
+======
+
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard
+  * - __STDC_ENDIAN_BIG__
+    - |check|
+    - 7.18.2.2
+  * - __STDC_ENDIAN_LITTLE__
+    - |check|
+    - 7.18.2.2
+  * - __STDC_ENDIAN_NATIVE__
+    - |check|
+    - 7.18.2.2
+  * - __STDC_VERSION_STDBIT_H__
+    - |check|
+    - 7.18.1.2
+  * - stdc_bit_ceil
+    - |check|
+    - 7.18.16.1
+  * - stdc_bit_floor
+    - |check|
+    - 7.18.15.1
+  * - stdc_bit_width
+    - |check|
+    - 7.18.14.1
+  * - stdc_count_ones
+    - |check|
+    - 7.18.12.1
+  * - stdc_count_zeros
+    - |check|
+    - 7.18.11.1
+  * - stdc_first_leading_one
+    - |check|
+    - 7.18.8.1
+  * - stdc_first_leading_zero
+    - |check|
+    - 7.18.7.1
+  * - stdc_first_trailing_one
+    - |check|
+    - 7.18.10.1
+  * - stdc_first_trailing_zero
+    - |check|
+    - 7.18.9.1
+  * - stdc_has_single_bit
+    - |check|
+    - 7.18.13.1
+  * - stdc_leading_ones
+    - |check|
+    - 7.18.4.1
+  * - stdc_leading_zeros
+    - |check|
+    - 7.18.3.1
+  * - stdc_trailing_ones
+    - |check|
+    - 7.18.6.1
+  * - stdc_trailing_zeros
+    - |check|
+    - 7.18.5.1
+
+Functions
+=========
 
 .. list-table::
   :widths: auto
diff --git a/libc/docs/threads.rst b/libc/docs/threads.rst
new file mode 100644
index 00000000000000..a2cd0222ef281f
--- /dev/null
+++ b/libc/docs/threads.rst
@@ -0,0 +1,110 @@
+.. include:: check.rst
+
+=========
+threads.h
+=========
+
+Macros
+======
+
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard
+  * - ONCE_FLAG_INIT
+    - |check|
+    - 7.28.1.3
+  * - TSS_DTOR_ITERATIONS
+    -
+    - 7.28.1.3
+
+Functions
+=========
+
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard
+  * - call_once
+    - |check|
+    - 7.28.2.1
+  * - cnd_broadcast
+    - |check|
+    - 7.28.3.1
+  * - cnd_destroy
+    - |check|
+    - 7.28.3.2
+  * - cnd_init
+    - |check|
+    - 7.28.3.3
+  * - cnd_signal
+    - |check|
+    - 7.28.3.4
+  * - cnd_timedwait
+    -
+    - 7.28.3.5
+  * - cnd_wait
+    - |check|
+    - 7.28.3.6
+  * - mtx_destroy
+    - |check|
+    - 7.28.4.1
+  * - mtx_init
+    - |check|
+    - 7.28.4.2
+  * - mtx_lock
+    - |check|
+    - 7.28.4.3
+  * - mtx_timedlock
+    -
+    - 7.28.4.4
+  * - mtx_trylock
+    -
+    - 7.28.4.5
+  * - mtx_unlock
+    - |check|
+    - 7.28.4.6
+  * - thrd_create
+    - |check|
+    - 7.28.5.1
+  * - thrd_current
+    - |check|
+    - 7.28.5.2
+  * - thrd_detach
+    - |check|
+    - 7.28.5.3
+  * - thrd_equal
+    - |check|
+    - 7.28.5.4
+  * - thrd_exit
+    - |check|
+    - 7.28.5.5
+  * - thrd_join
+    - |check|
+    - 7.28.5.6
+  * - thrd_sleep
+    -
+    - 7.28.5.7
+  * - thrd_yield
+    -
+    - 7.28.5.8
+  * - tss_create
+    - |check|
+    - 7.28.6.1
+  * - tss_delete
+    - |check|
+    - 7.28.6.2
+  * - tss_get
+    - |check|
+    - 7.28.6.3
+  * - tss_set
+    - |check|
+    - 7.28.6.4
diff --git a/libc/utils/docgen/docgen-api-schema.json b/libc/utils/docgen/docgen-api-schema.json
new file mode 100644
index 00000000000000..0a4790e8ff264f
--- /dev/null
+++ b/libc/utils/docgen/docgen-api-schema.json
@@ -0,0 +1,47 @@
+{
+  "$schema": "https://json-schema.org/draft/2020-12/schema",
+  "title": "docgen API format",
+  "description": "This schema specifies the format used by docgen to automatically generate standard header implementation statuses for libc. See the other JSON files in $LLVM_PROJECT/libc/docgen/ for files implementing following this API format.",
+  "type": "object",
+  "properties": {
+    "macros": {
+      "description": "Implementation status of macros in this header",
+      "type": "object",
+      "patternProperties": {
+        ".+": {
+          "description": "Implementation status of a specific macro",
+          "type": "object",
+          "properties": {
+            "implemented": {
+              "description": "true or false, not computed automatically unlike individual functions described in the schema below",
+              "type": "boolean"
+            },
+            "defined": {
+              "$ref": "#/c-standard-reference"
+            }
+          },
+          "required": ["implemented", "defined"]
+        }
+      }
+    },
+    "functions": {
+      "patternProperties": {
+        ".+": {
+          "description": "Implementation status of functions in this header",
+          "type": ["object", "null"],
+          "properties": {
+            "defined": {
+              "$ref": "#/c-standard-reference"
+            }
+          },
+          "required": ["defined"]
+        }
+      }
+    }
+  },
+  "c-standard-reference": {
+    "description": "What subsection and paragraph number (if applicable) is this defined in the standard?",
+    "type": "string",
+    "pattern": "^7\\.([0-9]+\\.)*[0-9]+$"
+  }
+}
diff --git a/libc/utils/docgen/docgen.py b/libc/utils/docgen/docgen.py
index 23d45305fe513c..6b5cf1392b2e95 100755
--- a/libc/utils/docgen/docgen.py
+++ b/libc/utils/docgen/docgen.py
@@ -13,6 +13,22 @@
 import sys
 import json
 
+schema_name = "docgen-api-schema.json"
+
+
+def check_schema(api: Dict):
+    from jsonschema import validate
+
+    script_dir = Path(sys.path[0])
+    schema_file = script_dir / schema_name
+
+    if not schema_file.exists():
+        raise FileNotFoundError(f"couldn't locate docgen api schema: {schema_file}")
+
+    with schema_file.open() as f:
+        schema = json.load(f)
+        validate(api, schema=schema)
+
 
 def load_api(hname: str) -> Dict:
     p = Path(__file__).parent / Path(hname).with_suffix(".json")
@@ -23,11 +39,7 @@ def load_api(hname: str) -> Dict:
 # TODO: we may need to get more sophisticated for less generic implementations.
 # Does libc/src/{hname minus .h suffix}/{fname}.cpp exist?
 def is_implemented(hname: str, fname: str) -> bool:
-    path = Path(
-        Path(__file__).parent.parent.parent,
-        "src",
-        hname.rstrip(".h")
-    )
+    path = Path(Path(__file__).parent.parent.parent, "src", hname.rstrip(".h"))
 
     if not path.exists():
         raise FileNotFoundError(f"implementation dir does not exist: {path}")
@@ -43,7 +55,27 @@ def is_implemented(hname: str, fname: str) -> bool:
     return False
 
 
+def print_tbl_dir():
+    print(
+        f"""
+.. list-table::
+  :widths: auto
+  :align: center
+  :header-rows: 1
+
+  * - Function
+    - Implemented
+    - Standard"""
+    )
+
+
 def print_functions(header: str, functions: Dict):
+    tbl_hdr = "Functions"
+    print(tbl_hdr)
+    print("=" * len(tbl_hdr))
+
+    print_tbl_dir()
+
     for key in sorted(functions.keys()):
         print(f"  * - {key}")
 
@@ -52,37 +84,57 @@ def print_functions(header: str, functions: Dict):
         else:
             print("    -")
 
-        # defined is optional. Having any content is optional.
+        # the object is either null or is an object with the "defined" property
         if functions[key] is not None and "defined" in functions[key]:
             print(f'    - {functions[key]["defined"]}')
         else:
             print("    -")
 
 
+def print_macros(macros: Dict):
+    tbl_hdr = "Macros"
+    print(tbl_hdr)
+    print("=" * len(tbl_hdr))
+
+    print_tbl_dir()
+
+    for key in sorted(macros.keys()):
+        print("  * - " + key)
+
+        if macros[key]["implemented"]:
+            print("    - |check|")
+        else:
+            print("    -")
+
+        print("    - " + macros[key]["defined"])
+
+
 def print_header(header: str, api: Dict):
     print(".. include:: check.rst\n")
-    fns = f"{header} Functions"
-    print(fns)
-    print("=" * (len(fns)))
-    print(
-        f"""
-.. list-table::
-  :widths: auto
-  :align: center
-  :header-rows: 1
 
-  * - Function
-    - Implemented
-    - Standard"""
-    )
-    # TODO: how do we want to signal implementation of macros?
-    print_functions(header, api["functions"])
+    print("=" * len(header))
+    print(header)
+    print("=" * len(header))
+    print()
+
+    # the macro and function sections are both optional
+    if "macros" in api:
+        print_macros(api["macros"])
+        print()
+
+    if "functions" in api:
+        print_functions(header, api["functions"])
 
 
 def parse_args() -> Namespace:
     parser = ArgumentParser()
-    choices = [p.with_suffix(".h").name for p in Path(__file__).parent.glob("*.json")]
+    choices = [
+        p.with_suffix(".h").name
+        for p in Path(__file__).parent.glob("*.json")
+        if schema_name not in p.name
+    ]
     parser.add_argument("header_name", choices=choices)
+    parser.add_argument("--validate", action="store_true")
     return parser.parse_args()
 
 
@@ -90,4 +142,7 @@ def parse_args() -> Namespace:
     args = parse_args()
     api = load_api(args.header_name)
 
+    if args.validate:
+        check_schema(api)
+
     print_header(args.header_name, api)
diff --git a/libc/utils/docgen/fenv.json b/libc/utils/docgen/fenv.json
index 0af38b16b2d982..a93ee590351083 100644
--- a/libc/utils/docgen/fenv.json
+++ b/libc/utils/docgen/fenv.json
@@ -1,7 +1,82 @@
 {
-  "macros": [
-    "__STDC_VERSION_FENV_H__"
-  ],
+  "macros": {
+    "__STDC_VERSION_FENV_H__": {
+      "defined": "7.6.5",
+      "implemented": false
+    },
+    "FE_DIVBYZERO": {
+      "defined": "7.6.9",
+      "implemented": true
+    },
+    "FE_INEXACT": {
+      "defined": "7.6.9",
+      "implemented": true
+    },
+    "FE_INVALID": {
+      "defined": "7.6.9",
+      "implemented": true
+    },
+    "FE_OVERFLOW": {
+      "defined": "7.6.9",
+      "implemented": true
+    },
+    "FE_UNDERFLOW": {
+      "defined": "7.6.9",
+      "implemented": true
+    },
+    "FE_ALL_EXCEPT": {
+      "defined": "7.6.12",
+      "implemented": true
+    },
+    "FE_DFL_MODE": {
+      "defined": "7.6.11",
+      "implemented": false
+    },
+    "FE_DOWNARD": {
+      "defined": "7.6.13",
+      "implemented": true
+    },
+    "FE_TONEAREST": {
+      "defined": "7.6.13",
+      "implemented": true
+    },
+    "FE_TONEARESTFROMZERO": {
+      "defined": "7.6.13",
+      "implemented": false
+    },
+    "FE_TOWARDZERO": {
+      "defined": "7.6.13",
+      "implemented": true
+    },
+    "FE_UPWARD": {
+      "defined": "7.6.13",
+      "implemented": true
+    },
+    "FE_DEC_DOWNWARD": {
+      "defined": "7.6.14",
+      "implemented": false
+    },
+    "FE_DEC_TONEAREST": {
+      "defined": "7.6.14",
+      "implemented": false
+    },
+    "FE_DEC_TONEARESTFROMZERO": {
+      "defined": "7.6.14",
+      "implemented": false
+    },
+    "FE_DEC_TOWARDZERO": {
+      "defined": "7.6.14",
+      "implemented": false
+    },
+    "FE_DEC_UPWARD": {
+      "defined": "7.6.14",
+      "implemented": false
+    },
+    "FE_DFL_ENV": {
+      "defined": "7.6.17",
+      "implemented": true
+    }
+  },
   "functions": {
     "feclearexcept": {
       "defined": "7.6.4.1"
diff --git a/libc/utils/docgen/signal.json b/libc/utils/docgen/signal.json
index 976021a803a672..e9eaae57364fb0 100644
--- a/libc/utils/docgen/signal.json
+++ b/libc/utils/docgen/signal.json
@@ -1,16 +1,49 @@
 {
-  "macros": [
-    "SIG_DFL",
-    "SIG_ERR",
-    "SIG_IGN",
-    "SIGABRT",
-    "SIGFPE",
-    "SIGILL",
-    "SIGINT",
-    "SIGSEGV",
-    "SIGTERM"
-  ],
+  "macros": {
+    "SIG_DFL": {
+      "defined": "7.14.3",
+      "implemented": false
+    },
+    "SIG_ERR": {
+      "defined": "7.14.3",
+      "implemented": false
+    },
+    "SIG_IGN": {
+      "defined": "7.14.3",
+      "implemented": false
+    },
+    "SIGABRT": {
+      "defined": "7.14.3",
+      "implemented": true
+    },
+    "SIGFPE": {
+      "defined": "7.14.3",
+      "implemented": true
+    },
+    "SIGILL": {
+      "defined": "7.14.3",
+      "implemented": true
+    },
+    "SIGINT": {
+      "defined": "7.14.3",
+      "implemented": true
+    },
+    "SIGSEGV": {
+      "defined": "7.14.3",
+      "implemented": true
+    },
+    "SIGTERM": {
+      "defined": "7.14.3",
+      "implemented": true
+    }
+  },
   "functions": {
+    "signal": {
+      "defined": "7.14.1.1"
+    },
+    "raise": {
+      "defined": "7.14.2.1"
+    },
     "kill": null,
     "sigaction": null,
     "sigaddset": null,
@@ -18,12 +51,6 @@
     "sigdelset": null,
     "sigemptyset": null,
     "sigfillset": null,
-    "sigprocmask": null,
-    "signal": {
-      "defined": "7.14.1.1"
-    },
-    "raise": {
-      "defined": "7.14.2.1"
-    }
+    "sigprocmask": null
   }
 }
diff --git a/libc/utils/docgen/stdbit.json b/libc/utils/docgen/stdbit.json
index 9dda0cb0f5383a..c295efa0bbe245 100644
--- a/libc/utils/docgen/stdbit.json
+++ b/libc/utils/docgen/stdbit.json
@@ -1,24 +1,78 @@
 {
-  "macros": [
-    "__STDC_VERSION_STDBIT_H__",
-    "__STDC_ENDIAN_LITTLE__",
-    "__STDC_ENDIAN_BIG__",
-    "__STDC_ENDIAN_NATIVE__",
-    "stdc_leading_zeros",
-    "stdc_leading_ones",
-    "stdc_trailing_zeros",
-    "stdc_trailing_ones",
-    "stdc_first_leading_zero",
-    "stdc_first_leading_one",
-    "stdc_first_trailing_zero",
-    "stdc_first_trailing_one",
-    "stdc_count_zeros",
-    "stdc_count_ones",
-    "stdc_has_single_bit",
-    "stdc_bit_width",
-    "stdc_bit_floor",
-    "stdc_bit_ceil"
-  ],
+  "macros": {
+    "__STDC_VERSION_STDBIT_H__": {
+      "defined": "7.18.1.2",
+      "implemented": true
+    },
+    "__STDC_ENDIAN_LITTLE__": {
+      "defined": "7.18.2.2",
+      "implemented": true
+    },
+    "__STDC_ENDIAN_BIG__": {
+      "defined": "7.18.2.2",
+      "implemented": true
+    },
+    "__STDC_ENDIAN_NATIVE__": {
+      "defined": "7.18.2.2",
+      "implemented": true
+    },
+    "stdc_leading_zeros": {
+      "defined": "7.18.3.1",
+      "implemented": true
+    },
+    "stdc_leading_ones": {
+      "defined": "7.18.4.1",
+      "implemented": true
+    },
+    "stdc_trailing_zeros": {
+      "defined": "7.18.5.1",
+      "implemented": true
+    },
+    "stdc_trailing_ones": {
+      "defined": "7.18.6.1",
+      "implemented": true
+    },
+    "stdc_first_leading_zero": {
+      "defined": "7.18.7.1",
+      "implemented": true
+    },
+    "stdc_first_leading_one": {
+      "defined": "7.18.8.1",
+      "implemented": true
+    },
+    "stdc_first_trailing_zero": {
+      "defined": "7.18.9.1",
+      "implemented": true
+    },
+    "stdc_first_trailing_one": {
+      "defined": "7.18.10.1",
+      "implemented": true
+    },
+    "stdc_count_zeros": {
+      "defined": "7.18.11.1",
+      "implemented": true
+    },
+    "stdc_count_ones": {
+      "defined": "7.18.12.1",
+      "implemented": true
+    },
+    "stdc_has_single_bit": {
+      "defined": "7.18.13.1",
+      "implemented": true
+    },
+    "stdc_bit_width": {
+      "defined": "7.18.14.1",
+      "implemented": true
+    },
+    "stdc_bit_floor": {
+      "defined": "7.18.15.1",
+      "implemented": true
+    },
+    "stdc_bit_ceil": {
+      "defined": "7.18.16.1",
+      "implemented": true
+    }
+  },
   "functions": {
     "stdc_leading_zeros_uc": {
       "defined": "7.18.3"
diff --git a/libc/utils/docgen/threads.json b/libc/utils/docgen/threads.json
new file mode 100644
index 00000000000000..1e6b7cb4681fd4
--- /dev/null
+++ b/libc/utils/docgen/threads.json
@@ -0,0 +1,89 @@
+{
+  "macros": {
+    "ONCE_FLAG_INIT": {
+      "defined": "7.28.1.3",
+      "implemented": true
+    },
+    "TSS_DTOR_ITERATIONS": {
+      "defined": "7.28.1.3",
+      "implemented": false
+    }
+  },
+  "functions": {
+    "call_once": {
+      "defined": "7.28.2.1"
+    },
+    "cnd_broadcast": {
+      "defined": "7.28.3.1"
+    },
+    "cnd_destroy": {
+      "defined": "7.28.3.2"
+    },
+    "cnd_init": {
+      "defined": "7.28.3.3"
+    },
+    "cnd_signal": {
+      "defined": "7.28.3.4"
+    },
+    "cnd_timedwait": {
+      "defined": "7.28.3.5"
+    },
+    "cnd_wait": {
+      "defined": "7.28.3.6"
+    },
+    "mtx_destroy": {
+      "defined": "7.28.4.1"
+    },
+    "mtx_init": {
+      "defined": "7.28.4.2"
+    },
+    "mtx_lock": {
+      "defined": "7.28.4.3"
+    },
+    "mtx_timedlock": {
+      "defined": "7.28.4.4"
+    },
+    "mtx_trylock": {
+      "defined": "7.28.4.5"
+    },
+    "mtx_unlock": {
+      "defined": "7.28.4.6"
+    },
+    "thrd_create": {
+      "defined": "7.28.5.1"
+    },
+    "thrd_current": {
+      "defined": "7.28.5.2"
+    },
+    "thrd_detach": {
+      "defined": "7.28.5.3"
+    },
+    "thrd_equal": {
+      "defined": "7.28.5.4"
+    },
+    "thrd_exit": {
+      "defined": "7.28.5.5"
+    },
+    "thrd_join": {
+      "defined": "7.28.5.6"
+    },
+    "thrd_sleep": {
+      "defined": "7.28.5.7"
+    },
+    "thrd_yield": {
+      "defined": "7.28.5.8"
+    },
+    "tss_create": {
+      "defined": "7.28.6.1"
+    },
+    "tss_delete": {
+      "defined": "7.28.6.2"
+    },
+    "tss_get": {
+      "defined": "7.28.6.3"
+    },
+    "tss_set": {
+      "defined": "7.28.6.4"
+    }
+  }
+}

>From 18a93792c65885e3e09e666936d8bd181d96ad82 Mon Sep 17 00:00:00 2001
From: Michael Flanders <flanders.michaelk at gmail.com>
Date: Wed, 17 Apr 2024 13:19:44 -0700
Subject: [PATCH 2/3] fix typo in schema description

---
 libc/utils/docgen/docgen-api-schema.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/utils/docgen/docgen-api-schema.json b/libc/utils/docgen/docgen-api-schema.json
index 0a4790e8ff264f..c1c0851f25a373 100644
--- a/libc/utils/docgen/docgen-api-schema.json
+++ b/libc/utils/docgen/docgen-api-schema.json
@@ -1,7 +1,7 @@
 {
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "title": "docgen API format",
-  "description": "This schema specifies the format used by docgen to automatically generate standard header implementation statuses for libc. See the other JSON files in $LLVM_PROJECT/libc/docgen/ for files implementing following this API format.",
+  "description": "This schema specifies the format used by docgen to automatically generate standard header implementation statuses for libc. See the other JSON files in $LLVM_PROJECT/libc/docgen/ for files implementing this API format.",
   "type": "object",
   "properties": {
     "macros": {

>From f9879d573ba2d57e4c3234b6c76b316f933d307a Mon Sep 17 00:00:00 2001
From: Michael Flanders <flanders.michaelk at gmail.com>
Date: Wed, 17 Apr 2024 13:26:05 -0700
Subject: [PATCH 3/3] fix docgen path in docgen description string

---
 libc/utils/docgen/docgen-api-schema.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/utils/docgen/docgen-api-schema.json b/libc/utils/docgen/docgen-api-schema.json
index c1c0851f25a373..081f23788fbf82 100644
--- a/libc/utils/docgen/docgen-api-schema.json
+++ b/libc/utils/docgen/docgen-api-schema.json
@@ -1,7 +1,7 @@
 {
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "title": "docgen API format",
-  "description": "This schema specifies the format used by docgen to automatically generate standard header implementation statuses for libc. See the other JSON files in $LLVM_PROJECT/libc/docgen/ for files implementing this API format.",
+  "description": "This schema specifies the format used by docgen to automatically generate standard header implementation statuses for libc. See the other JSON files in $LLVM_PROJECT/libc/utils/docgen/ for files implementing this API format.",
   "type": "object",
   "properties": {
     "macros": {



More information about the libc-commits mailing list