Patchwork [M68K] Don't clobber PIC reference to constant pool

login
register
mail settings
Submitter Andreas Schwab
Date June 14, 2010, 8:02 p.m.
Message ID <m2ljah1ixj.fsf@igel.home>
Download mbox | patch
Permalink /patch/55578/
State New
Headers show

Comments

Andreas Schwab - June 14, 2010, 8:02 p.m.
m68k_delegitimize_address should not do anything if the argument isn't a
MEM, otherwise PIC references to the constant pool will be miscompiled.

Tested on m68k-linux, committed to trunk and 4.5 branch.

Andreas.

2010-06-14  Andreas Schwab  <schwab@linux-m68k.org>

	* config/m68k/m68k.c (m68k_delegitimize_address): Don't do
	anything if the argument is not a MEM.

Patch

Index: gcc/config/m68k/m68k.c
===================================================================
--- gcc/config/m68k/m68k.c	(revision 160760)
+++ gcc/config/m68k/m68k.c	(working copy)
@@ -4625,16 +4625,17 @@  m68k_output_dwarf_dtprel (FILE *file, in
    and turn them back into a direct symbol reference.  */
 
 static rtx
-m68k_delegitimize_address (rtx x)
+m68k_delegitimize_address (rtx orig_x)
 {
-  rtx orig_x = delegitimize_mem_from_attrs (x);
-  rtx y;
+  rtx x, y;
   rtx addend = NULL_RTX;
   rtx result;
 
-  x = orig_x;
-  if (MEM_P (x))
-    x = XEXP (x, 0);
+  orig_x = delegitimize_mem_from_attrs (orig_x);
+  if (! MEM_P (orig_x))
+    return orig_x;
+
+  x = XEXP (orig_x, 0);
 
   if (GET_CODE (x) == PLUS
       && GET_CODE (XEXP (x, 1)) == CONST