> Date: Wed, 3 Jul 2013 16:35:24 +0200 (CEST)
> From: Stefan Fritsch <s...@sfritsch.de>
> 
> add support for %td for ptrdiff_t in kernel
> 
> this also adds support in gcc 4.x kprintf

I'm on the fence about the CTASSERT here.  If we ever support a code
model that's not ILP32 or LP64, we need a major overhaul of the code
base.  So I don't think it adds real value.

so ok kettenis@ with or without that CTASSERT.

> ---
>  gnu/gcc/gcc/c-format.c |    7 ++++---
>  sys/kern/subr_prf.c    |    6 ++++++
>  2 files changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git gnu/gcc/gcc/c-format.c gnu/gcc/gcc/c-format.c
> index b9eecee..1b1734b 100644
> --- gnu/gcc/gcc/c-format.c
> +++ gnu/gcc/gcc/c-format.c
> @@ -325,6 +325,7 @@ static const format_length_info kprintf_length_specs[] =
>    { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C9L },
>    { "q", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
>    { "z", FMT_LEN_z, STD_C99, NULL, 0, 0 },
> +  { "t", FMT_LEN_t, STD_C99, NULL, 0, 0 },
>    { NULL, 0, 0, NULL, 0, 0 }
>  };
>  
> @@ -552,9 +553,9 @@ static const format_char_info asm_fprintf_char_table[] =
>  static const format_char_info kprint_char_table[] = 
>  { 
>    /* C89 conversion specifiers.  */ 
> -  { "di",  0, STD_C89, { T89_I,   BADLEN, T89_S,   T89_L,   T9L_LL,  BADLEN, 
>  T99_SST, BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0 +'I", "i", NULL 
> }, 
> -  { "oxX", 0, STD_C89, { T89_UI,  BADLEN, T89_US,  T89_UL,  T9L_ULL, BADLEN, 
>  T99_ST,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0#",    "i", NULL 
> }, 
> -  { "u",   0, STD_C89, { T89_UI,  BADLEN, T89_US,  T89_UL,  T9L_ULL, BADLEN, 
>  T99_ST,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0'I",   "i", NULL 
> }, 
> +  { "di",  0, STD_C89, { T89_I,   BADLEN, T89_S,   T89_L,   T9L_LL,  BADLEN, 
>  T99_SST, T99_PD,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0 +'I", "i", NULL 
> }, 
> +  { "oxX", 0, STD_C89, { T89_UI,  BADLEN, T89_US,  T89_UL,  T9L_ULL, BADLEN, 
>  T99_ST,  T99_UPD,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0#",    "i", 
> NULL }, 
> +  { "u",   0, STD_C89, { T89_UI,  BADLEN, T89_US,  T89_UL,  T9L_ULL, BADLEN, 
>  T99_ST,  T99_UPD,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0'I",   "i", 
> NULL }, 
>    { "c",   0, STD_C89, { T89_I,   BADLEN, BADLEN,  BADLEN,  BADLEN,  BADLEN, 
>  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-w",       "", NULL 
> }, 
>    { "s",   1, STD_C89, { T89_C,   BADLEN, BADLEN,  BADLEN,  BADLEN,  BADLEN, 
>  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",      "cR", 
> NULL }, 
>    { "p",   1, STD_C89, { T89_V,   BADLEN, BADLEN,  T89_UL,  T9L_LL,  BADLEN, 
>  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0",     "c", NULL 
> }, 
> diff --git sys/kern/subr_prf.c sys/kern/subr_prf.c
> index 768d164..c940141 100644
> --- sys/kern/subr_prf.c
> +++ sys/kern/subr_prf.c
> @@ -842,6 +842,12 @@ reswitch:        switch (ch) {
>                       size = 1;
>                       sign = '\0';
>                       break;
> +             case 't':
> +                     {
> +                             /* assume ptrdiff_t is long */
> +                             CTASSERT(sizeof(fmt - fmt0) == sizeof(long));
> +                     }
> +                     /* FALLTHROUGH */
>               case 'D':
>                       flags |= LONGINT;
>                       /*FALLTHROUGH*/
> 
> 

Reply via email to