Re: [PATCH v3 1/5] [PATCH 1/5] gdb/aarch64: Add POR_EL0 register support for FEAT_S1POE
Srinath Parvathaneni <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <AS8PR08MB10099C30174429EDE2AC594659BD12@AS8PR08MB10099.eurprd08.prod.outlook.com> |
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. Regards, Sri.