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 ()
{
  <bb 2> :
  __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 
<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 <mli...@suse.cz <mailto:mli...@suse.cz> 
<mailto:mli...@suse.cz <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
     >      >
     >


Reply via email to