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.
- checksums.yaml +4 -4
- data/Makefile +595 -15723
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/port_platform.h +6 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +363 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
- data/src/core/lib/channel/channelz.cc +14 -15
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- data/src/core/lib/iomgr/iomgr.cc +0 -10
- data/src/core/lib/iomgr/iomgr.h +0 -10
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
- data/src/core/lib/iomgr/tcp_custom.cc +32 -16
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/surface/call.cc +12 -12
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- data/src/core/lib/surface/completion_queue.cc +10 -272
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/server.cc +1066 -1244
- data/src/core/lib/surface/server.h +363 -87
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +7 -0
- data/src/core/lib/uri/uri_parser.cc +23 -21
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
- data/src/core/tsi/ssl_transport_security.cc +3 -9
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +263 -257
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/upb/upb/decode.c +64 -15
- data/third_party/upb/upb/encode.c +2 -2
- data/third_party/upb/upb/msg.h +2 -2
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +0 -11
- data/third_party/upb/upb/table.int.h +0 -9
- data/third_party/upb/upb/upb.c +16 -14
- data/third_party/upb/upb/upb.h +26 -0
- data/third_party/upb/upb/upb.hpp +2 -0
- metadata +257 -155
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- 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_
|