Roll llvm-libc, GCS, build, buildtools, clang, libcxx, rust, tools/rust

Add dependency llvm-libc

libc++ now depends on a small part of llvm-libc for floating point
from_chars.  https://crrev.com/1375402

Roll GCS deps

Utilize the generated output from GCS dep autoroller in
https://pdfium-review.googlesource.com/c/pdfium/+/126017

Roll build/ 9b11bd3a6..fcec87a31 (220 commits)

https://chromium.googlesource.com/chromium/src/build.git/+log/9b11bd3a6a52..fcec87a31687

Created with:
  roll-dep build

Roll buildtools/ 7f979120b..1760ff6d7 (25 commits; 1 trivial rolls)

https://chromium.googlesource.com/chromium/src/buildtools.git/+log/7f979120bfa8..1760ff6d7267

Created with:
  roll-dep buildtools

Roll tools/clang/ 7566fe852..37d1894d5 (38 commits)

https://chromium.googlesource.com/chromium/src/tools/clang/+log/7566fe852151..37d1894d5350

Created with:
  roll-dep tools/clang

Roll third_party/libc++/src/ e2d898ca2..e9288ebce (75 commits)

https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git/+log/e2d898ca22f1..e9288ebce451

Created with:
  roll-dep third_party/libc++/src

Roll third_party/rust/ 0e0ef1487..7c0544c9d (65 commits)

https://chromium.googlesource.com/chromium/src/third_party/rust/+log/0e0ef14876a3..7c0544c9d675

Created with:
  roll-dep third_party/rust

Roll tools/rust/ a7d3d8af5..e4fd8fdee (15 commits)

https://chromium.googlesource.com/chromium/src/tools/rust/+log/a7d3d8af5305..e4fd8fdeeac0

Created with:
  roll-dep tools/rust

Add UNSAFE_TODO() to cps_printer_driver.cpp to workaround build failure
after the toolchain updates.

Change-Id: Ife6a10c6dc84e4934a09a88d33c26a3bcd7ec1be
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/126130
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/.gitignore b/.gitignore
index 1ffe3ee..4436575 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@
 /third_party/libpng
 /third_party/llvm
 /third_party/llvm-build
+/third_party/llvm-libc/src
 /third_party/markupsafe
 /third_party/nasm
 /third_party/ninja
diff --git a/DEPS b/DEPS
index 411d153..1e33310 100644
--- a/DEPS
+++ b/DEPS
@@ -78,11 +78,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build
   # and whatever else without interference from each other.
-  'build_revision': '9b11bd3a6a523134ac35bcc9d1f59d04cc6f5821',
+  'build_revision': 'fcec87a316876a76c28e0cd5682dd32d9a597ec9',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling buildtools
   # and whatever else without interference from each other.
-  'buildtools_revision': '7f979120bfa80658a4e48c596e9de989477b3311',
+  'buildtools_revision': '1760ff6d7267dd97ae1968c7bee9ce04a2a8489d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
@@ -94,7 +94,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling clang
   # and whatever else without interference from each other.
-  'clang_revision': '7566fe852151a611ee6138cb60b5e878a213f0e4',
+  'clang_revision': '37d1894d5350b2cdfde3b4a81858c8d14c7c5eb8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling code_coverage
   # and whatever else without interference from each other.
@@ -152,7 +152,7 @@
   # and whatever else without interference from each other.
   # If you change this, also update the libc++ revision in
   # //buildtools/deps_revisions.gni.
-  'libcxx_revision': 'e2d898ca22f1d5863d8f6a7a0df849109483e05f',
+  'libcxx_revision': 'e9288ebce451f6203b72e159aa30109206ca5fdc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libc++abi
   # and whatever else without interference from each other.
@@ -166,6 +166,10 @@
   # and whatever else without interference from each other.
   'libunwind_revision': '5b01ea4a6f3b666b7d190e7cb7c31db2ed4d94ce',
   # Three lines of non-changing comments so that
+  # the commit queue can handle CLs rolling llvm-libc
+  # and whatever else without interference from each other.
+  'llvm_libc_revision': '9e360f42377fe23ddc6d3125d5e494609f3ea55e',
+  # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling markupsafe
   # and whatever else without interference from each other.
   'markupsafe_revision': '9f8efc8637f847ab1ba984212598e6fb9cf1b3d4',
@@ -192,7 +196,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling rust
   # and whatever else without interference from each other.
-  'rust_revision': '0e0ef14876a32128574eaf80bc7fc1c7cde92006',
+  'rust_revision': '7c0544c9d6752871fe7107618bc4ea0ce811c9e5',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling skia
   # and whatever else without interference from each other.
@@ -212,7 +216,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling tools_rust
   # and whatever else without interference from each other.
-  'tools_rust_revision': 'a7d3d8af53052ee94aba128d223befe1e48adbef',
+  'tools_rust_revision': 'e4fd8fdeeac06e3bc44655d9490aa68367e794af',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling v8
   # and whatever else without interference from each other.
@@ -394,50 +398,54 @@
     'bucket': 'chromium-browser-clang',
     'objects': [
       {
-        'object_name': 'Linux_x64/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': '6a30f7bc7c5f0eac02a40a4ec9a1ab906ddff2adacf2c9ff065916047c79f0fb',
-        'size_bytes': 52892060,
-        'generation': 1726118358890940,
+        'object_name': 'Linux_x64/clang-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': '8e2ae60cff735abf36e5fe5e77c00b544d1487b65f89207a42102b680898a46b',
+        'size_bytes': 54095864,
+        'generation': 1731544264198178,
         'condition': 'host_os == "linux" and non_git_source',
       },
       {
-        'object_name': 'Mac/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': 'cabfc7ca792ef13d3e665c3a7811f9a76cc39094059c11606cea1724f0394bbc',
-        'size_bytes': 47551968,
-        'generation': 1726118361528729,
+        'object_name': 'Mac/clang-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': '77f32455f2089476a93721d93ec03ac9f30cc95d488c866b5718ce387f92c1a5',
+        'size_bytes': 48571252,
+        'generation': 1731544266598769,
         'condition': 'host_os == "mac" and host_cpu == "x64"',
       },
       {
-        'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': '50a618246d7fd23645640fc50ccb0d4684c1895def378b90963a289f920ea88a',
-        'size_bytes': 879508,
-        'generation': 1726118377526206,
+        'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': 'a07d63759d4b5512fed86fa8f424365171d4015fe47c501c5caa3269dfe51032',
+        'size_bytes': 974716,
+        'generation': 1731544279261384,
         'condition': 'checkout_mac and not host_os == "mac"',
       },
       {
-        'object_name': 'Mac_arm64/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': 'e87eb4caa95c98ef36c40aec5b8cd07a6c4fb8959d3c7e7d452f6ed860c8c2bf',
-        'size_bytes': 41352592,
-        'generation': 1726118378868177,
+        'object_name': 'Mac_arm64/clang-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': 'ee885ab3b8e7f25e5d92d06306295f01f35324cf3a0ceb66448c47b29879770d',
+        'size_bytes': 42642352,
+        'generation': 1731544280524902,
         'condition': 'host_os == "mac" and host_cpu == "arm64"',
       },
       {
-        'object_name': 'Win/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': 'cb416511e6379b7fd3f362f637ebb8a28957d0d2ff2dc6e2d9f4484a381f2885',
-        'size_bytes': 44655000,
-        'generation': 1726118399720986,
+        'object_name': 'Win/clang-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': 'd13af8c578f9108c4bb6e2b2a629f1a1b8ae5b91746b1eed42292b37849a7561',
+        'size_bytes': 45523728,
+        'generation': 1731544289415557,
         'condition': 'host_os == "win"',
       },
       {
-        'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-3847-g69c43468-28.tar.xz',
-        'sha256sum': '81d66840357d83ca1a2c85ebca5259a7a86d9e99c77b37727fbaee87ccacf675',
-        'size_bytes': 2897452,
-        'generation': 1726118416326356,
+        'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-9764-gb81d8e90-7.tar.xz',
+        'sha256sum': 'ab71c7e8706207edc1b728de2d10cbd512a255486666addc40efd6f4f33e4e3c',
+        'size_bytes': 2480384,
+        'generation': 1731544296156413,
         'condition': 'checkout_win and not host_os == "win"',
       },
     ]
   },
 
+  'third_party/llvm-libc/src':
+    Var('chromium_git') + '/external/github.com/llvm/llvm-project/libc.git@' +
+        Var('llvm_libc_revision'),
+
   'third_party/markupsafe':
     Var('chromium_git') + '/chromium/src/third_party/markupsafe.git@' +
         Var('markupsafe_revision'),
@@ -468,31 +476,31 @@
     'bucket': 'chromium-browser-clang',
     'objects': [
       {
-        'object_name': 'Linux_x64/rust-toolchain-009e73825af0e59ad4fc603562e038b3dbd6593a-2-llvmorg-20-init-3847-g69c43468.tar.xz',
-        'sha256sum': '043bc520520424fad9fdfc87102e3af7c8f1ca4da3f7885e18f54fd29fc783e4',
-        'size_bytes': 115068636,
-        'generation': 1725552307196828,
+        'object_name': 'Linux_x64/rust-toolchain-bca5fdebe0e539d123f33df5f2149d5976392e76-1-llvmorg-20-init-9764-gb81d8e90.tar.xz',
+        'sha256sum': '0c4092f5769c5ececd096732b00f2c5c4e1741d4112881a2c83fe7e78271d792',
+        'size_bytes': 122758604,
+        'generation': 1729629177370195,
         'condition': 'host_os == "linux" and non_git_source',
       },
       {
-        'object_name': 'Mac/rust-toolchain-009e73825af0e59ad4fc603562e038b3dbd6593a-2-llvmorg-20-init-3847-g69c43468.tar.xz',
-        'sha256sum': '100befb02da0940fdede41a0ad0e28ded1ce4b6794b5e488bccc91ba1d27348a',
-        'size_bytes': 108415524,
-        'generation': 1725552308530261,
+        'object_name': 'Mac/rust-toolchain-bca5fdebe0e539d123f33df5f2149d5976392e76-1-llvmorg-20-init-9764-gb81d8e90.tar.xz',
+        'sha256sum': '41c0265504ce0ace325f87e7db24329170fcc88d3931ff76e61126db46f2b5e1',
+        'size_bytes': 115814060,
+        'generation': 1729629179200874,
         'condition': 'host_os == "mac" and host_cpu == "x64"',
       },
       {
-        'object_name': 'Mac_arm64/rust-toolchain-009e73825af0e59ad4fc603562e038b3dbd6593a-2-llvmorg-20-init-3847-g69c43468.tar.xz',
-        'sha256sum': '6f3ba8fe5a9590b476c087b412bd60e7e46ec59bc37aac76d9f7894c6bc34a75',
-        'size_bytes': 97820200,
-        'generation': 1725552309875662,
+        'object_name': 'Mac_arm64/rust-toolchain-bca5fdebe0e539d123f33df5f2149d5976392e76-1-llvmorg-20-init-9764-gb81d8e90.tar.xz',
+        'sha256sum': '4c264b2fcc4a4bb7d908cf7838c70878cbcfa6dabec5b5b97a5fcfdab8658eb6',
+        'size_bytes': 104504052,
+        'generation': 1729629180998449,
         'condition': 'host_os == "mac" and host_cpu == "arm64"',
       },
       {
-        'object_name': 'Win/rust-toolchain-009e73825af0e59ad4fc603562e038b3dbd6593a-2-llvmorg-20-init-3847-g69c43468.tar.xz',
-        'sha256sum': '1d04274c7a96aa0148a9bb5b29fa5b33c24b97971e33634bed62ce504b1cb346',
-        'size_bytes': 172453420,
-        'generation': 1725552311180142,
+        'object_name': 'Win/rust-toolchain-bca5fdebe0e539d123f33df5f2149d5976392e76-1-llvmorg-20-init-9764-gb81d8e90.tar.xz',
+        'sha256sum': 'afade008b0eea5d8d30e19ceef22e9f9c4fe9b4cdcb9c61926665ec1658379cc',
+        'size_bytes': 181085496,
+        'generation': 1729629182819402,
         'condition': 'host_os == "win"',
       },
     ],
diff --git a/core/fxge/win32/cps_printer_driver.cpp b/core/fxge/win32/cps_printer_driver.cpp
index 45fda2b..a85ffde 100644
--- a/core/fxge/win32/cps_printer_driver.cpp
+++ b/core/fxge/win32/cps_printer_driver.cpp
@@ -73,7 +73,8 @@
     DWORD dwCount = ::GetRegionData(hRgn, 0, nullptr);
     if (dwCount) {
       DataVector<uint8_t> buffer(dwCount);
-      RGNDATA* pData = reinterpret_cast<RGNDATA*>(buffer.data());
+      // TODO(crbug.com/42271176): Resolve safety issue.
+      UNSAFE_TODO(RGNDATA* pData = reinterpret_cast<RGNDATA*>(buffer.data()));
       if (::GetRegionData(hRgn, dwCount, pData)) {
         CFX_Path path;
         for (uint32_t i = 0; i < pData->rdh.nCount; i++) {
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index 6f3fbb7..234ebd7 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -39,8 +39,8 @@
     deps = [
       ":path_bridge",
       "//third_party/rust/font_types/v0_7:lib",
-      "//third_party/rust/read_fonts/v0_22:lib",
-      "//third_party/rust/skrifa/v0_22:lib",
+      "//third_party/rust/read_fonts/v0_23:lib",
+      "//third_party/rust/skrifa/v0_24:lib",
     ]
     configs -= [ "//build/config/compiler:chromium_code" ]
     configs += [
diff --git a/third_party/llvm-libc/BUILD.gn b/third_party/llvm-libc/BUILD.gn
new file mode 100644
index 0000000..672f8f5
--- /dev/null
+++ b/third_party/llvm-libc/BUILD.gn
@@ -0,0 +1,18 @@
+# Copyright 2024 The PDFium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/gclient_args.gni")
+
+config("llvm-libc-config") {
+  visibility = [ ":*" ]
+  include_dirs = [ "src" ]
+  defines = [ "LIBC_NAMESPACE=__llvm_libc_cr" ]
+}
+
+group("llvm-libc-shared") {
+  # llvm-libc is only used as a dependency of libc++.
+  visibility = [ "//buildtools/third_party/libc++:libc++" ]
+
+  public_configs = [ ":llvm-libc-config" ]
+}
diff --git a/third_party/llvm-libc/README.md b/third_party/llvm-libc/README.md
new file mode 100644
index 0000000..89f1bc7
--- /dev/null
+++ b/third_party/llvm-libc/README.md
@@ -0,0 +1,12 @@
+Name: llvm-libc
+URL: https://libc.llvm.org/
+Version: N/A
+Revision: DEPS
+License: MIT, University of Illinois/NCSA Open Source License
+License File: src/LICENSE.TXT
+Security Critical: yes
+Shipped: yes
+
+Description:
+
+LLVM's C library. libc++ depends on a small subset of this for a few functions.