jmajors marked 17 inline comments as done.
jmajors added a comment.

More feedback changes.



================
Comment at: unittests/tools/lldb-server/inferior/thread_inferior.cpp:21
+
+  LLVM_BUILTIN_DEBUGTRAP;
+  delay = false;
----------------
krytarowski wrote:
> jmajors wrote:
> > zturner wrote:
> > > This will work on MSVC and presumably clang.  I'm not sure about gcc.  Is 
> > > that sufficient for your needs?   Do you know if gcc has the 
> > > `__builtin_debugtrap` intrinsic?
> > Do we use gcc to build/test lldb? If not, then it shouldn't be an issue. If 
> > we ever change our compiler of choice, we can always change this to match.
> Yes, we use and support GCC with libstdc++ to build LLDB including tests. At 
> least on NetBSD.
Is there a gcc equivalent, that I could wrap in some #ifdefs?


================
Comment at: unittests/tools/lldb-server/tests/MessageObjects.cpp:83-88
+      if (endian == LITTLE) {
+        registers[register_id] = SwitchEndian(value_str);
+      }
+      else {
+        registers[register_id] = stoul(value_str, nullptr, 16);
+      }
----------------
krytarowski wrote:
> zturner wrote:
> > jmajors wrote:
> > > zturner wrote:
> > > > jmajors wrote:
> > > > > zturner wrote:
> > > > > > This code block is unnecessary.
> > > > > > 
> > > > > > ```
> > > > > > unsigned long X;
> > > > > > if (!value_str.getAsInteger(X))
> > > > > >   return some error;
> > > > > > llvm::support::endian::write(&registers[register_id], X, endian);
> > > > > > ```
> > > > > > 
> > > > > > By using llvm endianness functions you can just delete the 
> > > > > > `SwitchEndian()` function entirely, as it's not needed.
> > > > > These endian functions don't work here. getAsInteger() assumes the 
> > > > > number is in human reading order (i.e. big endian). So it's 
> > > > > converting the little endian string as if it's big, then converting 
> > > > > that little endian long to another little endian long, which does 
> > > > > nothing.
> > > > > I need something that reverses the string first.
> > > > > 
> > > > > What do you think about adding a version of StringRef::getAsInteger 
> > > > > that accepts an endianness parameter?
> > > > Hmm..  What about this?
> > > > 
> > > > ```
> > > > unsigned long X;
> > > > if (!value_str.getAsInteger(X))
> > > >   return some error;
> > > > sys::swapByteOrder(X);
> > > > ```
> > > > 
> > > > It shouldn't matter if you swap the bytes in the string before doing 
> > > > the translation, or swap the bytes in the number after doing the 
> > > > translation should it?
> > > It doesn't matter when I do it. The issue with the other functions was 
> > > they were converting target to host, when both were little. For string 
> > > parsing, it needs target to big to string, or target to string to big.
> > Maybe I'm just missing something, but if you've got the string "ABCDEF" 
> > which is a little endian string, then it is supposed to represent the 
> > number 0x00EFCDAB or 15,715,755 (assuming a 4 byte number).  If you parse 
> > it as big endian, which is what `getAsInteger` does, you're going to end up 
> > with the number 0xABCDEF00 which is 2,882,400,000, which is |AB|CD|EF|00| 
> > (on a big endian machine) or |00|EF|CD|AB| (on a little endian machine).  
> > If you then swap the bytes, you're going to end up with |00|EF|CD|AB| (on a 
> > big endian machine) or |AB|CD|EF|00| on a little endian machine.  In both 
> > cases, these represent the number 15,715,755 as desired.
> > 
> > It's possible I'm just getting confused here, but I don't see why the above 
> > code sample doesn't work.
> We are also technically supposed to support PDP endian. It's part of the GDB 
> protocol and there are scratches for it in the LLDB code. Currently we don't 
> support these targets in LLVM, but this might change in future (GCC actively 
> maintains these targets).
I might have been unclear.
Using swapByteOrder, when the target is little endian works. I was explaining 
why the read & write functions didn't work for this case.


================
Comment at: unittests/tools/lldb-server/tests/TestClient.cpp:70
+void TestClient::StopDebugger() {
+  Host::Kill(server_process_info.GetProcessID(), 15);
+}
----------------
krytarowski wrote:
> jmajors wrote:
> > labath wrote:
> > > This is not portable.
> > Is there a portable way of stopping?
> `15` on my platform (NetBSD) is `SIGTERM`.
> 
> I've implemented similar feature in `NativeProcessNetBSD::Halt()`. Perhaps 
> you can call `Halt()` as well?
I changed it to send $k and let the lldb-server figure out platform issues.


https://reviews.llvm.org/D32930



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

Reply via email to