lldb_cruby.py: fixed embedded string ptr [ci skip]

Use GetLocation to get the address of embedded array.
This commit is contained in:
Nobuyoshi Nakada 2019-10-09 09:01:11 +09:00
Родитель 7909f06212
Коммит 98131f148f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4BC7D6DF58D8DF60
1 изменённых файлов: 3 добавлений и 1 удалений

Просмотреть файл

@ -33,6 +33,8 @@ def lldb_init(debugger):
def string2cstr(rstring):
"""Returns the pointer to the C-string in the given String object"""
if rstring.TypeIsPointerType():
rstring = rstring.Dereference()
flags = rstring.GetValueForExpressionPath(".basic->flags").unsigned
if flags & RUBY_T_MASK != RUBY_T_STRING:
raise TypeError("not a string")
@ -40,7 +42,7 @@ def string2cstr(rstring):
cptr = int(rstring.GetValueForExpressionPath(".as.heap.ptr").value, 0)
clen = int(rstring.GetValueForExpressionPath(".as.heap.len").value, 0)
else:
cptr = int(rstring.GetValueForExpressionPath(".as.ary").value, 0)
cptr = int(rstring.GetValueForExpressionPath(".as.ary").location, 0)
clen = (flags & RSTRING_EMBED_LEN_MASK) >> RSTRING_EMBED_LEN_SHIFT
return cptr, clen