summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/Android.bp7
-rw-r--r--compiler/cfi_test.h4
-rw-r--r--compiler/debug/dwarf/dwarf_test.cc10
-rw-r--r--compiler/debug/dwarf/dwarf_test.h8
-rw-r--r--compiler/debug/elf_debug_frame_writer.h10
-rw-r--r--compiler/debug/elf_debug_info_writer.h10
-rw-r--r--compiler/debug/elf_debug_line_writer.h10
-rw-r--r--compiler/debug/elf_debug_loc_writer.h4
-rw-r--r--compiler/debug/elf_debug_writer.cc51
-rw-r--r--compiler/debug/elf_debug_writer.h7
-rw-r--r--compiler/debug/elf_symtab_writer.h4
-rw-r--r--compiler/jni/quick/jni_compiler.cc2
-rw-r--r--compiler/linker/output_stream_test.cc7
-rw-r--r--compiler/optimizing/common_arm.h2
-rw-r--r--compiler/utils/assembler.h2
-rw-r--r--dex2oat/dex2oat.cc28
-rw-r--r--dex2oat/linker/arm/relative_patcher_arm_base.cc2
-rw-r--r--dex2oat/linker/arm64/relative_patcher_arm64.cc2
-rw-r--r--dex2oat/linker/elf_writer.h3
-rw-r--r--dex2oat/linker/elf_writer_quick.cc13
-rw-r--r--dex2oat/linker/elf_writer_test.cc2
-rw-r--r--dex2oat/linker/image_test.h4
-rw-r--r--dex2oat/linker/multi_oat_relative_patcher_test.cc2
-rw-r--r--dex2oat/linker/oat_writer.cc6
-rw-r--r--dex2oat/linker/oat_writer.h2
-rw-r--r--dex2oat/linker/oat_writer_test.cc6
-rw-r--r--dex2oat/linker/relative_patcher.cc2
-rw-r--r--dex2oat/linker/relative_patcher.h2
-rw-r--r--dex2oat/linker/relative_patcher_test.h2
-rw-r--r--libelffile/Android.bp55
-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.cc21
-rw-r--r--runtime/Android.bp3
-rw-r--r--runtime/elf_file.h2
-rw-r--r--runtime/elf_file_impl.h2
-rw-r--r--runtime/elf_utils.h2
-rw-r--r--runtime/oat_file.cc3
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.