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,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_