From 8ab3bee8df72dea6d1ca0fe2ec9cd87b0fa3d5be Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 8 Mar 2017 14:01:11 -0800 Subject: Fix forEachTable will copy the table. std::initializer_list has T deduced to Table, which will copy the table. Use pointers instead. Test: pass Change-Id: I7da40eb0f5d0171244a9b9caacf37b41fe0af304 --- cmds/lshal/Lshal.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'cmds') diff --git a/cmds/lshal/Lshal.cpp b/cmds/lshal/Lshal.cpp index 9e60461fe1..a9596d7d5a 100644 --- a/cmds/lshal/Lshal.cpp +++ b/cmds/lshal/Lshal.cpp @@ -160,14 +160,14 @@ bool Lshal::getReferencedPids( } void Lshal::forEachTable(const std::function &f) { - for (const Table &table : {mServicesTable, mPassthroughRefTable, mImplementationsTable}) { - f(const_cast(table)); - } + f(mServicesTable); + f(mPassthroughRefTable); + f(mImplementationsTable); } void Lshal::forEachTable(const std::function &f) const { - for (const Table &table : {mServicesTable, mPassthroughRefTable, mImplementationsTable}) { - f(table); - } + f(mServicesTable); + f(mPassthroughRefTable); + f(mImplementationsTable); } void Lshal::postprocess() { -- cgit v1.2.3 From 3fdbd9f9347f495530036fb4306d769380d6c40f Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 8 Mar 2017 14:01:58 -0800 Subject: Update to use bitness info in VINTF. Bug: 35966597 Test: lshal -ir has bitness info for passthrough ref section Test: lshal --init-vintf has bitness info in the manifest. Change-Id: Ie9f52bb1ca30ce69856dbf44fab8287563014550 --- cmds/lshal/Lshal.cpp | 37 ++++++++++++++++++++++++++++++++++++- cmds/lshal/TableEntry.h | 4 ++-- 2 files changed, 38 insertions(+), 3 deletions(-) (limited to 'cmds') diff --git a/cmds/lshal/Lshal.cpp b/cmds/lshal/Lshal.cpp index a9596d7d5a..87501472e2 100644 --- a/cmds/lshal/Lshal.cpp +++ b/cmds/lshal/Lshal.cpp @@ -183,6 +183,26 @@ void Lshal::postprocess() { } } }); + // use a double for loop here because lshal doesn't care about efficiency. + for (TableEntry &packageEntry : mImplementationsTable) { + std::string packageName = packageEntry.interfaceName; + FQName fqPackageName{packageName.substr(0, packageName.find("::"))}; + if (!fqPackageName.isValid()) { + continue; + } + for (TableEntry &interfaceEntry : mPassthroughRefTable) { + if (interfaceEntry.arch != ARCH_UNKNOWN) { + continue; + } + FQName interfaceName{splitFirst(interfaceEntry.interfaceName, '/').first}; + if (!interfaceName.isValid()) { + continue; + } + if (interfaceName.getPackageAndVersion() == fqPackageName) { + interfaceEntry.arch = packageEntry.arch; + } + } + } } void Lshal::printLine( @@ -247,10 +267,25 @@ void Lshal::dumpVintf() const { &table == &mImplementationsTable ? "" : splittedFqInstanceName.second; vintf::Transport transport; + vintf::Arch arch; if (entry.transport == "hwbinder") { transport = vintf::Transport::HWBINDER; + arch = vintf::Arch::ARCH_EMPTY; } else if (entry.transport == "passthrough") { transport = vintf::Transport::PASSTHROUGH; + switch (entry.arch) { + case lshal::ARCH32: + arch = vintf::Arch::ARCH_32; break; + case lshal::ARCH64: + arch = vintf::Arch::ARCH_64; break; + case lshal::ARCH_BOTH: + arch = vintf::Arch::ARCH_32_64; break; + case lshal::ARCH_UNKNOWN: // fallthrough + default: + mErr << "Warning: '" << fqName.package() + << "' doesn't have bitness info, assuming 32+64." << std::endl; + arch = vintf::Arch::ARCH_32_64; + } } else { mErr << "Warning: '" << entry.transport << "' is not a valid transport." << std::endl; continue; @@ -262,7 +297,7 @@ void Lshal::dumpVintf() const { .format = vintf::HalFormat::HIDL, .name = fqName.package(), .impl = {.implLevel = vintf::ImplLevel::GENERIC, .impl = ""}, - .transport = transport + .transportArch = {transport, arch} })) { mErr << "Warning: cannot add hal '" << fqInstanceName << "'" << std::endl; continue; diff --git a/cmds/lshal/TableEntry.h b/cmds/lshal/TableEntry.h index 2407b42cdf..9ae8f7863a 100644 --- a/cmds/lshal/TableEntry.h +++ b/cmds/lshal/TableEntry.h @@ -37,8 +37,8 @@ using TableEntrySource = unsigned int; enum : unsigned int { ARCH_UNKNOWN = 0, - ARCH64 = 1 << 0, - ARCH32 = 1 << 1, + ARCH32 = 1 << 0, + ARCH64 = 1 << 1, ARCH_BOTH = ARCH32 | ARCH64 }; using Architecture = unsigned int; -- cgit v1.2.3