Re: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 register support for FEAT_S1POE
Luis <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <[email protected]> |
Hi folks, Apologies for the delayed reply. On 07/08/2026 20:51, Srinath Parvathaneni wrote: > Hi, > > >On 25/07/2026 07:13, Thiago Jung Bauermann wrote: > >> Srinath Parvathaneni <[email protected]> writes: > >> > >>>>> * p/x $por_el0 > >>>>> * set $por_el0 = <value> > >>>>> > >>>>> Example: > >>>>> (gdb) info register por_el0 > >>>>> por_el0 0x7 [ P15=--- P14=--- P13=--- P12=--- P11=--- P10=--- > P9=--- P8=--- P7=--- > >>> P6=--- P5=--- P4=--- P3=--- P2=--- P1=--- P0=rwx ] > >>>>> (gdb) set $por_el0=0xffffffff77777777 > >>>>> (gdb) info register por_el0 > >>>>> por_el0 0xffffffff77777777 [ P15=??? P14=??? P13=??? P12=??? > P11=??? P10=??? P9=??? > >>> P8=??? P7=rwx P6=rwx P5=rwx P4=rwx P3=rwx P2=rwx P1=rwx P0=rwx ] > >>>>> (gdb) p $por_el0 > >>>>> $1 = [ P15=??? P14=??? P13=??? P12=??? P11=??? P10=??? P9=??? > P8=??? P7=rwx P6=rwx > >>> P5=rwx P4=rwx P3=rwx P2=rwx P1=rwx P0=rwx ] > >>>>> (gdb) p/x $por_el0 > >>>>> $2 = 0xffffffff77777777 > >>>>> (gdb) set $por_el0=0x57 > >>>>> (gdb) info register por_el0 > >>>>> por_el0 0x57 [ P15=--- P14=--- P13=--- P12=--- P11=--- P10=--- > P9=--- P8=--- P7=--- > >>> P6=--- P5=--- P4=--- P3=--- P2=--- P1=rw- P0=rwx ] > >>>>> (gdb) set $por_el0=0xf7f7f7f7f7f7f7f7 > >>>>> (gdb) info register por_el0 > >>>>> por_el0 0xf7f7f7f7f7f7f7f7 [ P15=??? P14=rwx P13=??? P12=rwx > P11=??? P10=rwx P9=??? > >>> P8=rwx P7=??? P6=rwx P5=??? P4=rwx P3=??? P2=rwx P1=??? P0=rwx ] > >>>>> (gdb) > >>>> > >>>> Looking at the output above I think it is a bit hard to read. > >> > >> I think part of the reason for it being hard to read is that the output > >> is very wide. > > > >Indeed. I mean, as an overview it's fine. But it really depends on the > >most common use case for this register. > > > >What I want to steer clear from is something like we have for SVE > >registers. It is a barrage of text that isn´t very easy to use. > > > >> > >> One way to address this is Srinath's suggestion below to not print > >> zeroed keys. Another would be to improve the output of the flag type to > >> add line breaks when the terminal's width is reached, as is done when > >> printing array values. > >> > >> Another option would be to use a struct rather than a flags type. Then > >> there would be one type per field, and it would be possible to display > >> (and set) only one key. > >> > >> Not sure which of them I prefer. The struct idea has the advantage of > >> letting the user easily set protection keys individually. OTOH it's > >> not printed isn a very compact way. > >> > >> If easily displaying/setting individual keys isn't that important, I > >> think I slightly prefer not printing zeroed keys as Srinath suggests, > >> possibly coupled with adding line breaks when the line is too long, to > >> address the case of having many keys set in the register. > >> > > > >Good suggestions. I'd say if users want... > > > >- An overview with permissions, then print what we have above > >- To use it as a mask, we should have the raw value > >- To read/write individual P<x> entries within the register, then we > >should have pseudo-registers that map back to por_el0. > > > >The pseudo registers would leave the interpretation of the raw values > >out of the XML, therefore remote stubs wouldn´t need to pass that sort > >of information. > > > >Stretching it a little bit, remote stubs could even send a modified > >version of these fields in the XML and gdb would start printing > >something else. > > > > Hi Luis/Thiago, > > After looking at the suggestions in the thread, I made a few changes to the > POR_EL0 interface. The custom display for por_el0 has been updated, and I've > also added support for pseudo registers for the individual permission > fields. > > Could you please have a look at the output below? If this looks ok, I'll > re-spin > the series, address the remaining review comments and send it out for > another > review. > > Also added a new group (por) for por_el0 register along with poe pseduo > registers. > > Set 1: > (gdb) info register por_el0 > por_el0 0x0000000000000077 [ P1=rwx P0=rwx ] > (gdb) info register por > por_el0 0x0000000000000077 [ P1=rwx P0=rwx ] > por_el0_p0 0x7 rwx > por_el0_p1 0x7 rwx > por_el0_p2 0x0 --- > por_el0_p3 0x0 --- > por_el0_p4 0x0 --- > por_el0_p5 0x0 --- > por_el0_p6 0x0 --- > por_el0_p7 0x0 --- > por_el0_p8 0x0 --- > por_el0_p9 0x0 --- > por_el0_p10 0x0 --- > por_el0_p11 0x0 --- > por_el0_p12 0x0 --- > por_el0_p13 0x0 --- > por_el0_p14 0x0 --- > por_el0_p15 0x0 --- > > Set 2: > (gdb) set $por_el0=0xf7f7f7f7f7f7f7f7 > (gdb) info register por_el0 > por_el0 0xf7f7f7f7f7f7f7f7 [ P15=??? P14=rwx P13=??? P12=rwx > P11=??? > P10=rwx P9=??? P8=rwx > P7=??? > P6=rwx P5=??? P4=rwx > P3=??? > P2=rwx P1=??? P0=rwx ] > (gdb) info register por > por_el0 0xf7f7f7f7f7f7f7f7 [ P15=??? P14=rwx P13=??? P12=rwx > > P11=??? P10=rwx P9=??? P8=rwx > P7=??? > P6=rwx P5=??? P4=rwx > P3=??? > P2=rwx P1=??? P0=rwx ] > por_el0_p0 0x7 rwx > por_el0_p1 0xf ??? > por_el0_p2 0x7 rwx > por_el0_p3 0xf ??? > por_el0_p4 0x7 rwx > por_el0_p5 0xf ??? > por_el0_p6 0x7 rwx > por_el0_p7 0xf ??? > por_el0_p8 0x7 rwx > por_el0_p9 0xf ??? > por_el0_p10 0x7 rwx > por_el0_p11 0xf ??? > por_el0_p12 0x7 rwx > por_el0_p13 0xf ??? > por_el0_p14 0x7 rwx > por_el0_p15 0xf ??? > > Set 3: > (gdb) set $por_el0=0x0123456789abcdef > (gdb) info register por_el0 > por_el0 0x0123456789abcdef [ P14=r-- P13=--x P12=r-x P11=-w- > P10=rw- P9=-wx P8=rwx > P7=??? > P6=??? P5=??? P4=??? > P3=??? > P2=??? P1=??? P0=??? ] > (gdb) info register por > por_el0 0x0123456789abcdef [ P14=r-- P13=--x P12=r-x P11=-w- > P10=rw- P9=-wx P8=rwx > P7=??? > P6=??? P5=??? P4=??? > P3=??? > P2=??? P1=??? P0=??? ] > por_el0_p0 0xf ??? > por_el0_p1 0xe ??? > por_el0_p2 0xd ??? > por_el0_p3 0xc ??? > por_el0_p4 0xb ??? > por_el0_p5 0xa ??? > por_el0_p6 0x9 ??? > por_el0_p7 0x8 ??? > por_el0_p8 0x7 rwx > por_el0_p9 0x6 -wx > por_el0_p10 0x5 rw- > por_el0_p11 0x4 -w- > por_el0_p12 0x3 r-x > por_el0_p13 0x2 --x > por_el0_p14 0x1 r-- > por_el0_p15 0x0 --- > (gdb) > > Set 4: > (gdb) set $por_el0=0x7 > (gdb) info register por > por_el0 0x0000000000000007 [ P0=rwx ] > por_el0_p0 0x7 rwx > por_el0_p1 0x0 --- > por_el0_p2 0x0 --- > por_el0_p3 0x0 --- > por_el0_p4 0x0 --- > por_el0_p5 0x0 --- > por_el0_p6 0x0 --- > por_el0_p7 0x0 --- > por_el0_p8 0x0 --- > por_el0_p9 0x0 --- > por_el0_p10 0x0 --- > por_el0_p11 0x0 --- > por_el0_p12 0x0 --- > por_el0_p13 0x0 --- > por_el0_p14 0x0 --- > por_el0_p15 0x0 --- > (gdb) set $por_el0_p1=0x7 > (gdb) set $por_el0_p3=0x5 > (gdb) set $por_el0_p4=0x3 > (gdb) set $por_el0_p5=0x1 > (gdb) set $por_el0_p6=0xf > (gdb) info register por > por_el0 0x000000000f135077 [ P6=??? P5=r-- P4=r-x P3=rw- > P1=rwx P0=rwx ] > por_el0_p0 0x7 rwx > por_el0_p1 0x7 rwx > por_el0_p2 0x0 --- > por_el0_p3 0x5 rw- > por_el0_p4 0x3 r-x > por_el0_p5 0x1 r-- > por_el0_p6 0xf ??? > por_el0_p7 0x0 --- > por_el0_p8 0x0 --- > por_el0_p9 0x0 --- > por_el0_p10 0x0 --- > por_el0_p11 0x0 --- > por_el0_p12 0x0 --- > por_el0_p13 0x0 --- > por_el0_p14 0x0 --- > por_el0_p15 0x0 --- > (gdb) > > Please let me know your comments, thanks. Thanks. I think this improves the usability quite a bit. Two comments on it, both not strong opinions: - The pseudo-register names could be shortened a bit. Or maybe autocompletion would work fine here. - Do we still have value in printing por_el0's subfields given we now have the pseudo-registers? As you've presented it, I think it's OK. But we might want to think about the above and make changes if those make sense.