mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	This updates the GCC to the next minor release which fixes +213 bugs. Tested on ARMv6, ARMv7, MIPS R2, x86 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			182 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| commit 331735a357a73c7b8adc205241ac3cc6543d985e
 | |
| Author: Felix Fietkau <nbd@openwrt.org>
 | |
| Date:   Tue Nov 17 12:38:22 2015 +0000
 | |
| 
 | |
|     gcc: add a patch to 5.x that supports translation of __FILE__ paths
 | |
|     
 | |
|     Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | |
|     
 | |
|     SVN-Revision: 47490
 | |
| 
 | |
| Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47047
 | |
| 
 | |
| --- a/gcc/c-family/c-opts.c
 | |
| +++ b/gcc/c-family/c-opts.c
 | |
| @@ -588,6 +588,10 @@ c_common_handle_option (size_t scode, co
 | |
|        add_path (xstrdup (arg), SYSTEM, 0, true);
 | |
|        break;
 | |
|  
 | |
| +    case OPT_iremap:
 | |
| +      add_cpp_remap_path (arg);
 | |
| +      break;
 | |
| +
 | |
|      case OPT_iwithprefix:
 | |
|        add_prefixed_path (arg, SYSTEM);
 | |
|        break;
 | |
| --- a/gcc/c-family/c.opt
 | |
| +++ b/gcc/c-family/c.opt
 | |
| @@ -1825,6 +1825,10 @@ iquote
 | |
|  C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
 | |
|  -iquote <dir>	Add <dir> to the end of the quote include path.
 | |
|  
 | |
| +iremap
 | |
| +C ObjC C++ ObjC++ Joined Separate
 | |
| +-iremap <src:dst>  Convert <src> to <dst> if it occurs as prefix in __FILE__.
 | |
| +
 | |
|  iwithprefix
 | |
|  C ObjC C++ ObjC++ Joined Separate
 | |
|  -iwithprefix <dir>	Add <dir> to the end of the system include path.
 | |
| --- a/gcc/doc/cpp.texi
 | |
| +++ b/gcc/doc/cpp.texi
 | |
| @@ -4272,6 +4272,7 @@ Refer to the GCC manual for full documen
 | |
|  @c man begin SYNOPSIS
 | |
|  cpp [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
 | |
|      [@option{-I}@var{dir}@dots{}] [@option{-iquote}@var{dir}@dots{}]
 | |
| +    [@option{-iremap}@var{src}:@var{dst}]
 | |
|      [@option{-M}|@option{-MM}] [@option{-MG}] [@option{-MF} @var{filename}]
 | |
|      [@option{-MP}] [@option{-MQ} @var{target}@dots{}]
 | |
|      [@option{-MT} @var{target}@dots{}]
 | |
| --- a/gcc/doc/cppopts.texi
 | |
| +++ b/gcc/doc/cppopts.texi
 | |
| @@ -220,6 +220,12 @@ extensions @samp{.i}, @samp{.ii} or @sam
 | |
|  extensions that GCC uses for preprocessed files created by
 | |
|  @option{-save-temps}.
 | |
|  
 | |
| +@item -iremap @var{src}:@var{dst}
 | |
| +@opindex iremap
 | |
| +Replace the prefix @var{src} in __FILE__ with @var{dst} at expansion time.
 | |
| +This option can be specified more than once.  Processing stops at the first
 | |
| +match.
 | |
| +
 | |
|  @item -fdirectives-only
 | |
|  @opindex fdirectives-only
 | |
|  When preprocessing, handle directives, but do not expand macros.
 | |
| --- a/gcc/doc/invoke.texi
 | |
| +++ b/gcc/doc/invoke.texi
 | |
| @@ -11871,6 +11871,12 @@ by @option{-fplugin=@var{name}} instead
 | |
|  @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
 | |
|  to be used by the user, but only passed by the driver.
 | |
|  
 | |
| +@item -iremap @var{src}:@var{dst}
 | |
| +@opindex iremap
 | |
| +Replace the prefix @var{src} in __FILE__ with @var{dst} at expansion time.
 | |
| +This option can be specified more than once.  Processing stops at the first
 | |
| +match.
 | |
| +
 | |
|  @item -L@var{dir}
 | |
|  @opindex L
 | |
|  Add directory @var{dir} to the list of directories to be searched
 | |
| --- a/libcpp/include/cpplib.h
 | |
| +++ b/libcpp/include/cpplib.h
 | |
| @@ -820,6 +820,9 @@ extern void cpp_set_lang (cpp_reader *,
 | |
|  /* Set the include paths.  */
 | |
|  extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
 | |
|  
 | |
| +/* Provide src:dst pair for __FILE__ remapping.  */
 | |
| +extern void add_cpp_remap_path (const char *);
 | |
| +
 | |
|  /* Call these to get pointers to the options, callback, and deps
 | |
|     structures for a given reader.  These pointers are good until you
 | |
|     call cpp_finish on that reader.  You can either edit the callbacks
 | |
| --- a/libcpp/macro.c
 | |
| +++ b/libcpp/macro.c
 | |
| @@ -227,6 +227,64 @@ static const char * const monthnames[] =
 | |
|    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
 | |
|  };
 | |
|  
 | |
| +static size_t remap_pairs;
 | |
| +static char **remap_src;
 | |
| +static char **remap_dst;
 | |
| +
 | |
| +void
 | |
| +add_cpp_remap_path (const char *arg)
 | |
| +{
 | |
| +  const char *arg_dst;
 | |
| +  size_t len;
 | |
| +
 | |
| +  arg_dst = strchr(arg, ':');
 | |
| +  if (arg_dst == NULL)
 | |
| +    {
 | |
| +      fprintf(stderr, "Invalid argument for -iremap\n");
 | |
| +      exit(1);
 | |
| +    }
 | |
| +
 | |
| +  len = arg_dst - arg;
 | |
| +  ++arg_dst;
 | |
| +
 | |
| +  remap_src = (char **) xrealloc(remap_src, sizeof(char *) * (remap_pairs + 1));
 | |
| +  remap_dst = (char **) xrealloc(remap_dst, sizeof(char *) * (remap_pairs + 1));
 | |
| +
 | |
| +  remap_src[remap_pairs] = (char *) xmalloc(len + 1);
 | |
| +  memcpy(remap_src[remap_pairs], arg, len);
 | |
| +  remap_src[remap_pairs][len] = '\0';
 | |
| +  remap_dst[remap_pairs] = xstrdup(arg_dst);
 | |
| +  ++remap_pairs;
 | |
| +}
 | |
| +
 | |
| +static const char *
 | |
| +cpp_remap_file (const char *arg, char **tmp_name)
 | |
| +{
 | |
| +  char *result;
 | |
| +  size_t i, len;
 | |
| +
 | |
| +  for (i = 0; i < remap_pairs; ++i)
 | |
| +    {
 | |
| +      len = strlen (remap_src[i]);
 | |
| +      if (strncmp (remap_src[i], arg, len))
 | |
| +	continue;
 | |
| +      if (arg[len] == '\0')
 | |
| +	return xstrdup (remap_dst[i]);
 | |
| +      if (arg[len] != '/')
 | |
| +	continue;
 | |
| +      arg += len;
 | |
| +      len = strlen (remap_dst[i]);
 | |
| +      result = (char *) xmalloc (len + strlen (arg) + 1);
 | |
| +      memcpy(result, remap_dst[i], len);
 | |
| +      strcpy(result + len, arg);
 | |
| +      *tmp_name = result;
 | |
| +
 | |
| +      return result;
 | |
| +    }
 | |
| +
 | |
| +   return arg;
 | |
| +}
 | |
| +
 | |
|  /* Helper function for builtin_macro.  Returns the text generated by
 | |
|     a builtin macro. */
 | |
|  const uchar *
 | |
| @@ -290,6 +348,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
 | |
|        {
 | |
|  	unsigned int len;
 | |
|  	const char *name;
 | |
| +	char *tmp_name = NULL;
 | |
|  	uchar *buf;
 | |
|  	
 | |
|  	if (node->value.builtin == BT_FILE)
 | |
| @@ -301,6 +360,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
 | |
|  	    if (!name)
 | |
|  	      abort ();
 | |
|  	  }
 | |
| +	name = cpp_remap_file (name, &tmp_name);
 | |
|  	len = strlen (name);
 | |
|  	buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
 | |
|  	result = buf;
 | |
| @@ -308,6 +368,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
 | |
|  	buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
 | |
|  	*buf++ = '"';
 | |
|  	*buf = '\0';
 | |
| +	free (tmp_name);
 | |
|        }
 | |
|        break;
 | |
|  
 |