Date: Thu, 9 Oct 2014 10:39:03 +0000 (UTC) From: Baptiste Daroussin <bapt@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r370513 - in head/devel/powerpc64-gcc: . files Message-ID: <201410091039.s99Ad3Ih002097@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bapt Date: Thu Oct 9 10:39:02 2014 New Revision: 370513 URL: https://svnweb.freebsd.org/changeset/ports/370513 QAT: https://qat.redports.org/buildarchive/r370513/ Log: Add support for -fformat-extensions meaning we can now build the kernel Submitted by: kan Added: head/devel/powerpc64-gcc/files/ head/devel/powerpc64-gcc/files/patch-format-extensions (contents, props changed) Modified: head/devel/powerpc64-gcc/Makefile Modified: head/devel/powerpc64-gcc/Makefile ============================================================================== --- head/devel/powerpc64-gcc/Makefile Thu Oct 9 10:24:47 2014 (r370512) +++ head/devel/powerpc64-gcc/Makefile Thu Oct 9 10:39:02 2014 (r370513) @@ -23,6 +23,7 @@ LIB_DEPENDS= libgmp.so:${PORTSDIR}/math/ BUILD_DEPENDS= ${PKGNAMEPREFIX}${OPSYS:tl}-as:${PORTSDIR}/devel/${PKGNAMEPREFIX}binutils RUN_DEPENDS= ${PKGNAMEPREFIX}${OPSYS:tl}-as:${PORTSDIR}/devel/${PKGNAMEPREFIX}binutils +PATCH_WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION} WRKSRC= ${WRKDIR}/build-gcc GNU_CONFIGURE= yes Added: head/devel/powerpc64-gcc/files/patch-format-extensions ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/powerpc64-gcc/files/patch-format-extensions Thu Oct 9 10:39:02 2014 (r370513) @@ -0,0 +1,117 @@ +Index: gcc/c-family/c-format.c +=================================================================== +--- gcc/c-family/c-format.c (revision 216017) ++++ gcc/c-family/c-format.c (working copy) +@@ -622,6 +622,26 @@ + { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } + }; + ++static const format_char_info fbsd_ext_char_info = ++{ NULL, 1, STD_EXT, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL }; ++ ++static const format_char_info fbsd_print_char_table[] = ++{ ++ /* BSD conversion specifiers. */ ++ /* FreeBSD kernel extensions (src/sys/kern/subr_prf.c). ++ The format %b is supported to decode error registers. ++ Its usage is: printf("reg=%b\n", regval, "<base><arg>*"); ++ which produces: reg=3<BITTWO,BITONE> ++ The format %D provides a hexdump given a pointer and separator string: ++ ("%6D", ptr, ":") -> XX:XX:XX:XX:XX:XX ++ ("%*D", len, ptr, " ") -> XX XX XX XX ... ++ */ ++ { "D", 1, STD_EXT, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "cR", &fbsd_ext_char_info }, ++ { "b", 0, STD_EXT, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "", &fbsd_ext_char_info }, ++ { "ry", 0, STD_EXT, { T89_I, BADLEN, BADLEN, T89_L, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "i", NULL }, ++ { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } ++}; ++ + static const format_char_info asm_fprintf_char_table[] = + { + /* C89 conversion specifiers. */ +@@ -872,6 +892,12 @@ + strfmon_flag_specs, strfmon_flag_pairs, + FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L', 0, + NULL, NULL ++ }, ++ { "printf0", printf_length_specs, print_char_table, " +#0-'I", NULL, ++ printf_flag_specs, printf_flag_pairs, ++ FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK|FMT_FLAG_NULL_FORMAT_OK, ++ 'w', 0, 'p', 0, 'L', 0, ++ &integer_type_node, &integer_type_node + } + }; + +@@ -1426,6 +1452,9 @@ + + if (integer_zerop (format_tree)) + { ++ if (!(format_types[info->format_type].flags & FMT_FLAG_NULL_FORMAT_OK)) ++ warning (OPT_Wformat_, "null format string"); ++ + /* Skip to first argument to check, so we can see if this format + has any arguments (it shouldn't). */ + while (arg_num + 1 < info->first_arg_num) +@@ -1926,6 +1955,14 @@ + while (fli->name != 0 + && strncmp (fli->name, format_chars, strlen (fli->name))) + fli++; ++ /* ++ * Make sure FreeBSD's D format char takes preference ++ * over new DD length specifier if FreeBSD format ++ * extensions are requested. ++ */ ++ if (fli->index == FMT_LEN_D && flag_format_extensions ++ && fki->conversion_specs == print_char_table) ++ while (fli->name != 0) fli++; + if (fli->name != 0) + { + format_chars += strlen (fli->name); +@@ -1993,6 +2030,14 @@ + while (fci->format_chars != 0 + && strchr (fci->format_chars, format_char) == 0) + ++fci; ++ if (fci->format_chars == 0 && flag_format_extensions ++ && fki->conversion_specs == print_char_table) ++ { ++ fci = fbsd_print_char_table; ++ while (fci->format_chars != 0 ++ && strchr (fci->format_chars, format_char) == 0) ++ ++fci; ++ } + if (fci->format_chars == 0) + { + if (ISGRAPH (format_char)) +Index: gcc/c-family/c-format.h +=================================================================== +--- gcc/c-family/c-format.h (revision 216017) ++++ gcc/c-family/c-format.h (working copy) +@@ -75,11 +75,12 @@ + FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128, + /* The format arg is an opaque object that will be parsed by an external + facility. */ +- FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256 ++ FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256, + /* Not included here: details of whether width or precision may occur + (controlled by width_char and precision_char); details of whether + '*' can be used for these (width_type and precision_type); details + of whether length modifiers can occur (length_char_specs). */ ++ FMT_FLAG_NULL_FORMAT_OK = 512 + }; + + /* Structure describing a length modifier supported in format checking, and +Index: gcc/config/freebsd.opt +=================================================================== +--- gcc/config/freebsd.opt (revision 216017) ++++ gcc/config/freebsd.opt (working copy) +@@ -34,6 +34,10 @@ + defsym= + Driver JoinedOrMissing + ++fformat-extensions ++Common Report Var(flag_format_extensions) Init(0) ++Allow FreeBSD kernel-specific printf format specifiers. ++ + posix + Driver +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410091039.s99Ad3Ih002097>