diff options
Diffstat (limited to 'compiler/elf_writer_quick.cc')
-rw-r--r-- | compiler/elf_writer_quick.cc | 52 |
1 files changed, 19 insertions, 33 deletions
diff --git a/compiler/elf_writer_quick.cc b/compiler/elf_writer_quick.cc index 19346ecc2b..1d71e572d7 100644 --- a/compiler/elf_writer_quick.cc +++ b/compiler/elf_writer_quick.cc @@ -88,12 +88,14 @@ class ElfWriterQuick FINAL : public ElfWriter { ~ElfWriterQuick(); void Start() OVERRIDE; - void SetLoadedSectionSizes(size_t rodata_size, size_t text_size, size_t bss_size) OVERRIDE; - void PrepareDebugInfo(const ArrayRef<const debug::MethodDebugInfo>& method_infos) OVERRIDE; + void PrepareDebugInfo(size_t rodata_section_size, + size_t text_section_size, + const ArrayRef<const debug::MethodDebugInfo>& method_infos) OVERRIDE; OutputStream* StartRoData() OVERRIDE; void EndRoData(OutputStream* rodata) OVERRIDE; OutputStream* StartText() OVERRIDE; void EndText(OutputStream* text) OVERRIDE; + void SetBssSize(size_t bss_size) OVERRIDE; void WriteDynamicSection() OVERRIDE; void WriteDebugInfo(const ArrayRef<const debug::MethodDebugInfo>& method_infos) OVERRIDE; void WritePatchLocations(const ArrayRef<const uintptr_t>& patch_locations) OVERRIDE; @@ -101,17 +103,12 @@ class ElfWriterQuick FINAL : public ElfWriter { virtual OutputStream* GetStream() OVERRIDE; - size_t GetLoadedSize() OVERRIDE; - static void EncodeOatPatches(const std::vector<uintptr_t>& locations, std::vector<uint8_t>* buffer); private: const CompilerOptions* const compiler_options_; File* const elf_file_; - size_t rodata_size_; - size_t text_size_; - size_t bss_size_; std::unique_ptr<BufferedOutputStream> output_stream_; std::unique_ptr<ElfBuilder<ElfTypes>> builder_; std::unique_ptr<DebugInfoTask> debug_info_task_; @@ -137,9 +134,6 @@ ElfWriterQuick<ElfTypes>::ElfWriterQuick(InstructionSet instruction_set, : ElfWriter(), compiler_options_(compiler_options), elf_file_(elf_file), - rodata_size_(0u), - text_size_(0u), - bss_size_(0u), output_stream_(MakeUnique<BufferedOutputStream>(MakeUnique<FileOutputStream>(elf_file))), builder_(new ElfBuilder<ElfTypes>(instruction_set, output_stream_.get())) {} @@ -152,19 +146,6 @@ void ElfWriterQuick<ElfTypes>::Start() { } template <typename ElfTypes> -void ElfWriterQuick<ElfTypes>::SetLoadedSectionSizes(size_t rodata_size, - size_t text_size, - size_t bss_size) { - DCHECK_EQ(rodata_size_, 0u); - rodata_size_ = rodata_size; - DCHECK_EQ(text_size_, 0u); - text_size_ = text_size; - DCHECK_EQ(bss_size_, 0u); - bss_size_ = bss_size; - builder_->PrepareDynamicSection(elf_file_->GetPath(), rodata_size_, text_size_, bss_size_); -} - -template <typename ElfTypes> OutputStream* ElfWriterQuick<ElfTypes>::StartRoData() { auto* rodata = builder_->GetRoData(); rodata->Start(); @@ -191,21 +172,31 @@ void ElfWriterQuick<ElfTypes>::EndText(OutputStream* text) { } template <typename ElfTypes> -void ElfWriterQuick<ElfTypes>::WriteDynamicSection() { - if (bss_size_ != 0u) { - builder_->GetBss()->WriteNoBitsSection(bss_size_); +void ElfWriterQuick<ElfTypes>::SetBssSize(size_t bss_size) { + auto* bss = builder_->GetBss(); + if (bss_size != 0u) { + bss->WriteNoBitsSection(bss_size); } - builder_->WriteDynamicSection(); +} + +template <typename ElfTypes> +void ElfWriterQuick<ElfTypes>::WriteDynamicSection() { + builder_->WriteDynamicSection(elf_file_->GetPath()); } template <typename ElfTypes> void ElfWriterQuick<ElfTypes>::PrepareDebugInfo( + size_t rodata_section_size, + size_t text_section_size, const ArrayRef<const debug::MethodDebugInfo>& method_infos) { if (!method_infos.empty() && compiler_options_->GetGenerateMiniDebugInfo()) { // Prepare the mini-debug-info in background while we do other I/O. Thread* self = Thread::Current(); debug_info_task_ = std::unique_ptr<DebugInfoTask>( - new DebugInfoTask(builder_->GetIsa(), rodata_size_, text_size_, method_infos)); + new DebugInfoTask(builder_->GetIsa(), + rodata_section_size, + text_section_size, + method_infos)); debug_info_thread_pool_ = std::unique_ptr<ThreadPool>( new ThreadPool("Mini-debug-info writer", 1)); debug_info_thread_pool_->AddTask(self, debug_info_task_.get()); @@ -254,11 +245,6 @@ OutputStream* ElfWriterQuick<ElfTypes>::GetStream() { return builder_->GetStream(); } -template <typename ElfTypes> -size_t ElfWriterQuick<ElfTypes>::GetLoadedSize() { - return builder_->GetLoadedSize(); -} - // Explicit instantiations template class ElfWriterQuick<ElfTypes32>; template class ElfWriterQuick<ElfTypes64>; |