printk() format %pS wrong symbol

William Tambe tambewilliam at gmail.com
Sat Jul 4 12:04:59 EDT 2020


On Sat, Jul 4, 2020 at 6:29 AM Valentin Vidić <vvidic at valentin-vidic.from.hr>
wrote:

> On Sat, Jul 04, 2020 at 06:11:19AM -0400, William Tambe wrote:
> > I am seeing an issue in our Linux port where printk() format %pS will
> print
> > a symbol as:
> > kernel_init+0x120/0x120
> > where the offset within the function 0x120, is the same as the function
> > size 0x120; in fact, the largest offset within the function should be
> 0x11f.
> >
> > When printing above symbol+offset in gdb, the correct symbol is
> > displayed as follow:
> >
> > (gdb) p (void*)(kernel_init+0x120)
> > $1 = (void *) 0x589a28 <ret_for_syscall>
> >
> > What could be the cause of printk() format %pS printing an incorrect
> symbol.
> >
> > Where can I find in the Linux source code, the function handling the
> format
> > %pS ?
>
> Check lib/vsprintf.c
>

How or which function within that file translates an address to the string
symbol+offset for the format %pS ?


>
> --
> Valentin
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20200704/b10fd124/attachment.html>


More information about the Kernelnewbies mailing list