[Lldb-commits] [lldb] r314959 - Work around a bug in the C++ expression parser.
Jim Ingham via lldb-commits
lldb-commits at lists.llvm.org
Wed Oct 4 18:00:29 PDT 2017
Author: jingham
Date: Wed Oct 4 18:00:29 2017
New Revision: 314959
URL: http://llvm.org/viewvc/llvm-project?rev=314959&view=rev
Log:
Work around a bug in the C++ expression parser.
When the expression parser does name resolution for local
variables in C++ closures it doesn't give the local name
priority over other global symbols of the same name. heap.py
uses "info" which is a fairly common name, and so the commands
in it fail. This is a workaround, just use lldb_info not info.
<rdar://problem/34026140>
Modified:
lldb/trunk/examples/darwin/heap_find/heap.py
Modified: lldb/trunk/examples/darwin/heap_find/heap.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/darwin/heap_find/heap.py?rev=314959&r1=314958&r2=314959&view=diff
==============================================================================
--- lldb/trunk/examples/darwin/heap_find/heap.py (original)
+++ lldb/trunk/examples/darwin/heap_find/heap.py Wed Oct 4 18:00:29 2017
@@ -576,19 +576,19 @@ typedef struct $malloc_stack_history {
unsigned idx;
malloc_stack_entry entries[MAX_HISTORY];
} $malloc_stack_history;
-$malloc_stack_history info = { (task_t)mach_task_self(), 0 };
+$malloc_stack_history lldb_info = { (task_t)mach_task_self(), 0 };
uint32_t max_stack_frames = MAX_FRAMES;
enumerate_callback_t callback = [] (mach_stack_logging_record_t stack_record, void *baton) -> void {
- $malloc_stack_history *info = ($malloc_stack_history *)baton;
- if (info->idx < MAX_HISTORY) {
- malloc_stack_entry *stack_entry = &(info->entries[info->idx]);
+ $malloc_stack_history *lldb_info = ($malloc_stack_history *)baton;
+ if (lldb_info->idx < MAX_HISTORY) {
+ malloc_stack_entry *stack_entry = &(lldb_info->entries[lldb_info->idx]);
stack_entry->address = stack_record.address;
stack_entry->type_flags = stack_record.type_flags;
stack_entry->argument = stack_record.argument;
stack_entry->num_frames = 0;
stack_entry->frames[0] = 0;
stack_entry->frames_err = (kern_return_t)__mach_stack_logging_frames_for_uniqued_stack (
- info->task,
+ lldb_info->task,
stack_record.stack_identifier,
stack_entry->frames,
(uint32_t)MAX_FRAMES,
@@ -597,10 +597,10 @@ enumerate_callback_t callback = [] (mach
if (stack_entry->num_frames < MAX_FRAMES)
stack_entry->frames[stack_entry->num_frames] = 0;
}
- ++info->idx;
+ ++lldb_info->idx;
};
-(kern_return_t)__mach_stack_logging_enumerate_records (info.task, (uint64_t)0x%x, callback, &info);
-info''' % (options.max_frames, options.max_history, addr)
+(kern_return_t)__mach_stack_logging_enumerate_records (lldb_info.task, (uint64_t)0x%x, callback, &lldb_info);
+lldb_info''' % (options.max_frames, options.max_history, addr)
frame = lldb.debugger.GetSelectedTarget().GetProcess(
).GetSelectedThread().GetSelectedFrame()
@@ -924,18 +924,18 @@ typedef struct callback_baton_t {
void *ptr;
} callback_baton_t;
range_callback_t range_callback = [](task_t task, void *baton, unsigned type, uintptr_t ptr_addr, uintptr_t ptr_size) -> void {
- callback_baton_t *info = (callback_baton_t *)baton;
+ callback_baton_t *lldb_info = (callback_baton_t *)baton;
typedef void* T;
const unsigned size = sizeof(T);
T *array = (T*)ptr_addr;
for (unsigned idx = 0; ((idx + 1) * sizeof(T)) <= ptr_size; ++idx) {
- if (array[idx] == info->ptr) {
- if (info->num_matches < MAX_MATCHES) {
- info->matches[info->num_matches].addr = (void*)ptr_addr;
- info->matches[info->num_matches].size = ptr_size;
- info->matches[info->num_matches].offset = idx*sizeof(T);
- info->matches[info->num_matches].type = type;
- ++info->num_matches;
+ if (array[idx] == lldb_info->ptr) {
+ if (lldb_info->num_matches < MAX_MATCHES) {
+ lldb_info->matches[lldb_info->num_matches].addr = (void*)ptr_addr;
+ lldb_info->matches[lldb_info->num_matches].size = ptr_size;
+ lldb_info->matches[lldb_info->num_matches].offset = idx*sizeof(T);
+ lldb_info->matches[lldb_info->num_matches].type = type;
+ ++lldb_info->num_matches;
}
}
}
@@ -1033,18 +1033,18 @@ typedef struct callback_baton_t {
unsigned cstr_len;
} callback_baton_t;
range_callback_t range_callback = [](task_t task, void *baton, unsigned type, uintptr_t ptr_addr, uintptr_t ptr_size) -> void {
- callback_baton_t *info = (callback_baton_t *)baton;
- if (info->cstr_len < ptr_size) {
+ callback_baton_t *lldb_info = (callback_baton_t *)baton;
+ if (lldb_info->cstr_len < ptr_size) {
const char *begin = (const char *)ptr_addr;
const char *end = begin + ptr_size - info->cstr_len;
for (const char *s = begin; s < end; ++s) {
- if ((int)memcmp(s, info->cstr, info->cstr_len) == 0) {
- if (info->num_matches < MAX_MATCHES) {
- info->matches[info->num_matches].addr = (void*)ptr_addr;
- info->matches[info->num_matches].size = ptr_size;
- info->matches[info->num_matches].offset = s - begin;
- info->matches[info->num_matches].type = type;
- ++info->num_matches;
+ if ((int)memcmp(s, lldb_info->cstr, lldb_info->cstr_len) == 0) {
+ if (lldb_info->num_matches < MAX_MATCHES) {
+ lldb_info->matches[lldb_info->num_matches].addr = (void*)ptr_addr;
+ lldb_info->matches[lldb_info->num_matches].size = ptr_size;
+ lldb_info->matches[lldb_info->num_matches].offset = s - begin;
+ lldb_info->matches[lldb_info->num_matches].type = type;
+ ++lldb_info->num_matches;
}
}
}
@@ -1135,17 +1135,17 @@ typedef struct callback_baton_t {
void *ptr;
} callback_baton_t;
range_callback_t range_callback = [](task_t task, void *baton, unsigned type, uintptr_t ptr_addr, uintptr_t ptr_size) -> void {
- callback_baton_t *info = (callback_baton_t *)baton;
- if (info->num_matches == 0) {
- uint8_t *p = (uint8_t *)info->ptr;
+ callback_baton_t *lldb_info = (callback_baton_t *)baton;
+ if (lldb_info->num_matches == 0) {
+ uint8_t *p = (uint8_t *)lldb_info->ptr;
uint8_t *lo = (uint8_t *)ptr_addr;
uint8_t *hi = lo + ptr_size;
if (lo <= p && p < hi) {
- info->matches[info->num_matches].addr = (void*)ptr_addr;
- info->matches[info->num_matches].size = ptr_size;
- info->matches[info->num_matches].offset = p - lo;
- info->matches[info->num_matches].type = type;
- info->num_matches = 1;
+ lldb_info->matches[lldb_info->num_matches].addr = (void*)ptr_addr;
+ lldb_info->matches[lldb_info->num_matches].size = ptr_size;
+ lldb_info->matches[lldb_info->num_matches].offset = p - lo;
+ lldb_info->matches[lldb_info->num_matches].type = type;
+ lldb_info->num_matches = 1;
}
}
};
@@ -1397,24 +1397,24 @@ compare_callback_t compare_callback = []
typedef Class (*class_getSuperclass_type)(void *isa);
range_callback_t range_callback = [](task_t task, void *baton, unsigned type, uintptr_t ptr_addr, uintptr_t ptr_size) -> void {
class_getSuperclass_type class_getSuperclass_impl = (class_getSuperclass_type)class_getSuperclass;
- callback_baton_t *info = (callback_baton_t *)baton;
+ callback_baton_t *lldb_info = (callback_baton_t *)baton;
if (sizeof(Class) <= ptr_size) {
Class *curr_class_ptr = (Class *)ptr_addr;
Class *matching_class_ptr = (Class *)bsearch (curr_class_ptr,
- (const void *)info->classes,
- sizeof(info->classes)/sizeof(Class),
+ (const void *)lldb_info->classes,
+ sizeof(lldb_info->classes)/sizeof(Class),
sizeof(Class),
- info->compare_callback);
+ lldb_info->compare_callback);
if (matching_class_ptr) {
bool match = false;
- if (info->isa) {
+ if (lldb_info->isa) {
Class isa = *curr_class_ptr;
- if (info->isa == isa)
+ if (lldb_info->isa == isa)
match = true;
- else { // if (info->objc.match_superclasses) {
+ else { // if (lldb_info->objc.match_superclasses) {
Class super = class_getSuperclass_impl(isa);
while (super) {
- if (super == info->isa) {
+ if (super == lldb_info->isa) {
match = true;
break;
}
@@ -1425,12 +1425,12 @@ range_callback_t range_callback = [](tas
else
match = true;
if (match) {
- if (info->num_matches < MAX_MATCHES) {
- info->matches[info->num_matches].addr = (void*)ptr_addr;
- info->matches[info->num_matches].size = ptr_size;
- info->matches[info->num_matches].offset = 0;
- info->matches[info->num_matches].type = type;
- ++info->num_matches;
+ if (lldb_info->num_matches < MAX_MATCHES) {
+ lldb_info->matches[lldb_info->num_matches].addr = (void*)ptr_addr;
+ lldb_info->matches[lldb_info->num_matches].size = ptr_size;
+ lldb_info->matches[lldb_info->num_matches].offset = 0;
+ lldb_info->matches[lldb_info->num_matches].type = type;
+ ++lldb_info->num_matches;
}
}
}
More information about the lldb-commits
mailing list