grpc 1.30.2 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (674) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +723 -15910
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -33
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  9. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  10. data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
  11. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  13. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  14. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  15. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  16. data/src/core/ext/filters/client_channel/health/health_check_client.cc +8 -1
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  25. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +23 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -51
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  44. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  48. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  50. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
  51. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  52. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  53. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  54. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  55. data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
  56. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  57. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  59. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  60. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  61. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  62. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  63. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  64. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  65. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  66. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  67. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
  68. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  69. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  71. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  75. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  76. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  78. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  79. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
  80. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  82. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  83. data/src/core/ext/transport/chttp2/transport/internal.h +18 -1
  84. data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
  85. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
  86. data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
  87. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  88. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  89. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  90. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  91. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  92. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  93. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  94. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  95. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  96. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  97. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  113. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  119. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  125. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  126. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  127. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  135. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  136. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  137. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  138. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  139. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  140. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  141. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  142. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  143. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  144. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  145. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  146. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  147. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  148. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  149. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  150. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  151. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  152. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  153. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  154. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  155. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  156. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  157. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  158. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  160. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  161. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  162. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  163. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  164. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  165. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  166. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  167. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  168. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  170. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  173. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  175. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  176. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  177. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  178. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  179. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  180. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  183. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  184. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  185. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  186. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  187. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  188. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
  189. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  190. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  191. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  192. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  193. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  194. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  195. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  196. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  197. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  198. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  199. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  200. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  201. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +39 -39
  202. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  203. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  204. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  205. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +34 -55
  207. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  208. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  209. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  213. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  214. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  215. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  218. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  219. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  220. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  222. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  223. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  224. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  225. data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
  226. data/src/core/ext/xds/xds_api.cc +2388 -0
  227. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
  228. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
  229. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  230. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  231. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  232. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  233. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
  234. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  235. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  236. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
  237. data/src/core/lib/channel/channel_trace.cc +2 -6
  238. data/src/core/lib/channel/channelz.cc +19 -30
  239. data/src/core/lib/channel/channelz.h +1 -1
  240. data/src/core/lib/channel/channelz_registry.cc +3 -1
  241. data/src/core/lib/gpr/log_linux.cc +6 -8
  242. data/src/core/lib/gpr/log_posix.cc +6 -8
  243. data/src/core/lib/gpr/string.cc +10 -9
  244. data/src/core/lib/gpr/string.h +4 -2
  245. data/src/core/lib/gpr/sync_posix.cc +2 -8
  246. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  247. data/src/core/lib/http/httpcli.cc +13 -10
  248. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  249. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  250. data/src/core/lib/iomgr/endpoint.cc +5 -1
  251. data/src/core/lib/iomgr/endpoint.h +7 -3
  252. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  253. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  254. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  255. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  256. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  257. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  258. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  259. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  260. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  261. data/src/core/lib/iomgr/port.h +1 -21
  262. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  263. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  264. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  265. data/src/core/lib/iomgr/sockaddr_utils.cc +9 -6
  266. data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
  267. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  268. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  269. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  270. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  271. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  272. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  273. data/src/core/lib/iomgr/tcp_custom.cc +33 -17
  274. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  276. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  277. data/src/core/lib/iomgr/tcp_server.h +7 -5
  278. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  279. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  280. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  284. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  285. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  286. data/src/core/lib/iomgr/udp_server.cc +24 -23
  287. data/src/core/lib/iomgr/udp_server.h +5 -2
  288. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  289. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  290. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  291. data/src/core/lib/json/json_reader.cc +20 -21
  292. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  293. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  294. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  295. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  296. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  297. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  298. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  299. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  300. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  301. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  302. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  303. data/src/core/lib/security/credentials/credentials.h +5 -3
  304. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  305. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +64 -43
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  307. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  308. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  309. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  310. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  311. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  312. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +11 -12
  313. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  314. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  315. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  316. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  317. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  318. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  319. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  320. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  321. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  322. data/src/core/lib/security/util/json_util.cc +12 -13
  323. data/src/core/lib/slice/slice.cc +38 -1
  324. data/src/core/lib/slice/slice_internal.h +1 -0
  325. data/src/core/lib/surface/call.cc +52 -53
  326. data/src/core/lib/surface/call.h +2 -1
  327. data/src/core/lib/surface/channel.cc +28 -20
  328. data/src/core/lib/surface/channel.h +12 -2
  329. data/src/core/lib/surface/completion_queue.cc +0 -5
  330. data/src/core/lib/surface/init.cc +1 -1
  331. data/src/core/lib/surface/server.cc +1102 -1347
  332. data/src/core/lib/surface/server.h +369 -71
  333. data/src/core/lib/surface/version.cc +2 -2
  334. data/src/core/lib/transport/authority_override.cc +38 -0
  335. data/src/core/lib/transport/authority_override.h +32 -0
  336. data/src/core/lib/transport/connectivity_state.cc +18 -13
  337. data/src/core/lib/transport/connectivity_state.h +18 -6
  338. data/src/core/lib/transport/error_utils.cc +13 -0
  339. data/src/core/lib/transport/error_utils.h +6 -0
  340. data/src/core/lib/transport/static_metadata.cc +295 -276
  341. data/src/core/lib/transport/static_metadata.h +80 -73
  342. data/src/core/lib/transport/transport.h +13 -0
  343. data/src/core/lib/uri/uri_parser.cc +30 -35
  344. data/src/core/lib/uri/uri_parser.h +3 -1
  345. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  346. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  347. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +24 -0
  348. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  349. data/src/core/tsi/ssl_transport_security.cc +102 -11
  350. data/src/core/tsi/ssl_transport_security.h +14 -2
  351. data/src/core/tsi/transport_security_interface.h +5 -0
  352. data/src/ruby/bin/math_services_pb.rb +4 -4
  353. data/src/ruby/ext/grpc/extconf.rb +5 -2
  354. data/src/ruby/ext/grpc/rb_call.c +3 -2
  355. data/src/ruby/ext/grpc/rb_call.h +4 -0
  356. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  357. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  358. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  359. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  360. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  361. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  362. data/src/ruby/lib/grpc/version.rb +1 -1
  363. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  364. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  365. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  366. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  367. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  368. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  369. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  370. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  371. data/src/ruby/spec/user_agent_spec.rb +74 -0
  372. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  373. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  374. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  375. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  377. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  378. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  379. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  380. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  381. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  382. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  383. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  384. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  385. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  386. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  387. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  388. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  389. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  390. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  391. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  392. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  393. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  394. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  395. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  396. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  397. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  398. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  399. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  400. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  401. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  402. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  403. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  404. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  405. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  406. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  407. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  409. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  410. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  411. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  412. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  413. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  414. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  416. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  417. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  418. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  419. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  420. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  421. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  423. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  424. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  425. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  426. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  427. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  428. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  429. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  430. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  431. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  432. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  433. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  434. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  435. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  436. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  437. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  438. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  439. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  440. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  441. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  442. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  443. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  444. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  445. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  446. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  447. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  448. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  449. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  450. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  451. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  452. data/third_party/boringssl-with-bazel/err_data.c +266 -254
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  454. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  455. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  456. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  457. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  458. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  459. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  461. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  463. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  464. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  466. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  467. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  477. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  478. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  480. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  481. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  482. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  483. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  485. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  486. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  499. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  501. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  502. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  503. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  504. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  505. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  506. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
  507. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  509. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
  510. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  511. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  512. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  513. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  514. data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
  515. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  516. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  520. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
  524. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  525. data/third_party/re2/re2/bitmap256.h +117 -0
  526. data/third_party/re2/re2/bitstate.cc +385 -0
  527. data/third_party/re2/re2/compile.cc +1279 -0
  528. data/third_party/re2/re2/dfa.cc +2130 -0
  529. data/third_party/re2/re2/filtered_re2.cc +121 -0
  530. data/third_party/re2/re2/filtered_re2.h +109 -0
  531. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  532. data/third_party/re2/re2/nfa.cc +713 -0
  533. data/third_party/re2/re2/onepass.cc +623 -0
  534. data/third_party/re2/re2/parse.cc +2464 -0
  535. data/third_party/re2/re2/perl_groups.cc +119 -0
  536. data/third_party/re2/re2/pod_array.h +55 -0
  537. data/third_party/re2/re2/prefilter.cc +710 -0
  538. data/third_party/re2/re2/prefilter.h +108 -0
  539. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  540. data/third_party/re2/re2/prefilter_tree.h +139 -0
  541. data/third_party/re2/re2/prog.cc +988 -0
  542. data/third_party/re2/re2/prog.h +436 -0
  543. data/third_party/re2/re2/re2.cc +1362 -0
  544. data/third_party/re2/re2/re2.h +1002 -0
  545. data/third_party/re2/re2/regexp.cc +980 -0
  546. data/third_party/re2/re2/regexp.h +659 -0
  547. data/third_party/re2/re2/set.cc +154 -0
  548. data/third_party/re2/re2/set.h +80 -0
  549. data/third_party/re2/re2/simplify.cc +657 -0
  550. data/third_party/re2/re2/sparse_array.h +392 -0
  551. data/third_party/re2/re2/sparse_set.h +264 -0
  552. data/third_party/re2/re2/stringpiece.cc +65 -0
  553. data/third_party/re2/re2/stringpiece.h +210 -0
  554. data/third_party/re2/re2/tostring.cc +351 -0
  555. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  556. data/third_party/re2/re2/unicode_casefold.h +78 -0
  557. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  558. data/third_party/re2/re2/unicode_groups.h +67 -0
  559. data/third_party/re2/re2/walker-inl.h +246 -0
  560. data/third_party/re2/util/benchmark.h +156 -0
  561. data/third_party/re2/util/flags.h +26 -0
  562. data/third_party/re2/util/logging.h +109 -0
  563. data/third_party/re2/util/malloc_counter.h +19 -0
  564. data/third_party/re2/util/mix.h +41 -0
  565. data/third_party/re2/util/mutex.h +148 -0
  566. data/third_party/re2/util/pcre.cc +1025 -0
  567. data/third_party/re2/util/pcre.h +681 -0
  568. data/third_party/re2/util/rune.cc +260 -0
  569. data/third_party/re2/util/strutil.cc +149 -0
  570. data/third_party/re2/util/strutil.h +21 -0
  571. data/third_party/re2/util/test.h +50 -0
  572. data/third_party/re2/util/utf.h +44 -0
  573. data/third_party/re2/util/util.h +42 -0
  574. data/third_party/upb/upb/decode.c +517 -505
  575. data/third_party/upb/upb/encode.c +165 -123
  576. data/third_party/upb/upb/msg.c +130 -64
  577. data/third_party/upb/upb/msg.h +418 -14
  578. data/third_party/upb/upb/port_def.inc +35 -6
  579. data/third_party/upb/upb/port_undef.inc +8 -1
  580. data/third_party/upb/upb/table.c +53 -86
  581. data/third_party/upb/upb/table.int.h +11 -52
  582. data/third_party/upb/upb/upb.c +151 -125
  583. data/third_party/upb/upb/upb.h +91 -147
  584. data/third_party/upb/upb/upb.hpp +88 -0
  585. metadata +308 -148
  586. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  587. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  588. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  589. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  590. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  591. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  592. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  593. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  594. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  595. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  596. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  597. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  598. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  599. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  600. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  601. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  602. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  603. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  604. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  605. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  606. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  607. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  608. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  609. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  610. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  611. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  612. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  613. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  614. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  615. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  616. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  617. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  618. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  619. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  620. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  621. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  622. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  623. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  624. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  625. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  626. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  627. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  628. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  629. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  630. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  631. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  632. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  633. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  634. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  635. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  636. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  637. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  638. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  639. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  640. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  641. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  642. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  643. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  644. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  645. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  646. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  647. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  648. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  649. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  650. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  651. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  652. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  653. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  654. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  655. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  656. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  657. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  658. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  659. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  660. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  661. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  662. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  663. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  664. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  665. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  666. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  667. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  668. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  669. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  670. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  671. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  672. data/src/core/lib/slice/slice_hash_table.h +0 -199
  673. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  674. data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,346 @@
1
+ // Copyright 2017 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
+ // Produce stack trace
16
+
17
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_
18
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_
19
+
20
+ #if defined(__linux__) && (defined(__i386__) || defined(__x86_64__))
21
+ #include <ucontext.h> // for ucontext_t
22
+ #endif
23
+
24
+ #if !defined(_WIN32)
25
+ #include <unistd.h>
26
+ #endif
27
+
28
+ #include <cassert>
29
+ #include <cstdint>
30
+
31
+ #include "absl/base/macros.h"
32
+ #include "absl/base/port.h"
33
+ #include "absl/debugging/internal/address_is_readable.h"
34
+ #include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems
35
+ #include "absl/debugging/stacktrace.h"
36
+
37
+ #include "absl/base/internal/raw_logging.h"
38
+
39
+ using absl::debugging_internal::AddressIsReadable;
40
+
41
+ #if defined(__linux__) && defined(__i386__)
42
+ // Count "push %reg" instructions in VDSO __kernel_vsyscall(),
43
+ // preceeding "syscall" or "sysenter".
44
+ // If __kernel_vsyscall uses frame pointer, answer 0.
45
+ //
46
+ // kMaxBytes tells how many instruction bytes of __kernel_vsyscall
47
+ // to analyze before giving up. Up to kMaxBytes+1 bytes of
48
+ // instructions could be accessed.
49
+ //
50
+ // Here are known __kernel_vsyscall instruction sequences:
51
+ //
52
+ // SYSENTER (linux-2.6.26/arch/x86/vdso/vdso32/sysenter.S).
53
+ // Used on Intel.
54
+ // 0xffffe400 <__kernel_vsyscall+0>: push %ecx
55
+ // 0xffffe401 <__kernel_vsyscall+1>: push %edx
56
+ // 0xffffe402 <__kernel_vsyscall+2>: push %ebp
57
+ // 0xffffe403 <__kernel_vsyscall+3>: mov %esp,%ebp
58
+ // 0xffffe405 <__kernel_vsyscall+5>: sysenter
59
+ //
60
+ // SYSCALL (see linux-2.6.26/arch/x86/vdso/vdso32/syscall.S).
61
+ // Used on AMD.
62
+ // 0xffffe400 <__kernel_vsyscall+0>: push %ebp
63
+ // 0xffffe401 <__kernel_vsyscall+1>: mov %ecx,%ebp
64
+ // 0xffffe403 <__kernel_vsyscall+3>: syscall
65
+ //
66
+
67
+ // The sequence below isn't actually expected in Google fleet,
68
+ // here only for completeness. Remove this comment from OSS release.
69
+
70
+ // i386 (see linux-2.6.26/arch/x86/vdso/vdso32/int80.S)
71
+ // 0xffffe400 <__kernel_vsyscall+0>: int $0x80
72
+ // 0xffffe401 <__kernel_vsyscall+1>: ret
73
+ //
74
+ static const int kMaxBytes = 10;
75
+
76
+ // We use assert()s instead of DCHECK()s -- this is too low level
77
+ // for DCHECK().
78
+
79
+ static int CountPushInstructions(const unsigned char *const addr) {
80
+ int result = 0;
81
+ for (int i = 0; i < kMaxBytes; ++i) {
82
+ if (addr[i] == 0x89) {
83
+ // "mov reg,reg"
84
+ if (addr[i + 1] == 0xE5) {
85
+ // Found "mov %esp,%ebp".
86
+ return 0;
87
+ }
88
+ ++i; // Skip register encoding byte.
89
+ } else if (addr[i] == 0x0F &&
90
+ (addr[i + 1] == 0x34 || addr[i + 1] == 0x05)) {
91
+ // Found "sysenter" or "syscall".
92
+ return result;
93
+ } else if ((addr[i] & 0xF0) == 0x50) {
94
+ // Found "push %reg".
95
+ ++result;
96
+ } else if (addr[i] == 0xCD && addr[i + 1] == 0x80) {
97
+ // Found "int $0x80"
98
+ assert(result == 0);
99
+ return 0;
100
+ } else {
101
+ // Unexpected instruction.
102
+ assert(false && "unexpected instruction in __kernel_vsyscall");
103
+ return 0;
104
+ }
105
+ }
106
+ // Unexpected: didn't find SYSENTER or SYSCALL in
107
+ // [__kernel_vsyscall, __kernel_vsyscall + kMaxBytes) interval.
108
+ assert(false && "did not find SYSENTER or SYSCALL in __kernel_vsyscall");
109
+ return 0;
110
+ }
111
+ #endif
112
+
113
+ // Assume stack frames larger than 100,000 bytes are bogus.
114
+ static const int kMaxFrameBytes = 100000;
115
+
116
+ // Returns the stack frame pointer from signal context, 0 if unknown.
117
+ // vuc is a ucontext_t *. We use void* to avoid the use
118
+ // of ucontext_t on non-POSIX systems.
119
+ static uintptr_t GetFP(const void *vuc) {
120
+ #if !defined(__linux__)
121
+ static_cast<void>(vuc); // Avoid an unused argument compiler warning.
122
+ #else
123
+ if (vuc != nullptr) {
124
+ auto *uc = reinterpret_cast<const ucontext_t *>(vuc);
125
+ #if defined(__i386__)
126
+ const auto bp = uc->uc_mcontext.gregs[REG_EBP];
127
+ const auto sp = uc->uc_mcontext.gregs[REG_ESP];
128
+ #elif defined(__x86_64__)
129
+ const auto bp = uc->uc_mcontext.gregs[REG_RBP];
130
+ const auto sp = uc->uc_mcontext.gregs[REG_RSP];
131
+ #else
132
+ const uintptr_t bp = 0;
133
+ const uintptr_t sp = 0;
134
+ #endif
135
+ // Sanity-check that the base pointer is valid. It should be as long as
136
+ // SHRINK_WRAP_FRAME_POINTER is not set, but it's possible that some code in
137
+ // the process is compiled with --copt=-fomit-frame-pointer or
138
+ // --copt=-momit-leaf-frame-pointer.
139
+ //
140
+ // TODO(bcmills): -momit-leaf-frame-pointer is currently the default
141
+ // behavior when building with clang. Talk to the C++ toolchain team about
142
+ // fixing that.
143
+ if (bp >= sp && bp - sp <= kMaxFrameBytes) return bp;
144
+
145
+ // If bp isn't a plausible frame pointer, return the stack pointer instead.
146
+ // If we're lucky, it points to the start of a stack frame; otherwise, we'll
147
+ // get one frame of garbage in the stack trace and fail the sanity check on
148
+ // the next iteration.
149
+ return sp;
150
+ }
151
+ #endif
152
+ return 0;
153
+ }
154
+
155
+ // Given a pointer to a stack frame, locate and return the calling
156
+ // stackframe, or return null if no stackframe can be found. Perform sanity
157
+ // checks (the strictness of which is controlled by the boolean parameter
158
+ // "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
159
+ template <bool STRICT_UNWINDING, bool WITH_CONTEXT>
160
+ ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
161
+ ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
162
+ static void **NextStackFrame(void **old_fp, const void *uc) {
163
+ void **new_fp = (void **)*old_fp;
164
+
165
+ #if defined(__linux__) && defined(__i386__)
166
+ if (WITH_CONTEXT && uc != nullptr) {
167
+ // How many "push %reg" instructions are there at __kernel_vsyscall?
168
+ // This is constant for a given kernel and processor, so compute
169
+ // it only once.
170
+ static int num_push_instructions = -1; // Sentinel: not computed yet.
171
+ // Initialize with sentinel value: __kernel_rt_sigreturn can not possibly
172
+ // be there.
173
+ static const unsigned char *kernel_rt_sigreturn_address = nullptr;
174
+ static const unsigned char *kernel_vsyscall_address = nullptr;
175
+ if (num_push_instructions == -1) {
176
+ #ifdef ABSL_HAVE_VDSO_SUPPORT
177
+ absl::debugging_internal::VDSOSupport vdso;
178
+ if (vdso.IsPresent()) {
179
+ absl::debugging_internal::VDSOSupport::SymbolInfo
180
+ rt_sigreturn_symbol_info;
181
+ absl::debugging_internal::VDSOSupport::SymbolInfo vsyscall_symbol_info;
182
+ if (!vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.5", STT_FUNC,
183
+ &rt_sigreturn_symbol_info) ||
184
+ !vdso.LookupSymbol("__kernel_vsyscall", "LINUX_2.5", STT_FUNC,
185
+ &vsyscall_symbol_info) ||
186
+ rt_sigreturn_symbol_info.address == nullptr ||
187
+ vsyscall_symbol_info.address == nullptr) {
188
+ // Unexpected: 32-bit VDSO is present, yet one of the expected
189
+ // symbols is missing or null.
190
+ assert(false && "VDSO is present, but doesn't have expected symbols");
191
+ num_push_instructions = 0;
192
+ } else {
193
+ kernel_rt_sigreturn_address =
194
+ reinterpret_cast<const unsigned char *>(
195
+ rt_sigreturn_symbol_info.address);
196
+ kernel_vsyscall_address =
197
+ reinterpret_cast<const unsigned char *>(
198
+ vsyscall_symbol_info.address);
199
+ num_push_instructions =
200
+ CountPushInstructions(kernel_vsyscall_address);
201
+ }
202
+ } else {
203
+ num_push_instructions = 0;
204
+ }
205
+ #else // ABSL_HAVE_VDSO_SUPPORT
206
+ num_push_instructions = 0;
207
+ #endif // ABSL_HAVE_VDSO_SUPPORT
208
+ }
209
+ if (num_push_instructions != 0 && kernel_rt_sigreturn_address != nullptr &&
210
+ old_fp[1] == kernel_rt_sigreturn_address) {
211
+ const ucontext_t *ucv = static_cast<const ucontext_t *>(uc);
212
+ // This kernel does not use frame pointer in its VDSO code,
213
+ // and so %ebp is not suitable for unwinding.
214
+ void **const reg_ebp =
215
+ reinterpret_cast<void **>(ucv->uc_mcontext.gregs[REG_EBP]);
216
+ const unsigned char *const reg_eip =
217
+ reinterpret_cast<unsigned char *>(ucv->uc_mcontext.gregs[REG_EIP]);
218
+ if (new_fp == reg_ebp && kernel_vsyscall_address <= reg_eip &&
219
+ reg_eip - kernel_vsyscall_address < kMaxBytes) {
220
+ // We "stepped up" to __kernel_vsyscall, but %ebp is not usable.
221
+ // Restore from 'ucv' instead.
222
+ void **const reg_esp =
223
+ reinterpret_cast<void **>(ucv->uc_mcontext.gregs[REG_ESP]);
224
+ // Check that alleged %esp is not null and is reasonably aligned.
225
+ if (reg_esp &&
226
+ ((uintptr_t)reg_esp & (sizeof(reg_esp) - 1)) == 0) {
227
+ // Check that alleged %esp is actually readable. This is to prevent
228
+ // "double fault" in case we hit the first fault due to e.g. stack
229
+ // corruption.
230
+ void *const reg_esp2 = reg_esp[num_push_instructions - 1];
231
+ if (AddressIsReadable(reg_esp2)) {
232
+ // Alleged %esp is readable, use it for further unwinding.
233
+ new_fp = reinterpret_cast<void **>(reg_esp2);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ }
239
+ #endif
240
+
241
+ const uintptr_t old_fp_u = reinterpret_cast<uintptr_t>(old_fp);
242
+ const uintptr_t new_fp_u = reinterpret_cast<uintptr_t>(new_fp);
243
+
244
+ // Check that the transition from frame pointer old_fp to frame
245
+ // pointer new_fp isn't clearly bogus. Skip the checks if new_fp
246
+ // matches the signal context, so that we don't skip out early when
247
+ // using an alternate signal stack.
248
+ //
249
+ // TODO(bcmills): The GetFP call should be completely unnecessary when
250
+ // SHRINK_WRAP_FRAME_POINTER is set (because we should be back in the thread's
251
+ // stack by this point), but it is empirically still needed (e.g. when the
252
+ // stack includes a call to abort). unw_get_reg returns UNW_EBADREG for some
253
+ // frames. Figure out why GetValidFrameAddr and/or libunwind isn't doing what
254
+ // it's supposed to.
255
+ if (STRICT_UNWINDING &&
256
+ (!WITH_CONTEXT || uc == nullptr || new_fp_u != GetFP(uc))) {
257
+ // With the stack growing downwards, older stack frame must be
258
+ // at a greater address that the current one.
259
+ if (new_fp_u <= old_fp_u) return nullptr;
260
+ if (new_fp_u - old_fp_u > kMaxFrameBytes) return nullptr;
261
+ } else {
262
+ if (new_fp == nullptr) return nullptr; // skip AddressIsReadable() below
263
+ // In the non-strict mode, allow discontiguous stack frames.
264
+ // (alternate-signal-stacks for example).
265
+ if (new_fp == old_fp) return nullptr;
266
+ }
267
+
268
+ if (new_fp_u & (sizeof(void *) - 1)) return nullptr;
269
+ #ifdef __i386__
270
+ // On 32-bit machines, the stack pointer can be very close to
271
+ // 0xffffffff, so we explicitly check for a pointer into the
272
+ // last two pages in the address space
273
+ if (new_fp_u >= 0xffffe000) return nullptr;
274
+ #endif
275
+ #if !defined(_WIN32)
276
+ if (!STRICT_UNWINDING) {
277
+ // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test
278
+ // on AMD-based machines with VDSO-enabled kernels.
279
+ // Make an extra sanity check to insure new_fp is readable.
280
+ // Note: NextStackFrame<false>() is only called while the program
281
+ // is already on its last leg, so it's ok to be slow here.
282
+
283
+ if (!AddressIsReadable(new_fp)) {
284
+ return nullptr;
285
+ }
286
+ }
287
+ #endif
288
+ return new_fp;
289
+ }
290
+
291
+ template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
292
+ ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
293
+ ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
294
+ ABSL_ATTRIBUTE_NOINLINE
295
+ static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
296
+ const void *ucp, int *min_dropped_frames) {
297
+ int n = 0;
298
+ void **fp = reinterpret_cast<void **>(__builtin_frame_address(0));
299
+
300
+ while (fp && n < max_depth) {
301
+ if (*(fp + 1) == reinterpret_cast<void *>(0)) {
302
+ // In 64-bit code, we often see a frame that
303
+ // points to itself and has a return address of 0.
304
+ break;
305
+ }
306
+ void **next_fp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(fp, ucp);
307
+ if (skip_count > 0) {
308
+ skip_count--;
309
+ } else {
310
+ result[n] = *(fp + 1);
311
+ if (IS_STACK_FRAMES) {
312
+ if (next_fp > fp) {
313
+ sizes[n] = (uintptr_t)next_fp - (uintptr_t)fp;
314
+ } else {
315
+ // A frame-size of 0 is used to indicate unknown frame size.
316
+ sizes[n] = 0;
317
+ }
318
+ }
319
+ n++;
320
+ }
321
+ fp = next_fp;
322
+ }
323
+ if (min_dropped_frames != nullptr) {
324
+ // Implementation detail: we clamp the max of frames we are willing to
325
+ // count, so as not to spend too much time in the loop below.
326
+ const int kMaxUnwind = 1000;
327
+ int j = 0;
328
+ for (; fp != nullptr && j < kMaxUnwind; j++) {
329
+ fp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(fp, ucp);
330
+ }
331
+ *min_dropped_frames = j;
332
+ }
333
+ return n;
334
+ }
335
+
336
+ namespace absl {
337
+ ABSL_NAMESPACE_BEGIN
338
+ namespace debugging_internal {
339
+ bool StackTraceWorksForTest() {
340
+ return true;
341
+ }
342
+ } // namespace debugging_internal
343
+ ABSL_NAMESPACE_END
344
+ } // namespace absl
345
+
346
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_
@@ -0,0 +1,128 @@
1
+ // Copyright 2018 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 file contains internal parts of the Abseil symbolizer.
16
+ // Do not depend on the anything in this file, it may change at anytime.
17
+
18
+ #ifndef ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_
19
+ #define ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_
20
+
21
+ #include <cstddef>
22
+ #include <cstdint>
23
+
24
+ #include "absl/base/config.h"
25
+
26
+ #ifdef ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE
27
+ #error ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE cannot be directly set
28
+ #elif defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__) && \
29
+ !defined(__asmjs__) && !defined(__wasm__)
30
+ #define ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE 1
31
+
32
+ #include <elf.h>
33
+ #include <link.h> // For ElfW() macro.
34
+ #include <functional>
35
+ #include <string>
36
+
37
+ namespace absl {
38
+ ABSL_NAMESPACE_BEGIN
39
+ namespace debugging_internal {
40
+
41
+ // Iterates over all sections, invoking callback on each with the section name
42
+ // and the section header.
43
+ //
44
+ // Returns true on success; otherwise returns false in case of errors.
45
+ //
46
+ // This is not async-signal-safe.
47
+ bool ForEachSection(int fd,
48
+ const std::function<bool(const std::string& name,
49
+ const ElfW(Shdr) &)>& callback);
50
+
51
+ // Gets the section header for the given name, if it exists. Returns true on
52
+ // success. Otherwise, returns false.
53
+ bool GetSectionHeaderByName(int fd, const char *name, size_t name_len,
54
+ ElfW(Shdr) *out);
55
+
56
+ } // namespace debugging_internal
57
+ ABSL_NAMESPACE_END
58
+ } // namespace absl
59
+
60
+ #endif // ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE
61
+
62
+ namespace absl {
63
+ ABSL_NAMESPACE_BEGIN
64
+ namespace debugging_internal {
65
+
66
+ struct SymbolDecoratorArgs {
67
+ // The program counter we are getting symbolic name for.
68
+ const void *pc;
69
+ // 0 for main executable, load address for shared libraries.
70
+ ptrdiff_t relocation;
71
+ // Read-only file descriptor for ELF image covering "pc",
72
+ // or -1 if no such ELF image exists in /proc/self/maps.
73
+ int fd;
74
+ // Output buffer, size.
75
+ // Note: the buffer may not be empty -- default symbolizer may have already
76
+ // produced some output, and earlier decorators may have adorned it in
77
+ // some way. You are free to replace or augment the contents (within the
78
+ // symbol_buf_size limit).
79
+ char *const symbol_buf;
80
+ size_t symbol_buf_size;
81
+ // Temporary scratch space, size.
82
+ // Use that space in preference to allocating your own stack buffer to
83
+ // conserve stack.
84
+ char *const tmp_buf;
85
+ size_t tmp_buf_size;
86
+ // User-provided argument
87
+ void* arg;
88
+ };
89
+ using SymbolDecorator = void (*)(const SymbolDecoratorArgs *);
90
+
91
+ // Installs a function-pointer as a decorator. Returns a value less than zero
92
+ // if the system cannot install the decorator. Otherwise, returns a unique
93
+ // identifier corresponding to the decorator. This identifier can be used to
94
+ // uninstall the decorator - See RemoveSymbolDecorator() below.
95
+ int InstallSymbolDecorator(SymbolDecorator decorator, void* arg);
96
+
97
+ // Removes a previously installed function-pointer decorator. Parameter "ticket"
98
+ // is the return-value from calling InstallSymbolDecorator().
99
+ bool RemoveSymbolDecorator(int ticket);
100
+
101
+ // Remove all installed decorators. Returns true if successful, false if
102
+ // symbolization is currently in progress.
103
+ bool RemoveAllSymbolDecorators(void);
104
+
105
+ // Registers an address range to a file mapping.
106
+ //
107
+ // Preconditions:
108
+ // start <= end
109
+ // filename != nullptr
110
+ //
111
+ // Returns true if the file was successfully registered.
112
+ bool RegisterFileMappingHint(
113
+ const void* start, const void* end, uint64_t offset, const char* filename);
114
+
115
+ // Looks up the file mapping registered by RegisterFileMappingHint for an
116
+ // address range. If there is one, the file name is stored in *filename and
117
+ // *start and *end are modified to reflect the registered mapping. Returns
118
+ // whether any hint was found.
119
+ bool GetFileMappingHint(const void** start,
120
+ const void** end,
121
+ uint64_t * offset,
122
+ const char** filename);
123
+
124
+ } // namespace debugging_internal
125
+ ABSL_NAMESPACE_END
126
+ } // namespace absl
127
+
128
+ #endif // ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_