blob: e729fcfbee83a55b4ad7c85e79be5b214f6297f9 [file] [log] [blame]
// Copyright 2020 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "link_map.h"
#include <fstream>
#include <tuple>
#include "bloaty.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
TEST(TransformCompileUnitForFuchsiaTest, RustLibraryCrate1) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: alloc]");
ASSERT_EQ(*std::get<1>(*result), "alloc");
}
TEST(TransformCompileUnitForFuchsiaTest, RustLibraryCrate2) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o.rcgu."
"o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: component_manager_lib]");
ASSERT_EQ(*std::get<1>(*result), "component_manager_lib");
}
TEST(TransformCompileUnitForFuchsiaTest, RustLibraryCrate3) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"./exe.unstripped/"
"component_manager.libcm_fidl_translator.cm_fidl_translator.3a1fbbbh-cgu.0.rcgu.o.rcgu.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: cm_fidl_translator]");
ASSERT_EQ(*std::get<1>(*result), "cm_fidl_translator");
}
TEST(TransformCompileUnitForFuchsiaTest, RustLibraryCrate4) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"./exe.unstripped/"
"component_manager.libfidl_fuchsia_io.fidl_fuchsia_io.3a1fbbbh-cgu.0.rcgu.o.rcgu.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: fidl_fuchsia_io]");
ASSERT_EQ(*std::get<1>(*result), "fidl_fuchsia_io");
}
TEST(TransformCompileUnitForFuchsiaTest, RustBinaryCrate) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.0.rcgu.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: component_manager]");
ASSERT_EQ(*std::get<1>(*result), "component_manager");
}
TEST(TransformCompileUnitForFuchsiaTest, RustRLibCrate) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"/usr/local/google/home/yifeit/vg/out/default/obj/third_party/rust_crates/"
"libregex_syntax-579ced0738b0164d.rlib(libregex_syntax-579ced0738b0164d-579ced0738b0164d."
"regex_syntax.c02sfxfu-cgu.13.rcgu.o)");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "[crate: regex_syntax]");
ASSERT_EQ(*std::get<1>(*result), "regex_syntax");
}
TEST(TransformCompileUnitForFuchsiaTest, ZirconLib) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"/usr/local/google/home/yifeit/vg/out/default.zircon/user-arm64-clang.shlib/obj/system/ulib/"
"c/crt1.Scrt1.cc.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "../../zircon/system/ulib/c/Scrt1.cc");
ASSERT_EQ(std::get<1>(*result), std::nullopt);
}
TEST(TransformCompileUnitForFuchsiaTest, Fidling1) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.hardware.block/"
"fuchsia.hardware.block_tables.fuchsia.hardware.block.fidl.tables.c.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result),
"fidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia.hardware.block.fidl.tables.c");
ASSERT_EQ(std::get<1>(*result), std::nullopt);
}
TEST(TransformCompileUnitForFuchsiaTest, Fidling2) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia/hardware/block/c/"
"fuchsia.hardware.block_c_client.fidl.client.c.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result),
"fidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia/hardware/block/c/fidl.client.c");
ASSERT_EQ(std::get<1>(*result), std::nullopt);
}
TEST(TransformCompileUnitForFuchsiaTest, Fidling3) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.security.resource/fuchsia/security/resource/"
"llcpp/fuchsia.security.resource_llcpp.fidl.cc.o");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(
std::get<0>(*result),
"fidling/gen/sdk/fidl/fuchsia.security.resource/fuchsia/security/resource/llcpp/fidl.cc");
ASSERT_EQ(std::get<1>(*result), std::nullopt);
}
TEST(TransformCompileUnitForFuchsiaTest, ZirconFidlLib) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia(
"obj/zircon/public/lib/fidl_base/libfidl_base.a(libfidl_base.decoding.cc.o)");
ASSERT_TRUE(result.has_value());
ASSERT_EQ(std::get<0>(*result), "../../zircon/system/ulib/fidl/decoding.cc");
ASSERT_EQ(std::get<1>(*result), std::nullopt);
}
TEST(TransformCompileUnitForFuchsiaTest, PassthroughUnknown) {
auto result = bloaty_link_map::TransformCompileUnitForFuchsia("foobar");
ASSERT_FALSE(result.has_value());
}
std::string LoadLinkMapFile(const std::string& name) {
std::ifstream infile(name);
std::string link_map;
// Strip comments and empty lines.
for (std::string line; getline(infile, line);) {
if (line.empty()) continue;
if (line[0] == '#') continue;
link_map += line;
link_map += '\n';
}
absl::StripLeadingAsciiWhitespace(&link_map);
absl::StripTrailingAsciiWhitespace(&link_map);
return link_map;
}
TEST(LinkMapTest, Empty) {
const std::string link_map = " VMA LMA Size Align Out In Symbol\n";
auto symbols = bloaty_link_map::ParseLldLinkMap(link_map);
ASSERT_EQ(symbols.size(), 0);
}
TEST(LinkMapTest, ExampleCpp) {
std::string link_map = LoadLinkMapFile("example_cpp.map");
absl::StripLeadingAsciiWhitespace(&link_map);
absl::StripTrailingAsciiWhitespace(&link_map);
auto symbols = bloaty_link_map::ParseLldLinkMap(link_map);
struct Golden {
uint64_t addr;
uint64_t size;
std::string name;
std::string compile_unit;
std::string section;
};
std::vector<Golden> goldens = {
{0x4380, 0x14, "main", "obj/zircon/system/uapp/blobfs/blobfs.main.cc.o", ".rodata"},
{0x4394, 0x8a18, "** lld merge strings", "", ".rodata"},
{0xcdb0, 0xa8, "** lld merge strings", "", ".rodata"},
{0xce58, 0xc, "HandlefifonullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.hardware.block/"
"fuchsia.hardware.block_tables.fuchsia.hardware.block.fidl.tables.c.o",
".rodata"},
{0xce64, 0xc, "HandlevmononnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.hardware.block/"
"fuchsia.hardware.block_tables.fuchsia.hardware.block.fidl.tables.c.o",
".rodata"},
{0xce70, 0xc, "HandleresourcenonnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.security.resource/"
"fuchsia.security.resource_tables.fuchsia.security.resource.fidl.tables.c.o",
".rodata"},
{0xce7c, 0xa, "_ZN5llcpp7fuchsia2io8NodeInfo9reset_ptrEON4fidl12tracking_ptrIvEE",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/"
"fuchsia.io_llcpp.fidl.cc.o",
".rodata"},
{0xce86, 0x2b, "fidl::kErrorWriteFailed",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/"
"fuchsia.io_llcpp.fidl.cc.o",
".rodata"},
{0xceb4, 0xc, "Request15fuchsia_io_NodenonnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.io/"
"fuchsia.io_tables.fuchsia.io.fidl.tables.c.o",
".rodata"},
{0xcec0, 0x8, "String4096nonnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.io/"
"fuchsia.io_tables.fuchsia.io.fidl.tables.c.o",
".rodata"},
{0xd030, 0x100, "** lld merge strings", "", ".rodata"},
{0xd130, 0xc, "HandleeventnonnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.fs/"
"fuchsia.fs_tables.fuchsia.fs.fidl.tables.c.o",
".rodata"},
{0xd13c, 0x8, "String32nonnullableTable",
"obj/out/default/fidling/gen/sdk/fidl/fuchsia.fs/"
"fuchsia.fs_tables.fuchsia.fs.fidl.tables.c.o",
".rodata"},
{0xfb38, 0x9c, "LZ4HC_compress_generic_internal.clTable",
"obj/zircon/public/lib/lz4/liblz4.a(liblz4.lz4hc.c.o)", ".rodata"},
{0xfbd4, 0x10, "XXH32_finalize", "obj/zircon/public/lib/lz4/liblz4.a(liblz4.xxhash.c.o)",
".rodata"},
{0xfbe4, 0x27, "kServicePath",
"obj/zircon/system/ulib/trace-provider/"
"libtrace-provider-with-fdio.a(libtrace-provider-with-fdio.fdio_connect.cc.o)",
".rodata"},
{0x21000, 0x14, "_start",
"/usr/local/google/home/yifeit/vg/out/default.zircon/user-arm64-clang.shlib/obj/system/ulib/"
"c/crt1.Scrt1.cc.o",
".text"},
{0x21014, 0x494, "main", "obj/zircon/system/uapp/blobfs/blobfs.main.cc.o", ".text"},
{0x3a04c, 0x8, "non-virtual thunk to blobfs::TransactionManager::~TransactionManager()",
"obj/zircon/system/ulib/blobfs/libblobfs.a(libblobfs.blobfs.cc.o)", ".text"},
{0x108120, 0xdc, "trace::internal::Session::~Session()",
"obj/zircon/system/ulib/trace-provider/"
"libtrace-provider-with-fdio.a(libtrace-provider-with-fdio.session.cc.o)",
".text"},
};
// for (const auto& sym : symbols) {
// std::cout << std::hex << "{0x" << sym.addr << ", 0x" << sym.size << ", \"" << sym.name
// << "\", \"" << sym.compile_unit << "\", \"" << sym.section << "\"}," << std::endl;
// }
ASSERT_EQ(symbols.size(), goldens.size());
for (size_t i = 0; i < symbols.size(); i++) {
ASSERT_EQ(symbols[i].addr, goldens[i].addr);
ASSERT_EQ(symbols[i].size, goldens[i].size);
ASSERT_EQ(symbols[i].name, goldens[i].name);
ASSERT_EQ(symbols[i].compile_unit, goldens[i].compile_unit);
ASSERT_EQ(symbols[i].section, goldens[i].section);
}
}
TEST(LinkMapTest, ExampleRust) {
std::string link_map = LoadLinkMapFile("example_rust.map");
absl::StripLeadingAsciiWhitespace(&link_map);
absl::StripTrailingAsciiWhitespace(&link_map);
auto symbols = bloaty_link_map::ParseLldLinkMap(link_map);
struct Golden {
uint64_t addr;
uint64_t size;
std::string name;
std::string compile_unit;
std::string section;
};
std::vector<Golden> goldens = {
{0x2800, 0x27, ".Lanon.745d157954bc19b57d1f47812cead630.3",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2828, 0x0, ".Lanon.745d157954bc19b57d1f47812cead630.5",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2828, 0x33, ".Lanon.745d157954bc19b57d1f47812cead630.13",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2885, 0x11, "anon.745d157954bc19b57d1f47812cead630",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2896, 0x3, ".Lanon.745d157954bc19b57d1f47812cead630.23",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2899, 0x16, ".Lanon.745d157954bc19b57d1f47812cead630.26",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x292a, 0xd, "anon.745d157954bc19b57d1f47812cead630",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2937, 0x5, "anon.745d157954bc19b57d1f47812cead630",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x293c, 0x5, "anon.745d157954bc19b57d1f47812cead630",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x2950, 0xa90, "** lld merge strings", "", ".rodata"},
{0x33e0, 0x29, ".Lanon.256afffd819e3254289014381fd650e5.2",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x346d, 0x0, ".Lanon.256afffd819e3254289014381fd650e5.14",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x3470, 0x38, ".Lanon.256afffd819e3254289014381fd650e5.16",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x34a8, 0x1b08, "** lld merge strings", "", ".rodata"},
{0x4fb0, 0x3, ".Lanon.256afffd819e3254289014381fd650e5.18",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x5070, 0x2780, "** lld merge strings", "", ".rodata"},
{0x77f0, 0x6, ".Lanon.256afffd819e3254289014381fd650e5.26",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x77f8, 0x118, ".Lanon.256afffd819e3254289014381fd650e5.28",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x7910, 0xc, "anon.256afffd819e3254289014381fd650e5",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x791c, 0x6, "anon.256afffd819e3254289014381fd650e5",
"./exe.unstripped/"
"component_manager.backtrace-5619ad41e613872b.backtrace.e1f4vorm-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x7922, 0x10,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeNtCsbDqzXfLQacH_15fidl_fuchsia_"
"io11FileRequestECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.0.rcgu.o", ".rodata"},
{0x7950, 0xb1,
"_RNvXsc_NtCsbDqzXfLQacH_17fuchsia_component6serverINtB5_9ServiceFsINtNtB5_"
"7service10ServiceObjuEENtNtCseXumDWplyBO_12futures_core6stream6Stream9poll_"
"nextCs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.0.rcgu.o", ".rodata"},
{0x7a08, 0x380, "** lld merge strings", "", ".rodata"},
{0x7d88, 0x2b, ".Lanon.dda71605b8fec89c031783be146b7025.1",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.0.rcgu.o", ".rodata"},
{0x8cf1, 0x4e, ".Lanon.8db4583f006f833985ea18d2ab89bab7.1",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.7.rcgu.o", ".rodata"},
{0x8d3f, 0x1f, "anon.8db4583f006f833985ea18d2ab89bab7",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.7.rcgu.o", ".rodata"},
{0x8d5e, 0x25, ".Lanon.a1c52c190a58d1713a23e7a7bdb0f9c0.2",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.8.rcgu.o", ".rodata"},
{0x8d83, 0x7,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeINtNvNtB4_6future14from_"
"generator9GenFutureNCNvMNtNtNtCsbDqzXfLQacH_21component_manager_"
"lib5model6events6sourceNtB1s_11EventSource3new0EECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.9.rcgu.o", ".rodata"},
{0x8d8a, 0x8,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeINtNvNtB4_6future14from_"
"generator9GenFutureNCNvMs2_NtNtCsbDqzXfLQacH_21component_manager_lib5model5realmNtB1v_"
"5Realm19lock_resolved_state0EECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.9.rcgu.o", ".rodata"},
{0x8d92, 0x16,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeINtNvNtB4_6future14from_"
"generator9GenFutureNCNvMs_NtCsbDqzXfLQacH_21component_manager_lib19builtin_"
"environmentNtB1u_18BuiltinEnvironment3new0EECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.9.rcgu.o", ".rodata"},
{0x8da8, 0x4,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeNtCsbDqzXfLQacH_7cm_"
"rust10ExposeDeclECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.9.rcgu.o", ".rodata"},
{0x8dac, 0x6,
"_RINvNtCs6QHBvYLDz7W_4core3ptr13drop_in_placeNtCsbDqzXfLQacH_7cm_"
"rust7UseDeclECs4fqI2P2rA04_17component_manager",
"./exe.unstripped/component_manager.component_manager.7rcbfp3g-cgu.9.rcgu.o", ".rodata"},
{0x91e3, 0x4, "_ZN4core3fmt9Formatter3pad17h9c055cdb18c92cc1E",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x91e7, 0x4, "_ZN4core3fmt9Formatter19pad_formatted_parts17heb4f002989281314E",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x9214, 0x29, "_ZN41_$LT$char$u20$as$u20$core..fmt..Debug$GT$3fmt17hb14158a7386f6b1aE",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x925c, 0x6f,
"_ZN61_$LT$core..str..EscapeDebug$u20$as$u20$core..fmt..Display$GT$3fmt17hf1238c3db5de3de5E",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x92d0, 0x0, "anon.6741f024a682c8cb8e59ecab4fc7e9ed.12.llvm.9325873315546439775",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x92d0, 0x1, ".Lanon.6741f024a682c8cb8e59ecab4fc7e9ed.14",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x92d1, 0x1d, ".Lanon.6741f024a682c8cb8e59ecab4fc7e9ed.27",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x9344, 0x28, "core::num::flt2dec::strategy::dragon::POW10::he881f1848ad745b6",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x936c, 0x28, "core::num::flt2dec::strategy::dragon::TWOPOW10::h8ee033ba72605fde",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x9394, 0x8, "core::num::flt2dec::strategy::dragon::POW10TO16::hd008c9b35d67c443",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x939c, 0x10, "core::num::flt2dec::strategy::dragon::POW10TO32::h94bb3ddee75ca692",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0x93ac, 0x1c, "core::num::flt2dec::strategy::dragon::POW10TO64::h2607b29da45ca92b",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".rodata"},
{0xebf8, 0x28, ".Lanon.31de557278eced41e2a6dce0e33ed7ec.9",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o."
"rcgu.o",
".rodata"},
{0xec20, 0x72, ".Lanon.31de557278eced41e2a6dce0e33ed7ec.15",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o."
"rcgu.o",
".rodata"},
{0xec92, 0x2e, "anon.31de557278eced41e2a6dce0e33ed7ec",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o."
"rcgu.o",
".rodata"},
{0xecc0, 0x13, "anon.31de557278eced41e2a6dce0e33ed7ec",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o."
"rcgu.o",
".rodata"},
{0xecd3, 0x4a, ".Lanon.31de557278eced41e2a6dce0e33ed7ec.34",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.2.rcgu.o."
"rcgu.o",
".rodata"},
{0x2e20c, 0xc, ".Lanon.93519e6636017643a07f78e678f4f11e.3501",
"./exe.unstripped/"
"component_manager.libidna-5c3c4f537fb8313f-5c3c4f537fb8313f.idna.axcknxfw-cgu.15.rcgu.o."
"rcgu.o",
".rodata"},
{0x2e218, 0xc, ".Lanon.93519e6636017643a07f78e678f4f11e.3502",
"./exe.unstripped/"
"component_manager.libidna-5c3c4f537fb8313f-5c3c4f537fb8313f.idna.axcknxfw-cgu.15.rcgu.o."
"rcgu.o",
".rodata"},
{0x2e224, 0xc, ".Lanon.93519e6636017643a07f78e678f4f11e.3503",
"./exe.unstripped/"
"component_manager.libidna-5c3c4f537fb8313f-5c3c4f537fb8313f.idna.axcknxfw-cgu.15.rcgu.o."
"rcgu.o",
".rodata"},
{0x2f4ca, 0x1b, "anon.7cbed09a5c2e2961b1298b053de6d71a",
"./exe.unstripped/component_manager.libio_util.io_util.3a1fbbbh-cgu.3.rcgu.o.rcgu.o",
".rodata"},
{0x2f4e5, 0x28, ".Lanon.2dc76abe0f971e71acd588990ffc8513.0",
"./exe.unstripped/component_manager.libio_util.io_util.3a1fbbbh-cgu.8.rcgu.o.rcgu.o",
".rodata"},
{0x2f50d, 0x2b, ".Lanon.6f9bafb4adb671d7ac9f8408e86ff31a.0",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.1.rcgu.o.rcgu.o",
".rodata"},
{0x3aacc, 0x134,
"_ZN9libunwind17DwarfInstructionsINS_17LocalAddressSpaceENS_15Registers_"
"arm64EE18evaluateExpressionEmRS1_RKS2_m",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".rodata"},
{0x3ac00, 0x39,
"_ZN9libunwind10CFI_ParserINS_17LocalAddressSpaceEE8parseCIEERS1_mPNS2_8CIE_InfoE",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".rodata"},
{0x3ac39, 0xc, "_ZN9libunwind14EHHeaderParserINS_17LocalAddressSpaceEE17getTableEntrySizeEh",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".rodata"},
{0xb2640, 0x14, "_start",
"/usr/local/google/home/yifeit/vg/out/default.zircon/user-arm64-clang.shlib/obj/system/ulib/"
"c/crt1.Scrt1.cc.o",
".text"},
{0xb2654, 0x1c, "_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$::fmt::h12b31caec1d188c4",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xb2670, 0xb4, "_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$::fmt::h268a568299531efb",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xcd52c, 0x98,
"core::num::_$LT$impl$u20$core..str..FromStr$u20$for$u20$usize$GT$::from_str::"
"h4398f35a1c0b4be7",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xcd5c4, 0xe4,
"_$LT$core..num..TryFromIntError$u20$as$u20$core..fmt..Debug$GT$::fmt::h10047a113409f418",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xcd6a8, 0x34,
"core::fmt::float::_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$::fmt::"
"hac033855e28d5eb4",
"./exe.unstripped/component_manager.core-6a4b1e7af979d229.core.3ocx6h1n-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xe2554, 0x10, "OUTLINED_FUNCTION_359",
"./exe.unstripped/"
"component_manager.libcm_fidl_translator.cm_fidl_translator.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xe2564, 0x10, "OUTLINED_FUNCTION_360",
"./exe.unstripped/"
"component_manager.libcm_fidl_translator.cm_fidl_translator.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".text"},
{0xeb888, 0x40,
"_RINvNtNtCs6QHBvYLDz7W_4core4iter8adapters15process_resultsINtB2_3MapINtNtCsiEMmsMe2HZG_"
"5alloc3vec8IntoIterNtNtCsbDqzXfLQacH_7cm_json2cm8ResolverENCNvXs_CsbDqzXfLQacH_18cm_fidl_"
"translatorINtB17_3VecB1G_EINtB2q_6CmIntoIB2Z_NtCsbDqzXfLQacH_17fidl_fuchsia_"
"sys212ResolverDeclEE7cm_into0EB3x_NtB1K_5ErrorNCINvXsx_NtB6_6resultINtB4V_6ResultB3s_B4A_"
"EINtNtNtB4_6traits7collect12FromIteratorIB58_B3x_B4A_EE9from_iterBU_E0B3s_EB2q_",
"./exe.unstripped/"
"component_manager.libcm_fidl_translator.cm_fidl_translator.3a1fbbbh-cgu.4.rcgu.o.rcgu.o",
".text"},
{0x197340, 0x70,
"_RINvNtCsevZhND7KDbE_9hashbrown3raw16calculate_layoutTjINtNtCsiEMmsMe2HZG_"
"5alloc4sync3ArcDNtNtCsbDqzXfLQacH_13fuchsia_async8executor14PacketReceiverEL_EEEB1t_",
"./exe.unstripped/"
"component_manager.libfuchsia_async.fuchsia_async.3a1fbbbh-cgu.1.rcgu.o.rcgu.o",
".text"},
{0x200800, 0x38,
"std::sys_common::thread_info::THREAD_INFO::__getit::__KEY::h836843d10e59cada",
"./exe.unstripped/component_manager.std-7a72ffd2f3a7a812.std.a0uwjzoe-cgu.0.rcgu.o.rcgu.o",
".text"},
{0x200840, 0x18,
"std::panicking::update_panic_count::PANIC_COUNT::__getit::__KEY::h69785e8fa31a63e6",
"./exe.unstripped/component_manager.std-7a72ffd2f3a7a812.std.a0uwjzoe-cgu.0.rcgu.o.rcgu.o",
".text"},
{0x1ff610, 0x30, ".Lanon.745d157954bc19b57d1f47812cead630.1",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x1ff640, 0x20, ".Lanon.745d157954bc19b57d1f47812cead630.2",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x1ff660, 0x18, ".Lanon.745d157954bc19b57d1f47812cead630.4",
"./exe.unstripped/"
"component_manager.alloc-54127f36ba192482.alloc.4k1iwrm2-cgu.0.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x202a88, 0x20, "anon.e57b3f2ae8b5861992cfe341e01c75d6",
"./exe.unstripped/"
"component_manager.libcm_fidl_validator.cm_fidl_validator.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x2110a8, 0x18, ".Lanon.6f9bafb4adb671d7ac9f8408e86ff31a.3",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.1.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x211108, 0x10, "anon.6f9bafb4adb671d7ac9f8408e86ff31a",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.1.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x211118, 0x38, "anon.6f9bafb4adb671d7ac9f8408e86ff31a",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.1.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x211150, 0x20, "anon.54c490f3ebdb496a1657b64fb6de7217",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.10.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x211170, 0x18, ".Lanon.39cf32991562f2df00749835baa6fdc6.1",
"./exe.unstripped/"
"component_manager.liblibrary_loader.library_loader.3a1fbbbh-cgu.11.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x215018, 0x18, "anon.d8e73c4ab2af7c41d0ca8802142f134e",
"./exe.unstripped/component_manager.std-7a72ffd2f3a7a812.std.a0uwjzoe-cgu.0.rcgu.o.rcgu.o",
".data.rel.ro"},
{0x215030, 0x88,
"vtable for libunwind::UnwindCursor<libunwind::LocalAddressSpace, "
"libunwind::Registers_arm64>",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".data.rel.ro"},
{0x2150b8, 0x310, ".Lswitch.table._ZN9libunwind15Registers_arm6415getRegisterNameEi",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".data.rel.ro"},
{0x225848, 0x10, "_RNvCsi1CgODtnl2B_3log6LOGGER",
"./exe.unstripped/"
"component_manager.liblog-51a8548556518bd3-51a8548556518bd3.log.7ncv9mgr-cgu.0.rcgu.o.rcgu."
"o",
".data"},
{0x225858, 0x8, "std::thread::ThreadId::new::COUNTER::hb3a413a29c0f81f6",
"./exe.unstripped/component_manager.std-7a72ffd2f3a7a812.std.a0uwjzoe-cgu.0.rcgu.o.rcgu.o",
".data"},
{0x225860, 0x38, "std::io::stdio::stderr::INSTANCE::hb24941292040ef06",
"./exe.unstripped/component_manager.std-7a72ffd2f3a7a812.std.a0uwjzoe-cgu.0.rcgu.o.rcgu.o",
".data"},
{0x2258c8, 0x8, "libunwind::DwarfFDECache<libunwind::LocalAddressSpace>::_bufferEnd",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".data"},
{0x225c68, 0x20,
"_RNvNvNvXs15_CsbDqzXfLQacH_7cm_rustNtBa_13DATA_TYPENAMENtNtNtCs6QHBvYLDz7W_"
"4core3ops5deref5Deref5deref11___stability4LAZY",
"./exe.unstripped/component_manager.libcm_rust.cm_rust.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".bss"},
{0x225c88, 0x20,
"_RNvNvNvXs17_CsbDqzXfLQacH_7cm_rustNtBa_14CACHE_TYPENAMENtNtNtCs6QHBvYLDz7W_"
"4core3ops5deref5Deref5deref11___stability4LAZY",
"./exe.unstripped/component_manager.libcm_rust.cm_rust.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".bss"},
{0x225ca8, 0x20,
"_RNvNvNvXs19_CsbDqzXfLQacH_7cm_rustNtBa_13META_TYPENAMENtNtNtCs6QHBvYLDz7W_"
"4core3ops5deref5Deref5deref11___stability4LAZY",
"./exe.unstripped/component_manager.libcm_rust.cm_rust.3a1fbbbh-cgu.0.rcgu.o.rcgu.o",
".bss"},
{0x225cc8, 0x38,
"_RNvNvNvXs0_NtNtNtCsbDqzXfLQacH_21component_manager_lib5model6events14source_factoryNtB9_"
"25EVENT_SOURCE_SERVICE_PATHNtNtNtCs6QHBvYLDz7W_4core3ops5deref5Deref5deref11___"
"stability4LAZY",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.12.rcgu.o."
"rcgu.o",
".bss"},
{0x225d00, 0x38,
"_RNvNvNvXs2_NtNtNtCsbDqzXfLQacH_21component_manager_lib5model6events14source_factoryNtB9_"
"30EVENT_SOURCE_SYNC_SERVICE_PATHNtNtNtCs6QHBvYLDz7W_4core3ops5deref5Deref5deref11___"
"stability4LAZY",
"./exe.unstripped/"
"component_manager.libcomponent_manager_lib.component_manager_lib.3a1fbbbh-cgu.12.rcgu.o."
"rcgu.o",
".bss"},
{0x2262ac, 0x8, "libunwind::DwarfFDECache<libunwind::LocalAddressSpace>::_lock",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x2262b8, 0x800, "libunwind::DwarfFDECache<libunwind::LocalAddressSpace>::_initialBuffer",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226ab8, 0x1, "logAPIs::checked",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226abc, 0x1, "logAPIs::log",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226abd, 0x1, "logUnwinding::checked",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226ac0, 0x1, "logUnwinding::log",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226ac1, 0x1, "logDWARF::checked",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
{0x226ac4, 0x1, "logDWARF::log",
"/tmp/rustcL27BaP/libunwind-e14dabfa3d8ce62b.rlib(libunwind.o)", ".bss"},
};
// for (const auto& sym : symbols) {
// std::cout << std::hex << "{0x" << sym.addr << ", 0x" << sym.size << ", \"" << sym.name
// << "\", \"" << sym.compile_unit << "\", \"" << sym.section << "\"}," << std::endl;
// }
ASSERT_EQ(symbols.size(), goldens.size());
for (size_t i = 0; i < symbols.size(); i++) {
ASSERT_EQ(symbols[i].addr, goldens[i].addr);
ASSERT_EQ(symbols[i].size, goldens[i].size);
ASSERT_EQ(symbols[i].name, goldens[i].name);
ASSERT_EQ(symbols[i].compile_unit, goldens[i].compile_unit);
ASSERT_EQ(symbols[i].section, goldens[i].section);
}
}
TEST(LinkMapTest, SuperSizeGoldens) {
std::ifstream infile("test_lld-lto_v1.map");
std::string link_map;
for (std::string line; getline(infile, line);) {
if (line.empty()) continue;
if (line[0] == '#') continue;
link_map += line;
link_map += '\n';
}
absl::StripLeadingAsciiWhitespace(&link_map);
absl::StripTrailingAsciiWhitespace(&link_map);
struct Golden {
uint64_t addr;
uint64_t size;
std::string name;
std::string compile_unit;
std::string section;
};
std::vector<Golden> goldens = {
{0x213200, 0x4, "v8_Default_embedded_blob_size_", "obj/v8/v8_external_snapshot/embedded.o",
".rodata"},
{0x213210, 0x10, "pmmp",
"obj/third_party/ffmpeg/libffmpeg_internal.a(ffmpeg_internal/fft_neon.o)", ".rodata"},
{0x213220, 0x10, "mppm",
"obj/third_party/ffmpeg/libffmpeg_internal.a(ffmpeg_internal/fft_neon.o)", ".rodata"},
{0x213230, 0xc0, "std::__ndk1::(anonymous namespace)::small_primes",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(hash.o)",
".rodata"},
{0x2132f0, 0xc0, "std::__ndk1::(anonymous namespace)::indices",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(hash.o)",
".rodata"},
{0x2133b0, 0x4, "std::__ndk1::ios_base::boolalpha",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133b4, 0x4, "std::__ndk1::ios_base::dec",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133b8, 0x4, "std::__ndk1::ios_base::fixed",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133bc, 0x4, "std::__ndk1::ios_base::hex",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133c0, 0x4, "std::__ndk1::ios_base::internal",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133c4, 0x4, "std::__ndk1::ios_base::left",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133c8, 0x4, "std::__ndk1::ios_base::oct",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133cc, 0x4, "std::__ndk1::ios_base::right",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133d0, 0x4, "std::__ndk1::ios_base::scientific",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133d4, 0x4, "std::__ndk1::ios_base::showbase",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133d8, 0x4, "std::__ndk1::ios_base::showpoint",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133dc, 0x4, "std::__ndk1::ios_base::showpos",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133e0, 0x4, "std::__ndk1::ios_base::skipws",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133e4, 0x4, "std::__ndk1::ios_base::unitbuf",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133e8, 0x4, "std::__ndk1::ios_base::uppercase",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133ec, 0x4, "std::__ndk1::ios_base::adjustfield",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133f0, 0x4, "std::__ndk1::ios_base::basefield",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133f4, 0x4, "std::__ndk1::ios_base::floatfield",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133f8, 0x4, "std::__ndk1::ios_base::badbit",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x2133fc, 0x4, "std::__ndk1::ios_base::eofbit",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213400, 0x4, "std::__ndk1::ios_base::failbit",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213404, 0x4, "std::__ndk1::ios_base::goodbit",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213408, 0x4, "std::__ndk1::ios_base::app",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x21340c, 0x4, "std::__ndk1::ios_base::ate",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213410, 0x4, "std::__ndk1::ios_base::binary",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213414, 0x4, "std::__ndk1::ios_base::in",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213418, 0x4, "std::__ndk1::ios_base::out",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x21341c, 0x4, "std::__ndk1::ios_base::trunc",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213420, 0x1d, "typeinfo name for std::__ndk1::ios_base::failure",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213440, 0x15, "typeinfo name for std::__ndk1::ios_base",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213460, 0x21, "typeinfo name for std::__ndk1::__iostream_category",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x213490, 0x2d, "_ZTSNSt6__ndk19basic_iosIcNS_11char_traitsIcEEEE",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".rodata"},
{0x21368b, 0x2c378e, "** lld merge strings", "", ".rodata"},
{0x4d6e20, 0x1b, "typeinfo name for std::__ndk1::__stdinbuf<wchar_t>",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(iostream.o)",
".rodata"},
{0x4d7920, 0x266c, "** lld merge strings", "", ".rodata"},
{0x4d9f90, 0x18, "typeinfo name for std::__ndk1::ctype_base",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(locale.o)",
".rodata"},
{0x4d9fb0, 0x1a, "typeinfo name for std::__ndk1::codecvt_base",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(locale.o)",
".rodata"},
{0x503eb3, 0x1, "network::mojom::CookieManagerProxy_SetCanonicalCookie_Message::kMessageTag",
"", ".rodata"},
{0x503eb4, 0x1,
"network::mojom::CookieManagerProxy_DeleteCanonicalCookie_Message::kMessageTag", "",
".rodata"},
{0x82f000, 0x40, "", "obj/third_party/boringssl/boringssl_asm/chacha-armv4.o", ".text"},
{0x82f040, 0x3f0, "ChaCha20_ctr32", "obj/third_party/boringssl/boringssl_asm/chacha-armv4.o",
".text"},
{0x82f440, 0x89c, "ChaCha20_neon", "obj/third_party/boringssl/boringssl_asm/chacha-armv4.o",
".text"},
{0x82fce0, 0x540, "AES_Te", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o", ".text"},
{0x830220, 0x60, "aes_nohw_encrypt", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o",
".text"},
{0x830280, 0x1d8, "_armv4_AES_encrypt", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o",
".text"},
{0x830460, 0x2a0, "aes_nohw_set_encrypt_key",
"obj/third_party/boringssl/boringssl_asm/aes-armv4.o", ".text"},
{0x830700, 0x20, "aes_nohw_set_decrypt_key",
"obj/third_party/boringssl/boringssl_asm/aes-armv4.o", ".text"},
{0x830720, 0x124, "AES_set_enc2dec_key",
"obj/third_party/boringssl/boringssl_asm/aes-armv4.o", ".text"},
{0x830860, 0x500, "AES_Td", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o", ".text"},
{0x830d60, 0x60, "aes_nohw_decrypt", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o",
".text"},
{0x830dc0, 0x1f8, "_armv4_AES_decrypt", "obj/third_party/boringssl/boringssl_asm/aes-armv4.o",
".text"},
{0x831000, 0x40, "", "obj/third_party/boringssl/boringssl_asm/aesv8-armx32.o", ".text"},
{0x831040, 0x218, "aes_hw_set_encrypt_key",
"obj/third_party/boringssl/boringssl_asm/aesv8-armx32.o", ".text"},
{0x831260, 0x60, "aes_hw_set_decrypt_key",
"obj/third_party/boringssl/boringssl_asm/aesv8-armx32.o", ".text"},
{0x8312c0, 0x50, "aes_hw_encrypt", "obj/third_party/boringssl/boringssl_asm/aesv8-armx32.o",
".text"},
{0x831320, 0x50, "aes_hw_decrypt", "obj/third_party/boringssl/boringssl_asm/aesv8-armx32.o",
".text"},
{0x83c640, 0x2e60, "v8_Default_embedded_blob_data_", "obj/v8/v8_external_snapshot/embedded.o",
".text"},
{0x83f4a0, 0x320, "Builtins_RecordWrite", "obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83f7c0, 0x40, "Builtins_AdaptorWithExitFrame", "obj/v8/v8_external_snapshot/embedded.o",
".text"},
{0x83f800, 0x40, "Builtins_AdaptorWithBuiltinExitFrame",
"obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83f840, 0x100, "Builtins_ArgumentsAdaptorTrampoline",
"obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83f940, 0x100, "Builtins_CallFunction_ReceiverIsNullOrUndefined",
"obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83fa40, 0x140, "Builtins_CallFunction_ReceiverIsNotNullOrUndefined",
"obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83fb80, 0x180, "Builtins_CallFunction_ReceiverIsAny",
"obj/v8/v8_external_snapshot/embedded.o", ".text"},
{0x83fd00, 0x137820, "Builtins_CallBoundFunction", "obj/v8/v8_external_snapshot/embedded.o",
".text"},
{0x977520, 0x18, "PushAllRegisters",
"obj/third_party/blink/renderer/platform/heap/asm/asm/SaveRegisters_arm.o", ".text"},
{0x97c834, 0x4dc, "vpx_convolve8_avg_horiz_filter_type1_neon",
"obj/third_party/libvpx/libvpx_assembly_arm.a(libvpx_assembly_arm/"
"vpx_convolve8_avg_horiz_filter_type1_neon.asm.o)",
".text"},
{0x99cad8, 0xfc, "sinh",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libandroid_support.a(e_sinh.o)",
".text"},
{0x1401788, 0xa4, "$_21::operator()(FamilyData*, char const*, char const**) const", "",
".text"},
{0x1401820, 0x10, "UnlikelyFunc", "", ".text"},
{0x1401850, 0x10, "StartUpFunc", "", ".text"},
{0x2d4c000, 0x4, "v8_Default_embedded_blob_", "obj/v8/v8_external_snapshot/embedded.o",
".data"},
{0x2d4c004, 0x4, "__dso_handle",
"../../third_party/android_ndk/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o",
".data"},
{0x2d69000, 0x3c, "fft_tab_vfp",
"obj/third_party/ffmpeg/libffmpeg_internal.a(ffmpeg_internal/fft_vfp.o)", ".data.rel.ro"},
{0x2d6903c, 0x3c, "fft_tab_neon",
"obj/third_party/ffmpeg/libffmpeg_internal.a(ffmpeg_internal/fft_neon.o)", ".data.rel.ro"},
{0x2d69078, 0x40,
"vtable for std::__ndk1::basic_streambuf<wchar_t, std::__ndk1::char_traits<wchar_t> >",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d690b8, 0x28,
"vtable for std::__ndk1::basic_istream<char, std::__ndk1::char_traits<char> >",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d690e0, 0x28,
"vtable for std::__ndk1::basic_istream<wchar_t, std::__ndk1::char_traits<wchar_t> >",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d69108, 0x28,
"vtable for std::__ndk1::basic_ostream<char, std::__ndk1::char_traits<char> >",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d69130, 0x28,
"vtable for std::__ndk1::basic_ostream<wchar_t, std::__ndk1::char_traits<wchar_t> >",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d69158, 0x24, "vtable for std::__ndk1::__iostream_category",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d6917c, 0x14, "vtable for std::__ndk1::ios_base::failure",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d69190, 0x10, "vtable for std::__ndk1::ios_base",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d691a0, 0xc, "typeinfo for std::__ndk1::ios_base::failure",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d691ac, 0x8, "typeinfo for std::__ndk1::ios_base",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2d691b4, 0xc, "typeinfo for std::__ndk1::__iostream_category",
"../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/"
"libc++_static.a(ios.o)",
".data.rel.ro"},
{0x2f56000, 0x4, "WebRtcSpl_CrossCorrelation", "", ".bss"},
{0x2f56004, 0x4, "WebRtcSpl_DownsampleFast", "", ".bss"},
{0x2f56008, 0x4, "WebRtcSpl_MaxAbsValueW16", "", ".bss"},
{0x0, 0x1000, "** ", "", ".part.end"},
};
auto symbols = bloaty_link_map::ParseLldLinkMap(link_map);
// for (const auto& sym : symbols) {
// std::cout << std::hex << "{0x" << sym.addr << ", 0x" << sym.size << ", \"" << sym.name
// << "\", \"" << sym.compile_unit << "\", \"" << sym.section << "\"}," << std::endl;
// }
ASSERT_EQ(symbols.size(), goldens.size());
for (size_t i = 0; i < symbols.size(); i++) {
ASSERT_EQ(symbols[i].addr, goldens[i].addr);
ASSERT_EQ(symbols[i].size, goldens[i].size);
ASSERT_EQ(symbols[i].name, goldens[i].name);
ASSERT_EQ(symbols[i].compile_unit, goldens[i].compile_unit);
ASSERT_EQ(symbols[i].section, goldens[i].section);
}
}