If you can get that in, that would be great!

Jim

> On Apr 6, 2017, at 10:27 AM, Zachary Turner <ztur...@google.com> wrote:
> 
> Honestly i think it seems reasonable for getAsInteger to just work in this 
> case, so I'll try to add it to llvm
> On Thu, Apr 6, 2017 at 10:15 AM Jim Ingham <jing...@apple.com> wrote:
> BTW, Jason says that sometimes the gdb remote protocol does send 0x prefaced 
> numbers.  Apparently not in the cases which have been changed to use 
> getAsInteger with a radix of 16, but that is something we'll have to keep in 
> mind.
> 
> Jim
> 
> > On Apr 5, 2017, at 6:55 PM, Jim Ingham <jing...@apple.com> wrote:
> >
> > base of 16 was only used in a few places.  It's used frequently in the gdb 
> > remote protocol code, but I don't think the gdb remote protocol ever sends 
> > hex numbers with the 0x prefix, it assumes you know the radix, so that 
> > should be okay.  Other than that this was the only consequential usage.  So 
> > I went with detecting the 0x by hand and treating that separately (r299609).
> >
> > Why does getAsInteger return false if it succeeds in getting an integer?  
> > That just seems weird to me.
> >
> > Jim
> >
> >
> >> On Apr 5, 2017, at 4:36 PM, Jim Ingham via lldb-dev 
> >> <lldb-dev@lists.llvm.org> wrote:
> >>
> >> It does seem unfortunate that getAsInteger works differently from strtol's 
> >> documented behavior in this little way...  Makes conversions like this one 
> >> trickier than necessary.  But presumably somebody had a reason for it to 
> >> be different?
> >>
> >> Anyway, I have to go see if this feature of strtol & Co. is used in more 
> >> places than CommandObjectMemoryWrite.  If it was a common idiom then it 
> >> might be nice to have direct support for it.  But if it's just in one 
> >> place, then hacking around it like this seems fine.
> >>
> >> Jim
> >>
> >>> On Apr 5, 2017, at 4:18 PM, Zachary Turner <ztur...@google.com> wrote:
> >>>
> >>> What if you write this:
> >>>
> >>> // Explicitly try hex.  This will catch the case where there is no 0x 
> >>> prefix.
> >>> if (entry.ref.getAsInteger(16, uval64)) {
> >>> // If that fails, let the algorithm auto-detect the radix.  This will 
> >>> catch the case where there is a 0x prefix.
> >>> if (entry.ref.getAsInteger(0, uval64)) {
> >>>
> >>> Would that work?  Alternatively, we could probably update the 
> >>> implementation of getAsInteger in LLVM to you to manually hint the radix 
> >>> AND prefix the number, as long as the prefix matches the hint.
> >>>
> >>> On Wed, Apr 5, 2017 at 4:10 PM Jim Ingham <jing...@apple.com> wrote:
> >>>>
> >>>
> >>> I think somebody was being too clever.  The real purpose for specifying 
> >>> the format is to set the byte size of the item written down:
> >>>
> >>>   OptionValueUInt64 &byte_size_value = 
> >>> m_format_options.GetByteSizeValue();
> >>>   size_t item_byte_size = byte_size_value.GetCurrentValue();
> >>>
> >>> and to do some special magic for c-strings and the like.  Somebody (not 
> >>> me) must have thought overloading "hex" format to mean "you can drop the 
> >>> 0x" was a tasty little side benefit.
> >>>
> >>> But it's been that way forever, and I don't know who's relying on that 
> >>> behavior, so I'd rather not change it (intentionally) if we don't have to.
> >>>
> >>> Jim
> >>>
> >>>> On Wed, Apr 5, 2017 at 3:37 PM Jim Ingham via lldb-dev 
> >>>> <lldb-dev@lists.llvm.org> wrote:
> >>>> memory write's argument ingestion was changed as part of the 
> >>>> StringRefifying of Args so that we get:
> >>>>
> >>>> (lldb) memory write &buffer 0x62
> >>>> error: '0x62' is not a valid hex string value.
> >>>>
> >>>> That seems unexpected and not desirable.  What's going on is that the 
> >>>> default format is hex, and if the format is hex, the command also 
> >>>> supports:
> >>>>
> >>>> (lldb) memory write -f x &buffer 62
> >>>> (lldb) fr v/x buffer[0]
> >>>> (char) buffer[0] = 0x62
> >>>>
> >>>> The StringRef version of the args parsing is:
> >>>>
> >>>>     case eFormatDefault:
> >>>>     case eFormatBytes:
> >>>>     case eFormatHex:
> >>>>     case eFormatHexUppercase:
> >>>>     case eFormatPointer:
> >>>>       // Decode hex bytes
> >>>>       if (entry.ref.getAsInteger(16, uval64)) {
> >>>>
> >>>> The problem is that passing "0x62" to getAsInteger with a radix of 16 
> >>>> rejects "0x62".
> >>>>
> >>>> We do want to hint the radix.  But it seems weird to reject an explicit 
> >>>> indicator.  Is there some clever way to use the StringRef functions to 
> >>>> get the desired effect, or do I have to hack around this by manually 
> >>>> stripping the 0x if I see it?
> >>>>
> >>>> Jim
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> lldb-dev mailing list
> >>>> lldb-dev@lists.llvm.org
> >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> >>>
> >>
> >> _______________________________________________
> >> lldb-dev mailing list
> >> lldb-dev@lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> >
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to