xref: /aosp_15_r20/external/zucchini/disassembler.cc (revision a03ca8b91e029cd15055c20c78c2e087c84792e4)
1*a03ca8b9SKrzysztof Kosiński // Copyright 2017 The Chromium Authors. All rights reserved.
2*a03ca8b9SKrzysztof Kosiński // Use of this source code is governed by a BSD-style license that can be
3*a03ca8b9SKrzysztof Kosiński // found in the LICENSE file.
4*a03ca8b9SKrzysztof Kosiński 
5*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/disassembler.h"
6*a03ca8b9SKrzysztof Kosiński 
7*a03ca8b9SKrzysztof Kosiński #include "base/check_op.h"
8*a03ca8b9SKrzysztof Kosiński 
9*a03ca8b9SKrzysztof Kosiński namespace zucchini {
10*a03ca8b9SKrzysztof Kosiński 
11*a03ca8b9SKrzysztof Kosiński /******** EmptyReferenceReader ********/
12*a03ca8b9SKrzysztof Kosiński 
GetNext()13*a03ca8b9SKrzysztof Kosiński std::optional<Reference> EmptyReferenceReader::GetNext() {
14*a03ca8b9SKrzysztof Kosiński   return std::nullopt;
15*a03ca8b9SKrzysztof Kosiński }
16*a03ca8b9SKrzysztof Kosiński 
17*a03ca8b9SKrzysztof Kosiński /******** EmptyReferenceWriter ********/
18*a03ca8b9SKrzysztof Kosiński 
PutNext(Reference)19*a03ca8b9SKrzysztof Kosiński void EmptyReferenceWriter::PutNext(Reference /* reference */) {}
20*a03ca8b9SKrzysztof Kosiński 
21*a03ca8b9SKrzysztof Kosiński /******** ReferenceGroup ********/
22*a03ca8b9SKrzysztof Kosiński 
GetReader(offset_t lower,offset_t upper,Disassembler * disasm) const23*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> ReferenceGroup::GetReader(
24*a03ca8b9SKrzysztof Kosiński     offset_t lower,
25*a03ca8b9SKrzysztof Kosiński     offset_t upper,
26*a03ca8b9SKrzysztof Kosiński     Disassembler* disasm) const {
27*a03ca8b9SKrzysztof Kosiński   DCHECK_LE(lower, upper);
28*a03ca8b9SKrzysztof Kosiński   DCHECK_LE(upper, disasm->size());
29*a03ca8b9SKrzysztof Kosiński   return (disasm->*reader_factory_)(lower, upper);
30*a03ca8b9SKrzysztof Kosiński }
31*a03ca8b9SKrzysztof Kosiński 
GetReader(Disassembler * disasm) const32*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> ReferenceGroup::GetReader(
33*a03ca8b9SKrzysztof Kosiński     Disassembler* disasm) const {
34*a03ca8b9SKrzysztof Kosiński   return (disasm->*reader_factory_)(0, static_cast<offset_t>(disasm->size()));
35*a03ca8b9SKrzysztof Kosiński }
36*a03ca8b9SKrzysztof Kosiński 
GetWriter(MutableBufferView image,Disassembler * disasm) const37*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceWriter> ReferenceGroup::GetWriter(
38*a03ca8b9SKrzysztof Kosiński     MutableBufferView image,
39*a03ca8b9SKrzysztof Kosiński     Disassembler* disasm) const {
40*a03ca8b9SKrzysztof Kosiński   DCHECK_EQ(image.begin(), disasm->image().begin());
41*a03ca8b9SKrzysztof Kosiński   DCHECK_EQ(image.size(), disasm->size());
42*a03ca8b9SKrzysztof Kosiński   return (disasm->*writer_factory_)(image);
43*a03ca8b9SKrzysztof Kosiński }
44*a03ca8b9SKrzysztof Kosiński 
45*a03ca8b9SKrzysztof Kosiński /******** Disassembler ********/
46*a03ca8b9SKrzysztof Kosiński 
Disassembler(int num_equivalence_iterations)47*a03ca8b9SKrzysztof Kosiński Disassembler::Disassembler(int num_equivalence_iterations)
48*a03ca8b9SKrzysztof Kosiński     : num_equivalence_iterations_(num_equivalence_iterations) {}
49*a03ca8b9SKrzysztof Kosiński 
50*a03ca8b9SKrzysztof Kosiński Disassembler::~Disassembler() = default;
51*a03ca8b9SKrzysztof Kosiński 
52*a03ca8b9SKrzysztof Kosiński }  // namespace zucchini
53