summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-04-13 00:07:34 +0000
committerGreg Clayton <gclayton@apple.com>2012-04-13 00:07:34 +0000
commitc8e0c244e4efb7ac9831e535380bfa41b22ebfc2 (patch)
tree25d10ecc74bdb83f03a78c09b34c71ffb3454398
parent27db0b37540268ae48c56cb7409bf6bbf713f6b2 (diff)
downloadbcm5719-llvm-c8e0c244e4efb7ac9831e535380bfa41b22ebfc2.tar.gz
bcm5719-llvm-c8e0c244e4efb7ac9831e535380bfa41b22ebfc2.zip
Expose GetAddressClass() from both the SBAddress and SBInstruction so clients can tell the difference between ARM/Thumb opcodes when disassembling ARM.
llvm-svn: 154633
-rw-r--r--lldb/include/lldb/API/SBAddress.h2
-rw-r--r--lldb/include/lldb/API/SBInstruction.h3
-rw-r--r--lldb/include/lldb/Core/Address.h2
-rw-r--r--lldb/include/lldb/Core/Disassembler.h8
-rw-r--r--lldb/include/lldb/Symbol/ObjectFile.h2
-rw-r--r--lldb/include/lldb/Target/Target.h4
-rw-r--r--lldb/include/lldb/lldb-enumerations.h21
-rw-r--r--lldb/include/lldb/lldb-private-enumerations.h21
-rw-r--r--lldb/scripts/Python/interface/SBAddress.i3
-rw-r--r--lldb/scripts/Python/interface/SBInstruction.i5
-rw-r--r--lldb/source/API/SBAddress.cpp7
-rw-r--r--lldb/source/API/SBInstruction.cpp8
-rw-r--r--lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h2
-rw-r--r--lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp4
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h2
15 files changed, 60 insertions, 34 deletions
diff --git a/lldb/include/lldb/API/SBAddress.h b/lldb/include/lldb/API/SBAddress.h
index 49a32ff8390..48626c7af89 100644
--- a/lldb/include/lldb/API/SBAddress.h
+++ b/lldb/include/lldb/API/SBAddress.h
@@ -100,6 +100,8 @@ public:
lldb::SBLineEntry
GetLineEntry ();
+ lldb::AddressClass
+ GetAddressClass ();
protected:
diff --git a/lldb/include/lldb/API/SBInstruction.h b/lldb/include/lldb/API/SBInstruction.h
index e23144869ca..cdc4040c756 100644
--- a/lldb/include/lldb/API/SBInstruction.h
+++ b/lldb/include/lldb/API/SBInstruction.h
@@ -39,6 +39,9 @@ public:
SBAddress
GetAddress();
+ lldb::AddressClass
+ GetAddressClass ();
+
const char *
GetMnemonic (lldb::SBTarget target);
diff --git a/lldb/include/lldb/Core/Address.h b/lldb/include/lldb/Core/Address.h
index 23dac87e979..423bafa69c4 100644
--- a/lldb/include/lldb/Core/Address.h
+++ b/lldb/include/lldb/Core/Address.h
@@ -250,7 +250,7 @@ public:
DumpStyle fallback_style = DumpStyleInvalid,
uint32_t addr_byte_size = UINT32_MAX) const;
- AddressClass
+ lldb::AddressClass
GetAddressClass () const;
//------------------------------------------------------------------
diff --git a/lldb/include/lldb/Core/Disassembler.h b/lldb/include/lldb/Core/Disassembler.h
index 8553ded8211..5bd6b9c8a97 100644
--- a/lldb/include/lldb/Core/Disassembler.h
+++ b/lldb/include/lldb/Core/Disassembler.h
@@ -30,7 +30,7 @@ class Instruction
{
public:
Instruction (const Address &address,
- AddressClass addr_class = eAddressClassInvalid);
+ lldb::AddressClass addr_class = lldb::eAddressClassInvalid);
virtual
~Instruction();
@@ -64,7 +64,7 @@ public:
virtual void
CalculateMnemonicOperandsAndComment (ExecutionContextScope *exe_scope) = 0;
- AddressClass
+ lldb::AddressClass
GetAddressClass ();
void
@@ -72,7 +72,7 @@ public:
{
// Invalidate the address class to lazily discover
// it if we need to.
- m_address_class = eAddressClassInvalid;
+ m_address_class = lldb::eAddressClassInvalid;
m_address = addr;
}
@@ -130,7 +130,7 @@ protected:
// The usual value will be eAddressClassCode, but often when
// disassembling memory, you might run into data. This can
// help us to disassemble appropriately.
- AddressClass m_address_class;
+ lldb::AddressClass m_address_class;
Opcode m_opcode; // The opcode for this instruction
std::string m_opcode_name;
std::string m_mnemocics;
diff --git a/lldb/include/lldb/Symbol/ObjectFile.h b/lldb/include/lldb/Symbol/ObjectFile.h
index 6d7ccfb3d5a..3144096ff28 100644
--- a/lldb/include/lldb/Symbol/ObjectFile.h
+++ b/lldb/include/lldb/Symbol/ObjectFile.h
@@ -200,7 +200,7 @@ public:
/// architecture (and object for archives). Returns zero if no
/// architecture or object has been selected.
//------------------------------------------------------------------
- virtual AddressClass
+ virtual lldb::AddressClass
GetAddressClass (lldb::addr_t file_addr);
//------------------------------------------------------------------
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index 62d7b41a5f6..9f5568580f9 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -597,7 +597,7 @@ public:
/// returned.
//------------------------------------------------------------------
lldb::addr_t
- GetCallableLoadAddress (lldb::addr_t load_addr, AddressClass addr_class = lldb_private::eAddressClassInvalid) const;
+ GetCallableLoadAddress (lldb::addr_t load_addr, lldb::AddressClass addr_class = lldb::eAddressClassInvalid) const;
//------------------------------------------------------------------
/// Get \a load_addr as an opcode for this target.
@@ -612,7 +612,7 @@ public:
/// returned.
//------------------------------------------------------------------
lldb::addr_t
- GetOpcodeLoadAddress (lldb::addr_t load_addr, AddressClass addr_class = lldb_private::eAddressClassInvalid) const;
+ GetOpcodeLoadAddress (lldb::addr_t load_addr, lldb::AddressClass addr_class = lldb::eAddressClassInvalid) const;
protected:
void
diff --git a/lldb/include/lldb/lldb-enumerations.h b/lldb/include/lldb/lldb-enumerations.h
index 6447f9d398a..8e1bc97ab98 100644
--- a/lldb/include/lldb/lldb-enumerations.h
+++ b/lldb/include/lldb/lldb-enumerations.h
@@ -626,6 +626,27 @@ namespace lldb {
eFrameCompareOlder
} FrameComparison;
+ //----------------------------------------------------------------------
+ // Address Class
+ //
+ // A way of classifying an address used for disassembling and setting
+ // breakpoints. Many object files can track exactly what parts of their
+ // object files are code, data and other information. This is of course
+ // above and beyond just looking at the section types. For example, code
+ // might contain PC relative data and the object file might be able to
+ // tell us that an address in code is data.
+ //----------------------------------------------------------------------
+ typedef enum AddressClass
+ {
+ eAddressClassInvalid,
+ eAddressClassUnknown,
+ eAddressClassCode,
+ eAddressClassCodeAlternateISA,
+ eAddressClassData,
+ eAddressClassDebug,
+ eAddressClassRuntime
+ } AddressClass;
+
} // namespace lldb
diff --git a/lldb/include/lldb/lldb-private-enumerations.h b/lldb/include/lldb/lldb-private-enumerations.h
index 8b5b03f2fd3..3b6fc8a8a8e 100644
--- a/lldb/include/lldb/lldb-private-enumerations.h
+++ b/lldb/include/lldb/lldb-private-enumerations.h
@@ -37,27 +37,6 @@ typedef enum AddressType
} AddressType;
//----------------------------------------------------------------------
-// Address Class
-//
-// A way of classifying an address used for disassembling and setting
-// breakpoints. Many object files can track exactly what parts of their
-// object files are code, data and other information. This is of course
-// above and beyond just looking at the section types. For example, code
-// might contain PC relative data and the object file might be able to
-// tell us that an address in code is data.
-//----------------------------------------------------------------------
-typedef enum AddressClass
-{
- eAddressClassInvalid,
- eAddressClassUnknown,
- eAddressClassCode,
- eAddressClassCodeAlternateISA,
- eAddressClassData,
- eAddressClassDebug,
- eAddressClassRuntime
-} AddressClass;
-
-//----------------------------------------------------------------------
// Votes - Need a tri-state, yes, no, no opinion...
//----------------------------------------------------------------------
typedef enum Vote
diff --git a/lldb/scripts/Python/interface/SBAddress.i b/lldb/scripts/Python/interface/SBAddress.i
index eeccff03332..0bc0c53f794 100644
--- a/lldb/scripts/Python/interface/SBAddress.i
+++ b/lldb/scripts/Python/interface/SBAddress.i
@@ -93,6 +93,9 @@ public:
lldb::addr_t offset);
+ lldb::AddressClass
+ GetAddressClass ();
+
%feature("docstring", "
//------------------------------------------------------------------
/// GetSymbolContext() and the following can lookup symbol information for a given address.
diff --git a/lldb/scripts/Python/interface/SBInstruction.i b/lldb/scripts/Python/interface/SBInstruction.i
index 01cebb1590c..3c0d65ef842 100644
--- a/lldb/scripts/Python/interface/SBInstruction.i
+++ b/lldb/scripts/Python/interface/SBInstruction.i
@@ -27,9 +27,12 @@ public:
bool
IsValid();
- SBAddress
+ lldb::SBAddress
GetAddress();
+ lldb::AddressClass
+ GetAddressClass ();
+
const char *
GetMnemonic (lldb::SBTarget target);
diff --git a/lldb/source/API/SBAddress.cpp b/lldb/source/API/SBAddress.cpp
index 8e7560930db..6013fd38cf2 100644
--- a/lldb/source/API/SBAddress.cpp
+++ b/lldb/source/API/SBAddress.cpp
@@ -313,4 +313,11 @@ SBAddress::GetLineEntry ()
return sb_line_entry;
}
+AddressClass
+SBAddress::GetAddressClass ()
+{
+ if (m_opaque_ap.get())
+ return m_opaque_ap->GetAddressClass();
+ return eAddressClassInvalid;
+}
diff --git a/lldb/source/API/SBInstruction.cpp b/lldb/source/API/SBInstruction.cpp
index 0a7bb73fa6f..996b01debc0 100644
--- a/lldb/source/API/SBInstruction.cpp
+++ b/lldb/source/API/SBInstruction.cpp
@@ -237,3 +237,11 @@ SBInstruction::TestEmulation (lldb::SBStream &output_stream, const char *test_f
return m_opaque_sp->TestEmulation (output_stream.get(), test_file);
}
+
+lldb::AddressClass
+SBInstruction::GetAddressClass ()
+{
+ if (m_opaque_sp.get())
+ return m_opaque_sp->GetAddressClass();
+ return eAddressClassInvalid;
+}
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
index 7e3af766892..3150ff641f8 100644
--- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
+++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
@@ -20,7 +20,7 @@ class InstructionLLVM : public lldb_private::Instruction
{
public:
InstructionLLVM (const lldb_private::Address &addr,
- lldb_private::AddressClass addr_class,
+ lldb::AddressClass addr_class,
EDDisassemblerRef disassembler,
llvm::Triple::ArchType arch_type);
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
index 408f87b1d79..a41ff6e77f3 100644
--- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
+++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
@@ -32,7 +32,7 @@ class InstructionLLVMC : public lldb_private::Instruction
public:
InstructionLLVMC (DisassemblerLLVMC &disasm,
const lldb_private::Address &address,
- lldb_private::AddressClass addr_class) :
+ AddressClass addr_class) :
Instruction(address, addr_class),
m_is_valid(false),
m_disasm(disasm),
@@ -350,7 +350,7 @@ protected:
}
template <bool Reparse> bool Parse (const lldb_private::Address &address,
- lldb_private::AddressClass addr_class,
+ AddressClass addr_class,
const DataExtractor &extractor,
uint32_t data_offset,
lldb_private::ExecutionContextScope *exe_scope)
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
index 0790c6c6de6..e6a4931de1d 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
@@ -88,7 +88,7 @@ public:
virtual size_t
GetAddressByteSize () const;
- virtual lldb_private::AddressClass
+ virtual lldb::AddressClass
GetAddressClass (lldb::addr_t file_addr);
virtual lldb_private::Symtab *
OpenPOWER on IntegriCloud