Module Name:    src
Committed By:   matt
Date:           Fri May 23 13:35:26 UTC 2014

Modified Files:
        src/external/gpl3/gcc/dist/gcc/config/vax: vax-protos.h vax.c vax.h

Log Message:
Add LEGITIMATE_PIC_OPERAND_P(X) to prevent global symbol + offset from
being a legitimate pic operand (because it's not).


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.2 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h
cvs rdiff -u -r1.5 -r1.6 src/external/gpl3/gcc/dist/gcc/config/vax/vax.c
cvs rdiff -u -r1.2 -r1.3 src/external/gpl3/gcc/dist/gcc/config/vax/vax.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h
diff -u src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h:1.1.1.2 src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h:1.2
--- src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h:1.1.1.2	Sat Mar  1 08:43:34 2014
+++ src/external/gpl3/gcc/dist/gcc/config/vax/vax-protos.h	Fri May 23 13:35:26 2014
@@ -18,6 +18,7 @@ along with GCC; see the file COPYING3.  
 <http://www.gnu.org/licenses/>.  */
 
 extern bool legitimate_constant_address_p (rtx);
+extern bool legitimate_pic_operand_p (rtx);
 extern void vax_expand_prologue (void);
 
 #ifdef RTX_CODE

Index: src/external/gpl3/gcc/dist/gcc/config/vax/vax.c
diff -u src/external/gpl3/gcc/dist/gcc/config/vax/vax.c:1.5 src/external/gpl3/gcc/dist/gcc/config/vax/vax.c:1.6
--- src/external/gpl3/gcc/dist/gcc/config/vax/vax.c:1.5	Thu Mar 20 16:53:55 2014
+++ src/external/gpl3/gcc/dist/gcc/config/vax/vax.c	Fri May 23 13:35:26 2014
@@ -572,6 +572,11 @@ print_operand (FILE *file, rtx x, int co
 		       sizeof (dstr), 0, 1);
       fprintf (file, "$0%c%s", ASM_DOUBLE_CHAR, dstr);
     }
+  else if (GET_CODE (x) == SUBREG)
+    {
+      debug_rtx (x);
+      output_operand_lossage ("SUBREG operand");
+    }
   else
     {
       if (flag_pic > 1 && symbolic_operand (x, SImode))
@@ -1777,6 +1782,19 @@ legitimate_constant_address_p (rtx x)
    return true;
 }
 
+bool
+legitimate_pic_operand_p (rtx x)
+{
+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
+  if (GET_CODE (x) != CONST)
+    return true;
+  if (GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
+      && !SYMBOL_REF_LOCAL_P (XEXP (XEXP (x, 0), 0)))
+    return false;
+#endif
+  return true;
+}
+
 /* The other macros defined here are used only in legitimate_address_p ().  */
 
 /* Nonzero if X is a hard reg that can be used as an index

Index: src/external/gpl3/gcc/dist/gcc/config/vax/vax.h
diff -u src/external/gpl3/gcc/dist/gcc/config/vax/vax.h:1.2 src/external/gpl3/gcc/dist/gcc/config/vax/vax.h:1.3
--- src/external/gpl3/gcc/dist/gcc/config/vax/vax.h:1.2	Thu Mar 20 16:53:55 2014
+++ src/external/gpl3/gcc/dist/gcc/config/vax/vax.h	Fri May 23 13:35:26 2014
@@ -373,6 +373,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_
 					RETURN_ADDRESS_OFFSET))		\
    : (rtx) 0)
 
+/* A C expression that is nonzero if X is a legitimate immediate operand
+   on the target machine when generating position independent code.  */
+
+#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
 
 /* Addressing modes, and classification of registers for them.  */
 

Reply via email to