Merge "Let header-abi-dumper declare unknown types automatically"
diff --git a/vndk/tools/definition-tool/datasets/vndk-lib-extra-list-current.txt b/vndk/tools/definition-tool/datasets/vndk-lib-extra-list-current.txt
index fbc8f4c..370301f 100644
--- a/vndk/tools/definition-tool/datasets/vndk-lib-extra-list-current.txt
+++ b/vndk/tools/definition-tool/datasets/vndk-lib-extra-list-current.txt
@@ -8,6 +8,16 @@
LLNDK: libclang_rt.asan-mips64-android.so
LLNDK: libclang_rt.asan-x86_64-android.so
+VNDK-core: libclang_rt.scudo-aarch64-android.so
+VNDK-core: libclang_rt.scudo-arm-android.so
+VNDK-core: libclang_rt.scudo-i686-android.so
+VNDK-core: libclang_rt.scudo-x86_64-android.so
+
+VNDK-core: libclang_rt.scudo_minimal-aarch64-android.so
+VNDK-core: libclang_rt.scudo_minimal-arm-android.so
+VNDK-core: libclang_rt.scudo_minimal-i686-android.so
+VNDK-core: libclang_rt.scudo_minimal-x86_64-android.so
+
VNDK-core: libclang_rt.ubsan_standalone-aarch64-android.so
VNDK-core: libclang_rt.ubsan_standalone-arm-android.so
VNDK-core: libclang_rt.ubsan_standalone-i686-android.so
diff --git a/vndk/tools/definition-tool/tools/update_dataset.py b/vndk/tools/definition-tool/tools/update_dataset.py
index d08ea7d..4c86062 100755
--- a/vndk/tools/definition-tool/tools/update_dataset.py
+++ b/vndk/tools/definition-tool/tools/update_dataset.py
@@ -222,19 +222,22 @@
update_tag(prefix_vendor + name, 'VNDK-SP-Private',
'Workaround for degenerated VDNK')
- # Workaround for libclang_rt.asan
- prefix = 'libclang_rt.asan'
- if any(name.startswith(prefix) for name in llndk):
- for path in list(data.keys()):
- if os.path.basename(path).startswith(prefix):
- update_tag(path, 'LL-NDK')
-
- # Workaround for libclang_rt.ubsan_standalone
- prefix = 'libclang_rt.ubsan_standalone'
- if any(name.startswith(prefix) for name in vndk):
- for path in list(data.keys()):
- if os.path.basename(path).startswith(prefix):
- update_tag(path, 'VNDK')
+ # Workaround for libclang_rt.*.so
+ lib_sets = {
+ 'LL-NDK': llndk,
+ 'VNDK': vndk,
+ }
+ prefixes = {
+ 'libclang_rt.asan': 'LL-NDK',
+ 'libclang_rt.hwasan': 'LL-NDK',
+ 'libclang_rt.scudo': 'VNDK',
+ 'libclang_rt.ubsan_standalone': 'VNDK',
+ }
+ for prefix, tag in prefixes.items():
+ if any(name.startswith(prefix) for name in lib_sets[tag]):
+ for path in list(data.keys()):
+ if os.path.basename(path).startswith(prefix):
+ update_tag(path, tag)
# Merge regular expression patterns into final dataset
for regex in regex_patterns:
diff --git a/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp b/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp
index cb3fcb0..3b81b9a 100644
--- a/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp
+++ b/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp
@@ -106,9 +106,13 @@
const abi_util::AbiElementMap<T> &src,
const std::function<bool(const std::string &)> &symbol_filter);
- bool ParseVersionScriptFiles();
+ std::unique_ptr<abi_util::TextFormatToIRReader> ReadInputDumpFiles();
- bool ParseSoFile();
+ bool ReadExportedSymbols();
+
+ bool ReadExportedSymbolsFromVersionScript();
+
+ bool ReadExportedSymbolsFromSharedObjectFile();
bool LinkTypes(const abi_util::TextFormatToIRReader *ir_reader,
abi_util::IRDumper *ir_dumper);
@@ -119,8 +123,7 @@
bool LinkGlobalVars(const abi_util::TextFormatToIRReader *ir_reader,
abi_util::IRDumper *ir_dumper);
- bool AddElfSymbols(abi_util::IRDumper *ir_dumper);
-
+ bool LinkExportedSymbols(abi_util::IRDumper *ir_dumper);
private:
const std::vector<std::string> &dump_files_;
@@ -142,23 +145,6 @@
std::regex globvars_vs_regex_;
};
-template <typename T>
-static bool AddElfSymbols(abi_util::IRDumper *dst,
- const std::map<std::string, T> &symbols) {
- for (auto &&symbol : symbols) {
- if (!dst->AddElfSymbolMessageIR(&(symbol.second))) {
- return false;
- }
- }
- return true;
-}
-
-// To be called right after parsing the .so file / version script.
-bool HeaderAbiLinker::AddElfSymbols(abi_util::IRDumper *ir_dumper) {
- return ::AddElfSymbols(ir_dumper, function_decl_map_) &&
- ::AddElfSymbols(ir_dumper, globvar_decl_map_);
-}
-
static void DeDuplicateAbiElementsThread(
const std::vector<std::string> &dump_files,
const std::set<std::string> *exported_headers,
@@ -167,6 +153,7 @@
std::unique_ptr<abi_util::TextFormatToIRReader> local_reader =
abi_util::TextFormatToIRReader::CreateTextFormatToIRReader(
input_format, exported_headers);
+
auto begin_it = dump_files.begin();
std::size_t num_sources = dump_files.size();
while (1) {
@@ -188,36 +175,20 @@
local_reader->MergeGraphs(*reader);
}
}
+
std::lock_guard<std::mutex> lock(*greader_lock);
greader->MergeGraphs(*local_reader);
}
-bool HeaderAbiLinker::LinkAndDump() {
- // If the user specifies that a version script should be used, use that.
- if (!so_file_.empty()) {
- exported_headers_ =
- abi_util::CollectAllExportedHeaders(exported_header_dirs_);
- if (!ParseSoFile()) {
- llvm::errs() << "Couldn't parse so file\n";
- return false;
- }
- } else if (!ParseVersionScriptFiles()) {
- llvm::errs() << "Failed to parse stub files for exported symbols\n";
- return false;
- }
- std::unique_ptr<abi_util::IRDumper> ir_dumper =
- abi_util::IRDumper::CreateIRDumper(output_format, out_dump_name_);
- assert(ir_dumper != nullptr);
- AddElfSymbols(ir_dumper.get());
- // Create a reader, on which we never actually call ReadDump(), since multiple
- // dump files are associated with it.
+std::unique_ptr<abi_util::TextFormatToIRReader>
+HeaderAbiLinker::ReadInputDumpFiles() {
std::unique_ptr<abi_util::TextFormatToIRReader> greader =
abi_util::TextFormatToIRReader::CreateTextFormatToIRReader(
input_format, &exported_headers_);
+
std::size_t max_threads = std::thread::hardware_concurrency();
std::size_t num_threads = kSourcesPerBatchThread < dump_files_.size() ?
- std::min(dump_files_.size() / kSourcesPerBatchThread,
- max_threads) : 0;
+ std::min(dump_files_.size() / kSourcesPerBatchThread, max_threads) : 0;
std::vector<std::thread> threads;
std::atomic<std::size_t> cnt(0);
std::mutex greader_lock;
@@ -232,16 +203,42 @@
thread.join();
}
+ return greader;
+}
+
+bool HeaderAbiLinker::LinkAndDump() {
+ // Extract exported functions and variables from a shared lib or a version
+ // script.
+ if (!ReadExportedSymbols()) {
+ return false;
+ }
+
+ // Construct the list of exported headers for source location filtering.
+ exported_headers_ =
+ abi_util::CollectAllExportedHeaders(exported_header_dirs_);
+
+ // Read all input ABI dumps.
+ auto greader = ReadInputDumpFiles();
+
+ // Link input ABI dumps.
+ std::unique_ptr<abi_util::IRDumper> ir_dumper =
+ abi_util::IRDumper::CreateIRDumper(output_format, out_dump_name_);
+ assert(ir_dumper != nullptr);
+
+ LinkExportedSymbols(ir_dumper.get());
+
if (!LinkTypes(greader.get(), ir_dumper.get()) ||
!LinkFunctions(greader.get(), ir_dumper.get()) ||
!LinkGlobalVars(greader.get(), ir_dumper.get())) {
llvm::errs() << "Failed to link elements\n";
return false;
}
+
if (!ir_dumper->Dump()) {
- llvm::errs() << "Serialization to ostream failed\n";
+ llvm::errs() << "Failed to serialize the linked output to ostream\n";
return false;
}
+
return true;
}
@@ -345,15 +342,56 @@
return LinkDecl(ir_dumper, reader->GetGlobalVariables(), symbol_filter);
}
-bool HeaderAbiLinker::ParseVersionScriptFiles() {
+template <typename T>
+static bool LinkExportedSymbols(abi_util::IRDumper *dst,
+ const std::map<std::string, T> &symbols) {
+ for (auto &&symbol : symbols) {
+ if (!dst->AddElfSymbolMessageIR(&(symbol.second))) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// To be called right after parsing the .so file / version script.
+bool HeaderAbiLinker::LinkExportedSymbols(abi_util::IRDumper *ir_dumper) {
+ return ::LinkExportedSymbols(ir_dumper, function_decl_map_) &&
+ ::LinkExportedSymbols(ir_dumper, globvar_decl_map_);
+}
+
+bool HeaderAbiLinker::ReadExportedSymbols() {
+ if (!so_file_.empty()) {
+ if (!ReadExportedSymbolsFromSharedObjectFile()) {
+ llvm::errs() << "Failed to parse the shared library (.so file): "
+ << so_file_ << "\n";
+ return false;
+ }
+ return true;
+ }
+
+ if (!version_script_.empty()) {
+ if (!ReadExportedSymbolsFromVersionScript()) {
+ llvm::errs() << "Failed to parse the version script: " << version_script_
+ << "\n";
+ return false;
+ }
+ return true;
+ }
+
+ llvm::errs() << "Either shared lib or version script must be specified.\n";
+ return false;
+}
+
+bool HeaderAbiLinker::ReadExportedSymbolsFromVersionScript() {
abi_util::VersionScriptParser version_script_parser(
version_script_, arch_, api_);
if (!version_script_parser.Parse()) {
- llvm::errs() << "Failed to parse version script\n";
return false;
}
+
function_decl_map_ = version_script_parser.GetFunctions();
globvar_decl_map_ = version_script_parser.GetGlobVars();
+
std::set<std::string> function_regexs =
version_script_parser.GetFunctionRegexs();
std::set<std::string> globvar_regexs =
@@ -363,27 +401,13 @@
return true;
}
-bool HeaderAbiLinker::ParseSoFile() {
- auto Binary = llvm::object::createBinary(so_file_);
-
- if (!Binary) {
- llvm::errs() << "Couldn't really create object File \n";
- return false;
- }
- llvm::object::ObjectFile *objfile =
- llvm::dyn_cast<llvm::object::ObjectFile>(&(*Binary.get().getBinary()));
- if (!objfile) {
- llvm::errs() << "Not an object file\n";
- return false;
- }
-
+bool HeaderAbiLinker::ReadExportedSymbolsFromSharedObjectFile() {
std::unique_ptr<abi_util::SoFileParser> so_parser =
- abi_util::SoFileParser::Create(objfile);
- if (so_parser == nullptr) {
- llvm::errs() << "Couldn't create soFile Parser\n";
+ abi_util::SoFileParser::Create(so_file_);
+ if (!so_parser) {
return false;
}
- so_parser->GetSymbols();
+
function_decl_map_ = so_parser->GetFunctions();
globvar_decl_map_ = so_parser->GetGlobVars();
return true;
diff --git a/vndk/tools/header-checker/header-abi-util/include/ir_representation.h b/vndk/tools/header-checker/header-abi-util/include/ir_representation.h
index 7235248..886c39e 100644
--- a/vndk/tools/header-checker/header-abi-util/include/ir_representation.h
+++ b/vndk/tools/header-checker/header-abi-util/include/ir_representation.h
@@ -933,18 +933,6 @@
virtual bool ReadDump(const std::string &dump_file) = 0;
- template <typename Iterator>
- bool ReadDumps(Iterator begin, Iterator end) {
- Iterator it = begin;
- while (it != end) {
- if (!ReadDump(*it)) {
- return false;
- }
- ++it;
- }
- return true;
- }
-
void Merge(TextFormatToIRReader &&addend) {
MergeElements(&functions_, std::move(addend.functions_));
MergeElements(&global_variables_, std::move(addend.global_variables_));
diff --git a/vndk/tools/header-checker/header-abi-util/include/so_file_parser.h b/vndk/tools/header-checker/header-abi-util/include/so_file_parser.h
index 9c035bd..b19b8f3 100644
--- a/vndk/tools/header-checker/header-abi-util/include/so_file_parser.h
+++ b/vndk/tools/header-checker/header-abi-util/include/so_file_parser.h
@@ -17,9 +17,6 @@
#include "ir_representation.h"
-#include <llvm/Object/ELFObjectFile.h>
-#include <llvm/Object/ELFTypes.h>
-
#include <memory>
#include <map>
#include <string>
@@ -28,38 +25,13 @@
class SoFileParser {
public:
+ static std::unique_ptr<SoFileParser> Create(const std::string &so_file_path);
+
virtual ~SoFileParser() {}
- static std::unique_ptr<SoFileParser> Create(
- const llvm::object::ObjectFile *obj);
-
virtual const std::map<std::string, ElfFunctionIR> &GetFunctions() const = 0;
+
virtual const std::map<std::string, ElfObjectIR> &GetGlobVars() const = 0;
- virtual void GetSymbols() = 0;
-};
-
-template<typename T>
-class ELFSoFileParser : public SoFileParser {
- private:
- LLVM_ELF_IMPORT_TYPES_ELFT(T)
- typedef llvm::object::ELFFile<T> ELFO;
- typedef typename ELFO::Elf_Sym Elf_Sym;
-
- public:
- ELFSoFileParser(const llvm::object::ELFObjectFile<T> *obj) : obj_(obj) {}
- ~ELFSoFileParser() override {}
-
- const std::map<std::string, ElfFunctionIR> &GetFunctions() const override;
- const std::map<std::string, ElfObjectIR> &GetGlobVars() const override;
- void GetSymbols() override;
-
- private:
- const llvm::object::ELFObjectFile<T> *obj_;
- std::map<std::string, abi_util::ElfFunctionIR> functions_;
- std::map<std::string, abi_util::ElfObjectIR> globvars_;
-
- private:
- bool IsSymbolExported(const Elf_Sym *elf_sym) const;
};
} // namespace abi_util
diff --git a/vndk/tools/header-checker/header-abi-util/src/collect_exported_headers.cpp b/vndk/tools/header-checker/header-abi-util/src/collect_exported_headers.cpp
index 39b3f64..0b6b079 100644
--- a/vndk/tools/header-checker/header-abi-util/src/collect_exported_headers.cpp
+++ b/vndk/tools/header-checker/header-abi-util/src/collect_exported_headers.cpp
@@ -50,7 +50,8 @@
llvm::sys::fs::recursive_directory_iterator end;
for ( ; walker != end; walker.increment(ec)) {
if (ec) {
- llvm::errs() << "Failed to walk dir : " << dir_name << "\n";
+ llvm::errs() << "Failed to walk directory: " << dir_name << ": "
+ << ec.message() << "\n";
return false;
}
@@ -67,7 +68,7 @@
llvm::ErrorOr<llvm::sys::fs::basic_file_status> status = walker->status();
if (!status) {
- llvm::errs() << "Failed to stat file : " << file_path << "\n";
+ llvm::errs() << "Failed to stat file: " << file_path << "\n";
return false;
}
diff --git a/vndk/tools/header-checker/header-abi-util/src/so_file_parser.cpp b/vndk/tools/header-checker/header-abi-util/src/so_file_parser.cpp
index 5750c32..fa4d975 100644
--- a/vndk/tools/header-checker/header-abi-util/src/so_file_parser.cpp
+++ b/vndk/tools/header-checker/header-abi-util/src/so_file_parser.cpp
@@ -21,65 +21,71 @@
#include <llvm/Object/ELFTypes.h>
#include <llvm/Object/SymbolSize.h>
-using llvm::ELF::STB_GLOBAL;
-using llvm::ELF::STB_WEAK;
-using llvm::ELF::STV_DEFAULT;
-using llvm::ELF::STV_PROTECTED;
-using llvm::dyn_cast;
-using llvm::object::ELF32BEObjectFile;
-using llvm::object::ELF32LEObjectFile;
-using llvm::object::ELF64BEObjectFile;
-using llvm::object::ELF64LEObjectFile;
-
namespace abi_util {
template <typename T>
-static inline T UnWrap(llvm::Expected<T> ValueOrError) {
- if (!ValueOrError) {
- llvm::errs() << "\nError: " << llvm::toString(ValueOrError.takeError())
+static inline T UnWrap(llvm::Expected<T> value_or_error) {
+ if (!value_or_error) {
+ llvm::errs() << "\nerror: " << llvm::toString(value_or_error.takeError())
<< ".\n";
llvm::errs().flush();
exit(1);
}
- return std::move(ValueOrError.get());
-}
-
-template<typename T>
-const std::map<std::string, abi_util::ElfFunctionIR> &
-ELFSoFileParser<T>::GetFunctions() const {
- return functions_;
-}
-
-template<typename T>
-const std::map<std::string, abi_util::ElfObjectIR> &
-ELFSoFileParser<T>::GetGlobVars() const {
- return globvars_;
-}
-
-template<typename T>
-bool ELFSoFileParser<T>::IsSymbolExported(const Elf_Sym *elf_sym) const {
- unsigned char visibility = elf_sym->getVisibility();
- unsigned char binding = elf_sym->getBinding();
- return (binding == STB_GLOBAL || binding == STB_WEAK) &&
- (visibility == STV_DEFAULT || visibility == STV_PROTECTED);
+ return std::move(value_or_error.get());
}
static abi_util::ElfSymbolIR::ElfSymbolBinding
LLVMToIRSymbolBinding(unsigned char binding) {
switch (binding) {
- case STB_GLOBAL:
+ case llvm::ELF::STB_GLOBAL:
return abi_util::ElfSymbolIR::ElfSymbolBinding::Global;
- case STB_WEAK:
+ case llvm::ELF::STB_WEAK:
return abi_util::ElfSymbolIR::ElfSymbolBinding::Weak;
}
assert(0);
}
template<typename T>
-void ELFSoFileParser<T>::GetSymbols() {
- assert(obj_ != nullptr);
- for (auto symbol_it : obj_->getDynamicSymbolIterators()) {
- const Elf_Sym *elf_sym = obj_->getSymbol(symbol_it.getRawDataRefImpl());
+class ELFSoFileParser : public SoFileParser {
+ private:
+ LLVM_ELF_IMPORT_TYPES_ELFT(T)
+ typedef llvm::object::ELFFile<T> ELFO;
+ typedef typename ELFO::Elf_Sym Elf_Sym;
+
+ public:
+ ELFSoFileParser(const llvm::object::ELFObjectFile<T> *obj);
+
+ ~ELFSoFileParser() override {}
+
+ const std::map<std::string, ElfFunctionIR> &GetFunctions() const override {
+ return functions_;
+ }
+
+ const std::map<std::string, ElfObjectIR> &GetGlobVars() const override {
+ return globvars_;
+ }
+
+ private:
+ bool IsSymbolExported(const Elf_Sym *elf_sym) const {
+ unsigned char visibility = elf_sym->getVisibility();
+ unsigned char binding = elf_sym->getBinding();
+ return ((binding == llvm::ELF::STB_GLOBAL ||
+ binding == llvm::ELF::STB_WEAK) &&
+ (visibility == llvm::ELF::STV_DEFAULT ||
+ visibility == llvm::ELF::STV_PROTECTED));
+ }
+
+ private:
+ const llvm::object::ELFObjectFile<T> *obj_;
+ std::map<std::string, abi_util::ElfFunctionIR> functions_;
+ std::map<std::string, abi_util::ElfObjectIR> globvars_;
+};
+
+template<typename T>
+ELFSoFileParser<T>::ELFSoFileParser(const llvm::object::ELFObjectFile<T> *obj) {
+ assert(obj != nullptr);
+ for (auto symbol_it : obj->getDynamicSymbolIterators()) {
+ const Elf_Sym *elf_sym = obj->getSymbol(symbol_it.getRawDataRefImpl());
assert (elf_sym != nullptr);
if (!IsSymbolExported(elf_sym) || elf_sym->isUndefined()) {
continue;
@@ -104,26 +110,42 @@
}
std::unique_ptr<SoFileParser> SoFileParser::Create(
- const llvm::object::ObjectFile *objfile) {
+ const std::string &so_file_path) {
+ auto binary = llvm::object::createBinary(so_file_path);
+ if (!binary) {
+ return nullptr;
+ }
+
+ llvm::object::ObjectFile *obj_file =
+ llvm::dyn_cast<llvm::object::ObjectFile>(binary.get().getBinary());
+ if (!obj_file) {
+ return nullptr;
+ }
+
// Little-endian 32-bit
- if (const ELF32LEObjectFile *ELFObj = dyn_cast<ELF32LEObjectFile>(objfile)) {
- return CreateELFSoFileParser(ELFObj);
+ if (auto elf_obj_file =
+ llvm::dyn_cast<llvm::object::ELF32LEObjectFile>(obj_file)) {
+ return CreateELFSoFileParser(elf_obj_file);
}
// Big-endian 32-bit
- if (const ELF32BEObjectFile *ELFObj = dyn_cast<ELF32BEObjectFile>(objfile)) {
- return CreateELFSoFileParser(ELFObj);
+ if (auto elf_obj_file =
+ llvm::dyn_cast<llvm::object::ELF32BEObjectFile>(obj_file)) {
+ return CreateELFSoFileParser(elf_obj_file);
}
// Little-endian 64-bit
- if (const ELF64LEObjectFile *ELFObj = dyn_cast<ELF64LEObjectFile>(objfile)) {
- return CreateELFSoFileParser(ELFObj);
+ if (auto elf_obj_file =
+ llvm::dyn_cast<llvm::object::ELF64LEObjectFile>(obj_file)) {
+ return CreateELFSoFileParser(elf_obj_file);
}
// Big-endian 64-bit
- if (const ELF64BEObjectFile *ELFObj = dyn_cast<ELF64BEObjectFile>(objfile)) {
- return CreateELFSoFileParser(ELFObj);
+ if (auto elf_obj_file =
+ llvm::dyn_cast<llvm::object::ELF64BEObjectFile>(obj_file)) {
+ return CreateELFSoFileParser(elf_obj_file);
}
+
return nullptr;
}
diff --git a/vndk/tools/header-checker/tests/expected/example1.h b/vndk/tools/header-checker/tests/expected/example1.h
index 810159c..13ae403 100644
--- a/vndk/tools/header-checker/tests/expected/example1.h
+++ b/vndk/tools/header-checker/tests/expected/example1.h
@@ -201,10 +201,10 @@
name: "Hello::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:19:3)::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:22:5) at /development/vndk/tools/header-checker/tests/input/example1.h:22:5"
size: 4
alignment: 4
- referenced_type: "type-22"
+ referenced_type: "type-24"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "Hello::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:19:3)::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:22:5) at /development/vndk/tools/header-checker/tests/input/example1.h:22:5"
- self_type: "type-22"
+ self_type: "type-24"
}
fields {
referenced_type: "type-2"
@@ -224,10 +224,10 @@
name: "Hello::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:19:3) at /development/vndk/tools/header-checker/tests/input/example1.h:19:3"
size: 12
alignment: 4
- referenced_type: "type-21"
+ referenced_type: "type-23"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "Hello::(anonymous struct at /development/vndk/tools/header-checker/tests/input/example1.h:19:3) at /development/vndk/tools/header-checker/tests/input/example1.h:19:3"
- self_type: "type-21"
+ self_type: "type-23"
}
fields {
referenced_type: "type-2"
@@ -242,7 +242,7 @@
access: public_access
}
fields {
- referenced_type: "type-22"
+ referenced_type: "type-24"
field_offset: 64
field_name: ""
access: public_access
@@ -259,10 +259,10 @@
name: "Hello"
size: 32
alignment: 4
- referenced_type: "type-19"
+ referenced_type: "type-21"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "Hello"
- self_type: "type-19"
+ self_type: "type-21"
}
fields {
referenced_type: "type-2"
@@ -277,7 +277,7 @@
access: public_access
}
fields {
- referenced_type: "type-20"
+ referenced_type: "type-22"
field_offset: 64
field_name: "d"
access: public_access
@@ -295,7 +295,7 @@
access: public_access
}
fields {
- referenced_type: "type-21"
+ referenced_type: "type-23"
field_offset: 160
field_name: ""
access: public_access
@@ -311,19 +311,19 @@
name: "CPPHello"
size: 56
alignment: 8
- referenced_type: "type-23"
+ referenced_type: "type-25"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "CPPHello"
- self_type: "type-23"
+ self_type: "type-25"
}
fields {
- referenced_type: "type-24"
+ referenced_type: "type-26"
field_offset: 352
field_name: "cpp_foo"
access: public_access
}
fields {
- referenced_type: "type-25"
+ referenced_type: "type-27"
field_offset: 384
field_name: "cpp_bar"
access: public_access
@@ -381,13 +381,13 @@
name: "List<float>"
size: 8
alignment: 8
- referenced_type: "type-31"
+ referenced_type: "type-34"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "List<float>"
- self_type: "type-31"
+ self_type: "type-34"
}
fields {
- referenced_type: "type-33"
+ referenced_type: "type-36"
field_offset: 0
field_name: "middle"
access: public_access
@@ -408,10 +408,10 @@
name: "List<float>::_Node"
size: 24
alignment: 8
- referenced_type: "type-32"
+ referenced_type: "type-35"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "List<float>::_Node"
- self_type: "type-32"
+ self_type: "type-35"
}
fields {
referenced_type: "type-3"
@@ -420,13 +420,13 @@
access: private_access
}
fields {
- referenced_type: "type-33"
+ referenced_type: "type-36"
field_offset: 64
field_name: "mpPrev"
access: private_access
}
fields {
- referenced_type: "type-33"
+ referenced_type: "type-36"
field_offset: 128
field_name: "mpNext"
access: private_access
@@ -442,13 +442,13 @@
name: "List<int>"
size: 8
alignment: 8
- referenced_type: "type-35"
+ referenced_type: "type-41"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "List<int>"
- self_type: "type-35"
+ self_type: "type-41"
}
fields {
- referenced_type: "type-37"
+ referenced_type: "type-43"
field_offset: 0
field_name: "middle"
access: public_access
@@ -517,10 +517,10 @@
name: "CPPHello::Bla"
size: 4
alignment: 4
- referenced_type: "type-27"
+ referenced_type: "type-29"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "CPPHello::Bla"
- self_type: "type-27"
+ self_type: "type-29"
}
underlying_type: "type-9"
enum_fields {
@@ -545,13 +545,24 @@
}
pointer_types {
type_info {
+ name: "ForwardDeclaration *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-19"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "ForwardDeclaration *"
+ self_type: "type-20"
+ }
+}
+pointer_types {
+ type_info {
name: "CPPHello *"
size: 8
alignment: 8
- referenced_type: "type-23"
+ referenced_type: "type-25"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "CPPHello *"
- self_type: "type-26"
+ self_type: "type-28"
}
}
pointer_types {
@@ -562,7 +573,7 @@
referenced_type: "type-2"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "int *"
- self_type: "type-29"
+ self_type: "type-31"
}
}
pointer_types {
@@ -573,7 +584,7 @@
referenced_type: "type-3"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "float *"
- self_type: "type-30"
+ self_type: "type-33"
}
}
pointer_types {
@@ -581,10 +592,21 @@
name: "List<float>::_Node *"
size: 8
alignment: 8
- referenced_type: "type-32"
+ referenced_type: "type-35"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "List<float>::_Node *"
- self_type: "type-33"
+ self_type: "type-36"
+ }
+}
+pointer_types {
+ type_info {
+ name: "const List<float>::_Node *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-39"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "const List<float>::_Node *"
+ self_type: "type-40"
}
}
pointer_types {
@@ -592,10 +614,32 @@
name: "List<int>::_Node *"
size: 8
alignment: 8
- referenced_type: "type-36"
+ referenced_type: "type-42"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "List<int>::_Node *"
- self_type: "type-37"
+ self_type: "type-43"
+ }
+}
+pointer_types {
+ type_info {
+ name: "List<int> *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-41"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "List<int> *"
+ self_type: "type-44"
+ }
+}
+pointer_types {
+ type_info {
+ name: "StackNode<int> *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-45"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "StackNode<int> *"
+ self_type: "type-46"
}
}
pointer_types {
@@ -603,10 +647,21 @@
name: "const char *"
size: 8
alignment: 8
- referenced_type: "type-38"
+ referenced_type: "type-47"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const char *"
- self_type: "type-39"
+ self_type: "type-48"
+ }
+}
+lvalue_reference_types {
+ type_info {
+ name: "int &"
+ size: 8
+ alignment: 8
+ referenced_type: "type-2"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "int &"
+ self_type: "type-30"
}
}
lvalue_reference_types {
@@ -614,10 +669,21 @@
name: "const float &"
size: 8
alignment: 8
- referenced_type: "type-25"
+ referenced_type: "type-27"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const float &"
- self_type: "type-34"
+ self_type: "type-37"
+ }
+}
+lvalue_reference_types {
+ type_info {
+ name: "float &"
+ size: 8
+ alignment: 8
+ referenced_type: "type-3"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "float &"
+ self_type: "type-38"
}
}
builtin_types {
@@ -703,10 +769,10 @@
name: "wchar_t"
size: 4
alignment: 4
- referenced_type: "type-20"
+ referenced_type: "type-22"
source_file: ""
linker_set_key: "wchar_t"
- self_type: "type-20"
+ self_type: "type-22"
}
is_unsigned: false
is_integral: true
@@ -716,10 +782,10 @@
name: "char"
size: 1
alignment: 1
- referenced_type: "type-40"
+ referenced_type: "type-49"
source_file: ""
linker_set_key: "char"
- self_type: "type-40"
+ self_type: "type-49"
}
is_unsigned: false
is_integral: true
@@ -746,7 +812,7 @@
referenced_type: "type-2"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const int"
- self_type: "type-24"
+ self_type: "type-26"
}
is_const: true
is_volatile: false
@@ -760,7 +826,7 @@
referenced_type: "type-3"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const float"
- self_type: "type-25"
+ self_type: "type-27"
}
is_const: true
is_volatile: false
@@ -771,10 +837,24 @@
name: "const CPPHello"
size: 56
alignment: 8
- referenced_type: "type-23"
+ referenced_type: "type-25"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const CPPHello"
- self_type: "type-28"
+ self_type: "type-32"
+ }
+ is_const: true
+ is_volatile: false
+ is_restricted: false
+}
+qualified_types {
+ type_info {
+ name: "const List<float>::_Node"
+ size: 24
+ alignment: 8
+ referenced_type: "type-35"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ linker_set_key: "const List<float>::_Node"
+ self_type: "type-39"
}
is_const: true
is_volatile: false
@@ -785,10 +865,10 @@
name: "const char"
size: 1
alignment: 1
- referenced_type: "type-40"
+ referenced_type: "type-49"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "const char"
- self_type: "type-38"
+ self_type: "type-47"
}
is_const: true
is_volatile: false
@@ -855,10 +935,22 @@
}
functions {
return_type: "type-2"
+ function_name: "uses_forward_decl"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-20"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "uses_forward_decl"
+ access: public_access
+}
+functions {
+ return_type: "type-2"
function_name: "CPPHello::again"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-26"
+ referenced_type: "type-28"
default_arg: false
is_this_ptr: true
}
@@ -870,7 +962,7 @@
function_name: "CPPHello::CPPHello"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-26"
+ referenced_type: "type-28"
default_arg: false
is_this_ptr: true
}
@@ -882,7 +974,7 @@
function_name: "CPPHello::CPPHello"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-26"
+ referenced_type: "type-28"
default_arg: false
is_this_ptr: true
}
@@ -894,7 +986,7 @@
function_name: "CPPHello::test_enum"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-26"
+ referenced_type: "type-28"
default_arg: false
is_this_ptr: true
}
@@ -902,21 +994,38 @@
access: public_access
}
functions {
+ return_type: "type-6"
+ function_name: "fooVariadic"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-30"
+ default_arg: false
+ is_this_ptr: false
+ }
+ parameters {
+ referenced_type: "type-31"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "_Z11fooVariadicRiPiz"
+ access: public_access
+}
+functions {
return_type: "type-2"
function_name: "boo"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-28"
+ referenced_type: "type-32"
default_arg: false
is_this_ptr: false
}
parameters {
- referenced_type: "type-29"
+ referenced_type: "type-31"
default_arg: false
is_this_ptr: false
}
parameters {
- referenced_type: "type-30"
+ referenced_type: "type-33"
default_arg: false
is_this_ptr: false
}
@@ -928,12 +1037,12 @@
function_name: "List<float>::_Node::_Node"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-33"
+ referenced_type: "type-36"
default_arg: false
is_this_ptr: true
}
parameters {
- referenced_type: "type-34"
+ referenced_type: "type-37"
default_arg: false
is_this_ptr: false
}
@@ -945,12 +1054,12 @@
function_name: "List<float>::_Node::_Node"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-33"
+ referenced_type: "type-36"
default_arg: false
is_this_ptr: true
}
parameters {
- referenced_type: "type-34"
+ referenced_type: "type-37"
default_arg: false
is_this_ptr: false
}
@@ -962,7 +1071,7 @@
function_name: "List<float>::_Node::~_Node"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-33"
+ referenced_type: "type-36"
default_arg: false
is_this_ptr: true
}
@@ -974,7 +1083,7 @@
function_name: "List<float>::_Node::~_Node"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-33"
+ referenced_type: "type-36"
default_arg: false
is_this_ptr: true
}
@@ -982,16 +1091,69 @@
access: public_access
}
functions {
- return_type: "type-31"
- function_name: "castInterface"
+ return_type: "type-38"
+ function_name: "List<float>::_Node::getRef"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
parameters {
- referenced_type: "type-31"
+ referenced_type: "type-36"
+ default_arg: false
+ is_this_ptr: true
+ }
+ linker_set_key: "_ZN4ListIfE5_Node6getRefEv"
+ access: public_access
+}
+functions {
+ return_type: "type-37"
+ function_name: "List<float>::_Node::getRef"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-40"
+ default_arg: false
+ is_this_ptr: true
+ }
+ linker_set_key: "_ZNK4ListIfE5_Node6getRefEv"
+ access: public_access
+}
+functions {
+ return_type: "type-6"
+ function_name: "List<float>::_Node::PrivateNode"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-36"
+ default_arg: false
+ is_this_ptr: true
+ }
+ linker_set_key: "_ZN4ListIfE5_Node11PrivateNodeEv"
+ access: private_access
+}
+functions {
+ return_type: "type-2"
+ function_name: "ListMangle"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-44"
default_arg: false
is_this_ptr: false
}
parameters {
- referenced_type: "type-39"
+ referenced_type: "type-46"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "_Z10ListMangleP4ListIiEP9StackNodeIiE"
+ access: public_access
+}
+functions {
+ return_type: "type-34"
+ function_name: "castInterface"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
+ parameters {
+ referenced_type: "type-34"
+ default_arg: false
+ is_this_ptr: false
+ }
+ parameters {
+ referenced_type: "type-48"
default_arg: false
is_this_ptr: false
}
@@ -1056,20 +1218,20 @@
name: "float_list_test"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "float_list_test"
- referenced_type: "type-31"
+ referenced_type: "type-34"
access: public_access
}
global_vars {
name: "int_list_test"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "int_list_test"
- referenced_type: "type-35"
+ referenced_type: "type-41"
access: public_access
}
global_vars {
name: "node"
source_file: "/development/vndk/tools/header-checker/tests/input/example1.h"
linker_set_key: "node"
- referenced_type: "type-32"
+ referenced_type: "type-35"
access: public_access
}
diff --git a/vndk/tools/header-checker/tests/expected/example2.h b/vndk/tools/header-checker/tests/expected/example2.h
index 3a46a95..316441c 100644
--- a/vndk/tools/header-checker/tests/expected/example2.h
+++ b/vndk/tools/header-checker/tests/expected/example2.h
@@ -124,10 +124,10 @@
name: "test3::ByeAgain<float>"
size: 8
alignment: 4
- referenced_type: "type-15"
+ referenced_type: "type-16"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
linker_set_key: "test3::ByeAgain<float>"
- self_type: "type-15"
+ self_type: "type-16"
}
fields {
referenced_type: "type-3"
@@ -157,10 +157,10 @@
name: "test3::Outer"
size: 4
alignment: 4
- referenced_type: "type-17"
+ referenced_type: "type-19"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
linker_set_key: "test3::Outer"
- self_type: "type-17"
+ self_type: "type-19"
}
fields {
referenced_type: "type-2"
@@ -179,10 +179,10 @@
name: "test3::Outer::Inner"
size: 4
alignment: 4
- referenced_type: "type-18"
+ referenced_type: "type-20"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
linker_set_key: "test3::Outer::Inner"
- self_type: "type-18"
+ self_type: "type-20"
}
fields {
referenced_type: "type-2"
@@ -225,10 +225,10 @@
name: "test3::Kind"
size: 4
alignment: 4
- referenced_type: "type-16"
+ referenced_type: "type-18"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
linker_set_key: "test3::Kind"
- self_type: "type-16"
+ self_type: "type-18"
}
underlying_type: "type-9"
enum_fields {
@@ -252,7 +252,29 @@
referenced_type: "type-4"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
linker_set_key: "test2::HelloAgain *"
- self_type: "type-7"
+ self_type: "type-6"
+ }
+}
+pointer_types {
+ type_info {
+ name: "test3::ByeAgain<double> *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-13"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ linker_set_key: "test3::ByeAgain<double> *"
+ self_type: "type-15"
+ }
+}
+pointer_types {
+ type_info {
+ name: "test3::ByeAgain<float> *"
+ size: 8
+ alignment: 8
+ referenced_type: "type-16"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ linker_set_key: "test3::ByeAgain<float> *"
+ self_type: "type-17"
}
}
builtin_types {
@@ -286,10 +308,10 @@
name: "void"
size: 0
alignment: 0
- referenced_type: "type-6"
+ referenced_type: "type-7"
source_file: ""
linker_set_key: "void"
- self_type: "type-6"
+ self_type: "type-7"
}
is_unsigned: false
is_integral: false
@@ -359,11 +381,23 @@
}
}
functions {
- return_type: "type-6"
+ return_type: "type-2"
+ function_name: "test2::HelloAgain::again"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ parameters {
+ referenced_type: "type-6"
+ default_arg: false
+ is_this_ptr: true
+ }
+ linker_set_key: "_ZN5test210HelloAgain5againEv"
+ access: public_access
+}
+functions {
+ return_type: "type-7"
function_name: "test2::HelloAgain::~HelloAgain"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
parameters {
- referenced_type: "type-7"
+ referenced_type: "type-6"
default_arg: false
is_this_ptr: true
}
@@ -371,11 +405,11 @@
access: public_access
}
functions {
- return_type: "type-6"
+ return_type: "type-7"
function_name: "test2::HelloAgain::~HelloAgain"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
parameters {
- referenced_type: "type-7"
+ referenced_type: "type-6"
default_arg: false
is_this_ptr: true
}
@@ -383,11 +417,11 @@
access: public_access
}
functions {
- return_type: "type-6"
+ return_type: "type-7"
function_name: "test2::HelloAgain::~HelloAgain"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
parameters {
- referenced_type: "type-7"
+ referenced_type: "type-6"
default_arg: false
is_this_ptr: true
}
@@ -395,6 +429,70 @@
access: public_access
}
functions {
+ return_type: "type-14"
+ function_name: "test3::ByeAgain<double>::method_foo"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ parameters {
+ referenced_type: "type-15"
+ default_arg: false
+ is_this_ptr: true
+ }
+ parameters {
+ referenced_type: "type-14"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "_ZN5test38ByeAgainIdE10method_fooEd"
+ access: public_access
+}
+functions {
+ return_type: "type-3"
+ function_name: "test3::ByeAgain<float>::method_foo"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ parameters {
+ referenced_type: "type-17"
+ default_arg: false
+ is_this_ptr: true
+ }
+ parameters {
+ referenced_type: "type-2"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "_ZN5test38ByeAgainIfE10method_fooEi"
+ access: public_access
+}
+functions {
+ return_type: "type-12"
+ function_name: "test3::Begin"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ parameters {
+ referenced_type: "type-3"
+ default_arg: false
+ is_this_ptr: false
+ }
+ parameters {
+ referenced_type: "type-2"
+ default_arg: false
+ is_this_ptr: false
+ }
+ parameters {
+ referenced_type: "type-2"
+ default_arg: false
+ is_this_ptr: false
+ }
+ template_info {
+ elements {
+ referenced_type: "type-3"
+ }
+ elements {
+ referenced_type: "type-2"
+ }
+ }
+ linker_set_key: "_ZN5test35BeginIfiEEbT_T0_i"
+ access: public_access
+}
+functions {
return_type: "type-12"
function_name: "test3::End"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
@@ -406,6 +504,18 @@
linker_set_key: "_ZN5test33EndEf"
access: public_access
}
+functions {
+ return_type: "type-21"
+ function_name: "test3::Dummy"
+ source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
+ parameters {
+ referenced_type: "type-2"
+ default_arg: false
+ is_this_ptr: false
+ }
+ linker_set_key: "_ZN5test35DummyEi"
+ access: public_access
+}
global_vars {
name: "test2::HelloAgain::hello_forever"
source_file: "/development/vndk/tools/header-checker/tests/input/example2.h"
diff --git a/vndk/tools/header-checker/tests/expected/example4.h b/vndk/tools/header-checker/tests/expected/example4.h
deleted file mode 100644
index 2d0a935..0000000
--- a/vndk/tools/header-checker/tests/expected/example4.h
+++ /dev/null
@@ -1,96 +0,0 @@
-record_types {
- type_info {
- name: "Test"
- size: 16
- alignment: 8
- referenced_type: "type-1"
- source_file: "/development/vndk/tools/header-checker/tests/input/example4.h"
- linker_set_key: "Test"
- self_type: "type-1"
- }
- fields {
- referenced_type: "type-2"
- field_offset: 64
- field_name: "c"
- access: private_access
- }
- vtable_layout {
- vtable_components {
- kind: OffsetToTop
- mangled_component_name: ""
- component_value: 0
- }
- vtable_components {
- kind: RTTI
- mangled_component_name: "_ZTI4Test"
- component_value: 0
- }
- vtable_components {
- kind: FunctionPointer
- mangled_component_name: "_ZN4Test3fooEv"
- component_value: 0
- }
- }
- access: public_access
- record_kind: class_kind
- tag_info {
- unique_id: "_ZTS4Test"
- }
-}
-record_types {
- type_info {
- name: "TestChild"
- size: 16
- alignment: 8
- referenced_type: "type-3"
- source_file: "/development/vndk/tools/header-checker/tests/input/example4.h"
- linker_set_key: "TestChild"
- self_type: "type-3"
- }
- fields {
- referenced_type: "type-2"
- field_offset: 96
- field_name: "d"
- access: private_access
- }
- base_specifiers {
- referenced_type: "type-1"
- is_virtual: false
- access: public_access
- }
- vtable_layout {
- vtable_components {
- kind: OffsetToTop
- mangled_component_name: ""
- component_value: 0
- }
- vtable_components {
- kind: RTTI
- mangled_component_name: "_ZTI9TestChild"
- component_value: 0
- }
- vtable_components {
- kind: FunctionPointer
- mangled_component_name: "_ZN9TestChild3fooEv"
- component_value: 0
- }
- }
- access: public_access
- record_kind: class_kind
- tag_info {
- unique_id: "_ZTS9TestChild"
- }
-}
-builtin_types {
- type_info {
- name: "int"
- size: 4
- alignment: 4
- referenced_type: "type-2"
- source_file: ""
- linker_set_key: "int"
- self_type: "type-2"
- }
- is_unsigned: false
- is_integral: true
-}
diff --git a/vndk/tools/header-checker/tests/expected/func_decl_no_args.h b/vndk/tools/header-checker/tests/expected/func_decl_no_args.h
deleted file mode 100644
index e69de29..0000000
--- a/vndk/tools/header-checker/tests/expected/func_decl_no_args.h
+++ /dev/null
diff --git a/vndk/tools/header-checker/tests/expected/func_decl_one_arg.h b/vndk/tools/header-checker/tests/expected/func_decl_one_arg.h
deleted file mode 100644
index e69de29..0000000
--- a/vndk/tools/header-checker/tests/expected/func_decl_one_arg.h
+++ /dev/null
diff --git a/vndk/tools/header-checker/tests/expected/func_decl_one_arg_ret.h b/vndk/tools/header-checker/tests/expected/func_decl_one_arg_ret.h
deleted file mode 100644
index e69de29..0000000
--- a/vndk/tools/header-checker/tests/expected/func_decl_one_arg_ret.h
+++ /dev/null
diff --git a/vndk/tools/header-checker/tests/expected/func_decl_two_args.h b/vndk/tools/header-checker/tests/expected/func_decl_two_args.h
deleted file mode 100644
index e69de29..0000000
--- a/vndk/tools/header-checker/tests/expected/func_decl_two_args.h
+++ /dev/null
diff --git a/vndk/tools/header-checker/tests/gen_expected_output.py b/vndk/tools/header-checker/tests/gen_expected_output.py
deleted file mode 100755
index f285183..0000000
--- a/vndk/tools/header-checker/tests/gen_expected_output.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-from utils import run_header_abi_dumper
-
-def main():
- sys.stdout.write(run_header_abi_dumper(sys.argv[1], True, sys.argv[2:]))
- return 0
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/vndk/tools/header-checker/tests/input/example1.h b/vndk/tools/header-checker/tests/input/example1.h
index b93eccc..a278d32 100644
--- a/vndk/tools/header-checker/tests/input/example1.h
+++ b/vndk/tools/header-checker/tests/input/example1.h
@@ -37,6 +37,7 @@
cfloat_type cpp_bar;
virtual int again() { return 0; }
CPPHello() : cpp_foo(20), cpp_bar(1.234) {}
+ CPPHello(CPPHello &) = delete;
enum Bla{BLA = 1};
int test_enum() {return CPPHello::BLA;}
};
diff --git a/vndk/tools/header-checker/tests/input/func_decl_no_args.h b/vndk/tools/header-checker/tests/input/func_decl_no_args.h
deleted file mode 100644
index b4bc10f..0000000
--- a/vndk/tools/header-checker/tests/input/func_decl_no_args.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef FUNC_DECL_NO_ARGS_H_
-#define FUNC_DECL_NO_ARGS_H_
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-extern void test_void();
-
-extern char test_char();
-
-extern short test_short();
-
-extern int test_int();
-
-extern long test_long();
-
-extern long long test_long_long();
-
-extern unsigned char test_unsigned_char();
-
-extern unsigned short test_unsigned_short();
-
-extern unsigned int test_unsigned_int();
-
-extern unsigned long test_unsigned_long();
-
-extern unsigned long long test_unsigned_long_long();
-
-extern float test_float();
-
-extern double test_double();
-
-extern long double test_long_double();
-
-#if defined(__cplusplus)
-} // extern "C"
-#endif
-
-#endif // FUNC_DECL_NO_ARGS_H_
diff --git a/vndk/tools/header-checker/tests/input/func_decl_one_arg.h b/vndk/tools/header-checker/tests/input/func_decl_one_arg.h
deleted file mode 100644
index e1c9796..0000000
--- a/vndk/tools/header-checker/tests/input/func_decl_one_arg.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef FUNC_DECL_ONE_ARG_H_
-#define FUNC_DECL_ONE_ARG_H_
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-extern void test_char(char);
-
-extern void test_short(short);
-
-extern void test_int(int);
-
-extern void test_long(long);
-
-extern void test_long_long(long long);
-
-extern void test_unsigned_char(unsigned char);
-
-extern void test_unsigned_short(unsigned short);
-
-extern void test_unsigned_int(unsigned int);
-
-extern void test_unsigned_long(unsigned long);
-
-extern void test_unsigned_long_long(unsigned long long);
-
-extern void test_float(float);
-
-extern void test_double(double);
-
-extern void test_long_double(long double);
-
-#if defined(__cplusplus)
-} // extern "C"
-#endif
-
-#endif // FUNC_DECL_ONE_ARG_H_
diff --git a/vndk/tools/header-checker/tests/input/func_decl_one_arg_ret.h b/vndk/tools/header-checker/tests/input/func_decl_one_arg_ret.h
deleted file mode 100644
index 84d2c63..0000000
--- a/vndk/tools/header-checker/tests/input/func_decl_one_arg_ret.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef FUNC_DECL_ONE_ARG_RET_H_
-#define FUNC_DECL_ONE_ARG_RET_H_
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-extern char test_char(char);
-
-extern short test_short(short);
-
-extern int test_int(int);
-
-extern long test_long(long);
-
-extern long long test_long_long(long long);
-
-extern unsigned char test_unsigned_char(unsigned char);
-
-extern unsigned short test_unsigned_short(unsigned short);
-
-extern unsigned int test_unsigned_int(unsigned int);
-
-extern unsigned long test_unsigned_long(unsigned long);
-
-extern unsigned long long test_unsigned_long_long(unsigned long long);
-
-extern float test_float(float);
-
-extern double test_double(double);
-
-extern long double test_long_double(long double);
-
-#if defined(__cplusplus)
-} // extern "C"
-#endif
-
-#endif // FUNC_DECL_ONE_ARG_RET_H_
diff --git a/vndk/tools/header-checker/tests/input/func_decl_two_args.h b/vndk/tools/header-checker/tests/input/func_decl_two_args.h
deleted file mode 100644
index 5b4c8a3..0000000
--- a/vndk/tools/header-checker/tests/input/func_decl_two_args.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef FUNC_DECL_TWO_ARGS_H_
-#define FUNC_DECL_TWO_ARGS_H_
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-extern void test_char(int, char);
-
-extern void test_short(int, short);
-
-extern void test_int(int, int);
-
-extern void test_long(int, long);
-
-extern void test_long_long(int, long long);
-
-extern void test_unsigned_char(int, unsigned char);
-
-extern void test_unsigned_short(int, unsigned short);
-
-extern void test_unsigned_int(int, unsigned int);
-
-extern void test_unsigned_long(int, unsigned long);
-
-extern void test_unsigned_long_long(int, unsigned long long);
-
-extern void test_unsigned_float(int, float);
-
-extern void test_unsigned_double(int, double);
-
-extern void test_unsigned_long_double(int, long double);
-
-#if defined(__cplusplus)
-} // extern "C"
-#endif
-
-#endif // FUNC_DECL_TWO_ARGS_H_
diff --git a/vndk/tools/header-checker/tests/test.py b/vndk/tools/header-checker/tests/test.py
index da0fc6c..ad2db84 100755
--- a/vndk/tools/header-checker/tests/test.py
+++ b/vndk/tools/header-checker/tests/test.py
@@ -97,22 +97,18 @@
read_output_content(old_ref_dump_path, AOSP_DIR),
read_output_content(new_ref_dump_path, AOSP_DIR))
- def test_func_decl_no_args(self):
- self.run_and_compare_name_c_cpp('func_decl_no_args.h')
+ def test_example1_cpp(self):
+ self.run_and_compare_name_cpp('example1.cpp')
- def test_func_decl_one_arg(self):
- self.run_and_compare_name_c_cpp('func_decl_one_arg.h')
-
- def test_func_decl_two_args(self):
- self.run_and_compare_name_c_cpp('func_decl_two_args.h')
-
- def test_func_decl_one_arg_ret(self):
- self.run_and_compare_name_c_cpp('func_decl_one_arg_ret.h')
-
- def test_example1(self):
+ def test_example1_h(self):
self.run_and_compare_name_cpp('example1.h')
+
+ def test_example2_h(self):
self.run_and_compare_name_cpp('example2.h')
+ def test_example3_h(self):
+ self.run_and_compare_name_cpp('example3.h')
+
def test_libc_and_cpp(self):
self.prepare_and_run_abi_diff_all_archs(
"libc_and_cpp", "libc_and_cpp", 0)
diff --git a/vndk/tools/header-checker/utils/utils.py b/vndk/tools/header-checker/utils/utils.py
index 989af99..fbccbeb 100644
--- a/vndk/tools/header-checker/utils/utils.py
+++ b/vndk/tools/header-checker/utils/utils.py
@@ -19,7 +19,7 @@
BUILTIN_HEADERS_DIR = (
os.path.join(AOSP_DIR, 'bionic', 'libc', 'include'),
os.path.join(AOSP_DIR, 'external', 'libcxx', 'include'),
- os.path.join(AOSP_DIR, 'prebuilts', 'sdk', 'renderscript', 'clang-include'),
+ os.path.join(AOSP_DIR, 'prebuilts', 'clang-tools', 'linux-x86', 'clang-headers'),
)
EXPORTED_HEADERS_DIR = (
@@ -35,6 +35,7 @@
DEFAULT_CPPFLAGS = ['-x', 'c++', '-std=c++11']
DEFAULT_CFLAGS = ['-std=gnu99']
+DEFAULT_HEADER_FLAGS = ["-dump-function-declarations"]
DEFAULT_FORMAT = 'ProtobufTextFormat'
TARGET_ARCHS = ['arm', 'arm64', 'x86', 'x86_64', 'mips', 'mips64']
@@ -120,6 +121,8 @@
cmd += flags
if '-output-format' not in flags:
cmd += ['-output-format', DEFAULT_FORMAT]
+ if input_ext == ".h":
+ cmd += DEFAULT_HEADER_FLAGS
cmd += ['--']
cmd += cflags
if input_ext in ('.cpp', '.cc', '.h'):