All of lore.kernel.org
 help / color / mirror / Atom feed
* unable to find function definition
@ 2016-04-20  6:17 Nijam Haider
  2016-04-20  7:26 ` Cihangir Akturk
  0 siblings, 1 reply; 14+ messages in thread
From: Nijam Haider @ 2016-04-20  6:17 UTC (permalink / raw)
  To: kernelnewbies

i was going through the code leds-gpio.c.
i found a function "platform_gpio_blink_set" declared under private data of 
"gpio_led_data",and was trying to get through this function. But hardly i can 
find any link to definition for the same anywhere.

Regards
Nijam

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-20  6:17 unable to find function definition Nijam Haider
@ 2016-04-20  7:26 ` Cihangir Akturk
  2016-04-26  8:30   ` Jay Aurabind
  0 siblings, 1 reply; 14+ messages in thread
From: Cihangir Akturk @ 2016-04-20  7:26 UTC (permalink / raw)
  To: kernelnewbies

On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
> i was going through the code leds-gpio.c.
> i found a function "platform_gpio_blink_set" declared under private data of 
> "gpio_led_data",and was trying to get through this function. But hardly i can 
> find any link to definition for the same anywhere.

Hi,

That is a function pointer, so you should search assignments to
that pointer. That way you can find the real function you are
looking for.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-20  7:26 ` Cihangir Akturk
@ 2016-04-26  8:30   ` Jay Aurabind
  2016-04-26  8:50     ` Gadre Nayan
  2016-04-27  1:35     ` John de la Garza
  0 siblings, 2 replies; 14+ messages in thread
From: Jay Aurabind @ 2016-04-26  8:30 UTC (permalink / raw)
  To: kernelnewbies

On 20 April 2016 at 12:56, Cihangir Akturk <cakturk@gmail.com> wrote:
> On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
>> i was going through the code leds-gpio.c.
>> i found a function "platform_gpio_blink_set" declared under private data of
>> "gpio_led_data",and was trying to get through this function. But hardly i can
>> find any link to definition for the same anywhere.
>
> Hi,
>
> That is a function pointer, so you should search assignments to
> that pointer. That way you can find the real function you are
> looking for.

I've spotted such usages in a lot of places, outside the kernel as
well. Just wanted know if there is a smarted way of finding the
assignments, like some tools or any other tips which people could use
to make life easier ?

>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



-- 

Thanks and Regards,
Aurabindo J

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26  8:30   ` Jay Aurabind
@ 2016-04-26  8:50     ` Gadre Nayan
  2016-04-26 10:45       ` Silvan Jegen
  2016-04-27  1:35     ` John de la Garza
  1 sibling, 1 reply; 14+ messages in thread
From: Gadre Nayan @ 2016-04-26  8:50 UTC (permalink / raw)
  To: kernelnewbies

Ctags can help. Ctags -R on the entire source.
On 26 Apr 2016 2:19 p.m., "Jay Aurabind" <jay.aurabind@gmail.com> wrote:

> On 20 April 2016 at 12:56, Cihangir Akturk <cakturk@gmail.com> wrote:
> > On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
> >> i was going through the code leds-gpio.c.
> >> i found a function "platform_gpio_blink_set" declared under private
> data of
> >> "gpio_led_data",and was trying to get through this function. But hardly
> i can
> >> find any link to definition for the same anywhere.
> >
> > Hi,
> >
> > That is a function pointer, so you should search assignments to
> > that pointer. That way you can find the real function you are
> > looking for.
>
> I've spotted such usages in a lot of places, outside the kernel as
> well. Just wanted know if there is a smarted way of finding the
> assignments, like some tools or any other tips which people could use
> to make life easier ?
>
> >
> > _______________________________________________
> > Kernelnewbies mailing list
> > Kernelnewbies at kernelnewbies.org
> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
>
> --
>
> Thanks and Regards,
> Aurabindo J
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160426/02bff7d7/attachment.html 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26  8:50     ` Gadre Nayan
@ 2016-04-26 10:45       ` Silvan Jegen
  2016-04-26 12:56         ` Jay Aurabind
  2016-04-27 20:26         ` Jakub Sitnicki
  0 siblings, 2 replies; 14+ messages in thread
From: Silvan Jegen @ 2016-04-26 10:45 UTC (permalink / raw)
  To: kernelnewbies

Am 2016-04-26 10:50, schrieb Gadre Nayan:
> Ctags can help. Ctags -R on the entire source.

In the Kernel Makefile there is actually a target for this. It's called 
either 'tags' or 'tag' so

make tags [or tag]

should create the ctag file for you.


Cheers,

Silvan

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26 10:45       ` Silvan Jegen
@ 2016-04-26 12:56         ` Jay Aurabind
  2016-04-26 13:31           ` Silvan Jegen
  2016-04-27 20:26         ` Jakub Sitnicki
  1 sibling, 1 reply; 14+ messages in thread
From: Jay Aurabind @ 2016-04-26 12:56 UTC (permalink / raw)
  To: kernelnewbies

On 26 April 2016 at 16:15, Silvan Jegen <me@sillymon.ch> wrote:
> Am 2016-04-26 10:50, schrieb Gadre Nayan:
>>
>> Ctags can help. Ctags -R on the entire source.
>
>
> In the Kernel Makefile there is actually a target for this. It's called
> either 'tags' or 'tag' so
>
> make tags [or tag]
>
> should create the ctag file for you.

I use ctags with vim. Mostly it takes me to declaration of the
function pointer. Then i go grep for that function and look for its
assignment. I was wondering if there is some plugin or script which
can find assignments to such function pointers.

>
>
> Cheers,
>
> Silvan
>



-- 

Thanks and Regards,
Aurabindo J

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26 12:56         ` Jay Aurabind
@ 2016-04-26 13:31           ` Silvan Jegen
  2016-04-26 15:24             ` Valdis.Kletnieks at vt.edu
  0 siblings, 1 reply; 14+ messages in thread
From: Silvan Jegen @ 2016-04-26 13:31 UTC (permalink / raw)
  To: kernelnewbies

Am 2016-04-26 14:56, schrieb Jay Aurabind:
> On 26 April 2016 at 16:15, Silvan Jegen <me@sillymon.ch> wrote:
>> Am 2016-04-26 10:50, schrieb Gadre Nayan:
>>> 
>>> Ctags can help. Ctags -R on the entire source.
>> 
>> 
>> In the Kernel Makefile there is actually a target for this. It's 
>> called
>> either 'tags' or 'tag' so
>> 
>> make tags [or tag]
>> 
>> should create the ctag file for you.
> 
> I use ctags with vim. Mostly it takes me to declaration of the
> function pointer. Then i go grep for that function and look for its
> assignment. I was wondering if there is some plugin or script which
> can find assignments to such function pointers.

A simple but naive approach would be a grep command like this.

grep "function_pointer =" `find . -iname '*.c' -o -iname '*.h'`


Cheers,

Silvan

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26 13:31           ` Silvan Jegen
@ 2016-04-26 15:24             ` Valdis.Kletnieks at vt.edu
  2016-04-26 15:33               ` Silvan Jegen
  0 siblings, 1 reply; 14+ messages in thread
From: Valdis.Kletnieks at vt.edu @ 2016-04-26 15:24 UTC (permalink / raw)
  To: kernelnewbies

On Tue, 26 Apr 2016 15:31:51 +0200, Silvan Jegen said:

> A simple but naive approach would be a grep command like this.
>
> grep "function_pointer =" `find . -iname '*.c' -o -iname '*.h'`

Two better ways:

grep -r "function_pointer =' [A-Za-z]*

find * -name '*.[ch]' | xargs grep 'function pointer ='

Hint 1:  Globbing * rather than . is a win at the top level of the
kernel source, because * won't match .git, which is a gigabyte or so
of stuff that you don't want to grep through

Hint 2: You want -name rather than -iname because there shouldn't be any
*.C or *.H files in the tree, and avoiding case-insensitive matches is a bit
faster.

And another winner if you have a git tree (which of course you should):

git grep 'function_pointer ='

One gotcha is that in some places, the kernel does evil pre-processor
stuff like:

#define ATOMIC_LONG_INIT(i)     ATOMIC_INIT(i)
#define ATOMIC_LONG_PFX(x)      atomic ## x

#endif

#define ATOMIC_LONG_READ_OP(mo)                                         static inline long atomic_long_read##mo(const atomic_long_t *l)         {                                                                               ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l;                                                                                              return (long)ATOMIC_LONG_PFX(_read##mo)(v);                     }
ATOMIC_LONG_READ_OP()
ATOMIC_LONG_READ_OP(_acquire)

(this example from include/asm-generic/atomic-long.h, but similar ## abuse
happens elsewhere as well...)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 848 bytes
Desc: not available
Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160426/6af6fd75/attachment-0001.bin 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26 15:24             ` Valdis.Kletnieks at vt.edu
@ 2016-04-26 15:33               ` Silvan Jegen
  0 siblings, 0 replies; 14+ messages in thread
From: Silvan Jegen @ 2016-04-26 15:33 UTC (permalink / raw)
  To: kernelnewbies

On Tue, Apr 26, 2016 at 11:24:43AM -0400, Valdis.Kletnieks at vt.edu wrote:
> On Tue, 26 Apr 2016 15:31:51 +0200, Silvan Jegen said:
> 
> > A simple but naive approach would be a grep command like this.
> >
> > grep "function_pointer =" `find . -iname '*.c' -o -iname '*.h'`
> 
> Two better ways:
> 
> grep -r "function_pointer =' [A-Za-z]*
> 
> find * -name '*.[ch]' | xargs grep 'function pointer ='
> 
> Hint 1:  Globbing * rather than . is a win at the top level of the
> kernel source, because * won't match .git, which is a gigabyte or so
> of stuff that you don't want to grep through

Good idea!

There may also be cases where there is no space before the assignment so
using a regexp like this may be better.

grep 'function_pointer ?='


> Hint 2: You want -name rather than -iname because there shouldn't be any
> *.C or *.H files in the tree, and avoiding case-insensitive matches is a bit
> faster.

True, this was mostly muscle memory.


> And another winner if you have a git tree (which of course you should):
> 
> git grep 'function_pointer ='

Looks useful but I hope they did not implement their own version of
grep...


> One gotcha is that in some places, the kernel does evil pre-processor
> stuff like:
> 
> #define ATOMIC_LONG_INIT(i)     ATOMIC_INIT(i)
> #define ATOMIC_LONG_PFX(x)      atomic ## x
> 
> #endif
> 
> #define ATOMIC_LONG_READ_OP(mo)                                         static inline long atomic_long_read##mo(const atomic_long_t *l)         {                                                                               ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l;                                                                                              return (long)ATOMIC_LONG_PFX(_read##mo)(v);                     }
> ATOMIC_LONG_READ_OP()
> ATOMIC_LONG_READ_OP(_acquire)
> 
> (this example from include/asm-generic/atomic-long.h, but similar ## abuse
> happens elsewhere as well...)

Yeah, I don't think there is much you can do about these cases...


Cheers,

Silvan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160426/ba81f255/attachment.bin 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26  8:30   ` Jay Aurabind
  2016-04-26  8:50     ` Gadre Nayan
@ 2016-04-27  1:35     ` John de la Garza
  2016-04-27  3:05       ` Jay Aurabind
  1 sibling, 1 reply; 14+ messages in thread
From: John de la Garza @ 2016-04-27  1:35 UTC (permalink / raw)
  To: kernelnewbies

On Tue, Apr 26, 2016 at 02:00:02PM +0530, Jay Aurabind wrote:
> On 20 April 2016 at 12:56, Cihangir Akturk <cakturk@gmail.com> wrote:
> > On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
> >> i was going through the code leds-gpio.c.
> >> i found a function "platform_gpio_blink_set" declared under private data of
> >> "gpio_led_data",and was trying to get through this function. But hardly i can
> >> find any link to definition for the same anywhere.
> >
> > Hi,
> >
> > That is a function pointer, so you should search assignments to
> > that pointer. That way you can find the real function you are
> > looking for.
> 
> I've spotted such usages in a lot of places, outside the kernel as
> well. Just wanted know if there is a smarted way of finding the
> assignments, like some tools or any other tips which people could use
> to make life easier ?

I've been able to print the address of the functions (once it has
been assigned), then check the System.map for the function name.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-27  1:35     ` John de la Garza
@ 2016-04-27  3:05       ` Jay Aurabind
  2016-04-27  3:10         ` nizam haider
  0 siblings, 1 reply; 14+ messages in thread
From: Jay Aurabind @ 2016-04-27  3:05 UTC (permalink / raw)
  To: kernelnewbies

On 27 April 2016 at 07:05, John de la Garza <john@jjdev.com> wrote:
> On Tue, Apr 26, 2016 at 02:00:02PM +0530, Jay Aurabind wrote:
>> On 20 April 2016 at 12:56, Cihangir Akturk <cakturk@gmail.com> wrote:
>> > On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
>> >> i was going through the code leds-gpio.c.
>> >> i found a function "platform_gpio_blink_set" declared under private data of
>> >> "gpio_led_data",and was trying to get through this function. But hardly i can
>> >> find any link to definition for the same anywhere.
>> >
>> > Hi,
>> >
>> > That is a function pointer, so you should search assignments to
>> > that pointer. That way you can find the real function you are
>> > looking for.
>>
>> I've spotted such usages in a lot of places, outside the kernel as
>> well. Just wanted know if there is a smarted way of finding the
>> assignments, like some tools or any other tips which people could use
>> to make life easier ?
>
> I've been able to print the address of the functions (once it has
> been assigned), then check the System.map for the function name.

Thank you all for the smart answers!

-- 

Thanks and Regards,
Aurabindo J

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-27  3:05       ` Jay Aurabind
@ 2016-04-27  3:10         ` nizam haider
  0 siblings, 0 replies; 14+ messages in thread
From: nizam haider @ 2016-04-27  3:10 UTC (permalink / raw)
  To: kernelnewbies

Thank you all for replies.
sure these are helping a lot.

On Wed 27 Apr, 2016 8:35 am Jay Aurabind, <jay.aurabind@gmail.com> wrote:

> On 27 April 2016 at 07:05, John de la Garza <john@jjdev.com> wrote:
> > On Tue, Apr 26, 2016 at 02:00:02PM +0530, Jay Aurabind wrote:
> >> On 20 April 2016 at 12:56, Cihangir Akturk <cakturk@gmail.com> wrote:
> >> > On Wed, Apr 20, 2016 at 06:17:38AM +0000, Nijam Haider wrote:
> >> >> i was going through the code leds-gpio.c.
> >> >> i found a function "platform_gpio_blink_set" declared under private
> data of
> >> >> "gpio_led_data",and was trying to get through this function. But
> hardly i can
> >> >> find any link to definition for the same anywhere.
> >> >
> >> > Hi,
> >> >
> >> > That is a function pointer, so you should search assignments to
> >> > that pointer. That way you can find the real function you are
> >> > looking for.
> >>
> >> I've spotted such usages in a lot of places, outside the kernel as
> >> well. Just wanted know if there is a smarted way of finding the
> >> assignments, like some tools or any other tips which people could use
> >> to make life easier ?
> >
> > I've been able to print the address of the functions (once it has
> > been assigned), then check the System.map for the function name.
>
> Thank you all for the smart answers!
>
> --
>
> Thanks and Regards,
> Aurabindo J
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160427/c03702ea/attachment.html 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-26 10:45       ` Silvan Jegen
  2016-04-26 12:56         ` Jay Aurabind
@ 2016-04-27 20:26         ` Jakub Sitnicki
  2016-04-28  4:23           ` Anupam Kapoor
  1 sibling, 1 reply; 14+ messages in thread
From: Jakub Sitnicki @ 2016-04-27 20:26 UTC (permalink / raw)
  To: kernelnewbies

On Tue, Apr 26, 2016 at 12:45 PM CEST, Silvan Jegen <me@sillymon.ch> wrote:
> Am 2016-04-26 10:50, schrieb Gadre Nayan:
>> Ctags can help. Ctags -R on the entire source.
>
> In the Kernel Makefile there is actually a target for this. It's called 
> either 'tags' or 'tag' so
>
> make tags [or tag]
>
> should create the ctag file for you.

An alternative would be to use cscope:

$ # build the index (will take a moment)
$ make cscope
$ # find all assignments to a symbol
$ cscope -d -L -9 platform_gpio_blink_set
drivers/leds/leds-gpio.c <global> 130 led_dat->platform_gpio_blink_set = blink_set;
$ # or find all occurrences of a symbol and grep for assignments
$ cscope -d -L -0 platform_gpio_blink_set | grep =
drivers/leds/leds-gpio.c <global> 130 led_dat->platform_gpio_blink_set = blink_set;

The latter, for some reason, runs faster for me.

-Jakub

^ permalink raw reply	[flat|nested] 14+ messages in thread

* unable to find function definition
  2016-04-27 20:26         ` Jakub Sitnicki
@ 2016-04-28  4:23           ` Anupam Kapoor
  0 siblings, 0 replies; 14+ messages in thread
From: Anupam Kapoor @ 2016-04-28  4:23 UTC (permalink / raw)
  To: kernelnewbies


>>>>> [2016-04-28T01:56:26+0530]: "Jakub Sitnicki" (jakub-sitnicki):
,----[ jakub-sitnicki ]
| An alternative would be to use cscope:
|
| $ # build the index (will take a moment)
| $ make cscope
`----
this ! cscope generally just works for way better than other 'manual'
mechanisms. since it builds inverse database as well (the -q option),
symbol lookups are pretty fast.

xcscope provides a seamless experience within emacs...

--
kind regards
anupam

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-04-28  4:23 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-20  6:17 unable to find function definition Nijam Haider
2016-04-20  7:26 ` Cihangir Akturk
2016-04-26  8:30   ` Jay Aurabind
2016-04-26  8:50     ` Gadre Nayan
2016-04-26 10:45       ` Silvan Jegen
2016-04-26 12:56         ` Jay Aurabind
2016-04-26 13:31           ` Silvan Jegen
2016-04-26 15:24             ` Valdis.Kletnieks at vt.edu
2016-04-26 15:33               ` Silvan Jegen
2016-04-27 20:26         ` Jakub Sitnicki
2016-04-28  4:23           ` Anupam Kapoor
2016-04-27  1:35     ` John de la Garza
2016-04-27  3:05       ` Jay Aurabind
2016-04-27  3:10         ` nizam haider

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.