On Thu, Dec 07, 2023 at 01:08:27PM +0100, Ilya Leoshkevich wrote:
> GCC can emit code between the function label and the .LASANPC label,
> making the latter unaligned.  Some architectures cannot load unaligned
> labels directly and require literal pool entries, which is inefficient.
> 
> Move the invocation of asan_function_start to
> ASM_OUTPUT_FUNCTION_LABEL, which guarantees that no additional code is
> emitted.  This allows setting the .LASANPC label alignment to the
> respective function alignment.

> --- a/gcc/output.h
> +++ b/gcc/output.h
> @@ -178,6 +178,10 @@ extern void assemble_asm (tree);
>  /* Get the function's name from a decl, as described by its RTL.  */
>  extern const char *get_fnname_from_decl (tree);
>  
> +/* Output function label, possibly with accompanying metadata.  No additional
> +   code or data is output after the label.  */

Please copy the above comment also

> --- a/gcc/varasm.cc
> +++ b/gcc/varasm.cc
> @@ -61,6 +61,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "alloc-pool.h"
>  #include "toplev.h"
>  #include "opts.h"
> +#include "asan.h"
>  
>  /* The (assembler) name of the first globally-visible object output.  */
>  extern GTY(()) const char *first_global_object_name;
> @@ -1835,6 +1836,15 @@ get_fnname_from_decl (tree decl)
>    return XSTR (x, 0);
>  }
>  

here.

> +void assemble_function_label_raw (FILE *file, const char *name)

Also, newline rather than space after void.

> +{
> +  ASM_OUTPUT_LABEL (file, name);
> +  if ((flag_sanitize & SANITIZE_ADDRESS)
> +      /* Notify ASAN only about the first function label.  */
> +      && (in_cold_section_p == first_function_block_is_cold))
> +    asan_function_start ();
> +}

With this the asan.cc/varasm.cc changes look good to me, for the rest I'd
prefer to hear what Jeff says.

        Jakub

Reply via email to