Re: Emit a variable defined in gcc

2020-07-02 Thread Martin Liška

On 7/2/20 8:12 AM, Harshit Sharma wrote:

Thanks Martin. I liked your idea of using 
__builtin___asan_version_mismatch_check_v8().

But now, I am getting a compile error. ( error: implicit declaration of 
function '__builtin___asan_version_mismatch_check_v8'; )
It means the reference to this function is not resolved. So, I guess gcc is not 
emitting this function.


The function is defined in libasan.so in libsanitizer/asan/asan_rtl.cpp.



What could be the issue here? Btw I am using fsanitize=kernel-address for my 
project. Even if I use fsanitize=address, the reference to
this function will not be resolved.


For kernel-address, there's no run-time provided by GCC and so that the call to 
__builtin___asan_version_mismatch_check_v8
is not emitted.

You may change the emission and do it also for kernel-address where you'll 
define the symbol in kernel source code.

Martin


Re: Emit a variable defined in gcc

2020-07-02 Thread Harshit Sharma via Gcc
Thanks Martin. I liked your idea of using
__builtin___asan_version_mismatch_check_v8().

But now, I am getting a compile error. ( error: implicit declaration of
function '__builtin___asan_version_mismatch_check_v8'; )
It means the reference to this function is not resolved. So, I guess gcc is
not emitting this function.

What could be the issue here? Btw I am using fsanitize=kernel-address for
my project. Even if I use fsanitize=address, the reference to
this function will not be resolved.


-Harshit

On Wed, Jul 1, 2020 at 4:14 AM Martin Liška  wrote:

> On 7/1/20 10:54 AM, Harshit Sharma wrote:
> > Actually these are two separate things. My callback function to fetch
> shadow offset from user code is ready. This function is defined in my user
> code and will be called by compiler (quite similar to how
> __asan_stack_malloc_ function is implemented in gcc/asan.c).
>
> All right.
>
> >
> > Now in order to make sure that my users have applied this gcc patch to
> their compilers, I want a have a variable __asan_gcc_patch_present which
> will be defined inside gcc but will be used by user code. This way if they
> build the program without applying the patch, they will get a compile error
> as the reference to this variable will not be resolved.
>
> Note that this detection is fragile as one can do:
>
> new-gcc -fsanitize=address -c foo.c
> old-gcc -fsanitize=address -c bar.c
> new-gcc foo.o bar.o -fsanitize=address -o a.out
>
> will be happy, but apparently bar.o is compiled with a wrong compiler.
>
> What you want instead is to use ./xgcc -B. /tmp/foo.c -c
> -fsanitize=address -fdump-tree-optimized=/dev/stdout
>
> ...
> _sub_I_00099_0 ()
> {
> :
>__builtin___asan_init ();
>__builtin___asan_version_mismatch_check_v8 ();
>return;
>
> }
> ...
>
> as seen constructor of each compilation unit calls
> __builtin___asan_version_mismatch_check_v8. So you just want to bump
> libsanitizer/asan/asan_init_version.h to
> __builtin___asan_version_mismatch_check_v10 (note that v9 is taken on some
> targets).
> And change the builtin in  gcc/sanitizer.def.
>
> Martin
>
> >
> > This is how I have defined the variable. But I am not sure how I can
> make this variable accessible by the user code.
> >
> >id = get_identifier ("__asan_gcc_patch_present");
> >decl = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
> VAR_DECL, id, integer_type_node);
> >DECL_INITIAL(decl) = integer_one_node;
> >
> > Please tell me what I am doing wrong.
> >
> > -Harshit
> >
> > On Wed, Jul 1, 2020 at 12:03 AM Martin Liška  mli...@suse.cz>> wrote:
> >
> > On 6/30/20 6:52 PM, Harshit Sharma wrote:
> >  > Hey Martin,
> >  >
> >  > Thanks for your reply. Actually I am trying to have a callback
> function allowing gcc to fetch shadow offset from runtime code.
> >
> > Ah, all right!
> >
> >  >
> >  > In order to make sure that my users have applied this patch
> before using asan feature, I want to define a variable in gcc (could be an
> integer) which will be referenced by the asan library in our source code. I
> think I used the wrong word 'emit' in my previous post. The variable say
> "__asan_gccpatch_present" needs to be defined in gcc and then referenced by
> our code (just like we do with functions such as __builtin_expect).
> >
> > Then what about adding a new ASAN variable that you will directly
> access from your source code?
> > What kind of interaction do you need? Or you can add a new ASAN
> builtin (gcc/sanitizer.def), something like
> > __asan_poison_stack_memory that can be used in a user code?
> >
> > Martin
> >
> >  >
> >  >
> >  > Thanks,
> >  > Harshit
> >  >
> >  > On Tue, Jun 30, 2020 at 12:34 AM Martin Liška   >>
> wrote:
> >  >
> >  > On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:
> >  >  > Hello,
> >  >  > I am working on a gcc patch for asan.
> >  >
> >  > Hey.
> >  >
> >  > Good to hear, what kind of feature is that?
> >  >
> >  >  > The patch is almost ready except one
> >  >  > thing. To make sure that the user has applied this patch
> before using asan
> >  >  > feature, I want to declare an additional variable in gcc
> which is reference
> >  >  > by our source code so that if this patch is missing, the
> user gets an error
> >  >  > compiling the code because the reference to this variable
> will not be
> >  >  > resolved.
> >  >
> >  > A nice example can be emission of global variables that are
> used for -fprofile-generate:
> >  > see gcc/tree-profile.c:194-202.
> >  >
> >  > Let me know if it helps?
> >  > Martin
> >  >
> >  >  >
> >  >  > I am still new to gcc development. So, can anyone tell me
> how can I make
> >  >  > gcc emit this variable?
> >  >  >
> >  >  

Re: Emit a variable defined in gcc

2020-07-01 Thread Martin Liška

On 7/1/20 10:54 AM, Harshit Sharma wrote:

Actually these are two separate things. My callback function to fetch shadow 
offset from user code is ready. This function is defined in my user code and 
will be called by compiler (quite similar to how __asan_stack_malloc_ function 
is implemented in gcc/asan.c).


All right.



Now in order to make sure that my users have applied this gcc patch to their 
compilers, I want a have a variable __asan_gcc_patch_present which will be 
defined inside gcc but will be used by user code. This way if they build the 
program without applying the patch, they will get a compile error as the 
reference to this variable will not be resolved.


Note that this detection is fragile as one can do:

new-gcc -fsanitize=address -c foo.c
old-gcc -fsanitize=address -c bar.c
new-gcc foo.o bar.o -fsanitize=address -o a.out

will be happy, but apparently bar.o is compiled with a wrong compiler.

What you want instead is to use ./xgcc -B. /tmp/foo.c -c -fsanitize=address 
-fdump-tree-optimized=/dev/stdout

...
_sub_I_00099_0 ()
{
   :
  __builtin___asan_init ();
  __builtin___asan_version_mismatch_check_v8 ();
  return;

}
...

as seen constructor of each compilation unit calls 
__builtin___asan_version_mismatch_check_v8. So you just want to bump
libsanitizer/asan/asan_init_version.h to 
__builtin___asan_version_mismatch_check_v10 (note that v9 is taken on some 
targets).
And change the builtin in  gcc/sanitizer.def.

Martin



This is how I have defined the variable. But I am not sure how I can make this 
variable accessible by the user code.

   id = get_identifier ("__asan_gcc_patch_present");
   decl = build_decl (DECL_SOURCE_LOCATION (current_function_decl), VAR_DECL, 
id, integer_type_node);
   DECL_INITIAL(decl) = integer_one_node;

Please tell me what I am doing wrong.

-Harshit

On Wed, Jul 1, 2020 at 12:03 AM Martin Liška mailto:mli...@suse.cz>> wrote:

On 6/30/20 6:52 PM, Harshit Sharma wrote:
 > Hey Martin,
 >
 > Thanks for your reply. Actually I am trying to have a callback function 
allowing gcc to fetch shadow offset from runtime code.

Ah, all right!

 >
 > In order to make sure that my users have applied this patch before using asan 
feature, I want to define a variable in gcc (could be an integer) which will be referenced 
by the asan library in our source code. I think I used the wrong word 'emit' in my previous 
post. The variable say "__asan_gccpatch_present" needs to be defined in gcc and 
then referenced by our code (just like we do with functions such as __builtin_expect).

Then what about adding a new ASAN variable that you will directly access 
from your source code?
What kind of interaction do you need? Or you can add a new ASAN builtin 
(gcc/sanitizer.def), something like
__asan_poison_stack_memory that can be used in a user code?

Martin

 >
 >
 > Thanks,
 > Harshit
 >
 > On Tue, Jun 30, 2020 at 12:34 AM Martin Liška mailto:mli...@suse.cz> 
>> wrote:
 >
 >     On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:
 >      > Hello,
 >      > I am working on a gcc patch for asan.
 >
 >     Hey.
 >
 >     Good to hear, what kind of feature is that?
 >
 >      > The patch is almost ready except one
 >      > thing. To make sure that the user has applied this patch before 
using asan
 >      > feature, I want to declare an additional variable in gcc which is 
reference
 >      > by our source code so that if this patch is missing, the user 
gets an error
 >      > compiling the code because the reference to this variable will 
not be
 >      > resolved.
 >
 >     A nice example can be emission of global variables that are used for 
-fprofile-generate:
 >     see gcc/tree-profile.c:194-202.
 >
 >     Let me know if it helps?
 >     Martin
 >
 >      >
 >      > I am still new to gcc development. So, can anyone tell me how can 
I make
 >      > gcc emit this variable?
 >      >
 >      >
 >      > Thanks,
 >      > Harshit
 >      >
 >





Re: Emit a variable defined in gcc

2020-07-01 Thread Harshit Sharma via Gcc
Actually these are two separate things. My callback function to fetch
shadow offset from user code is ready. This function is defined in my user
code and will be called by compiler (quite similar to how
__asan_stack_malloc_ function is implemented in gcc/asan.c).

Now in order to make sure that my users have applied this gcc patch to
their compilers, I want a have a variable __asan_gcc_patch_present which
will be defined inside gcc but will be used by user code. This way if they
build the program without applying the patch, they will get a compile error
as the reference to this variable will not be resolved.

This is how I have defined the variable. But I am not sure how I can make
this variable accessible by the user code.

  id = get_identifier ("__asan_gcc_patch_present");
  decl = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
VAR_DECL, id, integer_type_node);
  DECL_INITIAL(decl) = integer_one_node;

Please tell me what I am doing wrong.

-Harshit

On Wed, Jul 1, 2020 at 12:03 AM Martin Liška  wrote:

> On 6/30/20 6:52 PM, Harshit Sharma wrote:
> > Hey Martin,
> >
> > Thanks for your reply. Actually I am trying to have a callback function
> allowing gcc to fetch shadow offset from runtime code.
>
> Ah, all right!
>
> >
> > In order to make sure that my users have applied this patch before using
> asan feature, I want to define a variable in gcc (could be an integer)
> which will be referenced by the asan library in our source code. I think I
> used the wrong word 'emit' in my previous post. The variable say
> "__asan_gccpatch_present" needs to be defined in gcc and then referenced by
> our code (just like we do with functions such as __builtin_expect).
>
> Then what about adding a new ASAN variable that you will directly access
> from your source code?
> What kind of interaction do you need? Or you can add a new ASAN builtin
> (gcc/sanitizer.def), something like
> __asan_poison_stack_memory that can be used in a user code?
>
> Martin
>
> >
> >
> > Thanks,
> > Harshit
> >
> > On Tue, Jun 30, 2020 at 12:34 AM Martin Liška  mli...@suse.cz>> wrote:
> >
> > On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:
> >  > Hello,
> >  > I am working on a gcc patch for asan.
> >
> > Hey.
> >
> > Good to hear, what kind of feature is that?
> >
> >  > The patch is almost ready except one
> >  > thing. To make sure that the user has applied this patch before
> using asan
> >  > feature, I want to declare an additional variable in gcc which is
> reference
> >  > by our source code so that if this patch is missing, the user
> gets an error
> >  > compiling the code because the reference to this variable will
> not be
> >  > resolved.
> >
> > A nice example can be emission of global variables that are used for
> -fprofile-generate:
> > see gcc/tree-profile.c:194-202.
> >
> > Let me know if it helps?
> > Martin
> >
> >  >
> >  > I am still new to gcc development. So, can anyone tell me how can
> I make
> >  > gcc emit this variable?
> >  >
> >  >
> >  > Thanks,
> >  > Harshit
> >  >
> >
>
>


Re: Emit a variable defined in gcc

2020-07-01 Thread Martin Liška

On 6/30/20 6:52 PM, Harshit Sharma wrote:

Hey Martin,

Thanks for your reply. Actually I am trying to have a callback function 
allowing gcc to fetch shadow offset from runtime code.


Ah, all right!



In order to make sure that my users have applied this patch before using asan feature, I 
want to define a variable in gcc (could be an integer) which will be referenced by the 
asan library in our source code. I think I used the wrong word 'emit' in my previous 
post. The variable say "__asan_gccpatch_present" needs to be defined in gcc and 
then referenced by our code (just like we do with functions such as __builtin_expect).


Then what about adding a new ASAN variable that you will directly access from 
your source code?
What kind of interaction do you need? Or you can add a new ASAN builtin 
(gcc/sanitizer.def), something like
__asan_poison_stack_memory that can be used in a user code?

Martin




Thanks,
Harshit

On Tue, Jun 30, 2020 at 12:34 AM Martin Liška mailto:mli...@suse.cz>> wrote:

On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:
 > Hello,
 > I am working on a gcc patch for asan.

Hey.

Good to hear, what kind of feature is that?

 > The patch is almost ready except one
 > thing. To make sure that the user has applied this patch before using 
asan
 > feature, I want to declare an additional variable in gcc which is 
reference
 > by our source code so that if this patch is missing, the user gets an 
error
 > compiling the code because the reference to this variable will not be
 > resolved.

A nice example can be emission of global variables that are used for 
-fprofile-generate:
see gcc/tree-profile.c:194-202.

Let me know if it helps?
Martin

 >
 > I am still new to gcc development. So, can anyone tell me how can I make
 > gcc emit this variable?
 >
 >
 > Thanks,
 > Harshit
 >





Re: Emit a variable defined in gcc

2020-06-30 Thread Harshit Sharma via Gcc
Hey Martin,

Thanks for your reply. Actually I am trying to have a callback function
allowing gcc to fetch shadow offset from runtime code.

In order to make sure that my users have applied this patch before using
asan feature, I want to define a variable in gcc (could be an integer)
which will be referenced by the asan library in our source code. I think I
used the wrong word 'emit' in my previous post. The variable say
"__asan_gccpatch_present" needs to be defined in gcc and then referenced by
our code (just like we do with functions such as __builtin_expect).


Thanks,
Harshit

On Tue, Jun 30, 2020 at 12:34 AM Martin Liška  wrote:

> On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:
> > Hello,
> > I am working on a gcc patch for asan.
>
> Hey.
>
> Good to hear, what kind of feature is that?
>
> > The patch is almost ready except one
> > thing. To make sure that the user has applied this patch before using
> asan
> > feature, I want to declare an additional variable in gcc which is
> reference
> > by our source code so that if this patch is missing, the user gets an
> error
> > compiling the code because the reference to this variable will not be
> > resolved.
>
> A nice example can be emission of global variables that are used for
> -fprofile-generate:
> see gcc/tree-profile.c:194-202.
>
> Let me know if it helps?
> Martin
>
> >
> > I am still new to gcc development. So, can anyone tell me how can I make
> > gcc emit this variable?
> >
> >
> > Thanks,
> > Harshit
> >
>
>


Re: Emit a variable defined in gcc

2020-06-30 Thread Martin Liška

On 6/30/20 7:55 AM, Harshit Sharma via Gcc wrote:

Hello,
I am working on a gcc patch for asan.


Hey.

Good to hear, what kind of feature is that?


The patch is almost ready except one
thing. To make sure that the user has applied this patch before using asan
feature, I want to declare an additional variable in gcc which is reference
by our source code so that if this patch is missing, the user gets an error
compiling the code because the reference to this variable will not be
resolved.


A nice example can be emission of global variables that are used for 
-fprofile-generate:
see gcc/tree-profile.c:194-202.

Let me know if it helps?
Martin



I am still new to gcc development. So, can anyone tell me how can I make
gcc emit this variable?


Thanks,
Harshit