2010-06-09 00:52:24 +08:00
|
|
|
//===-- SBInstructionList.cpp -----------------------------------*- C++ -*-===//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2010-06-09 00:52:24 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#include "lldb/API/SBInstructionList.h"
|
2019-03-06 08:06:00 +08:00
|
|
|
#include "SBReproducerPrivate.h"
|
2017-05-04 19:34:42 +08:00
|
|
|
#include "lldb/API/SBAddress.h"
|
2019-03-06 08:06:00 +08:00
|
|
|
#include "lldb/API/SBInstruction.h"
|
2010-10-06 11:09:58 +08:00
|
|
|
#include "lldb/API/SBStream.h"
|
2019-10-15 04:59:57 +08:00
|
|
|
#include "lldb/API/SBFile.h"
|
2010-10-06 11:09:58 +08:00
|
|
|
#include "lldb/Core/Disassembler.h"
|
2014-10-11 07:07:36 +08:00
|
|
|
#include "lldb/Core/Module.h"
|
2019-10-15 04:59:57 +08:00
|
|
|
#include "lldb/Core/StreamFile.h"
|
2014-10-11 07:07:36 +08:00
|
|
|
#include "lldb/Symbol/SymbolContext.h"
|
2017-02-03 05:39:50 +08:00
|
|
|
#include "lldb/Utility/Stream.h"
|
2010-06-09 00:52:24 +08:00
|
|
|
|
|
|
|
using namespace lldb;
|
2010-10-06 11:09:58 +08:00
|
|
|
using namespace lldb_private;
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2019-03-06 08:06:00 +08:00
|
|
|
SBInstructionList::SBInstructionList() : m_opaque_sp() {
|
|
|
|
LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBInstructionList);
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2010-10-06 11:09:58 +08:00
|
|
|
SBInstructionList::SBInstructionList(const SBInstructionList &rhs)
|
2019-03-06 08:06:00 +08:00
|
|
|
: m_opaque_sp(rhs.m_opaque_sp) {
|
|
|
|
LLDB_RECORD_CONSTRUCTOR(SBInstructionList, (const lldb::SBInstructionList &),
|
|
|
|
rhs);
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2010-11-06 07:17:00 +08:00
|
|
|
const SBInstructionList &SBInstructionList::
|
|
|
|
operator=(const SBInstructionList &rhs) {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD(
|
|
|
|
const lldb::SBInstructionList &,
|
|
|
|
SBInstructionList, operator=,(const lldb::SBInstructionList &), rhs);
|
|
|
|
|
2010-11-06 07:17:00 +08:00
|
|
|
if (this != &rhs)
|
|
|
|
m_opaque_sp = rhs.m_opaque_sp;
|
2019-04-04 05:31:22 +08:00
|
|
|
return LLDB_RECORD_RESULT(*this);
|
2010-11-06 07:17:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
SBInstructionList::~SBInstructionList() {}
|
|
|
|
|
2019-03-06 08:06:00 +08:00
|
|
|
bool SBInstructionList::IsValid() const {
|
|
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInstructionList, IsValid);
|
Add "operator bool" to SB APIs
Summary:
Our python version of the SB API has (the python equivalent of)
operator bool, but the C++ version doesn't.
This is because our python operators are added by modify-python-lldb.py,
which performs postprocessing on the swig-generated interface files.
In this patch, I add the "operator bool" to all SB classes which have an
IsValid method (which is the same logic used by modify-python-lldb.py).
This way, we make the two interfaces more constent, and it allows us to
rely on swig's automatic syntesis of python __nonzero__ methods instead
of doing manual fixups.
Reviewers: zturner, jingham, clayborg, jfb, serge-sans-paille
Subscribers: jdoerfert, lldb-commits
Differential Revision: https://reviews.llvm.org/D58792
llvm-svn: 355824
2019-03-11 21:58:46 +08:00
|
|
|
return this->operator bool();
|
|
|
|
}
|
|
|
|
SBInstructionList::operator bool() const {
|
|
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInstructionList, operator bool);
|
2019-03-06 08:06:00 +08:00
|
|
|
|
[lldb] NFC modernize codebase with modernize-use-nullptr
Summary:
NFC = [[ https://llvm.org/docs/Lexicon.html#nfc | Non functional change ]]
This commit is the result of modernizing the LLDB codebase by using
`nullptr` instread of `0` or `NULL`. See
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
for more information.
This is the command I ran and I to fix and format the code base:
```
run-clang-tidy.py \
-header-filter='.*' \
-checks='-*,modernize-use-nullptr' \
-fix ~/dev/llvm-project/lldb/.* \
-format \
-style LLVM \
-p ~/llvm-builds/debug-ninja-gcc
```
NOTE: There were also changes to `llvm/utils/unittest` but I did not
include them because I felt that maybe this library shall be updated in
isolation somehow.
NOTE: I know this is a rather large commit but it is a nobrainer in most
parts.
Reviewers: martong, espindola, shafik, #lldb, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: arsenm, jvesely, nhaehnle, hiraditya, JDevlieghere, teemperor, rnkovacs, emaste, kubamracek, nemanjai, ki.stfu, javed.absar, arichardson, kbarton, jrtc27, MaskRay, atanasyan, dexonsmith, arphaman, jfb, jsji, jdoerfert, lldb-commits, llvm-commits
Tags: #lldb, #llvm
Differential Revision: https://reviews.llvm.org/D61847
llvm-svn: 361484
2019-05-23 19:14:47 +08:00
|
|
|
return m_opaque_sp.get() != nullptr;
|
2019-03-06 08:06:00 +08:00
|
|
|
}
|
2010-11-06 07:17:00 +08:00
|
|
|
|
2010-06-09 00:52:24 +08:00
|
|
|
size_t SBInstructionList::GetSize() {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD_NO_ARGS(size_t, SBInstructionList, GetSize);
|
|
|
|
|
2010-06-09 00:52:24 +08:00
|
|
|
if (m_opaque_sp)
|
|
|
|
return m_opaque_sp->GetInstructionList().GetSize();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2011-06-21 06:30:48 +08:00
|
|
|
SBInstruction SBInstructionList::GetInstructionAtIndex(uint32_t idx) {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD(lldb::SBInstruction, SBInstructionList,
|
|
|
|
GetInstructionAtIndex, (uint32_t), idx);
|
|
|
|
|
2010-06-09 00:52:24 +08:00
|
|
|
SBInstruction inst;
|
2011-06-21 06:30:48 +08:00
|
|
|
if (m_opaque_sp && idx < m_opaque_sp->GetInstructionList().GetSize())
|
2016-06-08 06:56:40 +08:00
|
|
|
inst.SetOpaque(
|
|
|
|
m_opaque_sp,
|
2011-06-21 06:30:48 +08:00
|
|
|
m_opaque_sp->GetInstructionList().GetInstructionAtIndex(idx));
|
2019-03-06 08:06:00 +08:00
|
|
|
return LLDB_RECORD_RESULT(inst);
|
2011-06-21 06:30:48 +08:00
|
|
|
}
|
|
|
|
|
2017-05-04 19:34:42 +08:00
|
|
|
size_t SBInstructionList::GetInstructionsCount(const SBAddress &start,
|
2019-03-06 08:06:00 +08:00
|
|
|
const SBAddress &end,
|
|
|
|
bool canSetBreakpoint) {
|
|
|
|
LLDB_RECORD_METHOD(size_t, SBInstructionList, GetInstructionsCount,
|
|
|
|
(const lldb::SBAddress &, const lldb::SBAddress &, bool),
|
|
|
|
start, end, canSetBreakpoint);
|
|
|
|
|
2017-05-04 19:34:42 +08:00
|
|
|
size_t num_instructions = GetSize();
|
|
|
|
size_t i = 0;
|
|
|
|
SBAddress addr;
|
|
|
|
size_t lower_index = 0;
|
|
|
|
size_t upper_index = 0;
|
|
|
|
size_t instructions_to_skip = 0;
|
|
|
|
for (i = 0; i < num_instructions; ++i) {
|
|
|
|
addr = GetInstructionAtIndex(i).GetAddress();
|
|
|
|
if (start == addr)
|
|
|
|
lower_index = i;
|
|
|
|
if (end == addr)
|
|
|
|
upper_index = i;
|
|
|
|
}
|
|
|
|
if (canSetBreakpoint)
|
|
|
|
for (i = lower_index; i <= upper_index; ++i) {
|
|
|
|
SBInstruction insn = GetInstructionAtIndex(i);
|
|
|
|
if (!insn.CanSetBreakpoint())
|
|
|
|
++instructions_to_skip;
|
|
|
|
}
|
|
|
|
return upper_index - lower_index - instructions_to_skip;
|
|
|
|
}
|
|
|
|
|
2019-03-06 08:06:00 +08:00
|
|
|
void SBInstructionList::Clear() {
|
|
|
|
LLDB_RECORD_METHOD_NO_ARGS(void, SBInstructionList, Clear);
|
|
|
|
|
|
|
|
m_opaque_sp.reset();
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2019-03-06 08:06:00 +08:00
|
|
|
void SBInstructionList::AppendInstruction(SBInstruction insn) {
|
|
|
|
LLDB_RECORD_METHOD(void, SBInstructionList, AppendInstruction,
|
|
|
|
(lldb::SBInstruction), insn);
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
|
|
|
void SBInstructionList::SetDisassembler(const lldb::DisassemblerSP &opaque_sp) {
|
2010-10-06 11:09:58 +08:00
|
|
|
m_opaque_sp = opaque_sp;
|
2010-06-09 00:52:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void SBInstructionList::Print(FILE *out) {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD(void, SBInstructionList, Print, (FILE *), out);
|
[lldb] NFC modernize codebase with modernize-use-nullptr
Summary:
NFC = [[ https://llvm.org/docs/Lexicon.html#nfc | Non functional change ]]
This commit is the result of modernizing the LLDB codebase by using
`nullptr` instread of `0` or `NULL`. See
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
for more information.
This is the command I ran and I to fix and format the code base:
```
run-clang-tidy.py \
-header-filter='.*' \
-checks='-*,modernize-use-nullptr' \
-fix ~/dev/llvm-project/lldb/.* \
-format \
-style LLVM \
-p ~/llvm-builds/debug-ninja-gcc
```
NOTE: There were also changes to `llvm/utils/unittest` but I did not
include them because I felt that maybe this library shall be updated in
isolation somehow.
NOTE: I know this is a rather large commit but it is a nobrainer in most
parts.
Reviewers: martong, espindola, shafik, #lldb, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: arsenm, jvesely, nhaehnle, hiraditya, JDevlieghere, teemperor, rnkovacs, emaste, kubamracek, nemanjai, ki.stfu, javed.absar, arichardson, kbarton, jrtc27, MaskRay, atanasyan, dexonsmith, arphaman, jfb, jsji, jdoerfert, lldb-commits, llvm-commits
Tags: #lldb, #llvm
Differential Revision: https://reviews.llvm.org/D61847
llvm-svn: 361484
2019-05-23 19:14:47 +08:00
|
|
|
if (out == nullptr)
|
2016-09-07 04:57:50 +08:00
|
|
|
return;
|
2019-10-15 04:59:57 +08:00
|
|
|
StreamFile stream(out, false);
|
|
|
|
GetDescription(stream);
|
2010-06-09 00:52:24 +08:00
|
|
|
}
|
|
|
|
|
2019-10-15 04:59:57 +08:00
|
|
|
void SBInstructionList::Print(SBFile out) {
|
|
|
|
LLDB_RECORD_METHOD(void, SBInstructionList, Print, (SBFile), out);
|
|
|
|
if (!out.IsValid())
|
|
|
|
return;
|
2019-10-15 05:51:02 +08:00
|
|
|
StreamFile stream(out.m_opaque_sp);
|
2019-10-15 04:59:57 +08:00
|
|
|
GetDescription(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SBInstructionList::Print(FileSP out_sp) {
|
|
|
|
LLDB_RECORD_METHOD(void, SBInstructionList, Print, (FileSP), out_sp);
|
|
|
|
if (!out_sp || !out_sp->IsValid())
|
|
|
|
return;
|
|
|
|
StreamFile stream(out_sp);
|
|
|
|
GetDescription(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SBInstructionList::GetDescription(lldb::SBStream &stream) {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD(bool, SBInstructionList, GetDescription,
|
2019-10-15 04:59:57 +08:00
|
|
|
(lldb::SBStream &), stream);
|
|
|
|
return GetDescription(stream.ref());
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SBInstructionList::GetDescription(Stream &sref) {
|
2019-03-06 08:06:00 +08:00
|
|
|
|
2010-10-06 11:09:58 +08:00
|
|
|
if (m_opaque_sp) {
|
2010-06-09 00:52:24 +08:00
|
|
|
size_t num_instructions = GetSize();
|
2010-10-06 11:09:58 +08:00
|
|
|
if (num_instructions) {
|
2018-05-01 00:49:04 +08:00
|
|
|
// Call the ref() to make sure a stream is created if one deesn't exist
|
|
|
|
// already inside description...
|
2010-10-06 11:09:58 +08:00
|
|
|
const uint32_t max_opcode_byte_size =
|
Added the ability to get the min and max instruction byte size for
an architecture into ArchSpec:
uint32_t
ArchSpec::GetMinimumOpcodeByteSize() const;
uint32_t
ArchSpec::GetMaximumOpcodeByteSize() const;
Added an AddressClass to the Instruction class in Disassembler.h.
This allows decoded instructions to know know if they are code,
code with alternate ISA (thumb), or even data which can be mixed
into code. The instruction does have an address, but it is a good
idea to cache this value so we don't have to look it up more than
once.
Fixed an issue in Opcode::SetOpcodeBytes() where the length wasn't
getting set.
Changed:
bool
SymbolContextList::AppendIfUnique (const SymbolContext& sc);
To:
bool
SymbolContextList::AppendIfUnique (const SymbolContext& sc,
bool merge_symbol_into_function);
This function was typically being used when looking up functions
and symbols. Now if you lookup a function, then find the symbol,
they can be merged into the same symbol context and not cause
multiple symbol contexts to appear in a symbol context list that
describes the same function.
Fixed the SymbolContext not equal operator which was causing mixed
mode disassembly to not work ("disassembler --mixed --name main").
Modified the disassembler classes to know about the fact we know,
for a given architecture, what the min and max opcode byte sizes
are. The InstructionList class was modified to return the max
opcode byte size for all of the instructions in its list.
These two fixes means when disassemble a list of instructions and dump
them and show the opcode bytes, we can format the output more
intelligently when showing opcode bytes. This affects any architectures
that have varying opcode byte sizes (x86_64 and i386). Knowing the max
opcode byte size also helps us to be able to disassemble N instructions
without having to re-read data if we didn't read enough bytes.
Added the ability to set the architecture for the disassemble command.
This means you can easily cross disassemble data for any supported
architecture. I also added the ability to specify "thumb" as an
architecture so that we can force disassembly into thumb mode when
needed. In GDB this was done using a hack of specifying an odd
address when disassembling. I don't want to repeat this hack in LLDB,
so the auto detection between ARM and thumb is failing, just specify
thumb when disassembling:
(lldb) disassemble --arch thumb --name main
You can also have data in say an x86_64 file executable and disassemble
data as any other supported architecture:
% lldb a.out
Current executable set to 'a.out' (x86_64).
(lldb) b main
(lldb) run
(lldb) disassemble --arch thumb --count 2 --start-address 0x0000000100001080 --bytes
0x100001080: 0xb580 push {r7, lr}
0x100001082: 0xaf00 add r7, sp, #0
Fixed Target::ReadMemory(...) to be able to deal with Address argument object
that isn't section offset. When an address object was supplied that was
out on the heap or stack, target read memory would fail. Disassembly uses
Target::ReadMemory(...), and the example above where we disassembler thumb
opcodes in an x86 binary was failing do to this bug.
llvm-svn: 128347
2011-03-27 03:14:58 +08:00
|
|
|
m_opaque_sp->GetInstructionList().GetMaxOpcocdeByteSize();
|
2015-02-05 06:00:53 +08:00
|
|
|
FormatEntity::Entry format;
|
|
|
|
FormatEntity::Parse("${addr}: ", format);
|
2014-10-11 07:07:36 +08:00
|
|
|
SymbolContext sc;
|
|
|
|
SymbolContext prev_sc;
|
2010-10-06 11:09:58 +08:00
|
|
|
for (size_t i = 0; i < num_instructions; ++i) {
|
|
|
|
Instruction *inst =
|
|
|
|
m_opaque_sp->GetInstructionList().GetInstructionAtIndex(i).get();
|
[lldb] NFC modernize codebase with modernize-use-nullptr
Summary:
NFC = [[ https://llvm.org/docs/Lexicon.html#nfc | Non functional change ]]
This commit is the result of modernizing the LLDB codebase by using
`nullptr` instread of `0` or `NULL`. See
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
for more information.
This is the command I ran and I to fix and format the code base:
```
run-clang-tidy.py \
-header-filter='.*' \
-checks='-*,modernize-use-nullptr' \
-fix ~/dev/llvm-project/lldb/.* \
-format \
-style LLVM \
-p ~/llvm-builds/debug-ninja-gcc
```
NOTE: There were also changes to `llvm/utils/unittest` but I did not
include them because I felt that maybe this library shall be updated in
isolation somehow.
NOTE: I know this is a rather large commit but it is a nobrainer in most
parts.
Reviewers: martong, espindola, shafik, #lldb, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: arsenm, jvesely, nhaehnle, hiraditya, JDevlieghere, teemperor, rnkovacs, emaste, kubamracek, nemanjai, ki.stfu, javed.absar, arichardson, kbarton, jrtc27, MaskRay, atanasyan, dexonsmith, arphaman, jfb, jsji, jdoerfert, lldb-commits, llvm-commits
Tags: #lldb, #llvm
Differential Revision: https://reviews.llvm.org/D61847
llvm-svn: 361484
2019-05-23 19:14:47 +08:00
|
|
|
if (inst == nullptr)
|
2010-10-06 11:09:58 +08:00
|
|
|
break;
|
2016-09-07 04:57:50 +08:00
|
|
|
|
2014-10-11 07:07:36 +08:00
|
|
|
const Address &addr = inst->GetAddress();
|
|
|
|
prev_sc = sc;
|
|
|
|
ModuleSP module_sp(addr.GetModule());
|
|
|
|
if (module_sp) {
|
|
|
|
module_sp->ResolveSymbolContextForAddress(
|
|
|
|
addr, eSymbolContextEverything, sc);
|
2010-10-06 11:09:58 +08:00
|
|
|
}
|
2016-09-07 04:57:50 +08:00
|
|
|
|
[lldb] NFC modernize codebase with modernize-use-nullptr
Summary:
NFC = [[ https://llvm.org/docs/Lexicon.html#nfc | Non functional change ]]
This commit is the result of modernizing the LLDB codebase by using
`nullptr` instread of `0` or `NULL`. See
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
for more information.
This is the command I ran and I to fix and format the code base:
```
run-clang-tidy.py \
-header-filter='.*' \
-checks='-*,modernize-use-nullptr' \
-fix ~/dev/llvm-project/lldb/.* \
-format \
-style LLVM \
-p ~/llvm-builds/debug-ninja-gcc
```
NOTE: There were also changes to `llvm/utils/unittest` but I did not
include them because I felt that maybe this library shall be updated in
isolation somehow.
NOTE: I know this is a rather large commit but it is a nobrainer in most
parts.
Reviewers: martong, espindola, shafik, #lldb, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: arsenm, jvesely, nhaehnle, hiraditya, JDevlieghere, teemperor, rnkovacs, emaste, kubamracek, nemanjai, ki.stfu, javed.absar, arichardson, kbarton, jrtc27, MaskRay, atanasyan, dexonsmith, arphaman, jfb, jsji, jdoerfert, lldb-commits, llvm-commits
Tags: #lldb, #llvm
Differential Revision: https://reviews.llvm.org/D61847
llvm-svn: 361484
2019-05-23 19:14:47 +08:00
|
|
|
inst->Dump(&sref, max_opcode_byte_size, true, false, nullptr, &sc,
|
2015-02-14 07:24:21 +08:00
|
|
|
&prev_sc, &format, 0);
|
2010-10-06 11:09:58 +08:00
|
|
|
sref.EOL();
|
2016-09-07 04:57:50 +08:00
|
|
|
}
|
2010-10-06 11:09:58 +08:00
|
|
|
return true;
|
|
|
|
}
|
2016-09-07 04:57:50 +08:00
|
|
|
}
|
2010-10-06 11:09:58 +08:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2011-04-06 07:22:54 +08:00
|
|
|
bool SBInstructionList::DumpEmulationForAllInstructions(const char *triple) {
|
2019-03-06 08:06:00 +08:00
|
|
|
LLDB_RECORD_METHOD(bool, SBInstructionList, DumpEmulationForAllInstructions,
|
|
|
|
(const char *), triple);
|
|
|
|
|
2011-04-06 07:22:54 +08:00
|
|
|
if (m_opaque_sp) {
|
|
|
|
size_t len = GetSize();
|
|
|
|
for (size_t i = 0; i < len; ++i) {
|
|
|
|
if (!GetInstructionAtIndex((uint32_t)i).DumpEmulation(triple))
|
|
|
|
return false;
|
|
|
|
}
|
2016-09-07 04:57:50 +08:00
|
|
|
}
|
2011-04-06 07:22:54 +08:00
|
|
|
return true;
|
|
|
|
}
|
2019-03-20 01:13:13 +08:00
|
|
|
|
|
|
|
namespace lldb_private {
|
|
|
|
namespace repro {
|
|
|
|
|
|
|
|
template <>
|
|
|
|
void RegisterMethods<SBInstructionList>(Registry &R) {
|
|
|
|
LLDB_REGISTER_CONSTRUCTOR(SBInstructionList, ());
|
|
|
|
LLDB_REGISTER_CONSTRUCTOR(SBInstructionList,
|
|
|
|
(const lldb::SBInstructionList &));
|
|
|
|
LLDB_REGISTER_METHOD(
|
|
|
|
const lldb::SBInstructionList &,
|
|
|
|
SBInstructionList, operator=,(const lldb::SBInstructionList &));
|
|
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBInstructionList, IsValid, ());
|
|
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBInstructionList, operator bool, ());
|
|
|
|
LLDB_REGISTER_METHOD(size_t, SBInstructionList, GetSize, ());
|
|
|
|
LLDB_REGISTER_METHOD(lldb::SBInstruction, SBInstructionList,
|
|
|
|
GetInstructionAtIndex, (uint32_t));
|
|
|
|
LLDB_REGISTER_METHOD(
|
|
|
|
size_t, SBInstructionList, GetInstructionsCount,
|
|
|
|
(const lldb::SBAddress &, const lldb::SBAddress &, bool));
|
|
|
|
LLDB_REGISTER_METHOD(void, SBInstructionList, Clear, ());
|
|
|
|
LLDB_REGISTER_METHOD(void, SBInstructionList, AppendInstruction,
|
|
|
|
(lldb::SBInstruction));
|
|
|
|
LLDB_REGISTER_METHOD(void, SBInstructionList, Print, (FILE *));
|
2019-10-15 04:59:57 +08:00
|
|
|
LLDB_REGISTER_METHOD(void, SBInstructionList, Print, (SBFile));
|
|
|
|
LLDB_REGISTER_METHOD(void, SBInstructionList, Print, (FileSP));
|
2019-03-20 01:13:13 +08:00
|
|
|
LLDB_REGISTER_METHOD(bool, SBInstructionList, GetDescription,
|
|
|
|
(lldb::SBStream &));
|
|
|
|
LLDB_REGISTER_METHOD(bool, SBInstructionList,
|
|
|
|
DumpEmulationForAllInstructions, (const char *));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|