Ping.
https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00937.html

This fell through the cracks for me.
Is this ok at this stage? Or should I leave it for GCC 7?

Thanks,
Kyrill

On 09/11/15 11:36, Kyrill Tkachov wrote:
Hi all,

Judging by the thread at 
https://gcc.gnu.org/ml/gcc-patches/2015-10/msg01912.html
I looked at replacing calls to sprintf with calls to snprintf in the arm 
backend.
We use them a lot to print assembly mnemonics into static char buffers.
This patch replaces the calls with snprintf and adds a size argument equal to 
the size
of the buffer used. This way, if any of the format strings changes/increases 
past the size
of the allocated buffer, snprintf will truncate it (and the assembler will 
catch it) rather
than trying to write past the end of the buffer with unexpected results.

I managed to replace all uses of sprintf in the arm backend except the one in 
aout.h:
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM)  \
  sprintf (STRING, "*%s%s%u", LOCAL_LABEL_PREFIX, PREFIX, (unsigned int)(NUM))

Here, ASM_GENERATE_INTERNAL_LABEL is used in various places in the midend to 
print labels
to static buffers. I've seen those buffers have sizes ranging from 12 chars to 
256 chars.
The size of the buffer that ASM_GENERATE_INTERNAL_LABEL can depend on is not 
mandated in the
documentation or passed down to the macro, so I think this is a bit dangerous. 
In practice, however,
I don't think we print labels that long that that would cause an issue.

Bootstrapped and tested on arm-none-linux-gnueabihf.

Ok for trunk?

Thanks,
Kyrill

2015-11-09  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

    * config/arm/arm.c (arm_set_fixed_optab_libfunc): Use snprintf
    rather than sprintf.
    (arm_set_fixed_conv_libfunc): Likewise.
    (arm_option_override): Likewise.
    (neon_output_logic_immediate): Likewise.
    (neon_output_shift_immediate): Likewise.
    (arm_output_multireg_pop): Likewise.
    (vfp_output_vstmd): Likewise.
    (output_move_vfp): Likewise.
    (output_move_neon): Likewise.
    (output_return_instruction): Likewise.
    (arm_elf_asm_cdtor): Likewise.
    (arm_output_shift): Likewise.
    (arm_output_iwmmxt_shift_immediate): Likewise.
    (arm_output_iwmmxt_tinsr): Likewise.
    * config/arm/neon.md (*neon_mov<mode>, VDX): Likewise.
    (*neon_mov<mode>, VQXMOV): Likewise.
    (neon_vc<cmp_op><mode>_insn): Likewise.
    (neon_vc<cmp_op_unsp><mode>_insn_unspec): Likewise.

Reply via email to