diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-05-22 22:46:53 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-05-22 22:46:53 +0000 |
| commit | f3ef3d2af95e8cd20bb9bd9aeceb24b4bf8107ca (patch) | |
| tree | 1614e0a38827a33bfae37302a3567c9cec8a391b /lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp | |
| parent | 5c51177981f6e482dbf2a99700fa8bc801f53401 (diff) | |
| download | bcm5719-llvm-f3ef3d2af95e8cd20bb9bd9aeceb24b4bf8107ca.tar.gz bcm5719-llvm-f3ef3d2af95e8cd20bb9bd9aeceb24b4bf8107ca.zip | |
Added new lldb_private::Process memory read/write functions to stop a bunch
of duplicated code from appearing all over LLDB:
lldb::addr_t
Process::ReadPointerFromMemory (lldb::addr_t vm_addr, Error &error);
bool
Process::WritePointerToMemory (lldb::addr_t vm_addr, lldb::addr_t ptr_value, Error &error);
size_t
Process::ReadScalarIntegerFromMemory (lldb::addr_t addr, uint32_t byte_size, bool is_signed, Scalar &scalar, Error &error);
size_t
Process::WriteScalarToMemory (lldb::addr_t vm_addr, const Scalar &scalar, uint32_t size, Error &error);
in lldb_private::Process the following functions were renamed:
From:
uint64_t
Process::ReadUnsignedInteger (lldb::addr_t load_addr,
size_t byte_size,
Error &error);
To:
uint64_t
Process::ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr,
size_t byte_size,
uint64_t fail_value,
Error &error);
Cleaned up a lot of code that was manually doing what the above functions do
to use the functions listed above.
Added the ability to get a scalar value as a buffer that can be written down
to a process (byte swapping the Scalar value if needed):
uint32_t
Scalar::GetAsMemoryData (void *dst,
uint32_t dst_len,
lldb::ByteOrder dst_byte_order,
Error &error) const;
The "dst_len" can be smaller that the size of the scalar and the least
significant bytes will be written. "dst_len" can also be larger and the
most significant bytes will be padded with zeroes.
Centralized the code that adds or removes address bits for callable and opcode
addresses into lldb_private::Target:
lldb::addr_t
Target::GetCallableLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const;
lldb::addr_t
Target::GetOpcodeLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const;
All necessary lldb_private::Address functions now use the target versions so
changes should only need to happen in one place if anything needs updating.
Fixed up a lot of places that were calling :
addr_t
Address::GetLoadAddress(Target*);
to call the Address::GetCallableLoadAddress() or Address::GetOpcodeLoadAddress()
as needed. There were many places in the breakpoint code where things could
go wrong for ARM if these weren't used.
llvm-svn: 131878
Diffstat (limited to 'lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp')
| -rw-r--r-- | lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp b/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp index d7a609166d1..09be5fda016 100644 --- a/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp +++ b/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp @@ -269,29 +269,11 @@ ABIMacOSX_arm::GetArgumentValues (Thread &thread, { // Arguments 5 on up are on the stack const uint32_t arg_byte_size = (bit_width + (8-1)) / 8; - if (arg_byte_size <= sizeof(uint64_t)) - { - uint8_t arg_data[sizeof(uint64_t)]; - Error error; - thread.GetProcess().ReadMemory(sp, arg_data, sizeof(arg_data), error); - DataExtractor arg_data_extractor (arg_data, sizeof(arg_data), - thread.GetProcess().GetTarget().GetArchitecture().GetByteOrder(), - thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize()); - uint32_t offset = 0; - if (arg_byte_size <= 4) - value->GetScalar() = arg_data_extractor.GetMaxU32 (&offset, arg_byte_size); - else if (arg_byte_size <= 8) - value->GetScalar() = arg_data_extractor.GetMaxU64 (&offset, arg_byte_size); - else - return false; - - if (offset == 0 || offset == UINT32_MAX) - return false; + Error error; + if (!thread.GetProcess().ReadScalarIntegerFromMemory(sp, arg_byte_size, is_signed, value->GetScalar(), error)) + return false; - if (is_signed) - value->GetScalar().SignExtend (bit_width); - sp += arg_byte_size; - } + sp += arg_byte_size; } } } |

