Xen custom %p format options.  A subset, borrowed from Linux.

All parameters to a %p option should be compatible with void*.  Regular
pointers are fine.  Numbers should make use of the _p() macro.

Raw buffer as hex string:

       %*ph    00 01 02  ...  3f
       %*phC   00:01:02: ... :3f
       %*phD   00-01-02- ... -3f
       %*phN   000102 ... 3f

       Up to 64 characters.  Buffer length expected via the field_width
       parameter. i.e. printk("%*ph", 8, buffer);

Bitmaps (e.g. cpumask/nodemask):

       %*pb    4321
       %*pbl   0,5,8-9,14

       Print a bitmap as either a hex string, or a range list.  Bitmap length
       (in bits) expected via the field_width parameter.

Symbol/Function pointers:

       %ps     Symbol name with conditional offset and size (iff offset != 0)
                 e.g.  printk
                       default_idle+0x78/0x7d

       %pS     Symbol name with unconditional offset and size
                 e.g.  printk+0/0x48
                       default_idle+0x78/0x7d

       In the case that an appropriate symbol name can't be found, %p[sS] will
       fall back to '%p' and print the address in hex.

Domain and vCPU information:

       %pd     Domain from a 'struct domain *'

               Regular domains are printed with their ID in decimal.  System
               domains are printed with their name.
                 e.g.  d0
                       d[IDLE]

       %pv     Domain and vCPU ID from a 'struct vcpu *'

               The domain part as above, with the vcpu_id printed in decimal.
                 e.g.  d0v1
                       d[IDLE]v0

PCI:

       %pp     PCI device address in S:B:D.F format from a pci_sbdf_t.
                 e.g.  0004:02:00.0
