xref: /aosp_15_r20/external/zucchini/test_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/test_disassembler.h"
6*a03ca8b9SKrzysztof Kosiński 
7*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/test_reference_reader.h"
8*a03ca8b9SKrzysztof Kosiński 
9*a03ca8b9SKrzysztof Kosiński namespace zucchini {
10*a03ca8b9SKrzysztof Kosiński 
11*a03ca8b9SKrzysztof Kosiński // |num_equivalence_iterations_| = 2 to cover common case for testing.
TestDisassembler(const ReferenceTypeTraits & traits1,const std::vector<Reference> & refs1,const ReferenceTypeTraits & traits2,const std::vector<Reference> & refs2,const ReferenceTypeTraits & traits3,const std::vector<Reference> & refs3)12*a03ca8b9SKrzysztof Kosiński TestDisassembler::TestDisassembler(const ReferenceTypeTraits& traits1,
13*a03ca8b9SKrzysztof Kosiński                                    const std::vector<Reference>& refs1,
14*a03ca8b9SKrzysztof Kosiński                                    const ReferenceTypeTraits& traits2,
15*a03ca8b9SKrzysztof Kosiński                                    const std::vector<Reference>& refs2,
16*a03ca8b9SKrzysztof Kosiński                                    const ReferenceTypeTraits& traits3,
17*a03ca8b9SKrzysztof Kosiński                                    const std::vector<Reference>& refs3)
18*a03ca8b9SKrzysztof Kosiński     : Disassembler(2),
19*a03ca8b9SKrzysztof Kosiński       traits_{traits1, traits2, traits3},
20*a03ca8b9SKrzysztof Kosiński       refs_{refs1, refs2, refs3} {}
21*a03ca8b9SKrzysztof Kosiński 
22*a03ca8b9SKrzysztof Kosiński TestDisassembler::~TestDisassembler() = default;
23*a03ca8b9SKrzysztof Kosiński 
GetExeType() const24*a03ca8b9SKrzysztof Kosiński ExecutableType TestDisassembler::GetExeType() const {
25*a03ca8b9SKrzysztof Kosiński   return kExeTypeUnknown;
26*a03ca8b9SKrzysztof Kosiński }
27*a03ca8b9SKrzysztof Kosiński 
GetExeTypeString() const28*a03ca8b9SKrzysztof Kosiński std::string TestDisassembler::GetExeTypeString() const {
29*a03ca8b9SKrzysztof Kosiński   return "(Unknown)";
30*a03ca8b9SKrzysztof Kosiński }
31*a03ca8b9SKrzysztof Kosiński 
MakeReferenceGroups() const32*a03ca8b9SKrzysztof Kosiński std::vector<ReferenceGroup> TestDisassembler::MakeReferenceGroups() const {
33*a03ca8b9SKrzysztof Kosiński   return {
34*a03ca8b9SKrzysztof Kosiński       {traits_[0], &TestDisassembler::MakeReadRefs1,
35*a03ca8b9SKrzysztof Kosiński        &TestDisassembler::MakeWriteRefs1},
36*a03ca8b9SKrzysztof Kosiński       {traits_[1], &TestDisassembler::MakeReadRefs2,
37*a03ca8b9SKrzysztof Kosiński        &TestDisassembler::MakeWriteRefs2},
38*a03ca8b9SKrzysztof Kosiński       {traits_[2], &TestDisassembler::MakeReadRefs3,
39*a03ca8b9SKrzysztof Kosiński        &TestDisassembler::MakeWriteRefs3},
40*a03ca8b9SKrzysztof Kosiński   };
41*a03ca8b9SKrzysztof Kosiński }
42*a03ca8b9SKrzysztof Kosiński 
Parse(ConstBufferView image)43*a03ca8b9SKrzysztof Kosiński bool TestDisassembler::Parse(ConstBufferView image) {
44*a03ca8b9SKrzysztof Kosiński   return true;
45*a03ca8b9SKrzysztof Kosiński }
46*a03ca8b9SKrzysztof Kosiński 
MakeReadRefs(int type)47*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> TestDisassembler::MakeReadRefs(int type) {
48*a03ca8b9SKrzysztof Kosiński   return std::make_unique<TestReferenceReader>(refs_[type]);
49*a03ca8b9SKrzysztof Kosiński }
50*a03ca8b9SKrzysztof Kosiński 
MakeWriteRefs(MutableBufferView image)51*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceWriter> TestDisassembler::MakeWriteRefs(
52*a03ca8b9SKrzysztof Kosiński     MutableBufferView image) {
53*a03ca8b9SKrzysztof Kosiński   class NoOpWriter : public ReferenceWriter {
54*a03ca8b9SKrzysztof Kosiński    public:
55*a03ca8b9SKrzysztof Kosiński     // ReferenceWriter:
56*a03ca8b9SKrzysztof Kosiński     void PutNext(Reference) override {}
57*a03ca8b9SKrzysztof Kosiński   };
58*a03ca8b9SKrzysztof Kosiński   return std::make_unique<NoOpWriter>();
59*a03ca8b9SKrzysztof Kosiński }
60*a03ca8b9SKrzysztof Kosiński 
61*a03ca8b9SKrzysztof Kosiński }  // namespace zucchini
62