diff options
-rw-r--r-- | compiler/Android.bp | 7 | ||||
-rw-r--r-- | compiler/cfi_test.h | 4 | ||||
-rw-r--r-- | compiler/debug/dwarf/dwarf_test.cc | 10 | ||||
-rw-r--r-- | compiler/debug/dwarf/dwarf_test.h | 8 | ||||
-rw-r--r-- | compiler/debug/elf_debug_frame_writer.h | 10 | ||||
-rw-r--r-- | compiler/debug/elf_debug_info_writer.h | 10 | ||||
-rw-r--r-- | compiler/debug/elf_debug_line_writer.h | 10 | ||||
-rw-r--r-- | compiler/debug/elf_debug_loc_writer.h | 4 | ||||
-rw-r--r-- | compiler/debug/elf_debug_writer.cc | 51 | ||||
-rw-r--r-- | compiler/debug/elf_debug_writer.h | 7 | ||||
-rw-r--r-- | compiler/debug/elf_symtab_writer.h | 4 | ||||
-rw-r--r-- | compiler/jni/quick/jni_compiler.cc | 2 | ||||
-rw-r--r-- | compiler/linker/output_stream_test.cc | 7 | ||||
-rw-r--r-- | compiler/optimizing/common_arm.h | 2 | ||||
-rw-r--r-- | compiler/utils/assembler.h | 2 | ||||
-rw-r--r-- | dex2oat/dex2oat.cc | 28 | ||||
-rw-r--r-- | dex2oat/linker/arm/relative_patcher_arm_base.cc | 2 | ||||
-rw-r--r-- | dex2oat/linker/arm64/relative_patcher_arm64.cc | 2 | ||||
-rw-r--r-- | dex2oat/linker/elf_writer.h | 3 | ||||
-rw-r--r-- | dex2oat/linker/elf_writer_quick.cc | 13 | ||||
-rw-r--r-- | dex2oat/linker/elf_writer_test.cc | 2 | ||||
-rw-r--r-- | dex2oat/linker/image_test.h | 4 | ||||
-rw-r--r-- | dex2oat/linker/multi_oat_relative_patcher_test.cc | 2 | ||||
-rw-r--r-- | dex2oat/linker/oat_writer.cc | 6 | ||||
-rw-r--r-- | dex2oat/linker/oat_writer.h | 2 | ||||
-rw-r--r-- | dex2oat/linker/oat_writer_test.cc | 6 | ||||
-rw-r--r-- | dex2oat/linker/relative_patcher.cc | 2 | ||||
-rw-r--r-- | dex2oat/linker/relative_patcher.h | 2 | ||||
-rw-r--r-- | dex2oat/linker/relative_patcher_test.h | 2 | ||||
-rw-r--r-- | libelffile/Android.bp | 55 | ||||
-rw-r--r-- | libelffile/dwarf/debug_abbrev_writer.h (renamed from compiler/debug/dwarf/debug_abbrev_writer.h) | 10 | ||||
-rw-r--r-- | libelffile/dwarf/debug_frame_opcode_writer.h (renamed from compiler/debug/dwarf/debug_frame_opcode_writer.h) | 12 | ||||
-rw-r--r-- | libelffile/dwarf/debug_info_entry_writer.h (renamed from compiler/debug/dwarf/debug_info_entry_writer.h) | 14 | ||||
-rw-r--r-- | libelffile/dwarf/debug_line_opcode_writer.h (renamed from compiler/debug/dwarf/debug_line_opcode_writer.h) | 10 | ||||
-rw-r--r-- | libelffile/dwarf/dwarf_constants.h (renamed from compiler/debug/dwarf/dwarf_constants.h) | 6 | ||||
-rw-r--r-- | libelffile/dwarf/expression.h (renamed from compiler/debug/dwarf/expression.h) | 10 | ||||
-rw-r--r-- | libelffile/dwarf/headers.h (renamed from compiler/debug/dwarf/headers.h) | 18 | ||||
-rw-r--r-- | libelffile/dwarf/register.h (renamed from compiler/debug/dwarf/register.h) | 6 | ||||
-rw-r--r-- | libelffile/dwarf/writer.h (renamed from compiler/debug/dwarf/writer.h) | 6 | ||||
-rw-r--r-- | libelffile/elf/CPPLINT.cfg (renamed from runtime/CPPLINT.cfg) | 0 | ||||
-rw-r--r-- | libelffile/elf/elf.h (renamed from runtime/elf.h) | 9 | ||||
-rw-r--r-- | libelffile/elf/elf_builder.h (renamed from compiler/linker/elf_builder.h) | 124 | ||||
-rw-r--r-- | libelffile/elf/elf_debug_reader.h (renamed from compiler/debug/elf_debug_reader.h) | 12 | ||||
-rw-r--r-- | libelffile/elf/xz_utils.cc (renamed from compiler/debug/xz_utils.cc) | 2 | ||||
-rw-r--r-- | libelffile/elf/xz_utils.h (renamed from compiler/debug/xz_utils.h) | 8 | ||||
-rw-r--r-- | libelffile/stream/buffered_output_stream.cc (renamed from compiler/linker/buffered_output_stream.cc) | 2 | ||||
-rw-r--r-- | libelffile/stream/buffered_output_stream.h (renamed from compiler/linker/buffered_output_stream.h) | 8 | ||||
-rw-r--r-- | libelffile/stream/error_delaying_output_stream.h (renamed from compiler/linker/error_delaying_output_stream.h) | 8 | ||||
-rw-r--r-- | libelffile/stream/file_output_stream.cc (renamed from compiler/linker/file_output_stream.cc) | 2 | ||||
-rw-r--r-- | libelffile/stream/file_output_stream.h (renamed from compiler/linker/file_output_stream.h) | 8 | ||||
-rw-r--r-- | libelffile/stream/output_stream.cc (renamed from compiler/linker/output_stream.cc) | 2 | ||||
-rw-r--r-- | libelffile/stream/output_stream.h (renamed from compiler/linker/output_stream.h) | 8 | ||||
-rw-r--r-- | libelffile/stream/vector_output_stream.cc (renamed from compiler/linker/vector_output_stream.cc) | 2 | ||||
-rw-r--r-- | libelffile/stream/vector_output_stream.h (renamed from compiler/linker/vector_output_stream.h) | 8 | ||||
-rw-r--r-- | oatdump/oatdump.cc | 21 | ||||
-rw-r--r-- | runtime/Android.bp | 3 | ||||
-rw-r--r-- | runtime/elf_file.h | 2 | ||||
-rw-r--r-- | runtime/elf_file_impl.h | 2 | ||||
-rw-r--r-- | runtime/elf_utils.h | 2 | ||||
-rw-r--r-- | runtime/oat_file.cc | 3 |
60 files changed, 255 insertions, 342 deletions
diff --git a/compiler/Android.bp b/compiler/Android.bp index 341727dc0d..4ad59e121c 100644 --- a/compiler/Android.bp +++ b/compiler/Android.bp @@ -26,17 +26,12 @@ art_cc_defaults { srcs: [ "compiled_method.cc", "debug/elf_debug_writer.cc", - "debug/xz_utils.cc", "dex/inline_method_analyser.cc", "dex/verified_method.cc", "dex/verification_results.cc", "driver/compiled_method_storage.cc", "driver/compiler_options.cc", "driver/dex_compilation_unit.cc", - "linker/buffered_output_stream.cc", - "linker/file_output_stream.cc", - "linker/output_stream.cc", - "linker/vector_output_stream.cc", "jit/jit_compiler.cc", "jit/jit_logger.cc", "jni/quick/calling_convention.cc", @@ -254,6 +249,7 @@ art_cc_library { "libprofile", "libdexfile", ], + whole_static_libs: ["libelffile"], target: { android: { @@ -317,6 +313,7 @@ art_cc_library { "libprofiled", "libdexfiled", ], + whole_static_libs: ["libelffiled"], } cc_defaults { diff --git a/compiler/cfi_test.h b/compiler/cfi_test.h index 2fc81c958a..9755ef12d0 100644 --- a/compiler/cfi_test.h +++ b/compiler/cfi_test.h @@ -23,10 +23,10 @@ #include "arch/instruction_set.h" #include "base/enums.h" -#include "debug/dwarf/dwarf_constants.h" #include "debug/dwarf/dwarf_test.h" -#include "debug/dwarf/headers.h" #include "disassembler.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/headers.h" #include "gtest/gtest.h" #include "thread.h" diff --git a/compiler/debug/dwarf/dwarf_test.cc b/compiler/debug/dwarf/dwarf_test.cc index 5491596dd8..5946af8d55 100644 --- a/compiler/debug/dwarf/dwarf_test.cc +++ b/compiler/debug/dwarf/dwarf_test.cc @@ -16,11 +16,11 @@ #include "dwarf_test.h" -#include "debug/dwarf/debug_frame_opcode_writer.h" -#include "debug/dwarf/debug_info_entry_writer.h" -#include "debug/dwarf/debug_line_opcode_writer.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/headers.h" +#include "dwarf/debug_frame_opcode_writer.h" +#include "dwarf/debug_info_entry_writer.h" +#include "dwarf/debug_line_opcode_writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/headers.h" #include "gtest/gtest.h" namespace art { diff --git a/compiler/debug/dwarf/dwarf_test.h b/compiler/debug/dwarf/dwarf_test.h index 6b039a7b5f..e51f807dd4 100644 --- a/compiler/debug/dwarf/dwarf_test.h +++ b/compiler/debug/dwarf/dwarf_test.h @@ -29,9 +29,9 @@ #include "base/os.h" #include "base/unix_file/fd_file.h" #include "common_compiler_test.h" +#include "elf/elf_builder.h" #include "gtest/gtest.h" -#include "linker/elf_builder.h" -#include "linker/file_output_stream.h" +#include "stream/file_output_stream.h" namespace art { namespace dwarf { @@ -63,8 +63,8 @@ class DwarfTest : public CommonCompilerTest { InstructionSet isa = (sizeof(typename ElfTypes::Addr) == 8) ? InstructionSet::kX86_64 : InstructionSet::kX86; ScratchFile file; - linker::FileOutputStream output_stream(file.GetFile()); - linker::ElfBuilder<ElfTypes> builder(isa, nullptr, &output_stream); + FileOutputStream output_stream(file.GetFile()); + ElfBuilder<ElfTypes> builder(isa, &output_stream); builder.Start(); if (!debug_info_data_.empty()) { builder.WriteSection(".debug_info", &debug_info_data_); diff --git a/compiler/debug/elf_debug_frame_writer.h b/compiler/debug/elf_debug_frame_writer.h index 1f827eaefc..44b70ff930 100644 --- a/compiler/debug/elf_debug_frame_writer.h +++ b/compiler/debug/elf_debug_frame_writer.h @@ -20,11 +20,11 @@ #include <vector> #include "arch/instruction_set.h" -#include "debug/dwarf/debug_frame_opcode_writer.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/headers.h" #include "debug/method_debug_info.h" -#include "linker/elf_builder.h" +#include "dwarf/debug_frame_opcode_writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/headers.h" +#include "elf/elf_builder.h" namespace art { namespace debug { @@ -166,7 +166,7 @@ static void WriteCIE(InstructionSet isa, /*inout*/ std::vector<uint8_t>* buffer) } template<typename ElfTypes> -void WriteCFISection(linker::ElfBuilder<ElfTypes>* builder, +void WriteCFISection(ElfBuilder<ElfTypes>* builder, const ArrayRef<const MethodDebugInfo>& method_infos) { typedef typename ElfTypes::Addr Elf_Addr; diff --git a/compiler/debug/elf_debug_info_writer.h b/compiler/debug/elf_debug_info_writer.h index 05a4a3e32b..8eead4ecef 100644 --- a/compiler/debug/elf_debug_info_writer.h +++ b/compiler/debug/elf_debug_info_writer.h @@ -22,17 +22,17 @@ #include <vector> #include "art_field-inl.h" -#include "debug/dwarf/debug_abbrev_writer.h" -#include "debug/dwarf/debug_info_entry_writer.h" #include "debug/elf_compilation_unit.h" #include "debug/elf_debug_loc_writer.h" #include "debug/method_debug_info.h" #include "dex/code_item_accessors-inl.h" #include "dex/dex_file-inl.h" #include "dex/dex_file.h" +#include "dwarf/debug_abbrev_writer.h" +#include "dwarf/debug_info_entry_writer.h" +#include "elf/elf_builder.h" #include "heap_poisoning.h" #include "linear_alloc.h" -#include "linker/elf_builder.h" #include "mirror/array.h" #include "mirror/class-inl.h" #include "mirror/class.h" @@ -59,7 +59,7 @@ class ElfDebugInfoWriter { using Elf_Addr = typename ElfTypes::Addr; public: - explicit ElfDebugInfoWriter(linker::ElfBuilder<ElfTypes>* builder) + explicit ElfDebugInfoWriter(ElfBuilder<ElfTypes>* builder) : builder_(builder), debug_abbrev_(&debug_abbrev_buffer_) { } @@ -80,7 +80,7 @@ class ElfDebugInfoWriter { } private: - linker::ElfBuilder<ElfTypes>* builder_; + ElfBuilder<ElfTypes>* builder_; std::vector<uint8_t> debug_abbrev_buffer_; dwarf::DebugAbbrevWriter<> debug_abbrev_; std::vector<uint8_t> debug_loc_; diff --git a/compiler/debug/elf_debug_line_writer.h b/compiler/debug/elf_debug_line_writer.h index f95912a2d1..479725be99 100644 --- a/compiler/debug/elf_debug_line_writer.h +++ b/compiler/debug/elf_debug_line_writer.h @@ -20,12 +20,12 @@ #include <unordered_set> #include <vector> -#include "debug/dwarf/debug_line_opcode_writer.h" -#include "debug/dwarf/headers.h" #include "debug/elf_compilation_unit.h" #include "debug/src_map_elem.h" #include "dex/dex_file-inl.h" -#include "linker/elf_builder.h" +#include "dwarf/debug_line_opcode_writer.h" +#include "dwarf/headers.h" +#include "elf/elf_builder.h" #include "oat_file.h" #include "stack_map.h" @@ -39,7 +39,7 @@ class ElfDebugLineWriter { using Elf_Addr = typename ElfTypes::Addr; public: - explicit ElfDebugLineWriter(linker::ElfBuilder<ElfTypes>* builder) : builder_(builder) { + explicit ElfDebugLineWriter(ElfBuilder<ElfTypes>* builder) : builder_(builder) { } void Start() { @@ -273,7 +273,7 @@ class ElfDebugLineWriter { } private: - linker::ElfBuilder<ElfTypes>* builder_; + ElfBuilder<ElfTypes>* builder_; }; } // namespace debug diff --git a/compiler/debug/elf_debug_loc_writer.h b/compiler/debug/elf_debug_loc_writer.h index b663291b4d..a5a84bbb10 100644 --- a/compiler/debug/elf_debug_loc_writer.h +++ b/compiler/debug/elf_debug_loc_writer.h @@ -22,9 +22,9 @@ #include "arch/instruction_set.h" #include "compiled_method.h" -#include "debug/dwarf/debug_info_entry_writer.h" -#include "debug/dwarf/register.h" #include "debug/method_debug_info.h" +#include "dwarf/debug_info_entry_writer.h" +#include "dwarf/register.h" #include "stack_map.h" namespace art { diff --git a/compiler/debug/elf_debug_writer.cc b/compiler/debug/elf_debug_writer.cc index 3b7363be6a..cc74717edb 100644 --- a/compiler/debug/elf_debug_writer.cc +++ b/compiler/debug/elf_debug_writer.cc @@ -22,20 +22,20 @@ #include "base/array_ref.h" #include "base/stl_util.h" -#include "debug/dwarf/dwarf_constants.h" #include "debug/elf_compilation_unit.h" #include "debug/elf_debug_frame_writer.h" #include "debug/elf_debug_info_writer.h" #include "debug/elf_debug_line_writer.h" #include "debug/elf_debug_loc_writer.h" -#include "debug/elf_debug_reader.h" #include "debug/elf_symtab_writer.h" #include "debug/method_debug_info.h" -#include "debug/xz_utils.h" -#include "elf.h" -#include "linker/elf_builder.h" -#include "linker/vector_output_stream.h" +#include "dwarf/dwarf_constants.h" +#include "elf/elf.h" +#include "elf/elf_builder.h" +#include "elf/elf_debug_reader.h" +#include "elf/xz_utils.h" #include "oat.h" +#include "stream/vector_output_stream.h" namespace art { namespace debug { @@ -43,7 +43,7 @@ namespace debug { using ElfRuntimeTypes = std::conditional<sizeof(void*) == 4, ElfTypes32, ElfTypes64>::type; template <typename ElfTypes> -void WriteDebugInfo(linker::ElfBuilder<ElfTypes>* builder, +void WriteDebugInfo(ElfBuilder<ElfTypes>* builder, const DebugInfo& debug_info) { // Write .strtab and .symtab. WriteDebugSymbols(builder, /* mini-debug-info= */ false, debug_info); @@ -112,7 +112,7 @@ void WriteDebugInfo(linker::ElfBuilder<ElfTypes>* builder, template <typename ElfTypes> static std::vector<uint8_t> MakeMiniDebugInfoInternal( InstructionSet isa, - const InstructionSetFeatures* features, + const InstructionSetFeatures* features ATTRIBUTE_UNUSED, typename ElfTypes::Addr text_section_address, size_t text_section_size, typename ElfTypes::Addr dex_section_address, @@ -120,9 +120,8 @@ static std::vector<uint8_t> MakeMiniDebugInfoInternal( const DebugInfo& debug_info) { std::vector<uint8_t> buffer; buffer.reserve(KB); - linker::VectorOutputStream out("Mini-debug-info ELF file", &buffer); - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( - new linker::ElfBuilder<ElfTypes>(isa, features, &out)); + VectorOutputStream out("Mini-debug-info ELF file", &buffer); + std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, &out)); builder->Start(/* write_program_headers= */ false); // Mirror ELF sections as NOBITS since the added symbols will reference them. if (text_section_size != 0) { @@ -174,7 +173,7 @@ std::vector<uint8_t> MakeMiniDebugInfo( std::vector<uint8_t> MakeElfFileForJIT( InstructionSet isa, - const InstructionSetFeatures* features, + const InstructionSetFeatures* features ATTRIBUTE_UNUSED, bool mini_debug_info, const MethodDebugInfo& method_info) { using ElfTypes = ElfRuntimeTypes; @@ -184,9 +183,8 @@ std::vector<uint8_t> MakeElfFileForJIT( debug_info.compiled_methods = ArrayRef<const MethodDebugInfo>(&method_info, 1); std::vector<uint8_t> buffer; buffer.reserve(KB); - linker::VectorOutputStream out("Debug ELF file", &buffer); - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( - new linker::ElfBuilder<ElfTypes>(isa, features, &out)); + VectorOutputStream out("Debug ELF file", &buffer); + std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, &out)); // No program headers since the ELF file is not linked and has no allocated sections. builder->Start(/* write_program_headers= */ false); builder->GetText()->AllocateVirtualMemory(method_info.code_address, method_info.code_size); @@ -230,7 +228,7 @@ std::vector<uint8_t> MakeElfFileForJIT( // Combine several mini-debug-info ELF files into one, while filtering some symbols. std::vector<uint8_t> PackElfFileForJIT( InstructionSet isa, - const InstructionSetFeatures* features, + const InstructionSetFeatures* features ATTRIBUTE_UNUSED, std::vector<ArrayRef<const uint8_t>>& added_elf_files, std::vector<const void*>& removed_symbols, /*out*/ size_t* num_symbols) { @@ -250,9 +248,8 @@ std::vector<uint8_t> PackElfFileForJIT( std::vector<uint8_t> inner_elf_file; { inner_elf_file.reserve(1 * KB); // Approximate size of ELF file with a single symbol. - linker::VectorOutputStream out("Mini-debug-info ELF file for JIT", &inner_elf_file); - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( - new linker::ElfBuilder<ElfTypes>(isa, features, &out)); + VectorOutputStream out("Mini-debug-info ELF file for JIT", &inner_elf_file); + std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, &out)); builder->Start(/*write_program_headers=*/ false); auto* text = builder->GetText(); auto* strtab = builder->GetStrTab(); @@ -328,9 +325,8 @@ std::vector<uint8_t> PackElfFileForJIT( XzCompress(ArrayRef<const uint8_t>(inner_elf_file), &gnu_debugdata); outer_elf_file.reserve(KB + gnu_debugdata.size()); - linker::VectorOutputStream out("Mini-debug-info ELF file for JIT", &outer_elf_file); - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( - new linker::ElfBuilder<ElfTypes>(isa, features, &out)); + VectorOutputStream out("Mini-debug-info ELF file for JIT", &outer_elf_file); + std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, &out)); builder->Start(/*write_program_headers=*/ false); if (max_address > min_address) { builder->GetText()->AllocateVirtualMemory(min_address, max_address - min_address); @@ -345,16 +341,15 @@ std::vector<uint8_t> PackElfFileForJIT( std::vector<uint8_t> WriteDebugElfFileForClasses( InstructionSet isa, - const InstructionSetFeatures* features, + const InstructionSetFeatures* features ATTRIBUTE_UNUSED, const ArrayRef<mirror::Class*>& types) REQUIRES_SHARED(Locks::mutator_lock_) { using ElfTypes = ElfRuntimeTypes; CHECK_EQ(sizeof(ElfTypes::Addr), static_cast<size_t>(GetInstructionSetPointerSize(isa))); std::vector<uint8_t> buffer; buffer.reserve(KB); - linker::VectorOutputStream out("Debug ELF file", &buffer); - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( - new linker::ElfBuilder<ElfTypes>(isa, features, &out)); + VectorOutputStream out("Debug ELF file", &buffer); + std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, &out)); // No program headers since the ELF file is not linked and has no allocated sections. builder->Start(/* write_program_headers= */ false); ElfDebugInfoWriter<ElfTypes> info_writer(builder.get()); @@ -370,10 +365,10 @@ std::vector<uint8_t> WriteDebugElfFileForClasses( // Explicit instantiations template void WriteDebugInfo<ElfTypes32>( - linker::ElfBuilder<ElfTypes32>* builder, + ElfBuilder<ElfTypes32>* builder, const DebugInfo& debug_info); template void WriteDebugInfo<ElfTypes64>( - linker::ElfBuilder<ElfTypes64>* builder, + ElfBuilder<ElfTypes64>* builder, const DebugInfo& debug_info); } // namespace debug diff --git a/compiler/debug/elf_debug_writer.h b/compiler/debug/elf_debug_writer.h index 90580b4676..14a5edbace 100644 --- a/compiler/debug/elf_debug_writer.h +++ b/compiler/debug/elf_debug_writer.h @@ -19,12 +19,13 @@ #include <vector> +#include "arch/instruction_set_features.h" #include "base/array_ref.h" #include "base/macros.h" #include "base/mutex.h" -#include "debug/dwarf/dwarf_constants.h" #include "debug/debug_info.h" -#include "linker/elf_builder.h" +#include "dwarf/dwarf_constants.h" +#include "elf/elf_builder.h" namespace art { class OatHeader; @@ -36,7 +37,7 @@ struct MethodDebugInfo; template <typename ElfTypes> void WriteDebugInfo( - linker::ElfBuilder<ElfTypes>* builder, + ElfBuilder<ElfTypes>* builder, const DebugInfo& debug_info); std::vector<uint8_t> MakeMiniDebugInfo( diff --git a/compiler/debug/elf_symtab_writer.h b/compiler/debug/elf_symtab_writer.h index 7a8e29191a..2ed3a4b1a4 100644 --- a/compiler/debug/elf_symtab_writer.h +++ b/compiler/debug/elf_symtab_writer.h @@ -25,7 +25,7 @@ #include "debug/method_debug_info.h" #include "dex/dex_file-inl.h" #include "dex/code_item_accessors.h" -#include "linker/elf_builder.h" +#include "elf/elf_builder.h" namespace art { namespace debug { @@ -45,7 +45,7 @@ constexpr bool kGenerateArmMappingSymbol = true; constexpr const char* kDexFileSymbolName = "$dexfile"; template <typename ElfTypes> -static void WriteDebugSymbols(linker::ElfBuilder<ElfTypes>* builder, +static void WriteDebugSymbols(ElfBuilder<ElfTypes>* builder, bool mini_debug_info, const DebugInfo& debug_info) { uint64_t mapping_symbol_address = std::numeric_limits<uint64_t>::max(); diff --git a/compiler/jni/quick/jni_compiler.cc b/compiler/jni/quick/jni_compiler.cc index bdbf4293f4..70540783b6 100644 --- a/compiler/jni/quick/jni_compiler.cc +++ b/compiler/jni/quick/jni_compiler.cc @@ -32,7 +32,7 @@ #include "base/utils.h" #include "calling_convention.h" #include "class_linker.h" -#include "debug/dwarf/debug_frame_opcode_writer.h" +#include "dwarf/debug_frame_opcode_writer.h" #include "dex/dex_file-inl.h" #include "driver/compiler_options.h" #include "entrypoints/quick/quick_entrypoints.h" diff --git a/compiler/linker/output_stream_test.cc b/compiler/linker/output_stream_test.cc index bcb129c2da..00231b1240 100644 --- a/compiler/linker/output_stream_test.cc +++ b/compiler/linker/output_stream_test.cc @@ -14,15 +14,14 @@ * limitations under the License. */ -#include "file_output_stream.h" -#include "vector_output_stream.h" - #include <android-base/logging.h> #include "base/macros.h" #include "base/unix_file/fd_file.h" -#include "buffered_output_stream.h" #include "common_runtime_test.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" +#include "stream/vector_output_stream.h" namespace art { namespace linker { diff --git a/compiler/optimizing/common_arm.h b/compiler/optimizing/common_arm.h index 356ff9f41f..7d3af9521a 100644 --- a/compiler/optimizing/common_arm.h +++ b/compiler/optimizing/common_arm.h @@ -17,7 +17,7 @@ #ifndef ART_COMPILER_OPTIMIZING_COMMON_ARM_H_ #define ART_COMPILER_OPTIMIZING_COMMON_ARM_H_ -#include "debug/dwarf/register.h" +#include "dwarf/register.h" #include "instruction_simplifier_shared.h" #include "locations.h" #include "nodes.h" diff --git a/compiler/utils/assembler.h b/compiler/utils/assembler.h index 05372251dc..aa21f862de 100644 --- a/compiler/utils/assembler.h +++ b/compiler/utils/assembler.h @@ -30,7 +30,7 @@ #include "base/enums.h" #include "base/macros.h" #include "base/memory_region.h" -#include "debug/dwarf/debug_frame_opcode_writer.h" +#include "dwarf/debug_frame_opcode_writer.h" #include "label.h" #include "managed_register.h" #include "mips/constants_mips.h" diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc index 71f71d11e4..d04fa4e0d2 100644 --- a/dex2oat/dex2oat.cc +++ b/dex2oat/dex2oat.cc @@ -61,13 +61,13 @@ #include "compiler_callbacks.h" #include "debug/elf_debug_writer.h" #include "debug/method_debug_info.h" -#include "dexlayout.h" #include "dex/descriptors_names.h" #include "dex/dex_file-inl.h" #include "dex/quick_compiler_callbacks.h" #include "dex/verification_results.h" #include "dex2oat_options.h" #include "dex2oat_return_codes.h" +#include "dexlayout.h" #include "driver/compiler_driver.h" #include "driver/compiler_options.h" #include "driver/compiler_options_map-inl.h" @@ -77,10 +77,8 @@ #include "gc/verification.h" #include "interpreter/unstarted_runtime.h" #include "jni/java_vm_ext.h" -#include "linker/buffered_output_stream.h" #include "linker/elf_writer.h" #include "linker/elf_writer_quick.h" -#include "linker/file_output_stream.h" #include "linker/image_writer.h" #include "linker/multi_oat_relative_patcher.h" #include "linker/oat_writer.h" @@ -94,6 +92,8 @@ #include "runtime.h" #include "runtime_options.h" #include "scoped_thread_state_change-inl.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" #include "vdex_file.h" #include "verifier/verifier_deps.h" #include "well_known_classes.h" @@ -1323,9 +1323,9 @@ class Dex2Oat final { // Note: we're only invalidating the magic data in the file, as dex2oat needs the rest of // the information to remain valid. if (update_input_vdex_) { - std::unique_ptr<linker::BufferedOutputStream> vdex_out = - std::make_unique<linker::BufferedOutputStream>( - std::make_unique<linker::FileOutputStream>(vdex_files_.back().get())); + std::unique_ptr<BufferedOutputStream> vdex_out = + std::make_unique<BufferedOutputStream>( + std::make_unique<FileOutputStream>(vdex_files_.back().get())); if (!vdex_out->WriteFully(&VdexFile::VerifierDepsHeader::kVdexInvalidMagic, arraysize(VdexFile::VerifierDepsHeader::kVdexInvalidMagic))) { PLOG(ERROR) << "Failed to invalidate vdex header. File: " << vdex_out->GetLocation(); @@ -1962,9 +1962,9 @@ class Dex2Oat final { verifier::VerifierDeps* verifier_deps = callbacks_->GetVerifierDeps(); for (size_t i = 0, size = oat_files_.size(); i != size; ++i) { File* vdex_file = vdex_files_[i].get(); - std::unique_ptr<linker::BufferedOutputStream> vdex_out = - std::make_unique<linker::BufferedOutputStream>( - std::make_unique<linker::FileOutputStream>(vdex_file)); + std::unique_ptr<BufferedOutputStream> vdex_out = + std::make_unique<BufferedOutputStream>( + std::make_unique<FileOutputStream>(vdex_file)); if (!oat_writers_[i]->WriteVerifierDeps(vdex_out.get(), verifier_deps)) { LOG(ERROR) << "Failed to write verifier dependencies into VDEX " << vdex_file->GetPath(); @@ -2022,7 +2022,7 @@ class Dex2Oat final { debug::DebugInfo debug_info = oat_writer->GetDebugInfo(); // Keep the variable alive. elf_writer->PrepareDebugInfo(debug_info); // Processes the data on background thread. - linker::OutputStream*& rodata = rodata_[i]; + OutputStream*& rodata = rodata_[i]; DCHECK(rodata != nullptr); if (!oat_writer->WriteRodata(rodata)) { LOG(ERROR) << "Failed to write .rodata section to the ELF file " << oat_file->GetPath(); @@ -2031,7 +2031,7 @@ class Dex2Oat final { elf_writer->EndRoData(rodata); rodata = nullptr; - linker::OutputStream* text = elf_writer->StartText(); + OutputStream* text = elf_writer->StartText(); if (!oat_writer->WriteCode(text)) { LOG(ERROR) << "Failed to write .text section to the ELF file " << oat_file->GetPath(); return false; @@ -2039,7 +2039,7 @@ class Dex2Oat final { elf_writer->EndText(text); if (oat_writer->GetDataBimgRelRoSize() != 0u) { - linker::OutputStream* data_bimg_rel_ro = elf_writer->StartDataBimgRelRo(); + OutputStream* data_bimg_rel_ro = elf_writer->StartDataBimgRelRo(); if (!oat_writer->WriteDataBimgRelRo(data_bimg_rel_ro)) { LOG(ERROR) << "Failed to write .data.bimg.rel.ro section to the ELF file " << oat_file->GetPath(); @@ -2734,8 +2734,8 @@ class Dex2Oat final { std::vector<std::unique_ptr<linker::ElfWriter>> elf_writers_; std::vector<std::unique_ptr<linker::OatWriter>> oat_writers_; - std::vector<linker::OutputStream*> rodata_; - std::vector<std::unique_ptr<linker::OutputStream>> vdex_out_; + std::vector<OutputStream*> rodata_; + std::vector<std::unique_ptr<OutputStream>> vdex_out_; std::unique_ptr<linker::ImageWriter> image_writer_; std::unique_ptr<CompilerDriver> driver_; diff --git a/dex2oat/linker/arm/relative_patcher_arm_base.cc b/dex2oat/linker/arm/relative_patcher_arm_base.cc index a2ba339278..828dc5d7c3 100644 --- a/dex2oat/linker/arm/relative_patcher_arm_base.cc +++ b/dex2oat/linker/arm/relative_patcher_arm_base.cc @@ -21,9 +21,9 @@ #include "debug/method_debug_info.h" #include "dex/dex_file_types.h" #include "linker/linker_patch.h" -#include "linker/output_stream.h" #include "oat.h" #include "oat_quick_method_header.h" +#include "stream/output_stream.h" namespace art { namespace linker { diff --git a/dex2oat/linker/arm64/relative_patcher_arm64.cc b/dex2oat/linker/arm64/relative_patcher_arm64.cc index 0497d4f966..ee8d4d1a7f 100644 --- a/dex2oat/linker/arm64/relative_patcher_arm64.cc +++ b/dex2oat/linker/arm64/relative_patcher_arm64.cc @@ -26,13 +26,13 @@ #include "entrypoints/quick/quick_entrypoints_enum.h" #include "heap_poisoning.h" #include "linker/linker_patch.h" -#include "linker/output_stream.h" #include "lock_word.h" #include "mirror/array-inl.h" #include "mirror/object.h" #include "oat.h" #include "oat_quick_method_header.h" #include "read_barrier.h" +#include "stream/output_stream.h" #include "utils/arm64/assembler_arm64.h" namespace art { diff --git a/dex2oat/linker/elf_writer.h b/dex2oat/linker/elf_writer.h index 637330c835..a60c708bdb 100644 --- a/dex2oat/linker/elf_writer.h +++ b/dex2oat/linker/elf_writer.h @@ -31,6 +31,7 @@ namespace art { class ElfFile; +class OutputStream; namespace debug { struct MethodDebugInfo; @@ -38,8 +39,6 @@ struct MethodDebugInfo; namespace linker { -class OutputStream; - class ElfWriter { public: // Looks up information about location of oat file in elf file container. diff --git a/dex2oat/linker/elf_writer_quick.cc b/dex2oat/linker/elf_writer_quick.cc index 7e0f29dfa2..65aa5a9887 100644 --- a/dex2oat/linker/elf_writer_quick.cc +++ b/dex2oat/linker/elf_writer_quick.cc @@ -31,11 +31,11 @@ #include "debug/elf_debug_writer.h" #include "debug/method_debug_info.h" #include "driver/compiler_options.h" -#include "elf.h" +#include "elf/elf.h" +#include "elf/elf_builder.h" #include "elf_utils.h" -#include "linker/buffered_output_stream.h" -#include "linker/elf_builder.h" -#include "linker/file_output_stream.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" #include "thread-current-inl.h" #include "thread_pool.h" @@ -159,7 +159,6 @@ ElfWriterQuick<ElfTypes>::ElfWriterQuick(const CompilerOptions& compiler_options output_stream_( std::make_unique<BufferedOutputStream>(std::make_unique<FileOutputStream>(elf_file))), builder_(new ElfBuilder<ElfTypes>(compiler_options_.GetInstructionSet(), - compiler_options_.GetInstructionSetFeatures(), output_stream_.get())) {} template <typename ElfTypes> @@ -243,10 +242,6 @@ void ElfWriterQuick<ElfTypes>::EndDataBimgRelRo(OutputStream* data_bimg_rel_ro) template <typename ElfTypes> void ElfWriterQuick<ElfTypes>::WriteDynamicSection() { - if (builder_->GetIsa() == InstructionSet::kMips || - builder_->GetIsa() == InstructionSet::kMips64) { - builder_->WriteMIPSabiflagsSection(); - } builder_->WriteDynamicSection(); } diff --git a/dex2oat/linker/elf_writer_test.cc b/dex2oat/linker/elf_writer_test.cc index d8a360add2..c1ff8f2988 100644 --- a/dex2oat/linker/elf_writer_test.cc +++ b/dex2oat/linker/elf_writer_test.cc @@ -23,10 +23,10 @@ #include "base/unix_file/fd_file.h" #include "base/utils.h" #include "common_compiler_driver_test.h" +#include "elf/elf_builder.h" #include "elf_file.h" #include "elf_file_impl.h" #include "elf_writer_quick.h" -#include "linker/elf_builder.h" #include "oat.h" namespace art { diff --git a/dex2oat/linker/image_test.h b/dex2oat/linker/image_test.h index aa4fb70aba..7209fbfce5 100644 --- a/dex2oat/linker/image_test.h +++ b/dex2oat/linker/image_test.h @@ -43,16 +43,16 @@ #include "driver/compiler_options.h" #include "gc/space/image_space.h" #include "image_writer.h" -#include "linker/buffered_output_stream.h" #include "linker/elf_writer.h" #include "linker/elf_writer_quick.h" -#include "linker/file_output_stream.h" #include "linker/multi_oat_relative_patcher.h" #include "lock_word.h" #include "mirror/object-inl.h" #include "oat_writer.h" #include "scoped_thread_state_change-inl.h" #include "signal_catcher.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" namespace art { namespace linker { diff --git a/dex2oat/linker/multi_oat_relative_patcher_test.cc b/dex2oat/linker/multi_oat_relative_patcher_test.cc index 2610561683..274084f030 100644 --- a/dex2oat/linker/multi_oat_relative_patcher_test.cc +++ b/dex2oat/linker/multi_oat_relative_patcher_test.cc @@ -20,7 +20,7 @@ #include "debug/method_debug_info.h" #include "gtest/gtest.h" #include "linker/linker_patch.h" -#include "linker/vector_output_stream.h" +#include "stream/vector_output_stream.h" namespace art { namespace linker { diff --git a/dex2oat/linker/oat_writer.cc b/dex2oat/linker/oat_writer.cc index a6fb2dea41..897278f6c8 100644 --- a/dex2oat/linker/oat_writer.cc +++ b/dex2oat/linker/oat_writer.cc @@ -54,12 +54,9 @@ #include "gc/space/space.h" #include "handle_scope-inl.h" #include "image_writer.h" -#include "linker/buffered_output_stream.h" -#include "linker/file_output_stream.h" #include "linker/index_bss_mapping_encoder.h" #include "linker/linker_patch.h" #include "linker/multi_oat_relative_patcher.h" -#include "linker/output_stream.h" #include "mirror/array.h" #include "mirror/class_loader.h" #include "mirror/dex_cache-inl.h" @@ -69,6 +66,9 @@ #include "quicken_info.h" #include "scoped_thread_state_change-inl.h" #include "stack_map.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" +#include "stream/output_stream.h" #include "utils/dex_cache_arrays_layout-inl.h" #include "vdex_file.h" #include "verifier/verifier_deps.h" diff --git a/dex2oat/linker/oat_writer.h b/dex2oat/linker/oat_writer.h index 37785f2505..84d13a8522 100644 --- a/dex2oat/linker/oat_writer.h +++ b/dex2oat/linker/oat_writer.h @@ -44,6 +44,7 @@ class CompiledMethod; class CompilerDriver; class CompilerOptions; class DexContainer; +class OutputStream; class ProfileCompilationInfo; class TimingLogger; class TypeLookupTable; @@ -62,7 +63,6 @@ namespace linker { class ImageWriter; class MultiOatRelativePatcher; -class OutputStream; enum class CopyOption { kNever, diff --git a/dex2oat/linker/oat_writer_test.cc b/dex2oat/linker/oat_writer_test.cc index ae22477ea4..c46aa18703 100644 --- a/dex2oat/linker/oat_writer_test.cc +++ b/dex2oat/linker/oat_writer_test.cc @@ -35,12 +35,9 @@ #include "driver/compiler_driver.h" #include "driver/compiler_options.h" #include "entrypoints/quick/quick_entrypoints.h" -#include "linker/buffered_output_stream.h" #include "linker/elf_writer.h" #include "linker/elf_writer_quick.h" -#include "linker/file_output_stream.h" #include "linker/multi_oat_relative_patcher.h" -#include "linker/vector_output_stream.h" #include "mirror/class-inl.h" #include "mirror/object-inl.h" #include "mirror/object_array-inl.h" @@ -48,6 +45,9 @@ #include "oat_writer.h" #include "profile/profile_compilation_info.h" #include "scoped_thread_state_change-inl.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" +#include "stream/vector_output_stream.h" #include "vdex_file.h" namespace art { diff --git a/dex2oat/linker/relative_patcher.cc b/dex2oat/linker/relative_patcher.cc index 45a4a226d9..4db0e8a94e 100644 --- a/dex2oat/linker/relative_patcher.cc +++ b/dex2oat/linker/relative_patcher.cc @@ -35,7 +35,7 @@ #ifdef ART_ENABLE_CODEGEN_x86_64 #include "linker/x86_64/relative_patcher_x86_64.h" #endif -#include "linker/output_stream.h" +#include "stream/output_stream.h" namespace art { namespace linker { diff --git a/dex2oat/linker/relative_patcher.h b/dex2oat/linker/relative_patcher.h index d80eaf94f7..e8e15c9ea8 100644 --- a/dex2oat/linker/relative_patcher.h +++ b/dex2oat/linker/relative_patcher.h @@ -28,6 +28,7 @@ namespace art { class CompiledMethod; +class OutputStream; namespace debug { struct MethodDebugInfo; @@ -36,7 +37,6 @@ struct MethodDebugInfo; namespace linker { class LinkerPatch; -class OutputStream; /** * @class RelativePatcherThunkProvider diff --git a/dex2oat/linker/relative_patcher_test.h b/dex2oat/linker/relative_patcher_test.h index 4329ee1697..dead38d3df 100644 --- a/dex2oat/linker/relative_patcher_test.h +++ b/dex2oat/linker/relative_patcher_test.h @@ -29,9 +29,9 @@ #include "dex/string_reference.h" #include "driver/compiled_method_storage.h" #include "linker/relative_patcher.h" -#include "linker/vector_output_stream.h" #include "oat.h" #include "oat_quick_method_header.h" +#include "stream/vector_output_stream.h" namespace art { namespace linker { diff --git a/libelffile/Android.bp b/libelffile/Android.bp new file mode 100644 index 0000000000..60499dc379 --- /dev/null +++ b/libelffile/Android.bp @@ -0,0 +1,55 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// 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. +// + +// Needed to import elf.h in the runtime. +cc_library_headers { + name: "libelffile-headers", + host_supported: true, + export_include_dirs: ["."], +} + +art_cc_defaults { + name: "libelffile-defaults", + host_supported: true, + export_include_dirs: ["."], + srcs: [ + "elf/xz_utils.cc", + "stream/buffered_output_stream.cc", + "stream/file_output_stream.cc", + "stream/output_stream.cc", + "stream/vector_output_stream.cc", + ], + shared_libs: [ + "libartbase", + "libbase", + ], +} + +art_cc_library_static { + name: "libelffile", + defaults: [ + "art_defaults", + "libelffile-defaults", + ], +} + +art_cc_library_static { + name: "libelffiled", + defaults: [ + "art_debug_defaults", + "libelffile-defaults", + ], +} diff --git a/compiler/debug/dwarf/debug_abbrev_writer.h b/libelffile/dwarf/debug_abbrev_writer.h index 63a049b2cc..eecaa0588d 100644 --- a/compiler/debug/dwarf/debug_abbrev_writer.h +++ b/libelffile/dwarf/debug_abbrev_writer.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_DEBUG_ABBREV_WRITER_H_ -#define ART_COMPILER_DEBUG_DWARF_DEBUG_ABBREV_WRITER_H_ +#ifndef ART_LIBELFFILE_DWARF_DEBUG_ABBREV_WRITER_H_ +#define ART_LIBELFFILE_DWARF_DEBUG_ABBREV_WRITER_H_ #include <cstdint> #include <type_traits> @@ -24,8 +24,8 @@ #include "base/casts.h" #include "base/leb128.h" #include "base/stl_util.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -95,4 +95,4 @@ class DebugAbbrevWriter final : private Writer<Vector> { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_DEBUG_ABBREV_WRITER_H_ +#endif // ART_LIBELFFILE_DWARF_DEBUG_ABBREV_WRITER_H_ diff --git a/compiler/debug/dwarf/debug_frame_opcode_writer.h b/libelffile/dwarf/debug_frame_opcode_writer.h index 7c75c9bf37..b255f9c1f4 100644 --- a/compiler/debug/dwarf/debug_frame_opcode_writer.h +++ b/libelffile/dwarf/debug_frame_opcode_writer.h @@ -14,13 +14,13 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ -#define ART_COMPILER_DEBUG_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ +#ifndef ART_LIBELFFILE_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ +#define ART_LIBELFFILE_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ #include "base/bit_utils.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/register.h" -#include "debug/dwarf/writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/register.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -338,4 +338,4 @@ class DebugFrameOpCodeWriter : private Writer<Vector> { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ +#endif // ART_LIBELFFILE_DWARF_DEBUG_FRAME_OPCODE_WRITER_H_ diff --git a/compiler/debug/dwarf/debug_info_entry_writer.h b/libelffile/dwarf/debug_info_entry_writer.h index b198178d5d..48654e91a6 100644 --- a/compiler/debug/dwarf/debug_info_entry_writer.h +++ b/libelffile/dwarf/debug_info_entry_writer.h @@ -14,18 +14,18 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ -#define ART_COMPILER_DEBUG_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ +#ifndef ART_LIBELFFILE_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ +#define ART_LIBELFFILE_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ #include <cstdint> #include <unordered_map> #include "base/casts.h" #include "base/leb128.h" -#include "debug/dwarf/debug_abbrev_writer.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/expression.h" -#include "debug/dwarf/writer.h" +#include "dwarf/debug_abbrev_writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/expression.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -225,4 +225,4 @@ class DebugInfoEntryWriter final : private Writer<Vector> { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ +#endif // ART_LIBELFFILE_DWARF_DEBUG_INFO_ENTRY_WRITER_H_ diff --git a/compiler/debug/dwarf/debug_line_opcode_writer.h b/libelffile/dwarf/debug_line_opcode_writer.h index bb4e87ff7e..95b626e0df 100644 --- a/compiler/debug/dwarf/debug_line_opcode_writer.h +++ b/libelffile/dwarf/debug_line_opcode_writer.h @@ -14,13 +14,13 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ -#define ART_COMPILER_DEBUG_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ +#ifndef ART_LIBELFFILE_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ +#define ART_LIBELFFILE_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ #include <cstdint> -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -258,4 +258,4 @@ class DebugLineOpCodeWriter final : private Writer<Vector> { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ +#endif // ART_LIBELFFILE_DWARF_DEBUG_LINE_OPCODE_WRITER_H_ diff --git a/compiler/debug/dwarf/dwarf_constants.h b/libelffile/dwarf/dwarf_constants.h index 7beb1fa7da..d52db3a7cc 100644 --- a/compiler/debug/dwarf/dwarf_constants.h +++ b/libelffile/dwarf/dwarf_constants.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_ -#define ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_ +#ifndef ART_LIBELFFILE_DWARF_DWARF_CONSTANTS_H_ +#define ART_LIBELFFILE_DWARF_DWARF_CONSTANTS_H_ namespace art { namespace dwarf { @@ -683,4 +683,4 @@ enum ExceptionHeaderValueApplication : uint8_t { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_ +#endif // ART_LIBELFFILE_DWARF_DWARF_CONSTANTS_H_ diff --git a/compiler/debug/dwarf/expression.h b/libelffile/dwarf/expression.h index fafc0462d6..613da886c2 100644 --- a/compiler/debug/dwarf/expression.h +++ b/libelffile/dwarf/expression.h @@ -14,14 +14,14 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_EXPRESSION_H_ -#define ART_COMPILER_DEBUG_DWARF_EXPRESSION_H_ +#ifndef ART_LIBELFFILE_DWARF_EXPRESSION_H_ +#define ART_LIBELFFILE_DWARF_EXPRESSION_H_ #include <cstddef> #include <cstdint> -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -118,4 +118,4 @@ class Expression : private Writer<> { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_EXPRESSION_H_ +#endif // ART_LIBELFFILE_DWARF_EXPRESSION_H_ diff --git a/compiler/debug/dwarf/headers.h b/libelffile/dwarf/headers.h index 3cc8ad8290..d77012ffe3 100644 --- a/compiler/debug/dwarf/headers.h +++ b/libelffile/dwarf/headers.h @@ -14,18 +14,18 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_HEADERS_H_ -#define ART_COMPILER_DEBUG_DWARF_HEADERS_H_ +#ifndef ART_LIBELFFILE_DWARF_HEADERS_H_ +#define ART_LIBELFFILE_DWARF_HEADERS_H_ #include <cstdint> #include "base/array_ref.h" -#include "debug/dwarf/debug_frame_opcode_writer.h" -#include "debug/dwarf/debug_info_entry_writer.h" -#include "debug/dwarf/debug_line_opcode_writer.h" -#include "debug/dwarf/dwarf_constants.h" -#include "debug/dwarf/register.h" -#include "debug/dwarf/writer.h" +#include "dwarf/debug_frame_opcode_writer.h" +#include "dwarf/debug_info_entry_writer.h" +#include "dwarf/debug_line_opcode_writer.h" +#include "dwarf/dwarf_constants.h" +#include "dwarf/register.h" +#include "dwarf/writer.h" namespace art { namespace dwarf { @@ -159,4 +159,4 @@ void WriteDebugLineTable(const std::vector<std::string>& include_directories, } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_HEADERS_H_ +#endif // ART_LIBELFFILE_DWARF_HEADERS_H_ diff --git a/compiler/debug/dwarf/register.h b/libelffile/dwarf/register.h index 24bacac292..eadb441f15 100644 --- a/compiler/debug/dwarf/register.h +++ b/libelffile/dwarf/register.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_REGISTER_H_ -#define ART_COMPILER_DEBUG_DWARF_REGISTER_H_ +#ifndef ART_LIBELFFILE_DWARF_REGISTER_H_ +#define ART_LIBELFFILE_DWARF_REGISTER_H_ namespace art { namespace dwarf { @@ -59,4 +59,4 @@ class Reg { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_REGISTER_H_ +#endif // ART_LIBELFFILE_DWARF_REGISTER_H_ diff --git a/compiler/debug/dwarf/writer.h b/libelffile/dwarf/writer.h index c09d97aa79..a9764f6c1f 100644 --- a/compiler/debug/dwarf/writer.h +++ b/libelffile/dwarf/writer.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_DWARF_WRITER_H_ -#define ART_COMPILER_DEBUG_DWARF_WRITER_H_ +#ifndef ART_LIBELFFILE_DWARF_WRITER_H_ +#define ART_LIBELFFILE_DWARF_WRITER_H_ #include <type_traits> #include <vector> @@ -181,4 +181,4 @@ class Writer { } // namespace dwarf } // namespace art -#endif // ART_COMPILER_DEBUG_DWARF_WRITER_H_ +#endif // ART_LIBELFFILE_DWARF_WRITER_H_ diff --git a/runtime/CPPLINT.cfg b/libelffile/elf/CPPLINT.cfg index 6f274994a9..6f274994a9 100644 --- a/runtime/CPPLINT.cfg +++ b/libelffile/elf/CPPLINT.cfg diff --git a/runtime/elf.h b/libelffile/elf/elf.h index 521d4a232f..8eb9ae2dcb 100644 --- a/runtime/elf.h +++ b/libelffile/elf/elf.h @@ -18,8 +18,11 @@ //===----------------------------------------------------------------------===// // BEGIN android-changed -#ifndef ART_RUNTIME_ELF_H_ -#define ART_RUNTIME_ELF_H_ +#ifndef ART_LIBELFFILE_ELF_ELF_H_ +#define ART_LIBELFFILE_ELF_ELF_H_ +// HACK: This file replaces the system elf.h header and defines everything needed. +// Avoid including the system header as that would lead to re-definition errors. +#define _ELF_H // END android-changed // BEGIN android-changed @@ -1892,5 +1895,5 @@ struct ElfTypes64 { }; // BEGIN android-changed -#endif // ART_RUNTIME_ELF_H_ +#endif // ART_LIBELFFILE_ELF_ELF_H_ // END android-changed diff --git a/compiler/linker/elf_builder.h b/libelffile/elf/elf_builder.h index 33e1866c50..1f6781a37b 100644 --- a/compiler/linker/elf_builder.h +++ b/libelffile/elf/elf_builder.h @@ -14,24 +14,22 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_ELF_BUILDER_H_ -#define ART_COMPILER_LINKER_ELF_BUILDER_H_ +#ifndef ART_LIBELFFILE_ELF_ELF_BUILDER_H_ +#define ART_LIBELFFILE_ELF_ELF_BUILDER_H_ #include <vector> #include <deque> #include "arch/instruction_set.h" -#include "arch/mips/instruction_set_features_mips.h" #include "base/array_ref.h" #include "base/bit_utils.h" #include "base/casts.h" #include "base/leb128.h" #include "base/unix_file/fd_file.h" -#include "elf_utils.h" -#include "linker/error_delaying_output_stream.h" +#include "elf/elf.h" +#include "stream/error_delaying_output_stream.h" namespace art { -namespace linker { // Writes ELF file. // @@ -43,7 +41,6 @@ namespace linker { // .text - Compiled code. // .bss - Zero-initialized writeable section. // .dex - Reserved NOBITS space for dex-related data. -// .MIPS.abiflags - MIPS specific section. // .dynstr - Names for .dynsym. // .dynsym - A few oat-specific dynamic symbols. // .hash - Hash-table for .dynsym. @@ -397,76 +394,6 @@ class ElfBuilder final { std::deque<Elf_Sym> syms_; // Buffered/cached content of the whole section. }; - class AbiflagsSection final : public Section { - public: - // Section with Mips abiflag info. - static constexpr uint8_t MIPS_AFL_REG_NONE = 0; // no registers - static constexpr uint8_t MIPS_AFL_REG_32 = 1; // 32-bit registers - static constexpr uint8_t MIPS_AFL_REG_64 = 2; // 64-bit registers - static constexpr uint32_t MIPS_AFL_FLAGS1_ODDSPREG = 1; // Uses odd single-prec fp regs - static constexpr uint8_t MIPS_ABI_FP_DOUBLE = 1; // -mdouble-float - static constexpr uint8_t MIPS_ABI_FP_XX = 5; // -mfpxx - static constexpr uint8_t MIPS_ABI_FP_64A = 7; // -mips32r* -mfp64 -mno-odd-spreg - - AbiflagsSection(ElfBuilder<ElfTypes>* owner, - const std::string& name, - Elf_Word type, - Elf_Word flags, - const Section* link, - Elf_Word info, - Elf_Word align, - Elf_Word entsize, - InstructionSet isa, - const InstructionSetFeatures* features) - : Section(owner, name, type, flags, link, info, align, entsize) { - if (isa == InstructionSet::kMips || isa == InstructionSet::kMips64) { - bool fpu32 = false; // assume mips64 values - uint8_t isa_rev = 6; // assume mips64 values - if (isa == InstructionSet::kMips) { - // adjust for mips32 values - fpu32 = features->AsMipsInstructionSetFeatures()->Is32BitFloatingPoint(); - isa_rev = features->AsMipsInstructionSetFeatures()->IsR6() - ? 6 - : features->AsMipsInstructionSetFeatures()->IsMipsIsaRevGreaterThanEqual2() - ? (fpu32 ? 2 : 5) - : 1; - } - abiflags_.version = 0; // version of flags structure - abiflags_.isa_level = (isa == InstructionSet::kMips) ? 32 : 64; - abiflags_.isa_rev = isa_rev; - abiflags_.gpr_size = (isa == InstructionSet::kMips) ? MIPS_AFL_REG_32 : MIPS_AFL_REG_64; - abiflags_.cpr1_size = fpu32 ? MIPS_AFL_REG_32 : MIPS_AFL_REG_64; - abiflags_.cpr2_size = MIPS_AFL_REG_NONE; - // Set the fp_abi to MIPS_ABI_FP_64A for mips32 with 64-bit FPUs (ie: mips32 R5 and R6). - // Otherwise set to MIPS_ABI_FP_DOUBLE. - abiflags_.fp_abi = - (isa == InstructionSet::kMips && !fpu32) ? MIPS_ABI_FP_64A : MIPS_ABI_FP_DOUBLE; - abiflags_.isa_ext = 0; - abiflags_.ases = 0; - // To keep the code simple, we are not using odd FP reg for single floats for both - // mips32 and mips64 ART. Therefore we are not setting the MIPS_AFL_FLAGS1_ODDSPREG bit. - abiflags_.flags1 = 0; - abiflags_.flags2 = 0; - } - } - - Elf_Word GetSize() const { - return sizeof(abiflags_); - } - - void Write() { - this->WriteFully(&abiflags_, sizeof(abiflags_)); - } - - private: - struct { - uint16_t version; // version of this structure - uint8_t isa_level, isa_rev, gpr_size, cpr1_size, cpr2_size; - uint8_t fp_abi; - uint32_t isa_ext, ases, flags1, flags2; - } abiflags_; - }; - class BuildIdSection final : public Section { public: BuildIdSection(ElfBuilder<ElfTypes>* owner, @@ -515,9 +442,8 @@ class ElfBuilder final { off_t digest_start_; }; - ElfBuilder(InstructionSet isa, const InstructionSetFeatures* features, OutputStream* output) + ElfBuilder(InstructionSet isa, OutputStream* output) : isa_(isa), - features_(features), stream_(output), rodata_(this, ".rodata", SHT_PROGBITS, SHF_ALLOC, nullptr, 0, kPageSize, 0), text_(this, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR, nullptr, 0, kPageSize, 0), @@ -537,8 +463,6 @@ class ElfBuilder final { debug_info_(this, ".debug_info", SHT_PROGBITS, 0, nullptr, 0, 1, 0), debug_line_(this, ".debug_line", SHT_PROGBITS, 0, nullptr, 0, 1, 0), shstrtab_(this, ".shstrtab", 0, 1), - abiflags_(this, ".MIPS.abiflags", SHT_MIPS_ABIFLAGS, SHF_ALLOC, nullptr, 0, kPageSize, 0, - isa, features), build_id_(this, ".note.gnu.build-id", SHT_NOTE, SHF_ALLOC, nullptr, 0, 4, 0), current_section_(nullptr), started_(false), @@ -552,7 +476,6 @@ class ElfBuilder final { dex_.phdr_flags_ = PF_R; dynamic_.phdr_flags_ = PF_R | PF_W; dynamic_.phdr_type_ = PT_DYNAMIC; - abiflags_.phdr_type_ = PT_MIPS_ABIFLAGS; build_id_.phdr_type_ = PT_NOTE; } ~ElfBuilder() {} @@ -637,7 +560,7 @@ class ElfBuilder final { stream_.Flush(); // The main ELF header. - Elf_Ehdr elf_header = MakeElfHeader(isa_, features_); + Elf_Ehdr elf_header = MakeElfHeader(isa_); elf_header.e_shoff = section_headers_offset; elf_header.e_shnum = shdrs.size(); elf_header.e_shstrndx = shstrtab_.GetSectionIndex(); @@ -722,9 +645,6 @@ class ElfBuilder final { if (dex_size != 0) { dex_.AllocateVirtualMemory(dex_size); } - if (isa_ == InstructionSet::kMips || isa_ == InstructionSet::kMips64) { - abiflags_.AllocateVirtualMemory(abiflags_.GetSize()); - } // Cache .dynstr, .dynsym and .hash data. dynstr_.Add(""); // dynstr should start with empty string. @@ -847,12 +767,6 @@ class ElfBuilder final { return loaded_size_; } - void WriteMIPSabiflagsSection() { - abiflags_.Start(); - abiflags_.Write(); - abiflags_.End(); - } - void WriteBuildIdSection() { build_id_.Start(); build_id_.Write(); @@ -880,7 +794,7 @@ class ElfBuilder final { } private: - static Elf_Ehdr MakeElfHeader(InstructionSet isa, const InstructionSetFeatures* features) { + static Elf_Ehdr MakeElfHeader(InstructionSet isa) { Elf_Ehdr elf_header = Elf_Ehdr(); switch (isa) { case InstructionSet::kArm: @@ -905,25 +819,6 @@ class ElfBuilder final { elf_header.e_flags = 0; break; } - case InstructionSet::kMips: { - elf_header.e_machine = EM_MIPS; - elf_header.e_flags = (EF_MIPS_NOREORDER | - EF_MIPS_PIC | - EF_MIPS_CPIC | - EF_MIPS_ABI_O32 | - (features->AsMipsInstructionSetFeatures()->IsR6() - ? EF_MIPS_ARCH_32R6 - : EF_MIPS_ARCH_32R2)); - break; - } - case InstructionSet::kMips64: { - elf_header.e_machine = EM_MIPS; - elf_header.e_flags = (EF_MIPS_NOREORDER | - EF_MIPS_PIC | - EF_MIPS_CPIC | - EF_MIPS_ARCH_64R6); - break; - } case InstructionSet::kNone: { LOG(FATAL) << "No instruction set"; break; @@ -1032,7 +927,6 @@ class ElfBuilder final { } InstructionSet isa_; - const InstructionSetFeatures* features_; ErrorDelayingOutputStream stream_; @@ -1052,7 +946,6 @@ class ElfBuilder final { Section debug_info_; Section debug_line_; StringSection shstrtab_; - AbiflagsSection abiflags_; BuildIdSection build_id_; std::vector<std::unique_ptr<Section>> other_sections_; @@ -1073,7 +966,6 @@ class ElfBuilder final { DISALLOW_COPY_AND_ASSIGN(ElfBuilder); }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_ELF_BUILDER_H_ +#endif // ART_LIBELFFILE_ELF_ELF_BUILDER_H_ diff --git a/compiler/debug/elf_debug_reader.h b/libelffile/elf/elf_debug_reader.h index 1820e7cdc7..3b3c050f53 100644 --- a/compiler/debug/elf_debug_reader.h +++ b/libelffile/elf/elf_debug_reader.h @@ -14,19 +14,18 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_ELF_DEBUG_READER_H_ -#define ART_COMPILER_DEBUG_ELF_DEBUG_READER_H_ +#ifndef ART_LIBELFFILE_ELF_ELF_DEBUG_READER_H_ +#define ART_LIBELFFILE_ELF_ELF_DEBUG_READER_H_ #include "base/array_ref.h" -#include "debug/dwarf/headers.h" -#include "elf.h" +#include "dwarf/headers.h" +#include "elf/elf.h" #include "xz_utils.h" #include <map> #include <string_view> namespace art { -namespace debug { // Trivial ELF file reader. // @@ -168,6 +167,5 @@ class ElfDebugReader { DISALLOW_COPY_AND_ASSIGN(ElfDebugReader); }; -} // namespace debug } // namespace art -#endif // ART_COMPILER_DEBUG_ELF_DEBUG_READER_H_ +#endif // ART_LIBELFFILE_ELF_ELF_DEBUG_READER_H_ diff --git a/compiler/debug/xz_utils.cc b/libelffile/elf/xz_utils.cc index 5b36209d2f..0d47171258 100644 --- a/compiler/debug/xz_utils.cc +++ b/libelffile/elf/xz_utils.cc @@ -31,7 +31,6 @@ #include "XzEnc.h" namespace art { -namespace debug { constexpr size_t kChunkSize = kPageSize; @@ -130,5 +129,4 @@ void XzDecompress(ArrayRef<const uint8_t> src, std::vector<uint8_t>* dst) { dst->resize(dst_offset); } -} // namespace debug } // namespace art diff --git a/compiler/debug/xz_utils.h b/libelffile/elf/xz_utils.h index 731b03c7e1..2b11584ef0 100644 --- a/compiler/debug/xz_utils.h +++ b/libelffile/elf/xz_utils.h @@ -14,20 +14,18 @@ * limitations under the License. */ -#ifndef ART_COMPILER_DEBUG_XZ_UTILS_H_ -#define ART_COMPILER_DEBUG_XZ_UTILS_H_ +#ifndef ART_LIBELFFILE_ELF_XZ_UTILS_H_ +#define ART_LIBELFFILE_ELF_XZ_UTILS_H_ #include <vector> #include "base/array_ref.h" namespace art { -namespace debug { void XzCompress(ArrayRef<const uint8_t> src, std::vector<uint8_t>* dst); void XzDecompress(ArrayRef<const uint8_t> src, std::vector<uint8_t>* dst); -} // namespace debug } // namespace art -#endif // ART_COMPILER_DEBUG_XZ_UTILS_H_ +#endif // ART_LIBELFFILE_ELF_XZ_UTILS_H_ diff --git a/compiler/linker/buffered_output_stream.cc b/libelffile/stream/buffered_output_stream.cc index 07066b76ac..4c66c764a9 100644 --- a/compiler/linker/buffered_output_stream.cc +++ b/libelffile/stream/buffered_output_stream.cc @@ -19,7 +19,6 @@ #include <string.h> namespace art { -namespace linker { BufferedOutputStream::BufferedOutputStream(std::unique_ptr<OutputStream> out) : OutputStream(out->GetLocation()), // Before out is moved to out_. @@ -68,5 +67,4 @@ off_t BufferedOutputStream::Seek(off_t offset, Whence whence) { return out_->Seek(offset, whence); } -} // namespace linker } // namespace art diff --git a/compiler/linker/buffered_output_stream.h b/libelffile/stream/buffered_output_stream.h index cb1c44ba23..96abb574e4 100644 --- a/compiler/linker/buffered_output_stream.h +++ b/libelffile/stream/buffered_output_stream.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_BUFFERED_OUTPUT_STREAM_H_ -#define ART_COMPILER_LINKER_BUFFERED_OUTPUT_STREAM_H_ +#ifndef ART_LIBELFFILE_STREAM_BUFFERED_OUTPUT_STREAM_H_ +#define ART_LIBELFFILE_STREAM_BUFFERED_OUTPUT_STREAM_H_ #include <memory> @@ -24,7 +24,6 @@ #include "base/globals.h" namespace art { -namespace linker { class BufferedOutputStream final : public OutputStream { public: @@ -50,7 +49,6 @@ class BufferedOutputStream final : public OutputStream { DISALLOW_COPY_AND_ASSIGN(BufferedOutputStream); }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_BUFFERED_OUTPUT_STREAM_H_ +#endif // ART_LIBELFFILE_STREAM_BUFFERED_OUTPUT_STREAM_H_ diff --git a/compiler/linker/error_delaying_output_stream.h b/libelffile/stream/error_delaying_output_stream.h index cadd71c3f0..b37ff4e24d 100644 --- a/compiler/linker/error_delaying_output_stream.h +++ b/libelffile/stream/error_delaying_output_stream.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_ERROR_DELAYING_OUTPUT_STREAM_H_ -#define ART_COMPILER_LINKER_ERROR_DELAYING_OUTPUT_STREAM_H_ +#ifndef ART_LIBELFFILE_STREAM_ERROR_DELAYING_OUTPUT_STREAM_H_ +#define ART_LIBELFFILE_STREAM_ERROR_DELAYING_OUTPUT_STREAM_H_ #include "output_stream.h" @@ -24,7 +24,6 @@ #include "base/macros.h" namespace art { -namespace linker { // OutputStream wrapper that delays reporting an error until Flush(). class ErrorDelayingOutputStream final : public OutputStream { @@ -99,7 +98,6 @@ class ErrorDelayingOutputStream final : public OutputStream { off_t output_offset_; // Keep track of the current position in the stream. }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_ERROR_DELAYING_OUTPUT_STREAM_H_ +#endif // ART_LIBELFFILE_STREAM_ERROR_DELAYING_OUTPUT_STREAM_H_ diff --git a/compiler/linker/file_output_stream.cc b/libelffile/stream/file_output_stream.cc index 477846ec65..bbfbdfdca8 100644 --- a/compiler/linker/file_output_stream.cc +++ b/libelffile/stream/file_output_stream.cc @@ -22,7 +22,6 @@ #include "base/unix_file/fd_file.h" namespace art { -namespace linker { FileOutputStream::FileOutputStream(File* file) : OutputStream(file->GetPath()), file_(file) {} @@ -38,5 +37,4 @@ bool FileOutputStream::Flush() { return file_->Flush() == 0; } -} // namespace linker } // namespace art diff --git a/compiler/linker/file_output_stream.h b/libelffile/stream/file_output_stream.h index 1417132981..e29930fece 100644 --- a/compiler/linker/file_output_stream.h +++ b/libelffile/stream/file_output_stream.h @@ -14,15 +14,14 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_FILE_OUTPUT_STREAM_H_ -#define ART_COMPILER_LINKER_FILE_OUTPUT_STREAM_H_ +#ifndef ART_LIBELFFILE_STREAM_FILE_OUTPUT_STREAM_H_ +#define ART_LIBELFFILE_STREAM_FILE_OUTPUT_STREAM_H_ #include "base/os.h" #include "output_stream.h" namespace art { -namespace linker { class FileOutputStream final : public OutputStream { public: @@ -42,7 +41,6 @@ class FileOutputStream final : public OutputStream { DISALLOW_COPY_AND_ASSIGN(FileOutputStream); }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_FILE_OUTPUT_STREAM_H_ +#endif // ART_LIBELFFILE_STREAM_FILE_OUTPUT_STREAM_H_ diff --git a/compiler/linker/output_stream.cc b/libelffile/stream/output_stream.cc index f5a19138a5..a8b64ca1ce 100644 --- a/compiler/linker/output_stream.cc +++ b/libelffile/stream/output_stream.cc @@ -17,7 +17,6 @@ #include "output_stream.h" namespace art { -namespace linker { std::ostream& operator<<(std::ostream& os, const Whence& rhs) { switch (rhs) { @@ -29,5 +28,4 @@ std::ostream& operator<<(std::ostream& os, const Whence& rhs) { return os; } -} // namespace linker } // namespace art diff --git a/compiler/linker/output_stream.h b/libelffile/stream/output_stream.h index 5310e2fa41..c9fce68416 100644 --- a/compiler/linker/output_stream.h +++ b/libelffile/stream/output_stream.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_OUTPUT_STREAM_H_ -#define ART_COMPILER_LINKER_OUTPUT_STREAM_H_ +#ifndef ART_LIBELFFILE_STREAM_OUTPUT_STREAM_H_ +#define ART_LIBELFFILE_STREAM_OUTPUT_STREAM_H_ #include <ostream> #include <string> @@ -23,7 +23,6 @@ #include "base/macros.h" namespace art { -namespace linker { enum Whence { kSeekSet = SEEK_SET, @@ -60,7 +59,6 @@ class OutputStream { DISALLOW_COPY_AND_ASSIGN(OutputStream); }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_OUTPUT_STREAM_H_ +#endif // ART_LIBELFFILE_STREAM_OUTPUT_STREAM_H_ diff --git a/compiler/linker/vector_output_stream.cc b/libelffile/stream/vector_output_stream.cc index f2cae5b1d5..f9724c1cee 100644 --- a/compiler/linker/vector_output_stream.cc +++ b/libelffile/stream/vector_output_stream.cc @@ -19,7 +19,6 @@ #include <android-base/logging.h> namespace art { -namespace linker { VectorOutputStream::VectorOutputStream(const std::string& location, std::vector<uint8_t>* vector) : OutputStream(location), offset_(vector->size()), vector_(vector) {} @@ -46,5 +45,4 @@ off_t VectorOutputStream::Seek(off_t offset, Whence whence) { return offset_; } -} // namespace linker } // namespace art diff --git a/compiler/linker/vector_output_stream.h b/libelffile/stream/vector_output_stream.h index 0d34da6cba..cf7cbb6d8f 100644 --- a/compiler/linker/vector_output_stream.h +++ b/libelffile/stream/vector_output_stream.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_COMPILER_LINKER_VECTOR_OUTPUT_STREAM_H_ -#define ART_COMPILER_LINKER_VECTOR_OUTPUT_STREAM_H_ +#ifndef ART_LIBELFFILE_STREAM_VECTOR_OUTPUT_STREAM_H_ +#define ART_LIBELFFILE_STREAM_VECTOR_OUTPUT_STREAM_H_ #include "output_stream.h" @@ -24,7 +24,6 @@ #include <vector> namespace art { -namespace linker { class VectorOutputStream final : public OutputStream { public: @@ -65,7 +64,6 @@ class VectorOutputStream final : public OutputStream { DISALLOW_COPY_AND_ASSIGN(VectorOutputStream); }; -} // namespace linker } // namespace art -#endif // ART_COMPILER_LINKER_VECTOR_OUTPUT_STREAM_H_ +#endif // ART_LIBELFFILE_STREAM_VECTOR_OUTPUT_STREAM_H_ diff --git a/oatdump/oatdump.cc b/oatdump/oatdump.cc index 26d00941a4..e395985e24 100644 --- a/oatdump/oatdump.cc +++ b/oatdump/oatdump.cc @@ -59,18 +59,15 @@ #include "dex/type_lookup_table.h" #include "dexlayout.h" #include "disassembler.h" +#include "elf/elf_builder.h" #include "gc/accounting/space_bitmap-inl.h" #include "gc/space/image_space.h" #include "gc/space/large_object_space.h" #include "gc/space/space-inl.h" #include "image-inl.h" #include "imtable-inl.h" -#include "subtype_check.h" #include "index_bss_mapping.h" #include "interpreter/unstarted_runtime.h" -#include "linker/buffered_output_stream.h" -#include "linker/elf_builder.h" -#include "linker/file_output_stream.h" #include "mirror/array-inl.h" #include "mirror/class-inl.h" #include "mirror/dex_cache-inl.h" @@ -82,6 +79,9 @@ #include "scoped_thread_state_change-inl.h" #include "stack.h" #include "stack_map.h" +#include "stream/buffered_output_stream.h" +#include "stream/file_output_stream.h" +#include "subtype_check.h" #include "thread_list.h" #include "vdex_file.h" #include "verifier/method_verifier.h" @@ -150,10 +150,10 @@ class OatSymbolizer final { if (elf_file == nullptr) { return false; } - std::unique_ptr<linker::BufferedOutputStream> output_stream = - std::make_unique<linker::BufferedOutputStream>( - std::make_unique<linker::FileOutputStream>(elf_file.get())); - builder_.reset(new linker::ElfBuilder<ElfTypes>(isa, features.get(), output_stream.get())); + std::unique_ptr<BufferedOutputStream> output_stream = + std::make_unique<BufferedOutputStream>( + std::make_unique<FileOutputStream>(elf_file.get())); + builder_.reset(new ElfBuilder<ElfTypes>(isa, output_stream.get())); builder_->Start(); @@ -176,9 +176,6 @@ class OatSymbolizer final { text->End(); } - if (isa == InstructionSet::kMips || isa == InstructionSet::kMips64) { - builder_->WriteMIPSabiflagsSection(); - } builder_->PrepareDynamicSection(elf_file->GetPath(), rodata_size, text_size, @@ -330,7 +327,7 @@ class OatSymbolizer final { private: const OatFile* oat_file_; - std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder_; + std::unique_ptr<ElfBuilder<ElfTypes>> builder_; std::vector<debug::MethodDebugInfo> method_debug_infos_; std::unordered_set<uint32_t> seen_offsets_; const std::string output_name_; diff --git a/runtime/Android.bp b/runtime/Android.bp index ae97907082..595c7afc23 100644 --- a/runtime/Android.bp +++ b/runtime/Android.bp @@ -391,6 +391,7 @@ libart_cc_defaults { "libicuuc_headers", "libnativehelper_header_only", "jni_platform_headers", + "libelffile-headers", ], shared_libs: [ "libartpalette", @@ -554,7 +555,7 @@ art_cc_library { ], shared_libs: [ "libartd", - "libartbase-art-gtest", + "libartbase-art-gtest", "libbase", "libbacktrace", ], diff --git a/runtime/elf_file.h b/runtime/elf_file.h index 8da7e1a29c..e2094bcd59 100644 --- a/runtime/elf_file.h +++ b/runtime/elf_file.h @@ -23,7 +23,7 @@ #include "base/macros.h" #include "base/os.h" // Explicitly include our own elf.h to avoid Linux and other dependencies. -#include "./elf.h" +#include "elf/elf.h" namespace art { diff --git a/runtime/elf_file_impl.h b/runtime/elf_file_impl.h index b55b60f2dc..c1899d27f8 100644 --- a/runtime/elf_file_impl.h +++ b/runtime/elf_file_impl.h @@ -23,7 +23,7 @@ #include <vector> // Explicitly include our own elf.h to avoid Linux and other dependencies. -#include "./elf.h" +#include "elf/elf.h" #include "base/mem_map.h" namespace art { diff --git a/runtime/elf_utils.h b/runtime/elf_utils.h index 0cac8e8d02..deb081d590 100644 --- a/runtime/elf_utils.h +++ b/runtime/elf_utils.h @@ -22,7 +22,7 @@ #include <android-base/logging.h> // Explicitly include our own elf.h to avoid Linux and other dependencies. -#include "./elf.h" +#include "elf/elf.h" namespace art { diff --git a/runtime/oat_file.cc b/runtime/oat_file.cc index 67803b6121..6edf4480a7 100644 --- a/runtime/oat_file.cc +++ b/runtime/oat_file.cc @@ -16,6 +16,9 @@ #include "oat_file.h" +// Our elf.h needs to be included before the system one is indirectly included. +#include "elf/elf.h" + #include <dlfcn.h> #ifndef __APPLE__ #include <link.h> // for dl_iterate_phdr. |