]> git.ipfire.org Git - thirdparty/gcc.git/commit
asan: Align .LASANPC on function boundary
authorIlya Leoshkevich <iii@linux.ibm.com>
Thu, 7 Dec 2023 12:08:27 +0000 (13:08 +0100)
committerIlya Leoshkevich <iii@linux.ibm.com>
Fri, 5 Jan 2024 11:24:01 +0000 (12:24 +0100)
commite66dc37b299cac4171b1c5b90cf6b54388bd5bc5
treeff5a38a90075021d3262b0b4a536ba23b7665b33
parentc659dd8bfb55e02a1b97407c1c28f7a0e8f7f09b
asan: Align .LASANPC on function boundary

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.

Link: https://inbox.sourceware.org/gcc-patches/20240102194511.3171559-3-iii@linux.ibm.com/
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
gcc/ChangeLog:

* asan.cc (asan_function_start): Drop switch_to_section ().
(asan_emit_stack_protection): Set .LASANPC alignment.
* config/i386/i386.cc: Use assemble_function_label_raw ()
instead of ASM_OUTPUT_LABEL ().
* config/s390/s390.cc (s390_asm_output_function_label):
Likewise.
* defaults.h (ASM_OUTPUT_FUNCTION_LABEL): Likewise.
* final.cc (final_start_function_1): Drop
asan_function_start ().
* output.h (assemble_function_label_raw): New function.
* varasm.cc (assemble_function_label_raw): Likewise.
gcc/asan.cc
gcc/config/i386/i386.cc
gcc/config/s390/s390.cc
gcc/defaults.h
gcc/final.cc
gcc/output.h
gcc/varasm.cc