Re: [PATCH] dissect: introduce sym_is_local() for reporter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/12, Luc Van Oostenryck wrote:
>
> On Tue, Feb 11, 2020 at 05:01:36PM +0100, Oleg Nesterov wrote:
> > Can be used to filter out the usage of local variables.
>
> ...
>
> > diff --git a/dissect.h b/dissect.h
> > index efe2c0b..178dba5 100644
> > --- a/dissect.h
> > +++ b/dissect.h
> > @@ -27,6 +27,11 @@ struct reporter
> >
> >  extern struct symbol *dissect_ctx;
> >
> > +static inline bool sym_is_local(struct symbol *sym)
> > +{
> > +	return sym->kind == 'v' && !(sym->ctype.modifiers & MOD_TOPLEVEL);
> > +}
> > +
>
> Shouldn't MOD_STATIC be added to the test?

perhaps I misread bind_symbol() ... but it seems to me MOD_TOPLEVEL is
enough. bind_symbol() does

	scope = block_scope;
	if (ns == NS_SYMBOL && toplevel(scope)) {
		mod = MOD_ADDRESSABLE | MOD_TOPLEVEL;
		...
		sym->ctype.modifiers |= mod;
	}

toplevel(block_scope) should be true after start_file_scope() sets
"block_scope = file_scope" and until start_function_scope(), right?

> It depends on what exactly you want for 'local'.

Yes, it should only return T if the symbol was defined inside some function.
If we have

	static int I;

in file scope, sym_is_local() should return false and so it does, test-dissect
outputs

	1:12                   def   v I                                int

Thanks for looking!

Oleg.




[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux