Author: David Spickett Date: 2023-09-22T15:55:27+01:00 New Revision: bb01fd57bcaec533cd08b4d107979511d893f5b3
URL: https://github.com/llvm/llvm-project/commit/bb01fd57bcaec533cd08b4d107979511d893f5b3 DIFF: https://github.com/llvm/llvm-project/commit/bb01fd57bcaec533cd08b4d107979511d893f5b3.diff LOG: [lldb] Require paused process and frame for "register info" command (#67124) Prior to this the command would simply crash when run on a running process. Of the three register commands, "info" was the only one missing these requirements. On some level it makes sense because you're not going to read a value or modify anything, but practically I think lldb assumes any time you're going to access register related stuff, the process should be paused. I noticed this debugging with a remote gdb stub, so I've recreated that scenario using attach in a new test case. Added: Modified: lldb/source/Commands/CommandObjectRegister.cpp lldb/test/API/commands/register/register/register_command/TestRegisters.py Removed: ################################################################################ diff --git a/lldb/source/Commands/CommandObjectRegister.cpp b/lldb/source/Commands/CommandObjectRegister.cpp index a0e88f6ab4ba27d..6e6071fd54606d0 100644 --- a/lldb/source/Commands/CommandObjectRegister.cpp +++ b/lldb/source/Commands/CommandObjectRegister.cpp @@ -406,8 +406,9 @@ class CommandObjectRegisterInfo : public CommandObjectParsed { CommandObjectRegisterInfo(CommandInterpreter &interpreter) : CommandObjectParsed(interpreter, "register info", "View information about a register.", nullptr, - eCommandRequiresRegContext | - eCommandProcessMustBeLaunched) { + eCommandRequiresFrame | eCommandRequiresRegContext | + eCommandProcessMustBeLaunched | + eCommandProcessMustBePaused) { SetHelpLong(R"( Name The name lldb uses for the register, optionally with an alias. Size The size of the register in bytes and again in bits. diff --git a/lldb/test/API/commands/register/register/register_command/TestRegisters.py b/lldb/test/API/commands/register/register/register_command/TestRegisters.py index 2e5c82a26cf1b9d..f2ee3c4a047a269 100644 --- a/lldb/test/API/commands/register/register/register_command/TestRegisters.py +++ b/lldb/test/API/commands/register/register/register_command/TestRegisters.py @@ -659,3 +659,17 @@ def test_fs_gs_base(self): pthread_self_val.GetValueAsUnsigned(0), "fs_base does not equal to pthread_self() value.", ) + + def test_process_must_be_stopped(self): + """Check that all register commands error when the process is not stopped.""" + self.build() + exe = self.getBuildArtifact("a.out") + pid = self.spawnSubprocess(exe, ["wait_for_attach"]).pid + # Async so we can enter commands while the process is running. + self.setAsync(True) + self.runCmd("process attach --continue -p %d" % pid) + + err_msg = "Command requires a process which is currently stopped." + self.expect("register read pc", substrs=[err_msg], error=True) + self.expect("register write pc 0", substrs=[err_msg], error=True) + self.expect("register info pc", substrs=[err_msg], error=True) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits