From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752727AbdHOTmW (ORCPT ); Tue, 15 Aug 2017 15:42:22 -0400 Received: from mout.gmx.net ([212.227.17.22]:59350 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751160AbdHOTmU (ORCPT ); Tue, 15 Aug 2017 15:42:20 -0400 Subject: Re: [PATCH] printk-formats.txt: Add examples for %pS and %pF To: Steven Rostedt Cc: Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org References: <20170810173533.GA11600@ls3530.fritz.box> <20170815084654.20fc23c0@gandalf.local.home> From: Helge Deller Message-ID: <7beee4c4-6565-69ea-a220-59c83bbb6c35@gmx.de> Date: Tue, 15 Aug 2017 21:41:37 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170815084654.20fc23c0@gandalf.local.home> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:gMrm+ERatDux0qlkQ6h31c1G5moWSVO23QrIshkvdOI8rKbq9HW e8syr6UABsErTIA1j8y6SVw2DIyJu5G3+mX3pjnaPeUzwXkNVl5L6jGudc4FInMMkhWhgXc N02ThKW+xJlPnMpciSW1K04bI3sjmOd+hyLrInBzdqn7OXg8KUAbBYIqbHTr4Yj+DEvb9JG s9uMCIOD0aWQEknVaV1Gw== X-UI-Out-Filterresults: notjunk:1;V01:K0:5Pm8+6xzaME=:fgrY7Z7aANOfnrsxVg+aXZ 2u9sKMI3/wb+82zOfJPzorx081aBnKjdWJKVtwUMbx6Xio38s5Z5DzjNOrnYm/a4bo8HBybaP wFuV/MtPOngMVBQZkZr9mw7zOMx9kHfEBGAHeYqOADgidPIUmfdwCC2NDyerzAeq+zC/rp/yt LlOO2AKf6U7dRBeP4BFN6jcJk+WJZe/2vy5FCETpSELp2HXXfkZUCdhbqNf5xcBu5vrBlW9MX 0GOji5n2iJi5u6qYkpzs+k1CWBXC7X+CGKjB1nNqN05Q8ex/cuVcCkO9Ei4IDa947bdLDv/58 NQvxASVd6JXx87tNqQHAGpV8v9MgD00kY7XUY1Ut68WtRZCz1hqV1O/uOa52uLRnfm0KIQLhe hy4ZMKxuDTsS0ZuoINO7/4PFvSorhTgAhAGhU3sWNn39nAVYfj4Ssn33U6onr9M1KXnLpDP40 ZsgIZccA6z/0xi4rOjHm3tAbeW0H8EBmvuW65/dBkG7KZoYjzKNLm8bRmGkCpwRyDNl0DKNz9 hN+3sgE0JSWJ544U+M2gYYOXqgLiAk3bRfmqlIaaGip8TyjmUKTIlOtqmD3rlEcX4+joOe6IM hyEQNTmneq+gL+wYvDz+N/MstZidVVOE8IOzZEzxPewjA39U62+sXf79XFNVPmYhwTbMtoGnn 9PwvzCo6K+q4M0BISEFeieBTcu3Uf1tCg1CU3vCglTkKhfETVFHm+7D7V/0wbM/l3W/ENhbYS /A02nU6zHg9E/inFT5yUCUHZQt4XYhJoBBjPTCfu2cokjMQLKbu7qskd2XtbGr7Y99keKKgUK TrTIIPDtPKvlRZOSsME34qPYiR8bLK4dAm0eqoVGP+c5sezRfw= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 15.08.2017 14:46, Steven Rostedt wrote: > On Thu, 10 Aug 2017 19:35:33 +0200 > Helge Deller wrote: > >> Sometimes people seems unclear when to use the %pS or %pF printk format. >> Adding some examples may help to avoid such mistakes. >> >> See for example commit 51d96dc2e2dc ("random: fix warning message on ia64 and >> parisc") which fixed such a wrong format string. >> >> Signed-off-by: Helge Deller >> >> diff --git a/Documentation/printk-formats.txt b/Documentation/printk-formats.txt >> index 65ea591..be8c05b 100644 >> --- a/Documentation/printk-formats.txt >> +++ b/Documentation/printk-formats.txt >> @@ -73,6 +73,12 @@ actually function descriptors which must first be resolved. The ``F`` and >> ``f`` specifiers perform this resolution and then provide the same >> functionality as the ``S`` and ``s`` specifiers. >> >> +Examples:: >> + >> + printk("Called from %pS.\n", __builtin_return_address(0)); >> + printk("Called from %pS.\n", (void *)regs->ip); >> + printk("Called from %pF.\n", &gettimeofday); > > Is the '&' really necessary? The '&' is not necessary. The compiler doesn't complain either. > What about using the example: > printk("Called in %pF.\n", __func__); Very interesting! This code: void smp_cpus_done() { printk("Called from %pF.\n", smp_cpus_done); printk("Called from %pf.\n", smp_cpus_done); printk("Called in %pS.\n", __func__); printk("Called in %ps.\n", __func__); printk("Called in %pF.\n", __func__); printk("Called in %pf.\n", __func__); gives: Called from smp_cpus_done+0x0/0x1b8. Called from smp_cpus_done. Called in __func__.28197+0x0/0x20. Called in __func__.28197. Called in 0x5041524953433332. Called in 0x5041524953433332. So, the correct usage is: printk("Called in %pS.\n", __func__); But it should have printed Called from smp_cpus_done+0x0/0x1b8. which means the (parisc?) printk resolver doesn't work correctly. In assembly code a pointer to this object is handed to printk: .type __func__.28197, @object .size __func__.28197, 14 __func__.28197: .stringz "smp_cpus_done" I'll look into this problem. Helge