grpc 1.31.1 → 1.32.0.pre1

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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +595 -15723
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/impl/codegen/README.md +22 -0
  5. data/include/grpc/impl/codegen/port_platform.h +6 -1
  6. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  7. data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
  8. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  9. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  12. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  13. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  29. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  30. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +363 -14
  32. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  33. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
  34. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  35. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  36. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  37. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  38. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  39. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  40. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  41. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  44. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  45. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  46. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  47. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
  48. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  50. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  51. data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
  52. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  53. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  54. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  55. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  56. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  57. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  58. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  59. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  60. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  61. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  62. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  63. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  66. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  68. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  69. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  70. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  71. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  72. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  73. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  74. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  75. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  78. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  84. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  86. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  88. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  89. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  90. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  91. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  92. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  93. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  94. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  95. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  96. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  97. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  98. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  99. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  100. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  101. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  102. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  103. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  104. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  105. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  106. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  107. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  108. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  109. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  118. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  119. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  120. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  121. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  122. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  123. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  124. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  125. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  126. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  127. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  128. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  129. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  130. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  131. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  132. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  133. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  134. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  135. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  136. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  137. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  138. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  139. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  140. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  141. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  142. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  143. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  144. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  145. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  146. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  147. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  148. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  149. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  150. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  151. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  152. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  153. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  154. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  155. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  156. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  157. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  158. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  159. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  160. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  161. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  162. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  163. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  164. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  165. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  166. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  167. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  168. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
  169. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
  170. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  171. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  172. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  173. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  174. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  175. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
  176. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  177. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  178. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
  179. data/src/core/lib/channel/channelz.cc +14 -15
  180. data/src/core/lib/channel/channelz.h +1 -1
  181. data/src/core/lib/channel/channelz_registry.cc +3 -1
  182. data/src/core/lib/gpr/sync_posix.cc +2 -8
  183. data/src/core/lib/iomgr/endpoint.cc +5 -1
  184. data/src/core/lib/iomgr/endpoint.h +7 -3
  185. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  186. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  187. data/src/core/lib/iomgr/iomgr.cc +0 -10
  188. data/src/core/lib/iomgr/iomgr.h +0 -10
  189. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  190. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  191. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  192. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  193. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  194. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  195. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  196. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  197. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  198. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  199. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  200. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  201. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  202. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  203. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  204. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  205. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  206. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  207. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
  209. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  210. data/src/core/lib/surface/call.cc +12 -12
  211. data/src/core/lib/surface/call.h +2 -1
  212. data/src/core/lib/surface/channel.cc +28 -20
  213. data/src/core/lib/surface/channel.h +12 -2
  214. data/src/core/lib/surface/completion_queue.cc +10 -272
  215. data/src/core/lib/surface/completion_queue.h +0 -8
  216. data/src/core/lib/surface/init.cc +1 -3
  217. data/src/core/lib/surface/server.cc +1066 -1244
  218. data/src/core/lib/surface/server.h +363 -87
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/authority_override.cc +38 -0
  221. data/src/core/lib/transport/authority_override.h +32 -0
  222. data/src/core/lib/transport/connectivity_state.cc +18 -13
  223. data/src/core/lib/transport/connectivity_state.h +18 -6
  224. data/src/core/lib/transport/error_utils.cc +13 -0
  225. data/src/core/lib/transport/error_utils.h +6 -0
  226. data/src/core/lib/transport/static_metadata.cc +295 -276
  227. data/src/core/lib/transport/static_metadata.h +80 -73
  228. data/src/core/lib/transport/transport.h +7 -0
  229. data/src/core/lib/uri/uri_parser.cc +23 -21
  230. data/src/core/lib/uri/uri_parser.h +3 -1
  231. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  232. data/src/core/tsi/ssl_transport_security.cc +3 -9
  233. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  235. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  236. data/src/ruby/lib/grpc/version.rb +1 -1
  237. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  238. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  239. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  240. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  241. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  242. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  243. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  244. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  245. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  246. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  247. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  248. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  249. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  250. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  251. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  252. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  253. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  254. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  255. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  256. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  257. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  258. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  259. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  260. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  261. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  262. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  263. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  264. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  268. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  269. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  270. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  271. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  272. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  273. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  274. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  275. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  276. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  277. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  278. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  279. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  280. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  281. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  282. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  283. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  284. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  285. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  286. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  287. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  288. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  289. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  290. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  291. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  292. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  293. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  294. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  295. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  296. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  297. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  298. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  299. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  300. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  301. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  302. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  303. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  304. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  305. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  306. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  307. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  308. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  309. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  310. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  311. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  312. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  313. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  314. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  315. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  316. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  317. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  318. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  319. data/third_party/boringssl-with-bazel/err_data.c +263 -257
  320. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  325. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  326. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
  327. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  328. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
  329. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  332. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  333. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
  334. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  335. data/third_party/upb/upb/decode.c +64 -15
  336. data/third_party/upb/upb/encode.c +2 -2
  337. data/third_party/upb/upb/msg.h +2 -2
  338. data/third_party/upb/upb/port_def.inc +1 -1
  339. data/third_party/upb/upb/table.c +0 -11
  340. data/third_party/upb/upb/table.int.h +0 -9
  341. data/third_party/upb/upb/upb.c +16 -14
  342. data/third_party/upb/upb/upb.h +26 -0
  343. data/third_party/upb/upb/upb.hpp +2 -0
  344. metadata +257 -155
  345. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  346. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  347. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  348. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  349. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  350. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  351. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  352. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  353. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  354. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  355. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  356. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  357. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  358. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  359. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  360. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  361. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  362. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  363. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  364. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  365. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  366. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  367. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  368. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  369. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  370. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  371. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  372. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  373. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  374. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  375. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  376. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  377. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  378. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  379. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  380. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  381. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  382. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  383. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  384. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  385. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  386. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  387. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  388. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  389. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  390. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  391. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  392. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  393. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  394. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  395. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  396. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  397. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  398. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  399. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  400. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  401. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  402. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  403. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  404. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  405. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  406. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  407. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  408. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  409. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  410. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  411. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  412. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  413. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  415. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  416. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  417. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  418. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  419. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  420. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  421. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  422. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  423. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  424. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  425. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  426. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  427. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  428. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  429. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  430. data/src/core/lib/slice/slice_hash_table.h +0 -199
  431. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Copyright 2017 The Abseil Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+
16
+ * Defines ABSL_STACKTRACE_INL_HEADER to the *-inl.h containing
17
+ * actual unwinder implementation.
18
+ * This header is "private" to stacktrace.cc.
19
+ * DO NOT include it into any other files.
20
+ */
21
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_
22
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_
23
+
24
+ #if defined(ABSL_STACKTRACE_INL_HEADER)
25
+ #error ABSL_STACKTRACE_INL_HEADER cannot be directly set
26
+
27
+ #elif defined(_WIN32)
28
+ #define ABSL_STACKTRACE_INL_HEADER \
29
+ "absl/debugging/internal/stacktrace_win32-inl.inc"
30
+
31
+ #elif defined(__linux__) && !defined(__ANDROID__)
32
+
33
+ #if !defined(NO_FRAME_POINTER)
34
+ # if defined(__i386__) || defined(__x86_64__)
35
+ #define ABSL_STACKTRACE_INL_HEADER \
36
+ "absl/debugging/internal/stacktrace_x86-inl.inc"
37
+ # elif defined(__ppc__) || defined(__PPC__)
38
+ #define ABSL_STACKTRACE_INL_HEADER \
39
+ "absl/debugging/internal/stacktrace_powerpc-inl.inc"
40
+ # elif defined(__aarch64__)
41
+ #define ABSL_STACKTRACE_INL_HEADER \
42
+ "absl/debugging/internal/stacktrace_aarch64-inl.inc"
43
+ # elif defined(__arm__)
44
+ // Note: When using glibc this may require -funwind-tables to function properly.
45
+ #define ABSL_STACKTRACE_INL_HEADER \
46
+ "absl/debugging/internal/stacktrace_generic-inl.inc"
47
+ # else
48
+ #define ABSL_STACKTRACE_INL_HEADER \
49
+ "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
50
+ # endif
51
+ #else // defined(NO_FRAME_POINTER)
52
+ # if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
53
+ #define ABSL_STACKTRACE_INL_HEADER \
54
+ "absl/debugging/internal/stacktrace_generic-inl.inc"
55
+ # elif defined(__ppc__) || defined(__PPC__)
56
+ #define ABSL_STACKTRACE_INL_HEADER \
57
+ "absl/debugging/internal/stacktrace_generic-inl.inc"
58
+ # else
59
+ #define ABSL_STACKTRACE_INL_HEADER \
60
+ "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
61
+ # endif
62
+ #endif // NO_FRAME_POINTER
63
+
64
+ #else
65
+ #define ABSL_STACKTRACE_INL_HEADER \
66
+ "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
67
+
68
+ #endif
69
+
70
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_
@@ -0,0 +1,99 @@
1
+ // Copyright 2000 - 2007 Google Inc.
2
+ // All rights reserved.
3
+ //
4
+ // Author: Sanjay Ghemawat
5
+ //
6
+ // Portable implementation - just use glibc
7
+ //
8
+ // Note: The glibc implementation may cause a call to malloc.
9
+ // This can cause a deadlock in HeapProfiler.
10
+
11
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_
12
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_
13
+
14
+ #include <execinfo.h>
15
+ #include <atomic>
16
+ #include <cstring>
17
+
18
+ #include "absl/debugging/stacktrace.h"
19
+ #include "absl/base/attributes.h"
20
+
21
+ // Sometimes, we can try to get a stack trace from within a stack
22
+ // trace, because we don't block signals inside this code (which would be too
23
+ // expensive: the two extra system calls per stack trace do matter here).
24
+ // That can cause a self-deadlock.
25
+ // Protect against such reentrant call by failing to get a stack trace.
26
+ //
27
+ // We use __thread here because the code here is extremely low level -- it is
28
+ // called while collecting stack traces from within malloc and mmap, and thus
29
+ // can not call anything which might call malloc or mmap itself.
30
+ static __thread int recursive = 0;
31
+
32
+ // The stack trace function might be invoked very early in the program's
33
+ // execution (e.g. from the very first malloc if using tcmalloc). Also, the
34
+ // glibc implementation itself will trigger malloc the first time it is called.
35
+ // As such, we suppress usage of backtrace during this early stage of execution.
36
+ static std::atomic<bool> disable_stacktraces(true); // Disabled until healthy.
37
+ // Waiting until static initializers run seems to be late enough.
38
+ // This file is included into stacktrace.cc so this will only run once.
39
+ ABSL_ATTRIBUTE_UNUSED static int stacktraces_enabler = []() {
40
+ void* unused_stack[1];
41
+ // Force the first backtrace to happen early to get the one-time shared lib
42
+ // loading (allocation) out of the way. After the first call it is much safer
43
+ // to use backtrace from a signal handler if we crash somewhere later.
44
+ backtrace(unused_stack, 1);
45
+ disable_stacktraces.store(false, std::memory_order_relaxed);
46
+ return 0;
47
+ }();
48
+
49
+ template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
50
+ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
51
+ const void *ucp, int *min_dropped_frames) {
52
+ if (recursive || disable_stacktraces.load(std::memory_order_relaxed)) {
53
+ return 0;
54
+ }
55
+ ++recursive;
56
+
57
+ static_cast<void>(ucp); // Unused.
58
+ static const int kStackLength = 64;
59
+ void * stack[kStackLength];
60
+ int size;
61
+
62
+ size = backtrace(stack, kStackLength);
63
+ skip_count++; // we want to skip the current frame as well
64
+ int result_count = size - skip_count;
65
+ if (result_count < 0)
66
+ result_count = 0;
67
+ if (result_count > max_depth)
68
+ result_count = max_depth;
69
+ for (int i = 0; i < result_count; i++)
70
+ result[i] = stack[i + skip_count];
71
+
72
+ if (IS_STACK_FRAMES) {
73
+ // No implementation for finding out the stack frame sizes yet.
74
+ memset(sizes, 0, sizeof(*sizes) * result_count);
75
+ }
76
+ if (min_dropped_frames != nullptr) {
77
+ if (size - skip_count - max_depth > 0) {
78
+ *min_dropped_frames = size - skip_count - max_depth;
79
+ } else {
80
+ *min_dropped_frames = 0;
81
+ }
82
+ }
83
+
84
+ --recursive;
85
+
86
+ return result_count;
87
+ }
88
+
89
+ namespace absl {
90
+ ABSL_NAMESPACE_BEGIN
91
+ namespace debugging_internal {
92
+ bool StackTraceWorksForTest() {
93
+ return true;
94
+ }
95
+ } // namespace debugging_internal
96
+ ABSL_NAMESPACE_END
97
+ } // namespace absl
98
+
99
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_
@@ -0,0 +1,248 @@
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. I'm guessing (hoping!) the code is much like
16
+ // for x86. For apple machines, at least, it seems to be; see
17
+ // https://developer.apple.com/documentation/mac/runtimehtml/RTArch-59.html
18
+ // https://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK
19
+ // Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882
20
+
21
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_
22
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_
23
+
24
+ #if defined(__linux__)
25
+ #include <asm/ptrace.h> // for PT_NIP.
26
+ #include <ucontext.h> // for ucontext_t
27
+ #endif
28
+
29
+ #include <unistd.h>
30
+ #include <cassert>
31
+ #include <cstdint>
32
+ #include <cstdio>
33
+
34
+ #include "absl/base/attributes.h"
35
+ #include "absl/base/optimization.h"
36
+ #include "absl/base/port.h"
37
+ #include "absl/debugging/stacktrace.h"
38
+ #include "absl/debugging/internal/address_is_readable.h"
39
+ #include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems
40
+
41
+ // Given a stack pointer, return the saved link register value.
42
+ // Note that this is the link register for a callee.
43
+ static inline void *StacktracePowerPCGetLR(void **sp) {
44
+ // PowerPC has 3 main ABIs, which say where in the stack the
45
+ // Link Register is. For DARWIN and AIX (used by apple and
46
+ // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc),
47
+ // it's in sp[1].
48
+ #if defined(_CALL_AIX) || defined(_CALL_DARWIN)
49
+ return *(sp+2);
50
+ #elif defined(_CALL_SYSV)
51
+ return *(sp+1);
52
+ #elif defined(__APPLE__) || defined(__FreeBSD__) || \
53
+ (defined(__linux__) && defined(__PPC64__))
54
+ // This check is in case the compiler doesn't define _CALL_AIX/etc.
55
+ return *(sp+2);
56
+ #elif defined(__linux)
57
+ // This check is in case the compiler doesn't define _CALL_SYSV.
58
+ return *(sp+1);
59
+ #else
60
+ #error Need to specify the PPC ABI for your archiecture.
61
+ #endif
62
+ }
63
+
64
+ // Given a pointer to a stack frame, locate and return the calling
65
+ // stackframe, or return null if no stackframe can be found. Perform sanity
66
+ // checks (the strictness of which is controlled by the boolean parameter
67
+ // "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
68
+ template<bool STRICT_UNWINDING, bool IS_WITH_CONTEXT>
69
+ ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
70
+ ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
71
+ static void **NextStackFrame(void **old_sp, const void *uc) {
72
+ void **new_sp = (void **) *old_sp;
73
+ enum { kStackAlignment = 16 };
74
+
75
+ // Check that the transition from frame pointer old_sp to frame
76
+ // pointer new_sp isn't clearly bogus
77
+ if (STRICT_UNWINDING) {
78
+ // With the stack growing downwards, older stack frame must be
79
+ // at a greater address that the current one.
80
+ if (new_sp <= old_sp) return nullptr;
81
+ // Assume stack frames larger than 100,000 bytes are bogus.
82
+ if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return nullptr;
83
+ } else {
84
+ // In the non-strict mode, allow discontiguous stack frames.
85
+ // (alternate-signal-stacks for example).
86
+ if (new_sp == old_sp) return nullptr;
87
+ // And allow frames upto about 1MB.
88
+ if ((new_sp > old_sp)
89
+ && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return nullptr;
90
+ }
91
+ if ((uintptr_t)new_sp % kStackAlignment != 0) return nullptr;
92
+
93
+ #if defined(__linux__)
94
+ enum StackTraceKernelSymbolStatus {
95
+ kNotInitialized = 0, kAddressValid, kAddressInvalid };
96
+
97
+ if (IS_WITH_CONTEXT && uc != nullptr) {
98
+ static StackTraceKernelSymbolStatus kernel_symbol_status =
99
+ kNotInitialized; // Sentinel: not computed yet.
100
+ // Initialize with sentinel value: __kernel_rt_sigtramp_rt64 can not
101
+ // possibly be there.
102
+ static const unsigned char *kernel_sigtramp_rt64_address = nullptr;
103
+ if (kernel_symbol_status == kNotInitialized) {
104
+ absl::debugging_internal::VDSOSupport vdso;
105
+ if (vdso.IsPresent()) {
106
+ absl::debugging_internal::VDSOSupport::SymbolInfo
107
+ sigtramp_rt64_symbol_info;
108
+ if (!vdso.LookupSymbol(
109
+ "__kernel_sigtramp_rt64", "LINUX_2.6.15",
110
+ absl::debugging_internal::VDSOSupport::kVDSOSymbolType,
111
+ &sigtramp_rt64_symbol_info) ||
112
+ sigtramp_rt64_symbol_info.address == nullptr) {
113
+ // Unexpected: VDSO is present, yet the expected symbol is missing
114
+ // or null.
115
+ assert(false && "VDSO is present, but doesn't have expected symbol");
116
+ kernel_symbol_status = kAddressInvalid;
117
+ } else {
118
+ kernel_sigtramp_rt64_address =
119
+ reinterpret_cast<const unsigned char *>(
120
+ sigtramp_rt64_symbol_info.address);
121
+ kernel_symbol_status = kAddressValid;
122
+ }
123
+ } else {
124
+ kernel_symbol_status = kAddressInvalid;
125
+ }
126
+ }
127
+
128
+ if (new_sp != nullptr &&
129
+ kernel_symbol_status == kAddressValid &&
130
+ StacktracePowerPCGetLR(new_sp) == kernel_sigtramp_rt64_address) {
131
+ const ucontext_t* signal_context =
132
+ reinterpret_cast<const ucontext_t*>(uc);
133
+ void **const sp_before_signal =
134
+ reinterpret_cast<void**>(signal_context->uc_mcontext.gp_regs[PT_R1]);
135
+ // Check that alleged sp before signal is nonnull and is reasonably
136
+ // aligned.
137
+ if (sp_before_signal != nullptr &&
138
+ ((uintptr_t)sp_before_signal % kStackAlignment) == 0) {
139
+ // Check that alleged stack pointer is actually readable. This is to
140
+ // prevent a "double fault" in case we hit the first fault due to e.g.
141
+ // a stack corruption.
142
+ if (absl::debugging_internal::AddressIsReadable(sp_before_signal)) {
143
+ // Alleged stack pointer is readable, use it for further unwinding.
144
+ new_sp = sp_before_signal;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ #endif
150
+
151
+ return new_sp;
152
+ }
153
+
154
+ // This ensures that absl::GetStackTrace sets up the Link Register properly.
155
+ ABSL_ATTRIBUTE_NOINLINE static void AbslStacktracePowerPCDummyFunction() {
156
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
157
+ }
158
+
159
+ template <bool IS_STACK_FRAMES, bool IS_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 int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
163
+ const void *ucp, int *min_dropped_frames) {
164
+ void **sp;
165
+ // Apple macOS uses an old version of gnu as -- both Darwin 7.9.0 (Panther)
166
+ // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a
167
+ // different asm syntax. I don't know quite the best way to discriminate
168
+ // systems using the old as from the new one; I've gone with __APPLE__.
169
+ #ifdef __APPLE__
170
+ __asm__ volatile ("mr %0,r1" : "=r" (sp));
171
+ #else
172
+ __asm__ volatile ("mr %0,1" : "=r" (sp));
173
+ #endif
174
+
175
+ // On PowerPC, the "Link Register" or "Link Record" (LR), is a stack
176
+ // entry that holds the return address of the subroutine call (what
177
+ // instruction we run after our function finishes). This is the
178
+ // same as the stack-pointer of our parent routine, which is what we
179
+ // want here. While the compiler will always(?) set up LR for
180
+ // subroutine calls, it may not for leaf functions (such as this one).
181
+ // This routine forces the compiler (at least gcc) to push it anyway.
182
+ AbslStacktracePowerPCDummyFunction();
183
+
184
+ // The LR save area is used by the callee, so the top entry is bogus.
185
+ skip_count++;
186
+
187
+ int n = 0;
188
+
189
+ // Unlike ABIs of X86 and ARM, PowerPC ABIs say that return address (in
190
+ // the link register) of a function call is stored in the caller's stack
191
+ // frame instead of the callee's. When we look for the return address
192
+ // associated with a stack frame, we need to make sure that there is a
193
+ // caller frame before it. So we call NextStackFrame before entering the
194
+ // loop below and check next_sp instead of sp for loop termination.
195
+ // The outermost frame is set up by runtimes and it does not have a
196
+ // caller frame, so it is skipped.
197
+
198
+ // The absl::GetStackFrames routine is called when we are in some
199
+ // informational context (the failure signal handler for example).
200
+ // Use the non-strict unwinding rules to produce a stack trace
201
+ // that is as complete as possible (even if it contains a few
202
+ // bogus entries in some rare cases).
203
+ void **next_sp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(sp, ucp);
204
+
205
+ while (next_sp && n < max_depth) {
206
+ if (skip_count > 0) {
207
+ skip_count--;
208
+ } else {
209
+ result[n] = StacktracePowerPCGetLR(sp);
210
+ if (IS_STACK_FRAMES) {
211
+ if (next_sp > sp) {
212
+ sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp;
213
+ } else {
214
+ // A frame-size of 0 is used to indicate unknown frame size.
215
+ sizes[n] = 0;
216
+ }
217
+ }
218
+ n++;
219
+ }
220
+
221
+ sp = next_sp;
222
+ next_sp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(sp, ucp);
223
+ }
224
+
225
+ if (min_dropped_frames != nullptr) {
226
+ // Implementation detail: we clamp the max of frames we are willing to
227
+ // count, so as not to spend too much time in the loop below.
228
+ const int kMaxUnwind = 1000;
229
+ int j = 0;
230
+ for (; next_sp != nullptr && j < kMaxUnwind; j++) {
231
+ next_sp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(next_sp, ucp);
232
+ }
233
+ *min_dropped_frames = j;
234
+ }
235
+ return n;
236
+ }
237
+
238
+ namespace absl {
239
+ ABSL_NAMESPACE_BEGIN
240
+ namespace debugging_internal {
241
+ bool StackTraceWorksForTest() {
242
+ return true;
243
+ }
244
+ } // namespace debugging_internal
245
+ ABSL_NAMESPACE_END
246
+ } // namespace absl
247
+
248
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_
@@ -0,0 +1,24 @@
1
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_
2
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_
3
+
4
+ template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
5
+ static int UnwindImpl(void** /* result */, int* /* sizes */,
6
+ int /* max_depth */, int /* skip_count */,
7
+ const void* /* ucp */, int *min_dropped_frames) {
8
+ if (min_dropped_frames != nullptr) {
9
+ *min_dropped_frames = 0;
10
+ }
11
+ return 0;
12
+ }
13
+
14
+ namespace absl {
15
+ ABSL_NAMESPACE_BEGIN
16
+ namespace debugging_internal {
17
+ bool StackTraceWorksForTest() {
18
+ return false;
19
+ }
20
+ } // namespace debugging_internal
21
+ ABSL_NAMESPACE_END
22
+ } // namespace absl
23
+
24
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_
@@ -0,0 +1,85 @@
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
+ // Produces a stack trace for Windows. Normally, one could use
16
+ // stacktrace_x86-inl.h or stacktrace_x86_64-inl.h -- and indeed, that
17
+ // should work for binaries compiled using MSVC in "debug" mode.
18
+ // However, in "release" mode, Windows uses frame-pointer
19
+ // optimization, which makes getting a stack trace very difficult.
20
+ //
21
+ // There are several approaches one can take. One is to use Windows
22
+ // intrinsics like StackWalk64. These can work, but have restrictions
23
+ // on how successful they can be. Another attempt is to write a
24
+ // version of stacktrace_x86-inl.h that has heuristic support for
25
+ // dealing with FPO, similar to what WinDbg does (see
26
+ // http://www.nynaeve.net/?p=97). There are (non-working) examples of
27
+ // these approaches, complete with TODOs, in stacktrace_win32-inl.h#1
28
+ //
29
+ // The solution we've ended up doing is to call the undocumented
30
+ // windows function RtlCaptureStackBackTrace, which probably doesn't
31
+ // work with FPO but at least is fast, and doesn't require a symbol
32
+ // server.
33
+ //
34
+ // This code is inspired by a patch from David Vitek:
35
+ // https://code.google.com/p/google-perftools/issues/detail?id=83
36
+
37
+ #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_
38
+ #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_
39
+
40
+ #include <windows.h> // for GetProcAddress and GetModuleHandle
41
+ #include <cassert>
42
+
43
+ typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
44
+ IN ULONG frames_to_skip,
45
+ IN ULONG frames_to_capture,
46
+ OUT PVOID *backtrace,
47
+ OUT PULONG backtrace_hash);
48
+
49
+ // Load the function we need at static init time, where we don't have
50
+ // to worry about someone else holding the loader's lock.
51
+ static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
52
+ (RtlCaptureStackBackTrace_Function*)
53
+ GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
54
+
55
+ template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
56
+ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
57
+ const void*, int* min_dropped_frames) {
58
+ int n = 0;
59
+ if (!RtlCaptureStackBackTrace_fn) {
60
+ // can't find a stacktrace with no function to call
61
+ } else {
62
+ n = (int)RtlCaptureStackBackTrace_fn(skip_count + 2, max_depth, result, 0);
63
+ }
64
+ if (IS_STACK_FRAMES) {
65
+ // No implementation for finding out the stack frame sizes yet.
66
+ memset(sizes, 0, sizeof(*sizes) * n);
67
+ }
68
+ if (min_dropped_frames != nullptr) {
69
+ // Not implemented.
70
+ *min_dropped_frames = 0;
71
+ }
72
+ return n;
73
+ }
74
+
75
+ namespace absl {
76
+ ABSL_NAMESPACE_BEGIN
77
+ namespace debugging_internal {
78
+ bool StackTraceWorksForTest() {
79
+ return false;
80
+ }
81
+ } // namespace debugging_internal
82
+ ABSL_NAMESPACE_END
83
+ } // namespace absl
84
+
85
+ #endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_