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,194 @@
|
|
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
|
+
// Allow dynamic symbol lookup in the kernel VDSO page.
|
16
|
+
//
|
17
|
+
// VDSOSupport -- a class representing kernel VDSO (if present).
|
18
|
+
|
19
|
+
#include "absl/debugging/internal/vdso_support.h"
|
20
|
+
|
21
|
+
#ifdef ABSL_HAVE_VDSO_SUPPORT // defined in vdso_support.h
|
22
|
+
|
23
|
+
#include <errno.h>
|
24
|
+
#include <fcntl.h>
|
25
|
+
#include <sys/syscall.h>
|
26
|
+
#include <unistd.h>
|
27
|
+
|
28
|
+
#if __GLIBC_PREREQ(2, 16) // GLIBC-2.16 implements getauxval.
|
29
|
+
#include <sys/auxv.h>
|
30
|
+
#endif
|
31
|
+
|
32
|
+
#include "absl/base/dynamic_annotations.h"
|
33
|
+
#include "absl/base/internal/raw_logging.h"
|
34
|
+
#include "absl/base/port.h"
|
35
|
+
|
36
|
+
#ifndef AT_SYSINFO_EHDR
|
37
|
+
#define AT_SYSINFO_EHDR 33 // for crosstoolv10
|
38
|
+
#endif
|
39
|
+
|
40
|
+
namespace absl {
|
41
|
+
ABSL_NAMESPACE_BEGIN
|
42
|
+
namespace debugging_internal {
|
43
|
+
|
44
|
+
ABSL_CONST_INIT
|
45
|
+
std::atomic<const void *> VDSOSupport::vdso_base_(
|
46
|
+
debugging_internal::ElfMemImage::kInvalidBase);
|
47
|
+
|
48
|
+
std::atomic<VDSOSupport::GetCpuFn> VDSOSupport::getcpu_fn_(&InitAndGetCPU);
|
49
|
+
VDSOSupport::VDSOSupport()
|
50
|
+
// If vdso_base_ is still set to kInvalidBase, we got here
|
51
|
+
// before VDSOSupport::Init has been called. Call it now.
|
52
|
+
: image_(vdso_base_.load(std::memory_order_relaxed) ==
|
53
|
+
debugging_internal::ElfMemImage::kInvalidBase
|
54
|
+
? Init()
|
55
|
+
: vdso_base_.load(std::memory_order_relaxed)) {}
|
56
|
+
|
57
|
+
// NOTE: we can't use GoogleOnceInit() below, because we can be
|
58
|
+
// called by tcmalloc, and none of the *once* stuff may be functional yet.
|
59
|
+
//
|
60
|
+
// In addition, we hope that the VDSOSupportHelper constructor
|
61
|
+
// causes this code to run before there are any threads, and before
|
62
|
+
// InitGoogle() has executed any chroot or setuid calls.
|
63
|
+
//
|
64
|
+
// Finally, even if there is a race here, it is harmless, because
|
65
|
+
// the operation should be idempotent.
|
66
|
+
const void *VDSOSupport::Init() {
|
67
|
+
const auto kInvalidBase = debugging_internal::ElfMemImage::kInvalidBase;
|
68
|
+
#if __GLIBC_PREREQ(2, 16)
|
69
|
+
if (vdso_base_.load(std::memory_order_relaxed) == kInvalidBase) {
|
70
|
+
errno = 0;
|
71
|
+
const void *const sysinfo_ehdr =
|
72
|
+
reinterpret_cast<const void *>(getauxval(AT_SYSINFO_EHDR));
|
73
|
+
if (errno == 0) {
|
74
|
+
vdso_base_.store(sysinfo_ehdr, std::memory_order_relaxed);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
#endif // __GLIBC_PREREQ(2, 16)
|
78
|
+
if (vdso_base_.load(std::memory_order_relaxed) == kInvalidBase) {
|
79
|
+
// Valgrind zaps AT_SYSINFO_EHDR and friends from the auxv[]
|
80
|
+
// on stack, and so glibc works as if VDSO was not present.
|
81
|
+
// But going directly to kernel via /proc/self/auxv below bypasses
|
82
|
+
// Valgrind zapping. So we check for Valgrind separately.
|
83
|
+
if (RunningOnValgrind()) {
|
84
|
+
vdso_base_.store(nullptr, std::memory_order_relaxed);
|
85
|
+
getcpu_fn_.store(&GetCPUViaSyscall, std::memory_order_relaxed);
|
86
|
+
return nullptr;
|
87
|
+
}
|
88
|
+
int fd = open("/proc/self/auxv", O_RDONLY);
|
89
|
+
if (fd == -1) {
|
90
|
+
// Kernel too old to have a VDSO.
|
91
|
+
vdso_base_.store(nullptr, std::memory_order_relaxed);
|
92
|
+
getcpu_fn_.store(&GetCPUViaSyscall, std::memory_order_relaxed);
|
93
|
+
return nullptr;
|
94
|
+
}
|
95
|
+
ElfW(auxv_t) aux;
|
96
|
+
while (read(fd, &aux, sizeof(aux)) == sizeof(aux)) {
|
97
|
+
if (aux.a_type == AT_SYSINFO_EHDR) {
|
98
|
+
vdso_base_.store(reinterpret_cast<void *>(aux.a_un.a_val),
|
99
|
+
std::memory_order_relaxed);
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
close(fd);
|
104
|
+
if (vdso_base_.load(std::memory_order_relaxed) == kInvalidBase) {
|
105
|
+
// Didn't find AT_SYSINFO_EHDR in auxv[].
|
106
|
+
vdso_base_.store(nullptr, std::memory_order_relaxed);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
GetCpuFn fn = &GetCPUViaSyscall; // default if VDSO not present.
|
110
|
+
if (vdso_base_.load(std::memory_order_relaxed)) {
|
111
|
+
VDSOSupport vdso;
|
112
|
+
SymbolInfo info;
|
113
|
+
if (vdso.LookupSymbol("__vdso_getcpu", "LINUX_2.6", STT_FUNC, &info)) {
|
114
|
+
fn = reinterpret_cast<GetCpuFn>(const_cast<void *>(info.address));
|
115
|
+
}
|
116
|
+
}
|
117
|
+
// Subtle: this code runs outside of any locks; prevent compiler
|
118
|
+
// from assigning to getcpu_fn_ more than once.
|
119
|
+
getcpu_fn_.store(fn, std::memory_order_relaxed);
|
120
|
+
return vdso_base_.load(std::memory_order_relaxed);
|
121
|
+
}
|
122
|
+
|
123
|
+
const void *VDSOSupport::SetBase(const void *base) {
|
124
|
+
ABSL_RAW_CHECK(base != debugging_internal::ElfMemImage::kInvalidBase,
|
125
|
+
"internal error");
|
126
|
+
const void *old_base = vdso_base_.load(std::memory_order_relaxed);
|
127
|
+
vdso_base_.store(base, std::memory_order_relaxed);
|
128
|
+
image_.Init(base);
|
129
|
+
// Also reset getcpu_fn_, so GetCPU could be tested with simulated VDSO.
|
130
|
+
getcpu_fn_.store(&InitAndGetCPU, std::memory_order_relaxed);
|
131
|
+
return old_base;
|
132
|
+
}
|
133
|
+
|
134
|
+
bool VDSOSupport::LookupSymbol(const char *name,
|
135
|
+
const char *version,
|
136
|
+
int type,
|
137
|
+
SymbolInfo *info) const {
|
138
|
+
return image_.LookupSymbol(name, version, type, info);
|
139
|
+
}
|
140
|
+
|
141
|
+
bool VDSOSupport::LookupSymbolByAddress(const void *address,
|
142
|
+
SymbolInfo *info_out) const {
|
143
|
+
return image_.LookupSymbolByAddress(address, info_out);
|
144
|
+
}
|
145
|
+
|
146
|
+
// NOLINT on 'long' because this routine mimics kernel api.
|
147
|
+
long VDSOSupport::GetCPUViaSyscall(unsigned *cpu, // NOLINT(runtime/int)
|
148
|
+
void *, void *) {
|
149
|
+
#ifdef SYS_getcpu
|
150
|
+
return syscall(SYS_getcpu, cpu, nullptr, nullptr);
|
151
|
+
#else
|
152
|
+
// x86_64 never implemented sys_getcpu(), except as a VDSO call.
|
153
|
+
static_cast<void>(cpu); // Avoid an unused argument compiler warning.
|
154
|
+
errno = ENOSYS;
|
155
|
+
return -1;
|
156
|
+
#endif
|
157
|
+
}
|
158
|
+
|
159
|
+
// Use fast __vdso_getcpu if available.
|
160
|
+
long VDSOSupport::InitAndGetCPU(unsigned *cpu, // NOLINT(runtime/int)
|
161
|
+
void *x, void *y) {
|
162
|
+
Init();
|
163
|
+
GetCpuFn fn = getcpu_fn_.load(std::memory_order_relaxed);
|
164
|
+
ABSL_RAW_CHECK(fn != &InitAndGetCPU, "Init() did not set getcpu_fn_");
|
165
|
+
return (*fn)(cpu, x, y);
|
166
|
+
}
|
167
|
+
|
168
|
+
// This function must be very fast, and may be called from very
|
169
|
+
// low level (e.g. tcmalloc). Hence I avoid things like
|
170
|
+
// GoogleOnceInit() and ::operator new.
|
171
|
+
ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
|
172
|
+
int GetCPU() {
|
173
|
+
unsigned cpu;
|
174
|
+
int ret_code = (*VDSOSupport::getcpu_fn_)(&cpu, nullptr, nullptr);
|
175
|
+
return ret_code == 0 ? cpu : ret_code;
|
176
|
+
}
|
177
|
+
|
178
|
+
// We need to make sure VDSOSupport::Init() is called before
|
179
|
+
// InitGoogle() does any setuid or chroot calls. If VDSOSupport
|
180
|
+
// is used in any global constructor, this will happen, since
|
181
|
+
// VDSOSupport's constructor calls Init. But if not, we need to
|
182
|
+
// ensure it here, with a global constructor of our own. This
|
183
|
+
// is an allowed exception to the normal rule against non-trivial
|
184
|
+
// global constructors.
|
185
|
+
static class VDSOInitHelper {
|
186
|
+
public:
|
187
|
+
VDSOInitHelper() { VDSOSupport::Init(); }
|
188
|
+
} vdso_init_helper;
|
189
|
+
|
190
|
+
} // namespace debugging_internal
|
191
|
+
ABSL_NAMESPACE_END
|
192
|
+
} // namespace absl
|
193
|
+
|
194
|
+
#endif // ABSL_HAVE_VDSO_SUPPORT
|
@@ -0,0 +1,158 @@
|
|
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
|
+
|
17
|
+
// Allow dynamic symbol lookup in the kernel VDSO page.
|
18
|
+
//
|
19
|
+
// VDSO stands for "Virtual Dynamic Shared Object" -- a page of
|
20
|
+
// executable code, which looks like a shared library, but doesn't
|
21
|
+
// necessarily exist anywhere on disk, and which gets mmap()ed into
|
22
|
+
// every process by kernels which support VDSO, such as 2.6.x for 32-bit
|
23
|
+
// executables, and 2.6.24 and above for 64-bit executables.
|
24
|
+
//
|
25
|
+
// More details could be found here:
|
26
|
+
// http://www.trilithium.com/johan/2005/08/linux-gate/
|
27
|
+
//
|
28
|
+
// VDSOSupport -- a class representing kernel VDSO (if present).
|
29
|
+
//
|
30
|
+
// Example usage:
|
31
|
+
// VDSOSupport vdso;
|
32
|
+
// VDSOSupport::SymbolInfo info;
|
33
|
+
// typedef (*FN)(unsigned *, void *, void *);
|
34
|
+
// FN fn = nullptr;
|
35
|
+
// if (vdso.LookupSymbol("__vdso_getcpu", "LINUX_2.6", STT_FUNC, &info)) {
|
36
|
+
// fn = reinterpret_cast<FN>(info.address);
|
37
|
+
// }
|
38
|
+
|
39
|
+
#ifndef ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_
|
40
|
+
#define ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_
|
41
|
+
|
42
|
+
#include <atomic>
|
43
|
+
|
44
|
+
#include "absl/base/attributes.h"
|
45
|
+
#include "absl/debugging/internal/elf_mem_image.h"
|
46
|
+
|
47
|
+
#ifdef ABSL_HAVE_ELF_MEM_IMAGE
|
48
|
+
|
49
|
+
#ifdef ABSL_HAVE_VDSO_SUPPORT
|
50
|
+
#error ABSL_HAVE_VDSO_SUPPORT cannot be directly set
|
51
|
+
#else
|
52
|
+
#define ABSL_HAVE_VDSO_SUPPORT 1
|
53
|
+
#endif
|
54
|
+
|
55
|
+
namespace absl {
|
56
|
+
ABSL_NAMESPACE_BEGIN
|
57
|
+
namespace debugging_internal {
|
58
|
+
|
59
|
+
// NOTE: this class may be used from within tcmalloc, and can not
|
60
|
+
// use any memory allocation routines.
|
61
|
+
class VDSOSupport {
|
62
|
+
public:
|
63
|
+
VDSOSupport();
|
64
|
+
|
65
|
+
typedef ElfMemImage::SymbolInfo SymbolInfo;
|
66
|
+
typedef ElfMemImage::SymbolIterator SymbolIterator;
|
67
|
+
|
68
|
+
// On PowerPC64 VDSO symbols can either be of type STT_FUNC or STT_NOTYPE
|
69
|
+
// depending on how the kernel is built. The kernel is normally built with
|
70
|
+
// STT_NOTYPE type VDSO symbols. Let's make things simpler first by using a
|
71
|
+
// compile-time constant.
|
72
|
+
#ifdef __powerpc64__
|
73
|
+
enum { kVDSOSymbolType = STT_NOTYPE };
|
74
|
+
#else
|
75
|
+
enum { kVDSOSymbolType = STT_FUNC };
|
76
|
+
#endif
|
77
|
+
|
78
|
+
// Answers whether we have a vdso at all.
|
79
|
+
bool IsPresent() const { return image_.IsPresent(); }
|
80
|
+
|
81
|
+
// Allow to iterate over all VDSO symbols.
|
82
|
+
SymbolIterator begin() const { return image_.begin(); }
|
83
|
+
SymbolIterator end() const { return image_.end(); }
|
84
|
+
|
85
|
+
// Look up versioned dynamic symbol in the kernel VDSO.
|
86
|
+
// Returns false if VDSO is not present, or doesn't contain given
|
87
|
+
// symbol/version/type combination.
|
88
|
+
// If info_out != nullptr, additional details are filled in.
|
89
|
+
bool LookupSymbol(const char *name, const char *version,
|
90
|
+
int symbol_type, SymbolInfo *info_out) const;
|
91
|
+
|
92
|
+
// Find info about symbol (if any) which overlaps given address.
|
93
|
+
// Returns true if symbol was found; false if VDSO isn't present
|
94
|
+
// or doesn't have a symbol overlapping given address.
|
95
|
+
// If info_out != nullptr, additional details are filled in.
|
96
|
+
bool LookupSymbolByAddress(const void *address, SymbolInfo *info_out) const;
|
97
|
+
|
98
|
+
// Used only for testing. Replace real VDSO base with a mock.
|
99
|
+
// Returns previous value of vdso_base_. After you are done testing,
|
100
|
+
// you are expected to call SetBase() with previous value, in order to
|
101
|
+
// reset state to the way it was.
|
102
|
+
const void *SetBase(const void *s);
|
103
|
+
|
104
|
+
// Computes vdso_base_ and returns it. Should be called as early as
|
105
|
+
// possible; before any thread creation, chroot or setuid.
|
106
|
+
static const void *Init();
|
107
|
+
|
108
|
+
private:
|
109
|
+
// image_ represents VDSO ELF image in memory.
|
110
|
+
// image_.ehdr_ == nullptr implies there is no VDSO.
|
111
|
+
ElfMemImage image_;
|
112
|
+
|
113
|
+
// Cached value of auxv AT_SYSINFO_EHDR, computed once.
|
114
|
+
// This is a tri-state:
|
115
|
+
// kInvalidBase => value hasn't been determined yet.
|
116
|
+
// 0 => there is no VDSO.
|
117
|
+
// else => vma of VDSO Elf{32,64}_Ehdr.
|
118
|
+
//
|
119
|
+
// When testing with mock VDSO, low bit is set.
|
120
|
+
// The low bit is always available because vdso_base_ is
|
121
|
+
// page-aligned.
|
122
|
+
static std::atomic<const void *> vdso_base_;
|
123
|
+
|
124
|
+
// NOLINT on 'long' because these routines mimic kernel api.
|
125
|
+
// The 'cache' parameter may be used by some versions of the kernel,
|
126
|
+
// and should be nullptr or point to a static buffer containing at
|
127
|
+
// least two 'long's.
|
128
|
+
static long InitAndGetCPU(unsigned *cpu, void *cache, // NOLINT 'long'.
|
129
|
+
void *unused);
|
130
|
+
static long GetCPUViaSyscall(unsigned *cpu, void *cache, // NOLINT 'long'.
|
131
|
+
void *unused);
|
132
|
+
typedef long (*GetCpuFn)(unsigned *cpu, void *cache, // NOLINT 'long'.
|
133
|
+
void *unused);
|
134
|
+
|
135
|
+
// This function pointer may point to InitAndGetCPU,
|
136
|
+
// GetCPUViaSyscall, or __vdso_getcpu at different stages of initialization.
|
137
|
+
ABSL_CONST_INIT static std::atomic<GetCpuFn> getcpu_fn_;
|
138
|
+
|
139
|
+
friend int GetCPU(void); // Needs access to getcpu_fn_.
|
140
|
+
|
141
|
+
VDSOSupport(const VDSOSupport&) = delete;
|
142
|
+
VDSOSupport& operator=(const VDSOSupport&) = delete;
|
143
|
+
};
|
144
|
+
|
145
|
+
// Same as sched_getcpu() on later glibc versions.
|
146
|
+
// Return current CPU, using (fast) __vdso_getcpu@LINUX_2.6 if present,
|
147
|
+
// otherwise use syscall(SYS_getcpu,...).
|
148
|
+
// May return -1 with errno == ENOSYS if the kernel doesn't
|
149
|
+
// support SYS_getcpu.
|
150
|
+
int GetCPU();
|
151
|
+
|
152
|
+
} // namespace debugging_internal
|
153
|
+
ABSL_NAMESPACE_END
|
154
|
+
} // namespace absl
|
155
|
+
|
156
|
+
#endif // ABSL_HAVE_ELF_MEM_IMAGE
|
157
|
+
|
158
|
+
#endif // ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_
|
@@ -0,0 +1,140 @@
|
|
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
|
+
// There are three different ways we can try to get the stack trace:
|
18
|
+
//
|
19
|
+
// 1) Our hand-coded stack-unwinder. This depends on a certain stack
|
20
|
+
// layout, which is used by gcc (and those systems using a
|
21
|
+
// gcc-compatible ABI) on x86 systems, at least since gcc 2.95.
|
22
|
+
// It uses the frame pointer to do its work.
|
23
|
+
//
|
24
|
+
// 2) The libunwind library. This is still in development, and as a
|
25
|
+
// separate library adds a new dependency, but doesn't need a frame
|
26
|
+
// pointer. It also doesn't call malloc.
|
27
|
+
//
|
28
|
+
// 3) The gdb unwinder -- also the one used by the c++ exception code.
|
29
|
+
// It's obviously well-tested, but has a fatal flaw: it can call
|
30
|
+
// malloc() from the unwinder. This is a problem because we're
|
31
|
+
// trying to use the unwinder to instrument malloc().
|
32
|
+
//
|
33
|
+
// Note: if you add a new implementation here, make sure it works
|
34
|
+
// correctly when absl::GetStackTrace() is called with max_depth == 0.
|
35
|
+
// Some code may do that.
|
36
|
+
|
37
|
+
#include "absl/debugging/stacktrace.h"
|
38
|
+
|
39
|
+
#include <atomic>
|
40
|
+
|
41
|
+
#include "absl/base/attributes.h"
|
42
|
+
#include "absl/base/port.h"
|
43
|
+
#include "absl/debugging/internal/stacktrace_config.h"
|
44
|
+
|
45
|
+
#if defined(ABSL_STACKTRACE_INL_HEADER)
|
46
|
+
#include ABSL_STACKTRACE_INL_HEADER
|
47
|
+
#else
|
48
|
+
# error Cannot calculate stack trace: will need to write for your environment
|
49
|
+
|
50
|
+
# include "absl/debugging/internal/stacktrace_aarch64-inl.inc"
|
51
|
+
# include "absl/debugging/internal/stacktrace_arm-inl.inc"
|
52
|
+
# include "absl/debugging/internal/stacktrace_generic-inl.inc"
|
53
|
+
# include "absl/debugging/internal/stacktrace_powerpc-inl.inc"
|
54
|
+
# include "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
|
55
|
+
# include "absl/debugging/internal/stacktrace_win32-inl.inc"
|
56
|
+
# include "absl/debugging/internal/stacktrace_x86-inl.inc"
|
57
|
+
#endif
|
58
|
+
|
59
|
+
namespace absl {
|
60
|
+
ABSL_NAMESPACE_BEGIN
|
61
|
+
namespace {
|
62
|
+
|
63
|
+
typedef int (*Unwinder)(void**, int*, int, int, const void*, int*);
|
64
|
+
std::atomic<Unwinder> custom;
|
65
|
+
|
66
|
+
template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
|
67
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, int* sizes,
|
68
|
+
int max_depth, int skip_count,
|
69
|
+
const void* uc,
|
70
|
+
int* min_dropped_frames) {
|
71
|
+
Unwinder f = &UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>;
|
72
|
+
Unwinder g = custom.load(std::memory_order_acquire);
|
73
|
+
if (g != nullptr) f = g;
|
74
|
+
|
75
|
+
// Add 1 to skip count for the unwinder function itself
|
76
|
+
int size = (*f)(result, sizes, max_depth, skip_count + 1, uc,
|
77
|
+
min_dropped_frames);
|
78
|
+
// To disable tail call to (*f)(...)
|
79
|
+
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
80
|
+
return size;
|
81
|
+
}
|
82
|
+
|
83
|
+
} // anonymous namespace
|
84
|
+
|
85
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackFrames(
|
86
|
+
void** result, int* sizes, int max_depth, int skip_count) {
|
87
|
+
return Unwind<true, false>(result, sizes, max_depth, skip_count, nullptr,
|
88
|
+
nullptr);
|
89
|
+
}
|
90
|
+
|
91
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
92
|
+
GetStackFramesWithContext(void** result, int* sizes, int max_depth,
|
93
|
+
int skip_count, const void* uc,
|
94
|
+
int* min_dropped_frames) {
|
95
|
+
return Unwind<true, true>(result, sizes, max_depth, skip_count, uc,
|
96
|
+
min_dropped_frames);
|
97
|
+
}
|
98
|
+
|
99
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
|
100
|
+
void** result, int max_depth, int skip_count) {
|
101
|
+
return Unwind<false, false>(result, nullptr, max_depth, skip_count, nullptr,
|
102
|
+
nullptr);
|
103
|
+
}
|
104
|
+
|
105
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
106
|
+
GetStackTraceWithContext(void** result, int max_depth, int skip_count,
|
107
|
+
const void* uc, int* min_dropped_frames) {
|
108
|
+
return Unwind<false, true>(result, nullptr, max_depth, skip_count, uc,
|
109
|
+
min_dropped_frames);
|
110
|
+
}
|
111
|
+
|
112
|
+
void SetStackUnwinder(Unwinder w) {
|
113
|
+
custom.store(w, std::memory_order_release);
|
114
|
+
}
|
115
|
+
|
116
|
+
int DefaultStackUnwinder(void** pcs, int* sizes, int depth, int skip,
|
117
|
+
const void* uc, int* min_dropped_frames) {
|
118
|
+
skip++; // For this function
|
119
|
+
Unwinder f = nullptr;
|
120
|
+
if (sizes == nullptr) {
|
121
|
+
if (uc == nullptr) {
|
122
|
+
f = &UnwindImpl<false, false>;
|
123
|
+
} else {
|
124
|
+
f = &UnwindImpl<false, true>;
|
125
|
+
}
|
126
|
+
} else {
|
127
|
+
if (uc == nullptr) {
|
128
|
+
f = &UnwindImpl<true, false>;
|
129
|
+
} else {
|
130
|
+
f = &UnwindImpl<true, true>;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
volatile int x = 0;
|
134
|
+
int n = (*f)(pcs, sizes, depth, skip, uc, min_dropped_frames);
|
135
|
+
x = 1; (void) x; // To disable tail call to (*f)(...)
|
136
|
+
return n;
|
137
|
+
}
|
138
|
+
|
139
|
+
ABSL_NAMESPACE_END
|
140
|
+
} // namespace absl
|