public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [GSOC-2019] - Implement Csmith fuzzer leveraging GCC C Extensions.
       [not found] <CAN=hqDA03yPxBW2WoD_igSMiW4gP=Ym0n+wr0NJRL4hGU_fHGg@mail.gmail.com>
@ 2019-05-15  8:48 ` Martin Liška
  0 siblings, 0 replies; only message in thread
From: Martin Liška @ 2019-05-15  8:48 UTC (permalink / raw)
  To: Shubham Narlawar, gcc

On 5/15/19 10:12 AM, Shubham Narlawar wrote:
> Hello Martin and community,
> 
> Below is attached patch for Function Attribute Aligned -
> 
> The command line option to generate aligned attribute is -
> --func-attr-aligned which can be found in ./csmith --help
> 
> Please review the patch and suggest changes if any.
> 
> The process of adding any extension is same -
> 1. Implement an extension
> 2. Send patch for review to community.
> 3. Test GCC compiler and report bugs if found any.
> 4. Push patch into github fork.
> Continue.
> 
> I have a query regarding C extension "function attribute alias". Is it correct way to add aliasing for functions in csmith program as shown below -
> 
> e.g. In csmith program, output aliasing below function declaration looks like -
> 
> //--------function-------declarations----------
> void func_1();
> void func_3();
> .....
> 
> void foo1() __attribute__ ((weak, alias("func_1")));
> void foo3() __attribute__ ((weak, alias("func_3")));
> ......
> 
> Looking forward to do this project with GCC community.
> 
> Thanks
> Shubham
> 
> func_attr_aligned.patch
> 
> diff --git a/src/CGOptions.cpp b/src/CGOptions.cpp
> index b74375a..98c629b 100644
> --- a/src/CGOptions.cpp
> +++ b/src/CGOptions.cpp
> @@ -202,6 +202,7 @@ DEFINE_GETTER_SETTER_BOOL(fast_execution);
>  
>  //GCC C Extensions
>  DEFINE_GETTER_SETTER_BOOL(func_attr_inline);
> +DEFINE_GETTER_SETTER_BOOL(func_attr_aligned);
>  
>  void
>  CGOptions::set_default_builtin_kinds()
> diff --git a/src/CGOptions.h b/src/CGOptions.h
> index 76887b8..a1aa389 100644
> --- a/src/CGOptions.h
> +++ b/src/CGOptions.h
> @@ -474,6 +474,9 @@ public:
>  	static bool func_attr_inline(void);
>          static bool func_attr_inline(bool p);
>  
> +	static bool func_attr_aligned(void);
> +        static bool func_attr_aligned(bool p);
> +

Hi.

There you have a different indentation.

>  private:
>  	static bool enabled_builtin_kind(const string &kind);
>  
> @@ -623,6 +626,7 @@ private:
>  
>  	//GCC C Extensions
>  	static bool	func_attr_inline_;
> +	static bool     func_attr_aligned_;
>  private:
>  	CGOptions(void);
>  	CGOptions(CGOptions &cgo);
> diff --git a/src/Function.cpp b/src/Function.cpp
> index 9935552..1a769db 100644
> --- a/src/Function.cpp
> +++ b/src/Function.cpp
> @@ -396,6 +396,7 @@ Function::Function(const string &name, const Type *return_type)
>  {
>  	FuncList.push_back(this);			// Add to global list of functions.
>  	func_attr_inline = false;
> +	func_attr_aligned = false;
>  }
>  
>  Function::Function(const string &name, const Type *return_type, bool builtin)
> @@ -411,6 +412,7 @@ Function::Function(const string &name, const Type *return_type, bool builtin)
>  {
>  	FuncList.push_back(this);			// Add to global list of functions.
>  	func_attr_inline = false;
> +	func_attr_aligned = false;
>  }
>  
>  Function *
> @@ -434,8 +436,11 @@ Function::make_random_signature(const CGContext& cg_context, const Type* type, c
>  	if (CGOptions::inline_function() && rnd_flipcoin(InlineFunctionProb))
>  		f->is_inlined = true;
>  
> -	if(CGOptions::func_attr_inline() && rnd_flipcoin(InlineFunctionProb))
> +	if(CGOptions::func_attr_inline() && rnd_flipcoin(FuncAttrInline))
>  		f->func_attr_inline = true;

Are you sure here? Why are you removing InlineFunctionProb of an unrelated option (inline)?

> +
> +	if(CGOptions::func_attr_aligned() && rnd_flipcoin(FuncAttrAligned))
> +                f->func_attr_aligned = true;
>  	return f;
>  }>  
> @@ -487,8 +492,11 @@ Function::make_first(void)
>  	// collect info about global dangling pointers
>  	fm->find_dangling_global_ptrs(f);
>  
> -	if(CGOptions::func_attr_inline() && rnd_flipcoin(InlineFunctionProb))
> +	if(CGOptions::func_attr_inline() && rnd_flipcoin(FuncAttrInline))
>                  f->func_attr_inline = true;

Same comment here.

> +
> +	if(CGOptions::func_attr_aligned() && rnd_flipcoin(FuncAttrAligned))
> +                f->func_attr_aligned = true;
>  	return f;
>  }
>  
> @@ -562,6 +570,43 @@ Function::OutputForwardDecl(std::ostream &out)
>  	OutputHeader(out);
>  	if(func_attr_inline)
>  		out << " __attribute__((always_inline))";
> +	if(func_attr_aligned){
> +		int probability__BIGGEST_ALIGNMENT__ = 38;
> +		bool use__BIGGEST_ALIGNMENT__ = rnd_flipcoin(probability__BIGGEST_ALIGNMENT__);
> +		if (use__BIGGEST_ALIGNMENT__)
> +			out << " __attribute__((aligned(__BIGGEST_ALIGNMENT__)))";
> +		else{
> +			int value = 0;
> +			int power = rnd_upto(8);
> +			if (power == 0)
> +				power++;
> +			switch (power){
> +				case 1:
> +					value = 2;
> +					break;
> +				case 2:
> +					value = 4;
> +					break;
> +				case 3:
> +					value = 8;
> +					break;
> +				case 4:
> +					value = 16;
> +					break;
> +				case 5:
> +					value = 32;
> +					break;
> +				case 6:
> +					value = 64;
> +					break;
> +				case 7:
> +					value = 128;
> +					break;

You definitely want something like value = (1 << power).

> +			}
> +			out << " __attribute__((aligned(" <<value << ")))";
> +		}
> +
> +	}
>  	out << ";";
>  	outputln(out);
>  }
> diff --git a/src/Function.h b/src/Function.h
> index 7e40e06..9863a9f 100644
> --- a/src/Function.h
> +++ b/src/Function.h
> @@ -125,6 +125,7 @@ public:
>  
>  	//GCC C Extensions
>  	bool func_attr_inline;
> +	bool func_attr_aligned;
>  
>  private:
>  	static int deleteFunction(Function* func);
> diff --git a/src/Probabilities.cpp b/src/Probabilities.cpp
> index c0e0d27..fd076e8 100644
> --- a/src/Probabilities.cpp
> +++ b/src/Probabilities.cpp
> @@ -509,6 +509,9 @@ Probabilities::set_single_name_maps()
>  
>  	//for choosing function attribute inline
>  	set_single_name("func_attr_inline", pFuncAttrInline);
> +
> +	//for choosing function attribute aligned
> +        set_single_name("func_attr_inline", pFuncAttrAligned);

Typo here, "func_attr_inline".

I'm going to test the patch in next iteration.

Thanks,
Martin

>  }
>  
>  void
> @@ -551,6 +554,7 @@ Probabilities::initialize_single_probs()
>  
>  	//GCC C Extensions
>  	m[pFuncAttrInline] = 50;
> +	m[pFuncAttrAligned] = 50;
>  
>  	if (CGOptions::volatiles())
>  		m[pRegularVolatileProb] = 50;
> diff --git a/src/Probabilities.h b/src/Probabilities.h
> index ef78de6..5ae1038 100644
> --- a/src/Probabilities.h
> +++ b/src/Probabilities.h
> @@ -149,6 +149,7 @@ enum ProbName {
>  
>  	//for function attributes
>  	pFuncAttrInline,
> +	pFuncAttrAligned,
>  
>  };
>  
> @@ -229,6 +230,9 @@ enum ProbName {
>  #define FuncAttrInline \
>  	Probabilities::get_prob(pFuncAttrInline)
>  
> +#define FuncAttrAligned \
> +        Probabilities::get_prob(pFuncAttrAligned)
> +
>  //////////////////////////////////////////////////
>  #define UNARY_OPS_PROB_FILTER \
>  	Probabilities::get_prob_filter(pUnaryOpsProb)
> diff --git a/src/RandomProgramGenerator.cpp b/src/RandomProgramGenerator.cpp
> index 442ac64..1f637e9 100644
> --- a/src/RandomProgramGenerator.cpp
> +++ b/src/RandomProgramGenerator.cpp
> @@ -824,6 +824,17 @@ main(int argc, char **argv)
>                          continue;
>                  }
>  
> +		if (strcmp (argv[i], "--func-attr-aligned") == 0) {
> +                        CGOptions::func_attr_aligned(true);
> +                        continue;
> +                }
> +
> +                if (strcmp (argv[i], "--no-func-attr-aligned") == 0) {
> +                        CGOptions::func_attr_aligned(false);
> +                        continue;
> +                }
> +
> +
>  		if (strcmp (argv[i], "--max-array-dim") ==0 ) {
>  			unsigned long dim;
>  			i++;
> 

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-05-15  8:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CAN=hqDA03yPxBW2WoD_igSMiW4gP=Ym0n+wr0NJRL4hGU_fHGg@mail.gmail.com>
2019-05-15  8:48 ` [GSOC-2019] - Implement Csmith fuzzer leveraging GCC C Extensions Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).