Message ID | 20200320051809.24332-1-jniethe5@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | Initial Prefixed Instruction support | expand |
Jordan Niethe's on March 20, 2020 3:17 pm: > A future revision of the ISA will introduce prefixed instructions. A > prefixed instruction is composed of a 4-byte prefix followed by a > 4-byte suffix. > > All prefixes have the major opcode 1. A prefix will never be a valid > word instruction. A suffix may be an existing word instruction or a > new instruction. > > This series enables prefixed instructions and extends the instruction > emulation to support them. Then the places where prefixed instructions > might need to be emulated are updated. > > The series is based on top of: > https://patchwork.ozlabs.org/patch/1232619/ as this will effect > kprobes. > > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. > The major changes: > - Move xmon breakpoints from data section to text section > - Introduce a data type for instructions on powerpc Thanks for doing this, looks like a lot of work, I hope it works out :) Thanks, Nick
On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin <npiggin@gmail.com> wrote: > > Jordan Niethe's on March 20, 2020 3:17 pm: > > A future revision of the ISA will introduce prefixed instructions. A > > prefixed instruction is composed of a 4-byte prefix followed by a > > 4-byte suffix. > > > > All prefixes have the major opcode 1. A prefix will never be a valid > > word instruction. A suffix may be an existing word instruction or a > > new instruction. > > > > This series enables prefixed instructions and extends the instruction > > emulation to support them. Then the places where prefixed instructions > > might need to be emulated are updated. > > > > The series is based on top of: > > https://patchwork.ozlabs.org/patch/1232619/ as this will effect > > kprobes. > > > > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. > > The major changes: > > - Move xmon breakpoints from data section to text section > > - Introduce a data type for instructions on powerpc > > Thanks for doing this, looks like a lot of work, I hope it works out :) > Yes it did end up touching a lot of places. I started thinking that that maybe it would be simpler to just use a u64 instead of the struct for instructions. If we always keep the word instruction / prefix in the lower bytes, all of the current masking should still work and we can use operators again instead of ppc_inst_equal(), etc. It also makes printing easier. We could just #define INST_FMT %llx or #define INST_FMT %x on powerpc32 and use that for printing out instructions. > Thanks, > Nick
Jordan Niethe's on March 23, 2020 7:25 pm: > On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin <npiggin@gmail.com> wrote: >> >> Jordan Niethe's on March 20, 2020 3:17 pm: >> > A future revision of the ISA will introduce prefixed instructions. A >> > prefixed instruction is composed of a 4-byte prefix followed by a >> > 4-byte suffix. >> > >> > All prefixes have the major opcode 1. A prefix will never be a valid >> > word instruction. A suffix may be an existing word instruction or a >> > new instruction. >> > >> > This series enables prefixed instructions and extends the instruction >> > emulation to support them. Then the places where prefixed instructions >> > might need to be emulated are updated. >> > >> > The series is based on top of: >> > https://patchwork.ozlabs.org/patch/1232619/ as this will effect >> > kprobes. >> > >> > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. >> > The major changes: >> > - Move xmon breakpoints from data section to text section >> > - Introduce a data type for instructions on powerpc >> >> Thanks for doing this, looks like a lot of work, I hope it works out :) >> > Yes it did end up touching a lot of places. I started thinking that > that maybe it would be simpler to just use a u64 instead of the struct > for instructions. > If we always keep the word instruction / prefix in the lower bytes, > all of the current masking should still work and we can use operators > again instead of ppc_inst_equal(), etc. Yeah.. I think now that you've done it, I prefer it this way. > It also makes printing easier. We could just #define INST_FMT %llx or > #define INST_FMT %x on powerpc32 and use that for printing out > instructions. Well, not sure about that. Would it make endian concerns more complicated? Print format for prefix might be '%016llx', but we don't want that for all instructions only prefixed ones, and I don't know if that is the way to go either. We'll want to adopt some convention for displaying prefixed instruction bytes, but I don't know what what works best. I wonder if binutils or any userspace tools have a convention. Which reminds me, you might have missed show_instructions()? Although maybe you don't need that until we start using them in the kernel. Thanks, Nick
On Mon, Mar 23, 2020 at 9:21 PM Nicholas Piggin <npiggin@gmail.com> wrote: > > Jordan Niethe's on March 23, 2020 7:25 pm: > > On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin <npiggin@gmail.com> wrote: > >> > >> Jordan Niethe's on March 20, 2020 3:17 pm: > >> > A future revision of the ISA will introduce prefixed instructions. A > >> > prefixed instruction is composed of a 4-byte prefix followed by a > >> > 4-byte suffix. > >> > > >> > All prefixes have the major opcode 1. A prefix will never be a valid > >> > word instruction. A suffix may be an existing word instruction or a > >> > new instruction. > >> > > >> > This series enables prefixed instructions and extends the instruction > >> > emulation to support them. Then the places where prefixed instructions > >> > might need to be emulated are updated. > >> > > >> > The series is based on top of: > >> > https://patchwork.ozlabs.org/patch/1232619/ as this will effect > >> > kprobes. > >> > > >> > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. > >> > The major changes: > >> > - Move xmon breakpoints from data section to text section > >> > - Introduce a data type for instructions on powerpc > >> > >> Thanks for doing this, looks like a lot of work, I hope it works out :) > >> > > Yes it did end up touching a lot of places. I started thinking that > > that maybe it would be simpler to just use a u64 instead of the struct > > for instructions. > > If we always keep the word instruction / prefix in the lower bytes, > > all of the current masking should still work and we can use operators > > again instead of ppc_inst_equal(), etc. > > Yeah.. I think now that you've done it, I prefer it this way. Sorry, just to be clear which way do you mean? > > > It also makes printing easier. We could just #define INST_FMT %llx or > > #define INST_FMT %x on powerpc32 and use that for printing out > > instructions. > > Well, not sure about that. Would it make endian concerns more > complicated? Print format for prefix might be '%016llx', but we > don't want that for all instructions only prefixed ones, and I > don't know if that is the way to go either. Hm yeah that is true. > > We'll want to adopt some convention for displaying prefixed > instruction bytes, but I don't know what what works best. I wonder > if binutils or any userspace tools have a convention. binutils-gdb upstream has supports disassembling prefixed instructions. Here is what objdump looks like: 44: 00 00 00 60 nop 48: 00 00 00 07 pnop 4c: 00 00 00 00 50: 01 00 20 39 li r9,1 54: 00 00 00 06 paddi r4,r9,3 58: 03 00 89 38 5c: 00 00 62 3c addis r3,r2,0 > > Which reminds me, you might have missed show_instructions()? > Although maybe you don't need that until we start using them in > the kernel. You are right I missed that here. > > Thanks, > Nick
On Tue, Mar 24, 2020 at 1:54 PM Jordan Niethe <jniethe5@gmail.com> wrote: > > On Mon, Mar 23, 2020 at 9:21 PM Nicholas Piggin <npiggin@gmail.com> wrote: > > > > Jordan Niethe's on March 23, 2020 7:25 pm: > > > On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin <npiggin@gmail.com> wrote: > > >> > > >> Jordan Niethe's on March 20, 2020 3:17 pm: > > >> > A future revision of the ISA will introduce prefixed instructions. A > > >> > prefixed instruction is composed of a 4-byte prefix followed by a > > >> > 4-byte suffix. > > >> > > > >> > All prefixes have the major opcode 1. A prefix will never be a valid > > >> > word instruction. A suffix may be an existing word instruction or a > > >> > new instruction. > > >> > > > >> > This series enables prefixed instructions and extends the instruction > > >> > emulation to support them. Then the places where prefixed instructions > > >> > might need to be emulated are updated. > > >> > > > >> > The series is based on top of: > > >> > https://patchwork.ozlabs.org/patch/1232619/ as this will effect > > >> > kprobes. > > >> > > > >> > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. > > >> > The major changes: > > >> > - Move xmon breakpoints from data section to text section > > >> > - Introduce a data type for instructions on powerpc > > >> > > >> Thanks for doing this, looks like a lot of work, I hope it works out :) > > >> > > > Yes it did end up touching a lot of places. I started thinking that > > > that maybe it would be simpler to just use a u64 instead of the struct > > > for instructions. > > > If we always keep the word instruction / prefix in the lower bytes, > > > all of the current masking should still work and we can use operators > > > again instead of ppc_inst_equal(), etc. > > > > Yeah.. I think now that you've done it, I prefer it this way. > Sorry, just to be clear which way do you mean? > > > > > It also makes printing easier. We could just #define INST_FMT %llx or > > > #define INST_FMT %x on powerpc32 and use that for printing out > > > instructions. > > > > Well, not sure about that. Would it make endian concerns more > > complicated? Print format for prefix might be '%016llx', but we > > don't want that for all instructions only prefixed ones, and I > > don't know if that is the way to go either. > Hm yeah that is true. > > > > We'll want to adopt some convention for displaying prefixed > > instruction bytes, but I don't know what what works best. I wonder > > if binutils or any userspace tools have a convention. > binutils-gdb upstream has supports disassembling prefixed instructions. > Here is what objdump looks like: > 44: 00 00 00 60 nop > 48: 00 00 00 07 pnop > 4c: 00 00 00 00 > 50: 01 00 20 39 li r9,1 > 54: 00 00 00 06 paddi r4,r9,3 > 58: 03 00 89 38 > 5c: 00 00 62 3c addis r3,r2,0 And this is what it looks like if you use objdump with -w 44: 00 00 00 60 nop 48: 00 00 00 07 00 00 00 00 pnop 50: 01 00 20 39 li r9,1 54: 00 00 00 06 03 00 89 38 paddi r4,r9,3 5c: 00 00 62 3c addis r3,r2,0 5c: R_PPC64_TOC16_HA .toc+0x10 > > > > Which reminds me, you might have missed show_instructions()? > > Although maybe you don't need that until we start using them in > > the kernel. > You are right I missed that here. > > > > Thanks, > > Nick
Jordan Niethe's on March 24, 2020 12:54 pm: > On Mon, Mar 23, 2020 at 9:21 PM Nicholas Piggin <npiggin@gmail.com> wrote: >> >> Jordan Niethe's on March 23, 2020 7:25 pm: >> > On Mon, Mar 23, 2020 at 5:22 PM Nicholas Piggin <npiggin@gmail.com> wrote: >> >> >> >> Jordan Niethe's on March 20, 2020 3:17 pm: >> >> > A future revision of the ISA will introduce prefixed instructions. A >> >> > prefixed instruction is composed of a 4-byte prefix followed by a >> >> > 4-byte suffix. >> >> > >> >> > All prefixes have the major opcode 1. A prefix will never be a valid >> >> > word instruction. A suffix may be an existing word instruction or a >> >> > new instruction. >> >> > >> >> > This series enables prefixed instructions and extends the instruction >> >> > emulation to support them. Then the places where prefixed instructions >> >> > might need to be emulated are updated. >> >> > >> >> > The series is based on top of: >> >> > https://patchwork.ozlabs.org/patch/1232619/ as this will effect >> >> > kprobes. >> >> > >> >> > v4 is based on feedback from Nick Piggins, Christophe Leroy and Daniel Axtens. >> >> > The major changes: >> >> > - Move xmon breakpoints from data section to text section >> >> > - Introduce a data type for instructions on powerpc >> >> >> >> Thanks for doing this, looks like a lot of work, I hope it works out :) >> >> >> > Yes it did end up touching a lot of places. I started thinking that >> > that maybe it would be simpler to just use a u64 instead of the struct >> > for instructions. >> > If we always keep the word instruction / prefix in the lower bytes, >> > all of the current masking should still work and we can use operators >> > again instead of ppc_inst_equal(), etc. >> >> Yeah.. I think now that you've done it, I prefer it this way. > Sorry, just to be clear which way do you mean? With the struct, not u64 scalar. mpe's preferred way is fine by me. >> We'll want to adopt some convention for displaying prefixed >> instruction bytes, but I don't know what what works best. I wonder >> if binutils or any userspace tools have a convention. > binutils-gdb upstream has supports disassembling prefixed instructions. > Here is what objdump looks like: > 44: 00 00 00 60 nop > 48: 00 00 00 07 pnop > 4c: 00 00 00 00 > 50: 01 00 20 39 li r9,1 > 54: 00 00 00 06 paddi r4,r9,3 > 58: 03 00 89 38 > 5c: 00 00 62 3c addis r3,r2,0 >> >> Which reminds me, you might have missed show_instructions()? >> Although maybe you don't need that until we start using them in >> the kernel. > You are right I missed that here. So binutils doesn't do anything special, I guess you can make something up. Thanks, Nick