grpc 1.73.0 → 1.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -0,0 +1,80 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // This is a private implementation detail of resize algorithm of
16
+ // raw_hash_set. It is exposed in a separate file for testing purposes.
17
+
18
+ #ifndef ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_RESIZE_IMPL_H_
19
+ #define ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_RESIZE_IMPL_H_
20
+
21
+ #include <cstddef>
22
+ #include <cstdint>
23
+
24
+ #include "absl/base/config.h"
25
+
26
+ namespace absl {
27
+ ABSL_NAMESPACE_BEGIN
28
+ namespace container_internal {
29
+
30
+ // Encoding for probed elements used for smaller tables.
31
+ // Data is encoded into single integer.
32
+ // Storage format for 4 bytes:
33
+ // - 7 bits for h2
34
+ // - 12 bits for source_offset
35
+ // - 13 bits for h1
36
+ // Storage format for 8 bytes:
37
+ // - 7 bits for h2
38
+ // - 28 bits for source_offset
39
+ // - 29 bits for h1
40
+ // Storage format for 16 bytes:
41
+ // - 7 bits for h2
42
+ // - 57 bits for source_offset
43
+ // - 58 bits for h1
44
+ template <typename IntType, size_t kTotalBits>
45
+ struct ProbedItemImpl {
46
+ static constexpr IntType kH2Bits = 7;
47
+
48
+ static constexpr IntType kMaxOldBits = (kTotalBits - kH2Bits) / 2;
49
+ static constexpr IntType kMaxOldCapacity = (IntType{1} << kMaxOldBits) - 1;
50
+
51
+ // We always have one bit more for h1.
52
+ static constexpr IntType kMaxNewBits = kMaxOldBits + 1;
53
+ static constexpr IntType kMaxNewCapacity = (IntType{1} << kMaxNewBits) - 1;
54
+
55
+ static constexpr IntType kH2Shift = (kTotalBits - kH2Bits);
56
+ static_assert(kMaxNewBits + kMaxOldBits + kH2Bits == kTotalBits);
57
+
58
+ ProbedItemImpl() = default;
59
+ ProbedItemImpl(uint8_t h2_arg, size_t source_offset_arg, size_t h1_arg)
60
+ : h2(h2_arg),
61
+ source_offset(static_cast<IntType>(source_offset_arg)),
62
+ h1(static_cast<IntType>(h1_arg)) {}
63
+
64
+ IntType h2 : kH2Bits;
65
+ IntType source_offset : kMaxOldBits;
66
+ IntType h1 : kMaxNewBits;
67
+ };
68
+
69
+ using ProbedItem4Bytes = ProbedItemImpl<uint32_t, 32>;
70
+ static_assert(sizeof(ProbedItem4Bytes) == 4);
71
+ using ProbedItem8Bytes = ProbedItemImpl<uint64_t, 64>;
72
+ static_assert(sizeof(ProbedItem8Bytes) == 8);
73
+ using ProbedItem16Bytes = ProbedItemImpl<uint64_t, 7 + 57 + 58>;
74
+ static_assert(sizeof(ProbedItem16Bytes) == 16);
75
+
76
+ } // namespace container_internal
77
+ ABSL_NAMESPACE_END
78
+ } // namespace absl
79
+
80
+ #endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_RESIZE_IMPL_H_
@@ -54,10 +54,6 @@ crc32c_t ExtendCrc32cInternal(crc32c_t initial_crc,
54
54
 
55
55
  } // namespace crc_internal
56
56
 
57
- crc32c_t ComputeCrc32c(absl::string_view buf) {
58
- return ExtendCrc32c(crc32c_t{0}, buf);
59
- }
60
-
61
57
  crc32c_t ExtendCrc32cByZeroes(crc32c_t initial_crc, size_t length) {
62
58
  uint32_t crc = static_cast<uint32_t>(initial_crc) ^ kCRC32Xor;
63
59
  CrcEngine()->ExtendByZeroes(&crc, length);
@@ -83,11 +83,6 @@ crc32c_t ExtendCrc32cInternal(crc32c_t initial_crc,
83
83
  // CRC32C Computation Functions
84
84
  // -----------------------------------------------------------------------------
85
85
 
86
- // ComputeCrc32c()
87
- //
88
- // Returns the CRC32C value of the provided string.
89
- crc32c_t ComputeCrc32c(absl::string_view buf);
90
-
91
86
  // ExtendCrc32c()
92
87
  //
93
88
  // Computes a CRC32C value from an `initial_crc` CRC32C value including the
@@ -112,6 +107,13 @@ inline crc32c_t ExtendCrc32c(crc32c_t initial_crc,
112
107
  return crc_internal::ExtendCrc32cInternal(initial_crc, buf_to_add);
113
108
  }
114
109
 
110
+ // ComputeCrc32c()
111
+ //
112
+ // Returns the CRC32C value of the provided string.
113
+ inline crc32c_t ComputeCrc32c(absl::string_view buf) {
114
+ return ExtendCrc32c(crc32c_t{0}, buf);
115
+ }
116
+
115
117
  // ExtendCrc32cByZeroes()
116
118
  //
117
119
  // Computes a CRC32C value for a buffer with an `initial_crc` CRC32C value,
@@ -99,19 +99,12 @@ V128 V128_PMul10(const V128 l, const V128 r);
99
99
  // Produces a XOR operation of |l| and |r|.
100
100
  V128 V128_Xor(const V128 l, const V128 r);
101
101
 
102
- // Produces an AND operation of |l| and |r|.
103
- V128 V128_And(const V128 l, const V128 r);
104
-
105
102
  // Sets the lower half of a 128 bit register to the given 64-bit value and
106
103
  // zeroes the upper half.
107
104
  // dst[63:0] := |r|
108
105
  // dst[127:64] := |0|
109
106
  V128 V128_From64WithZeroFill(const uint64_t r);
110
107
 
111
- // Shift |l| right by |imm| bytes while shifting in zeros.
112
- template <int imm>
113
- V128 V128_ShiftRight(const V128 l);
114
-
115
108
  // Extracts a 32-bit integer from |l|, selected with |imm|.
116
109
  template <int imm>
117
110
  int V128_Extract32(const V128 l);
@@ -170,17 +163,10 @@ inline V128 V128_PMul10(const V128 l, const V128 r) {
170
163
 
171
164
  inline V128 V128_Xor(const V128 l, const V128 r) { return _mm_xor_si128(l, r); }
172
165
 
173
- inline V128 V128_And(const V128 l, const V128 r) { return _mm_and_si128(l, r); }
174
-
175
166
  inline V128 V128_From64WithZeroFill(const uint64_t r) {
176
167
  return _mm_set_epi64x(static_cast<int64_t>(0), static_cast<int64_t>(r));
177
168
  }
178
169
 
179
- template <int imm>
180
- inline V128 V128_ShiftRight(const V128 l) {
181
- return _mm_srli_si128(l, imm);
182
- }
183
-
184
170
  template <int imm>
185
171
  inline int V128_Extract32(const V128 l) {
186
172
  return _mm_extract_epi32(l, imm);
@@ -261,20 +247,12 @@ inline V128 V128_PMul10(const V128 l, const V128 r) {
261
247
 
262
248
  inline V128 V128_Xor(const V128 l, const V128 r) { return veorq_u64(l, r); }
263
249
 
264
- inline V128 V128_And(const V128 l, const V128 r) { return vandq_u64(l, r); }
265
-
266
250
  inline V128 V128_From64WithZeroFill(const uint64_t r){
267
251
  constexpr uint64x2_t kZero = {0, 0};
268
252
  return vsetq_lane_u64(r, kZero, 0);
269
253
  }
270
254
 
271
255
 
272
- template <int imm>
273
- inline V128 V128_ShiftRight(const V128 l) {
274
- return vreinterpretq_u64_s8(
275
- vextq_s8(vreinterpretq_s8_u64(l), vdupq_n_s8(0), imm));
276
- }
277
-
278
256
  template <int imm>
279
257
  inline int V128_Extract32(const V128 l) {
280
258
  return vgetq_lane_s32(vreinterpretq_s32_u64(l), imm);
@@ -64,27 +64,27 @@ class CRC32AcceleratedX86ARMCombined : public CRC32 {
64
64
  constexpr size_t kSmallCutoff = 256;
65
65
  constexpr size_t kMediumCutoff = 2048;
66
66
 
67
- #define ABSL_INTERNAL_STEP1(crc) \
67
+ #define ABSL_INTERNAL_STEP1(crc, p) \
68
68
  do { \
69
69
  crc = CRC32_u8(static_cast<uint32_t>(crc), *p++); \
70
70
  } while (0)
71
- #define ABSL_INTERNAL_STEP2(crc) \
71
+ #define ABSL_INTERNAL_STEP2(crc, p) \
72
72
  do { \
73
73
  crc = \
74
74
  CRC32_u16(static_cast<uint32_t>(crc), absl::little_endian::Load16(p)); \
75
75
  p += 2; \
76
76
  } while (0)
77
- #define ABSL_INTERNAL_STEP4(crc) \
77
+ #define ABSL_INTERNAL_STEP4(crc, p) \
78
78
  do { \
79
79
  crc = \
80
80
  CRC32_u32(static_cast<uint32_t>(crc), absl::little_endian::Load32(p)); \
81
81
  p += 4; \
82
82
  } while (0)
83
- #define ABSL_INTERNAL_STEP8(crc, data) \
84
- do { \
85
- crc = CRC32_u64(static_cast<uint32_t>(crc), \
86
- absl::little_endian::Load64(data)); \
87
- data += 8; \
83
+ #define ABSL_INTERNAL_STEP8(crc, p) \
84
+ do { \
85
+ crc = \
86
+ CRC32_u64(static_cast<uint32_t>(crc), absl::little_endian::Load64(p)); \
87
+ p += 8; \
88
88
  } while (0)
89
89
  #define ABSL_INTERNAL_STEP8BY2(crc0, crc1, p0, p1) \
90
90
  do { \
@@ -221,7 +221,8 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
221
221
  // We are applying it to CRC32C polynomial.
222
222
  ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesPclmul(
223
223
  const uint8_t* p, V128* partialCRC) const {
224
- V128 loopMultiplicands = V128_Load(reinterpret_cast<const V128*>(k1k2));
224
+ V128 loopMultiplicands =
225
+ V128_Load(reinterpret_cast<const V128*>(kFoldAcross512Bits));
225
226
 
226
227
  V128 partialCRC1 = partialCRC[0];
227
228
  V128 partialCRC2 = partialCRC[1];
@@ -265,53 +266,33 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
265
266
 
266
267
  // Combine 4 vectors of partial crc into a single vector.
267
268
  V128 reductionMultiplicands =
268
- V128_Load(reinterpret_cast<const V128*>(k5k6));
269
+ V128_Load(reinterpret_cast<const V128*>(kFoldAcross256Bits));
269
270
 
270
271
  V128 low = V128_PMulLow(reductionMultiplicands, partialCRC1);
271
272
  V128 high = V128_PMulHi(reductionMultiplicands, partialCRC1);
272
273
 
273
274
  partialCRC1 = V128_Xor(low, high);
274
- partialCRC1 = V128_Xor(partialCRC1, partialCRC2);
275
+ partialCRC1 = V128_Xor(partialCRC1, partialCRC3);
275
276
 
276
- low = V128_PMulLow(reductionMultiplicands, partialCRC3);
277
- high = V128_PMulHi(reductionMultiplicands, partialCRC3);
277
+ low = V128_PMulLow(reductionMultiplicands, partialCRC2);
278
+ high = V128_PMulHi(reductionMultiplicands, partialCRC2);
278
279
 
279
- partialCRC3 = V128_Xor(low, high);
280
- partialCRC3 = V128_Xor(partialCRC3, partialCRC4);
280
+ partialCRC2 = V128_Xor(low, high);
281
+ partialCRC2 = V128_Xor(partialCRC2, partialCRC4);
281
282
 
282
- reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(k3k4));
283
+ reductionMultiplicands =
284
+ V128_Load(reinterpret_cast<const V128*>(kFoldAcross128Bits));
283
285
 
284
286
  low = V128_PMulLow(reductionMultiplicands, partialCRC1);
285
287
  high = V128_PMulHi(reductionMultiplicands, partialCRC1);
286
288
  V128 fullCRC = V128_Xor(low, high);
287
- fullCRC = V128_Xor(fullCRC, partialCRC3);
289
+ fullCRC = V128_Xor(fullCRC, partialCRC2);
288
290
 
289
291
  // Reduce fullCRC into scalar value.
290
- reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(k5k6));
291
-
292
- V128 mask = V128_Load(reinterpret_cast<const V128*>(kMask));
293
-
294
- V128 tmp = V128_PMul01(reductionMultiplicands, fullCRC);
295
- fullCRC = V128_ShiftRight<8>(fullCRC);
296
- fullCRC = V128_Xor(fullCRC, tmp);
297
-
298
- reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(k7k0));
299
-
300
- tmp = V128_ShiftRight<4>(fullCRC);
301
- fullCRC = V128_And(fullCRC, mask);
302
- fullCRC = V128_PMulLow(reductionMultiplicands, fullCRC);
303
- fullCRC = V128_Xor(tmp, fullCRC);
304
-
305
- reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(kPoly));
306
-
307
- tmp = V128_And(fullCRC, mask);
308
- tmp = V128_PMul01(reductionMultiplicands, tmp);
309
- tmp = V128_And(tmp, mask);
310
- tmp = V128_PMulLow(reductionMultiplicands, tmp);
311
-
312
- fullCRC = V128_Xor(tmp, fullCRC);
313
-
314
- return static_cast<uint64_t>(V128_Extract32<1>(fullCRC));
292
+ uint32_t crc = 0;
293
+ crc = CRC32_u64(crc, V128_Extract64<0>(fullCRC));
294
+ crc = CRC32_u64(crc, V128_Extract64<1>(fullCRC));
295
+ return crc;
315
296
  }
316
297
 
317
298
  // Update crc with 64 bytes of data from p.
@@ -325,15 +306,23 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
325
306
  return crc;
326
307
  }
327
308
 
328
- // Generated by crc32c_x86_test --crc32c_generate_constants=true
329
- // and verified against constants in linux kernel for S390:
330
- // https://github.com/torvalds/linux/blob/master/arch/s390/crypto/crc32le-vx.S
331
- alignas(16) static constexpr uint64_t k1k2[2] = {0x0740eef02, 0x09e4addf8};
332
- alignas(16) static constexpr uint64_t k3k4[2] = {0x1384aa63a, 0x0ba4fc28e};
333
- alignas(16) static constexpr uint64_t k5k6[2] = {0x0f20c0dfe, 0x14cd00bd6};
334
- alignas(16) static constexpr uint64_t k7k0[2] = {0x0dd45aab8, 0x000000000};
335
- alignas(16) static constexpr uint64_t kPoly[2] = {0x105ec76f0, 0x0dea713f1};
336
- alignas(16) static constexpr uint32_t kMask[4] = {~0u, 0u, ~0u, 0u};
309
+ // Constants generated by './scripts/gen-crc-consts.py x86_pclmul
310
+ // crc32_lsb_0x82f63b78' from the Linux kernel.
311
+ alignas(16) static constexpr uint64_t kFoldAcross512Bits[2] = {
312
+ // (x^543 mod G) * x^32
313
+ 0x00000000740eef02,
314
+ // (x^479 mod G) * x^32
315
+ 0x000000009e4addf8};
316
+ alignas(16) static constexpr uint64_t kFoldAcross256Bits[2] = {
317
+ // (x^287 mod G) * x^32
318
+ 0x000000003da6d0cb,
319
+ // (x^223 mod G) * x^32
320
+ 0x00000000ba4fc28e};
321
+ alignas(16) static constexpr uint64_t kFoldAcross128Bits[2] = {
322
+ // (x^159 mod G) * x^32
323
+ 0x00000000f20c0dfe,
324
+ // (x^95 mod G) * x^32
325
+ 0x00000000493c7d27};
337
326
 
338
327
  // Medium runs of bytes are broken into groups of kGroupsSmall blocks of same
339
328
  // size. Each group is CRCed in parallel then combined at the end of the
@@ -345,24 +334,6 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
345
334
  static constexpr size_t kMaxStreams = 3;
346
335
  };
347
336
 
348
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
349
- alignas(16) constexpr uint64_t
350
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k1k2[2];
351
- alignas(16) constexpr uint64_t
352
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k3k4[2];
353
- alignas(16) constexpr uint64_t
354
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k5k6[2];
355
- alignas(16) constexpr uint64_t
356
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k7k0[2];
357
- alignas(16) constexpr uint64_t
358
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kPoly[2];
359
- alignas(16) constexpr uint32_t
360
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kMask[4];
361
- constexpr size_t
362
- CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kGroupsSmall;
363
- constexpr size_t CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kMaxStreams;
364
- #endif // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
365
-
366
337
  template <size_t num_crc_streams, size_t num_pclmul_streams,
367
338
  CutoffStrategy strategy>
368
339
  class CRC32AcceleratedX86ARMCombinedMultipleStreams
@@ -384,15 +355,15 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
384
355
  length &= ~size_t{8};
385
356
  }
386
357
  if (length & 4) {
387
- ABSL_INTERNAL_STEP4(l);
358
+ ABSL_INTERNAL_STEP4(l, p);
388
359
  length &= ~size_t{4};
389
360
  }
390
361
  if (length & 2) {
391
- ABSL_INTERNAL_STEP2(l);
362
+ ABSL_INTERNAL_STEP2(l, p);
392
363
  length &= ~size_t{2};
393
364
  }
394
365
  if (length & 1) {
395
- ABSL_INTERNAL_STEP1(l);
366
+ ABSL_INTERNAL_STEP1(l, p);
396
367
  length &= ~size_t{1};
397
368
  }
398
369
  if (length == 0) {
@@ -478,7 +449,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
478
449
  const uint8_t* x = RoundUp<8>(p);
479
450
  // Process bytes until p is 8-byte aligned, if that isn't past the end.
480
451
  while (p != x) {
481
- ABSL_INTERNAL_STEP1(l);
452
+ ABSL_INTERNAL_STEP1(l, p);
482
453
  }
483
454
 
484
455
  size_t bs = static_cast<size_t>(e - p) /
@@ -597,7 +568,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
597
568
  }
598
569
  // Process the last few bytes
599
570
  while (p != e) {
600
- ABSL_INTERNAL_STEP1(l);
571
+ ABSL_INTERNAL_STEP1(l, p);
601
572
  }
602
573
 
603
574
  #undef ABSL_INTERNAL_STEP8BY3
@@ -0,0 +1,57 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_DEBUGGING_INTERNAL_ADDRESSES_H_
16
+ #define ABSL_DEBUGGING_INTERNAL_ADDRESSES_H_
17
+
18
+ #include <stdint.h>
19
+
20
+ #include "absl/base/config.h"
21
+
22
+ namespace absl {
23
+ ABSL_NAMESPACE_BEGIN
24
+ namespace debugging_internal {
25
+
26
+ // Removes any metadata (tag bits) from the given pointer, converting it into a
27
+ // user-readable address.
28
+ inline uintptr_t StripPointerMetadata(uintptr_t ptr) {
29
+ #if defined(__aarch64__)
30
+ // When PAC-RET (-mbranch-protection=pac-ret) is enabled, return addresses
31
+ // stored on the stack will be signed, which means that pointer bits outside
32
+ // of the virtual address range are potentially set. Since the stacktrace code
33
+ // is expected to return normal code pointers, this function clears those
34
+ // bits.
35
+ register uintptr_t x30 __asm__("x30") = ptr;
36
+ // The normal instruction for clearing PAC bits is XPACI, but for
37
+ // compatibility with ARM platforms that do not support pointer
38
+ // authentication, we use the hint space instruction XPACLRI instead. Hint
39
+ // space instructions behave as NOPs on unsupported platforms.
40
+ #define ABSL_XPACLRI_HINT "hint #0x7;"
41
+ asm(ABSL_XPACLRI_HINT : "+r"(x30)); // asm("xpaclri" : "+r"(x30));
42
+ #undef ABSL_XPACLRI_HINT
43
+ return x30;
44
+ #else
45
+ return ptr;
46
+ #endif
47
+ }
48
+
49
+ inline uintptr_t StripPointerMetadata(void* ptr) {
50
+ return StripPointerMetadata(reinterpret_cast<uintptr_t>(ptr));
51
+ }
52
+
53
+ } // namespace debugging_internal
54
+ ABSL_NAMESPACE_END
55
+ } // namespace absl
56
+
57
+ #endif // ABSL_DEBUGGING_INTERNAL_ADDRESSES_H_
@@ -172,7 +172,7 @@ bool ScanNextDelta(const char*& punycode_begin, const char* const punycode_end,
172
172
 
173
173
  } // namespace
174
174
 
175
- absl::Nullable<char*> DecodeRustPunycode(DecodeRustPunycodeOptions options) {
175
+ char* absl_nullable DecodeRustPunycode(DecodeRustPunycodeOptions options) {
176
176
  const char* punycode_begin = options.punycode_begin;
177
177
  const char* const punycode_end = options.punycode_end;
178
178
  char* const out_begin = options.out_begin;
@@ -23,10 +23,10 @@ ABSL_NAMESPACE_BEGIN
23
23
  namespace debugging_internal {
24
24
 
25
25
  struct DecodeRustPunycodeOptions {
26
- const char* punycode_begin;
27
- const char* punycode_end;
28
- char* out_begin;
29
- char* out_end;
26
+ const char* absl_nonnull punycode_begin;
27
+ const char* absl_nonnull punycode_end;
28
+ char* absl_nonnull out_begin;
29
+ char* absl_nonnull out_end;
30
30
  };
31
31
 
32
32
  // Given Rust Punycode in `punycode_begin .. punycode_end`, writes the
@@ -46,7 +46,7 @@ struct DecodeRustPunycodeOptions {
46
46
  // DecodeRustPunycode is async-signal-safe with bounded runtime and a small
47
47
  // stack footprint, making it suitable for use in demangling Rust symbol names
48
48
  // from a signal handler.
49
- absl::Nullable<char*> DecodeRustPunycode(DecodeRustPunycodeOptions options);
49
+ char* absl_nullable DecodeRustPunycode(DecodeRustPunycodeOptions options);
50
50
 
51
51
  } // namespace debugging_internal
52
52
  ABSL_NAMESPACE_END
@@ -484,36 +484,6 @@ static bool IsAlpha(char c) {
484
484
 
485
485
  static bool IsDigit(char c) { return c >= '0' && c <= '9'; }
486
486
 
487
- // Returns true if "str" is a function clone suffix. These suffixes are used
488
- // by GCC 4.5.x and later versions (and our locally-modified version of GCC
489
- // 4.4.x) to indicate functions which have been cloned during optimization.
490
- // We treat any sequence (.<alpha>+.<digit>+)+ as a function clone suffix.
491
- // Additionally, '_' is allowed along with the alphanumeric sequence.
492
- static bool IsFunctionCloneSuffix(const char *str) {
493
- size_t i = 0;
494
- while (str[i] != '\0') {
495
- bool parsed = false;
496
- // Consume a single [.<alpha> | _]*[.<digit>]* sequence.
497
- if (str[i] == '.' && (IsAlpha(str[i + 1]) || str[i + 1] == '_')) {
498
- parsed = true;
499
- i += 2;
500
- while (IsAlpha(str[i]) || str[i] == '_') {
501
- ++i;
502
- }
503
- }
504
- if (str[i] == '.' && IsDigit(str[i + 1])) {
505
- parsed = true;
506
- i += 2;
507
- while (IsDigit(str[i])) {
508
- ++i;
509
- }
510
- }
511
- if (!parsed)
512
- return false;
513
- }
514
- return true; // Consumed everything in "str".
515
- }
516
-
517
487
  static bool EndsWith(State *state, const char chr) {
518
488
  return state->parse_state.out_cur_idx > 0 &&
519
489
  state->parse_state.out_cur_idx < state->out_end_idx &&
@@ -1039,7 +1009,8 @@ static bool ParseNumber(State *state, int *number_out) {
1039
1009
  number = ~number + 1;
1040
1010
  }
1041
1011
  if (p != RemainingInput(state)) { // Conversion succeeded.
1042
- state->parse_state.mangled_idx += p - RemainingInput(state);
1012
+ state->parse_state.mangled_idx +=
1013
+ static_cast<int>(p - RemainingInput(state));
1043
1014
  UpdateHighWaterMark(state);
1044
1015
  if (number_out != nullptr) {
1045
1016
  // Note: possibly truncate "number".
@@ -1062,7 +1033,8 @@ static bool ParseFloatNumber(State *state) {
1062
1033
  }
1063
1034
  }
1064
1035
  if (p != RemainingInput(state)) { // Conversion succeeded.
1065
- state->parse_state.mangled_idx += p - RemainingInput(state);
1036
+ state->parse_state.mangled_idx +=
1037
+ static_cast<int>(p - RemainingInput(state));
1066
1038
  UpdateHighWaterMark(state);
1067
1039
  return true;
1068
1040
  }
@@ -1081,7 +1053,8 @@ static bool ParseSeqId(State *state) {
1081
1053
  }
1082
1054
  }
1083
1055
  if (p != RemainingInput(state)) { // Conversion succeeded.
1084
- state->parse_state.mangled_idx += p - RemainingInput(state);
1056
+ state->parse_state.mangled_idx +=
1057
+ static_cast<int>(p - RemainingInput(state));
1085
1058
  UpdateHighWaterMark(state);
1086
1059
  return true;
1087
1060
  }
@@ -1100,7 +1073,7 @@ static bool ParseIdentifier(State *state, size_t length) {
1100
1073
  } else {
1101
1074
  MaybeAppendWithLength(state, RemainingInput(state), length);
1102
1075
  }
1103
- state->parse_state.mangled_idx += length;
1076
+ state->parse_state.mangled_idx += static_cast<int>(length);
1104
1077
  UpdateHighWaterMark(state);
1105
1078
  return true;
1106
1079
  }
@@ -2929,7 +2902,7 @@ static bool ParseTopLevelMangledName(State *state) {
2929
2902
  if (ParseMangledName(state)) {
2930
2903
  if (RemainingInput(state)[0] != '\0') {
2931
2904
  // Drop trailing function clone suffix, if any.
2932
- if (IsFunctionCloneSuffix(RemainingInput(state))) {
2905
+ if (RemainingInput(state)[0] == '.') {
2933
2906
  return true;
2934
2907
  }
2935
2908
  // Append trailing version suffix if any.