DavidSpickett wrote:

> For RISC-V, llvm-objdump mimics gnu objdump, so this change makes the RISC-V 
> byte encodings match both.

Great, that's standard enough.

> That's one thing I'm trying to avoid - we don't want a filter app for objdump 
> and another for the debugger. That's why I changed how the bytes are 
> displayed, and changed "can't disassemble" from blank to "<unknown>", which 
> matches llvm-objdump.

Yeah that makes sense, the glue between the tool and the filter may change a 
bit but a portable filter you can take between tools and toolchains is nice.

Which reminds me I didn't ask about the alternatives. I can think of a few, 
with their own positives and negatives:
* Adding a shared object to llvm-mc at runtime with new instructions.
  *  It "just works" (once you learn C++ and Tablegen)
  * Could load support for multiple extensions
  * You can use a prebuilt version of lldb/llvm with it
  * Except you can't because the C++ API may have changed, so you need one 
plugin per major version
  * I think I've heard this idea before and changing the backend structures at 
runtime was considered high difficulty.
* Build an llvm that supports the instructions
  * See above basically
  * Maybe you already have done this to get llvm to generate code
  * Need to build it yourself
  * Can't compose extensions
  * Need to use tools from that build, can't use GDB if you like GDB or 
whatever, has to be the ones in that build
* Write your own custom command that parses the original disassembler output 
format is, but given that it currently prints `<invalid>`, such a script would 
have to be magic.

Looking at it that way, I think another way to describe this proposal is:
Printing <invalid> is zero use to anyone, let's print the encoding at least, 
and if we're going to do that, do it in a way that can be easily parsed and 
read.

And that I definitely agree with.
 
Then you can multiply those pros and cons a bunch if you are a vendor, either 
too public or private customers. You have the effort of telling them no you 
have to use `<this path>/tool` not `<this other path>/tool`  (we used to have a 
switcher that would look at command line options and do this for us, making one 
for lldb would be a lot more annoying).

But now I'm making your argument for you I think. You get the idea.

The only real "gotcha" question I can come up with is, wouldn't a user who is 
interested in custom instructions already have access to a compiler that 
produces them and that compiler is likely to be llvm, so is lldb from that llvm 
not within reach already?

Educate me on that, I don't know how folks approach developing these 
extensions. Maybe code generation is the last thing they do, after they know 
it's worth pursuing. So you've got a lot of hand written assembler and `.inst 
<encoding>` going on.

> I think that's a good idea. Do you know how to add something to release 
> notes? I've never done it upstream.

LLDB's release notes live in a section of LLVM's - 
https://github.com/llvm/llvm-project/blob/main/llvm/docs/ReleaseNotes.md#changes-to-lldb.

https://github.com/llvm/llvm-project/pull/145793
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to