// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_ZUCCHINI_RELOC_ELF_H_ #define COMPONENTS_ZUCCHINI_RELOC_ELF_H_ #include <stddef.h> #include <stdint.h> #include <optional> #include <vector> #include "base/memory/raw_ref.h" #include "base/numerics/safe_conversions.h" #include "components/zucchini/address_translator.h" #include "components/zucchini/buffer_view.h" #include "components/zucchini/image_utils.h" #include "components/zucchini/type_elf.h" namespace zucchini { // Section dimensions for ELF files, to store relevant dimensions data from // Elf32_Shdr and Elf64_Shdr, while reducing code duplication from templates. struct SectionDimensionsElf { … }; // A Generator to visit all reloc structs located in [|lo|, |hi|) (excluding // truncated strct at |lo| but inlcuding truncated struct at |hi|), and emit // valid References with |rel_type|. This implements a nested loop unrolled into // a generator: the outer loop has |cur_section_dimensions_| visiting // |reloc_section_dims| (sorted by |region.offset|), and the inner loop has // |cursor_| visiting successive reloc structs within |cur_section_dimensions_|. class RelocReaderElf : public ReferenceReader { … }; class RelocWriterElf : public ReferenceWriter { … }; } // namespace zucchini #endif // COMPONENTS_ZUCCHINI_RELOC_ELF_H_