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,71 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
// An async-signal-safe and thread-safe demangler for Itanium C++ ABI
|
16
|
+
// (aka G++ V3 ABI).
|
17
|
+
//
|
18
|
+
// The demangler is implemented to be used in async signal handlers to
|
19
|
+
// symbolize stack traces. We cannot use libstdc++'s
|
20
|
+
// abi::__cxa_demangle() in such signal handlers since it's not async
|
21
|
+
// signal safe (it uses malloc() internally).
|
22
|
+
//
|
23
|
+
// Note that this demangler doesn't support full demangling. More
|
24
|
+
// specifically, it doesn't print types of function parameters and
|
25
|
+
// types of template arguments. It just skips them. However, it's
|
26
|
+
// still very useful to extract basic information such as class,
|
27
|
+
// function, constructor, destructor, and operator names.
|
28
|
+
//
|
29
|
+
// See the implementation note in demangle.cc if you are interested.
|
30
|
+
//
|
31
|
+
// Example:
|
32
|
+
//
|
33
|
+
// | Mangled Name | The Demangler | abi::__cxa_demangle()
|
34
|
+
// |---------------|---------------|-----------------------
|
35
|
+
// | _Z1fv | f() | f()
|
36
|
+
// | _Z1fi | f() | f(int)
|
37
|
+
// | _Z3foo3bar | foo() | foo(bar)
|
38
|
+
// | _Z1fIiEvi | f<>() | void f<int>(int)
|
39
|
+
// | _ZN1N1fE | N::f | N::f
|
40
|
+
// | _ZN3Foo3BarEv | Foo::Bar() | Foo::Bar()
|
41
|
+
// | _Zrm1XS_" | operator%() | operator%(X, X)
|
42
|
+
// | _ZN3FooC1Ev | Foo::Foo() | Foo::Foo()
|
43
|
+
// | _Z1fSs | f() | f(std::basic_string<char,
|
44
|
+
// | | | std::char_traits<char>,
|
45
|
+
// | | | std::allocator<char> >)
|
46
|
+
//
|
47
|
+
// See the unit test for more examples.
|
48
|
+
//
|
49
|
+
// Note: we might want to write demanglers for ABIs other than Itanium
|
50
|
+
// C++ ABI in the future.
|
51
|
+
//
|
52
|
+
|
53
|
+
#ifndef ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
|
54
|
+
#define ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
|
55
|
+
|
56
|
+
#include "absl/base/config.h"
|
57
|
+
|
58
|
+
namespace absl {
|
59
|
+
ABSL_NAMESPACE_BEGIN
|
60
|
+
namespace debugging_internal {
|
61
|
+
|
62
|
+
// Demangle `mangled`. On success, return true and write the
|
63
|
+
// demangled symbol name to `out`. Otherwise, return false.
|
64
|
+
// `out` is modified even if demangling is unsuccessful.
|
65
|
+
bool Demangle(const char *mangled, char *out, int out_size);
|
66
|
+
|
67
|
+
} // namespace debugging_internal
|
68
|
+
ABSL_NAMESPACE_END
|
69
|
+
} // namespace absl
|
70
|
+
|
71
|
+
#endif // ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
|
@@ -0,0 +1,382 @@
|
|
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 an in-memory Elf image.
|
16
|
+
//
|
17
|
+
|
18
|
+
#include "absl/debugging/internal/elf_mem_image.h"
|
19
|
+
|
20
|
+
#ifdef ABSL_HAVE_ELF_MEM_IMAGE // defined in elf_mem_image.h
|
21
|
+
|
22
|
+
#include <string.h>
|
23
|
+
#include <cassert>
|
24
|
+
#include <cstddef>
|
25
|
+
#include "absl/base/internal/raw_logging.h"
|
26
|
+
|
27
|
+
// From binutils/include/elf/common.h (this doesn't appear to be documented
|
28
|
+
// anywhere else).
|
29
|
+
//
|
30
|
+
// /* This flag appears in a Versym structure. It means that the symbol
|
31
|
+
// is hidden, and is only visible with an explicit version number.
|
32
|
+
// This is a GNU extension. */
|
33
|
+
// #define VERSYM_HIDDEN 0x8000
|
34
|
+
//
|
35
|
+
// /* This is the mask for the rest of the Versym information. */
|
36
|
+
// #define VERSYM_VERSION 0x7fff
|
37
|
+
|
38
|
+
#define VERSYM_VERSION 0x7fff
|
39
|
+
|
40
|
+
namespace absl {
|
41
|
+
ABSL_NAMESPACE_BEGIN
|
42
|
+
namespace debugging_internal {
|
43
|
+
|
44
|
+
namespace {
|
45
|
+
|
46
|
+
#if __WORDSIZE == 32
|
47
|
+
const int kElfClass = ELFCLASS32;
|
48
|
+
int ElfBind(const ElfW(Sym) *symbol) { return ELF32_ST_BIND(symbol->st_info); }
|
49
|
+
int ElfType(const ElfW(Sym) *symbol) { return ELF32_ST_TYPE(symbol->st_info); }
|
50
|
+
#elif __WORDSIZE == 64
|
51
|
+
const int kElfClass = ELFCLASS64;
|
52
|
+
int ElfBind(const ElfW(Sym) *symbol) { return ELF64_ST_BIND(symbol->st_info); }
|
53
|
+
int ElfType(const ElfW(Sym) *symbol) { return ELF64_ST_TYPE(symbol->st_info); }
|
54
|
+
#else
|
55
|
+
const int kElfClass = -1;
|
56
|
+
int ElfBind(const ElfW(Sym) *) {
|
57
|
+
ABSL_RAW_LOG(FATAL, "Unexpected word size");
|
58
|
+
return 0;
|
59
|
+
}
|
60
|
+
int ElfType(const ElfW(Sym) *) {
|
61
|
+
ABSL_RAW_LOG(FATAL, "Unexpected word size");
|
62
|
+
return 0;
|
63
|
+
}
|
64
|
+
#endif
|
65
|
+
|
66
|
+
// Extract an element from one of the ELF tables, cast it to desired type.
|
67
|
+
// This is just a simple arithmetic and a glorified cast.
|
68
|
+
// Callers are responsible for bounds checking.
|
69
|
+
template <typename T>
|
70
|
+
const T *GetTableElement(const ElfW(Ehdr) * ehdr, ElfW(Off) table_offset,
|
71
|
+
ElfW(Word) element_size, size_t index) {
|
72
|
+
return reinterpret_cast<const T*>(reinterpret_cast<const char *>(ehdr)
|
73
|
+
+ table_offset
|
74
|
+
+ index * element_size);
|
75
|
+
}
|
76
|
+
|
77
|
+
} // namespace
|
78
|
+
|
79
|
+
// The value of this variable doesn't matter; it's used only for its
|
80
|
+
// unique address.
|
81
|
+
const int ElfMemImage::kInvalidBaseSentinel = 0;
|
82
|
+
|
83
|
+
ElfMemImage::ElfMemImage(const void *base) {
|
84
|
+
ABSL_RAW_CHECK(base != kInvalidBase, "bad pointer");
|
85
|
+
Init(base);
|
86
|
+
}
|
87
|
+
|
88
|
+
int ElfMemImage::GetNumSymbols() const {
|
89
|
+
if (!hash_) {
|
90
|
+
return 0;
|
91
|
+
}
|
92
|
+
// See http://www.caldera.com/developers/gabi/latest/ch5.dynamic.html#hash
|
93
|
+
return hash_[1];
|
94
|
+
}
|
95
|
+
|
96
|
+
const ElfW(Sym) *ElfMemImage::GetDynsym(int index) const {
|
97
|
+
ABSL_RAW_CHECK(index < GetNumSymbols(), "index out of range");
|
98
|
+
return dynsym_ + index;
|
99
|
+
}
|
100
|
+
|
101
|
+
const ElfW(Versym) *ElfMemImage::GetVersym(int index) const {
|
102
|
+
ABSL_RAW_CHECK(index < GetNumSymbols(), "index out of range");
|
103
|
+
return versym_ + index;
|
104
|
+
}
|
105
|
+
|
106
|
+
const ElfW(Phdr) *ElfMemImage::GetPhdr(int index) const {
|
107
|
+
ABSL_RAW_CHECK(index < ehdr_->e_phnum, "index out of range");
|
108
|
+
return GetTableElement<ElfW(Phdr)>(ehdr_,
|
109
|
+
ehdr_->e_phoff,
|
110
|
+
ehdr_->e_phentsize,
|
111
|
+
index);
|
112
|
+
}
|
113
|
+
|
114
|
+
const char *ElfMemImage::GetDynstr(ElfW(Word) offset) const {
|
115
|
+
ABSL_RAW_CHECK(offset < strsize_, "offset out of range");
|
116
|
+
return dynstr_ + offset;
|
117
|
+
}
|
118
|
+
|
119
|
+
const void *ElfMemImage::GetSymAddr(const ElfW(Sym) *sym) const {
|
120
|
+
if (sym->st_shndx == SHN_UNDEF || sym->st_shndx >= SHN_LORESERVE) {
|
121
|
+
// Symbol corresponds to "special" (e.g. SHN_ABS) section.
|
122
|
+
return reinterpret_cast<const void *>(sym->st_value);
|
123
|
+
}
|
124
|
+
ABSL_RAW_CHECK(link_base_ < sym->st_value, "symbol out of range");
|
125
|
+
return GetTableElement<char>(ehdr_, 0, 1, sym->st_value - link_base_);
|
126
|
+
}
|
127
|
+
|
128
|
+
const ElfW(Verdef) *ElfMemImage::GetVerdef(int index) const {
|
129
|
+
ABSL_RAW_CHECK(0 <= index && static_cast<size_t>(index) <= verdefnum_,
|
130
|
+
"index out of range");
|
131
|
+
const ElfW(Verdef) *version_definition = verdef_;
|
132
|
+
while (version_definition->vd_ndx < index && version_definition->vd_next) {
|
133
|
+
const char *const version_definition_as_char =
|
134
|
+
reinterpret_cast<const char *>(version_definition);
|
135
|
+
version_definition =
|
136
|
+
reinterpret_cast<const ElfW(Verdef) *>(version_definition_as_char +
|
137
|
+
version_definition->vd_next);
|
138
|
+
}
|
139
|
+
return version_definition->vd_ndx == index ? version_definition : nullptr;
|
140
|
+
}
|
141
|
+
|
142
|
+
const ElfW(Verdaux) *ElfMemImage::GetVerdefAux(
|
143
|
+
const ElfW(Verdef) *verdef) const {
|
144
|
+
return reinterpret_cast<const ElfW(Verdaux) *>(verdef+1);
|
145
|
+
}
|
146
|
+
|
147
|
+
const char *ElfMemImage::GetVerstr(ElfW(Word) offset) const {
|
148
|
+
ABSL_RAW_CHECK(offset < strsize_, "offset out of range");
|
149
|
+
return dynstr_ + offset;
|
150
|
+
}
|
151
|
+
|
152
|
+
void ElfMemImage::Init(const void *base) {
|
153
|
+
ehdr_ = nullptr;
|
154
|
+
dynsym_ = nullptr;
|
155
|
+
dynstr_ = nullptr;
|
156
|
+
versym_ = nullptr;
|
157
|
+
verdef_ = nullptr;
|
158
|
+
hash_ = nullptr;
|
159
|
+
strsize_ = 0;
|
160
|
+
verdefnum_ = 0;
|
161
|
+
link_base_ = ~0L; // Sentinel: PT_LOAD .p_vaddr can't possibly be this.
|
162
|
+
if (!base) {
|
163
|
+
return;
|
164
|
+
}
|
165
|
+
const char *const base_as_char = reinterpret_cast<const char *>(base);
|
166
|
+
if (base_as_char[EI_MAG0] != ELFMAG0 || base_as_char[EI_MAG1] != ELFMAG1 ||
|
167
|
+
base_as_char[EI_MAG2] != ELFMAG2 || base_as_char[EI_MAG3] != ELFMAG3) {
|
168
|
+
assert(false);
|
169
|
+
return;
|
170
|
+
}
|
171
|
+
int elf_class = base_as_char[EI_CLASS];
|
172
|
+
if (elf_class != kElfClass) {
|
173
|
+
assert(false);
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
switch (base_as_char[EI_DATA]) {
|
177
|
+
case ELFDATA2LSB: {
|
178
|
+
if (__LITTLE_ENDIAN != __BYTE_ORDER) {
|
179
|
+
assert(false);
|
180
|
+
return;
|
181
|
+
}
|
182
|
+
break;
|
183
|
+
}
|
184
|
+
case ELFDATA2MSB: {
|
185
|
+
if (__BIG_ENDIAN != __BYTE_ORDER) {
|
186
|
+
assert(false);
|
187
|
+
return;
|
188
|
+
}
|
189
|
+
break;
|
190
|
+
}
|
191
|
+
default: {
|
192
|
+
assert(false);
|
193
|
+
return;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
ehdr_ = reinterpret_cast<const ElfW(Ehdr) *>(base);
|
198
|
+
const ElfW(Phdr) *dynamic_program_header = nullptr;
|
199
|
+
for (int i = 0; i < ehdr_->e_phnum; ++i) {
|
200
|
+
const ElfW(Phdr) *const program_header = GetPhdr(i);
|
201
|
+
switch (program_header->p_type) {
|
202
|
+
case PT_LOAD:
|
203
|
+
if (!~link_base_) {
|
204
|
+
link_base_ = program_header->p_vaddr;
|
205
|
+
}
|
206
|
+
break;
|
207
|
+
case PT_DYNAMIC:
|
208
|
+
dynamic_program_header = program_header;
|
209
|
+
break;
|
210
|
+
}
|
211
|
+
}
|
212
|
+
if (!~link_base_ || !dynamic_program_header) {
|
213
|
+
assert(false);
|
214
|
+
// Mark this image as not present. Can not recur infinitely.
|
215
|
+
Init(nullptr);
|
216
|
+
return;
|
217
|
+
}
|
218
|
+
ptrdiff_t relocation =
|
219
|
+
base_as_char - reinterpret_cast<const char *>(link_base_);
|
220
|
+
ElfW(Dyn) *dynamic_entry =
|
221
|
+
reinterpret_cast<ElfW(Dyn) *>(dynamic_program_header->p_vaddr +
|
222
|
+
relocation);
|
223
|
+
for (; dynamic_entry->d_tag != DT_NULL; ++dynamic_entry) {
|
224
|
+
const ElfW(Xword) value = dynamic_entry->d_un.d_val + relocation;
|
225
|
+
switch (dynamic_entry->d_tag) {
|
226
|
+
case DT_HASH:
|
227
|
+
hash_ = reinterpret_cast<ElfW(Word) *>(value);
|
228
|
+
break;
|
229
|
+
case DT_SYMTAB:
|
230
|
+
dynsym_ = reinterpret_cast<ElfW(Sym) *>(value);
|
231
|
+
break;
|
232
|
+
case DT_STRTAB:
|
233
|
+
dynstr_ = reinterpret_cast<const char *>(value);
|
234
|
+
break;
|
235
|
+
case DT_VERSYM:
|
236
|
+
versym_ = reinterpret_cast<ElfW(Versym) *>(value);
|
237
|
+
break;
|
238
|
+
case DT_VERDEF:
|
239
|
+
verdef_ = reinterpret_cast<ElfW(Verdef) *>(value);
|
240
|
+
break;
|
241
|
+
case DT_VERDEFNUM:
|
242
|
+
verdefnum_ = dynamic_entry->d_un.d_val;
|
243
|
+
break;
|
244
|
+
case DT_STRSZ:
|
245
|
+
strsize_ = dynamic_entry->d_un.d_val;
|
246
|
+
break;
|
247
|
+
default:
|
248
|
+
// Unrecognized entries explicitly ignored.
|
249
|
+
break;
|
250
|
+
}
|
251
|
+
}
|
252
|
+
if (!hash_ || !dynsym_ || !dynstr_ || !versym_ ||
|
253
|
+
!verdef_ || !verdefnum_ || !strsize_) {
|
254
|
+
assert(false); // invalid VDSO
|
255
|
+
// Mark this image as not present. Can not recur infinitely.
|
256
|
+
Init(nullptr);
|
257
|
+
return;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
|
261
|
+
bool ElfMemImage::LookupSymbol(const char *name,
|
262
|
+
const char *version,
|
263
|
+
int type,
|
264
|
+
SymbolInfo *info_out) const {
|
265
|
+
for (const SymbolInfo& info : *this) {
|
266
|
+
if (strcmp(info.name, name) == 0 && strcmp(info.version, version) == 0 &&
|
267
|
+
ElfType(info.symbol) == type) {
|
268
|
+
if (info_out) {
|
269
|
+
*info_out = info;
|
270
|
+
}
|
271
|
+
return true;
|
272
|
+
}
|
273
|
+
}
|
274
|
+
return false;
|
275
|
+
}
|
276
|
+
|
277
|
+
bool ElfMemImage::LookupSymbolByAddress(const void *address,
|
278
|
+
SymbolInfo *info_out) const {
|
279
|
+
for (const SymbolInfo& info : *this) {
|
280
|
+
const char *const symbol_start =
|
281
|
+
reinterpret_cast<const char *>(info.address);
|
282
|
+
const char *const symbol_end = symbol_start + info.symbol->st_size;
|
283
|
+
if (symbol_start <= address && address < symbol_end) {
|
284
|
+
if (info_out) {
|
285
|
+
// Client wants to know details for that symbol (the usual case).
|
286
|
+
if (ElfBind(info.symbol) == STB_GLOBAL) {
|
287
|
+
// Strong symbol; just return it.
|
288
|
+
*info_out = info;
|
289
|
+
return true;
|
290
|
+
} else {
|
291
|
+
// Weak or local. Record it, but keep looking for a strong one.
|
292
|
+
*info_out = info;
|
293
|
+
}
|
294
|
+
} else {
|
295
|
+
// Client only cares if there is an overlapping symbol.
|
296
|
+
return true;
|
297
|
+
}
|
298
|
+
}
|
299
|
+
}
|
300
|
+
return false;
|
301
|
+
}
|
302
|
+
|
303
|
+
ElfMemImage::SymbolIterator::SymbolIterator(const void *const image, int index)
|
304
|
+
: index_(index), image_(image) {
|
305
|
+
}
|
306
|
+
|
307
|
+
const ElfMemImage::SymbolInfo *ElfMemImage::SymbolIterator::operator->() const {
|
308
|
+
return &info_;
|
309
|
+
}
|
310
|
+
|
311
|
+
const ElfMemImage::SymbolInfo& ElfMemImage::SymbolIterator::operator*() const {
|
312
|
+
return info_;
|
313
|
+
}
|
314
|
+
|
315
|
+
bool ElfMemImage::SymbolIterator::operator==(const SymbolIterator &rhs) const {
|
316
|
+
return this->image_ == rhs.image_ && this->index_ == rhs.index_;
|
317
|
+
}
|
318
|
+
|
319
|
+
bool ElfMemImage::SymbolIterator::operator!=(const SymbolIterator &rhs) const {
|
320
|
+
return !(*this == rhs);
|
321
|
+
}
|
322
|
+
|
323
|
+
ElfMemImage::SymbolIterator &ElfMemImage::SymbolIterator::operator++() {
|
324
|
+
this->Update(1);
|
325
|
+
return *this;
|
326
|
+
}
|
327
|
+
|
328
|
+
ElfMemImage::SymbolIterator ElfMemImage::begin() const {
|
329
|
+
SymbolIterator it(this, 0);
|
330
|
+
it.Update(0);
|
331
|
+
return it;
|
332
|
+
}
|
333
|
+
|
334
|
+
ElfMemImage::SymbolIterator ElfMemImage::end() const {
|
335
|
+
return SymbolIterator(this, GetNumSymbols());
|
336
|
+
}
|
337
|
+
|
338
|
+
void ElfMemImage::SymbolIterator::Update(int increment) {
|
339
|
+
const ElfMemImage *image = reinterpret_cast<const ElfMemImage *>(image_);
|
340
|
+
ABSL_RAW_CHECK(image->IsPresent() || increment == 0, "");
|
341
|
+
if (!image->IsPresent()) {
|
342
|
+
return;
|
343
|
+
}
|
344
|
+
index_ += increment;
|
345
|
+
if (index_ >= image->GetNumSymbols()) {
|
346
|
+
index_ = image->GetNumSymbols();
|
347
|
+
return;
|
348
|
+
}
|
349
|
+
const ElfW(Sym) *symbol = image->GetDynsym(index_);
|
350
|
+
const ElfW(Versym) *version_symbol = image->GetVersym(index_);
|
351
|
+
ABSL_RAW_CHECK(symbol && version_symbol, "");
|
352
|
+
const char *const symbol_name = image->GetDynstr(symbol->st_name);
|
353
|
+
const ElfW(Versym) version_index = version_symbol[0] & VERSYM_VERSION;
|
354
|
+
const ElfW(Verdef) *version_definition = nullptr;
|
355
|
+
const char *version_name = "";
|
356
|
+
if (symbol->st_shndx == SHN_UNDEF) {
|
357
|
+
// Undefined symbols reference DT_VERNEED, not DT_VERDEF, and
|
358
|
+
// version_index could well be greater than verdefnum_, so calling
|
359
|
+
// GetVerdef(version_index) may trigger assertion.
|
360
|
+
} else {
|
361
|
+
version_definition = image->GetVerdef(version_index);
|
362
|
+
}
|
363
|
+
if (version_definition) {
|
364
|
+
// I am expecting 1 or 2 auxiliary entries: 1 for the version itself,
|
365
|
+
// optional 2nd if the version has a parent.
|
366
|
+
ABSL_RAW_CHECK(
|
367
|
+
version_definition->vd_cnt == 1 || version_definition->vd_cnt == 2,
|
368
|
+
"wrong number of entries");
|
369
|
+
const ElfW(Verdaux) *version_aux = image->GetVerdefAux(version_definition);
|
370
|
+
version_name = image->GetVerstr(version_aux->vda_name);
|
371
|
+
}
|
372
|
+
info_.name = symbol_name;
|
373
|
+
info_.version = version_name;
|
374
|
+
info_.address = image->GetSymAddr(symbol);
|
375
|
+
info_.symbol = symbol;
|
376
|
+
}
|
377
|
+
|
378
|
+
} // namespace debugging_internal
|
379
|
+
ABSL_NAMESPACE_END
|
380
|
+
} // namespace absl
|
381
|
+
|
382
|
+
#endif // ABSL_HAVE_ELF_MEM_IMAGE
|