 -
 diff -uNr gcc-4.4.2.orig/gcc/recog.c gcc-4.4.2/gcc/recog.c
 --- gcc-4.4.2.orig/gcc/recog.c	2009-03-09 14:30:19.000000000 +0100
-+++ gcc-4.4.2/gcc/recog.c	2009-11-26 18:14:17.000000000 +0100
-@@ -1961,10 +1961,25 @@
++++ gcc-4.4.2/gcc/recog.c	2009-12-25 16:49:42.000000000 +0100
+@@ -332,8 +332,17 @@
+     {
+       extract_insn (insn);
+ 
++      /* Make sure we allow as much as possble here.  We don't need to check
++         the sandboxing here, only validity of the instruction.  */
++      NACL_LEA_MATCH_ADDRESS_OPERAND++;
++
+       if (! constrain_operands (1))
+-	return 1;
++	{
++	  NACL_LEA_MATCH_ADDRESS_OPERAND--;
++	  return 1;
++	}
++
++      NACL_LEA_MATCH_ADDRESS_OPERAND--;
+     }
+ 
+   INSN_CODE (insn) = icode;
+@@ -1961,10 +1970,25 @@
  void
  extract_constrain_insn_cached (rtx insn)
  {

   extract_insn_cached (insn);
diff -uNr gcc-4.4.2.orig/gcc/config/i386/i386.md gcc-4.4.2/gcc/config/i386/i386.md
--- gcc-4.4.2.orig/gcc/config/i386/i386.md	2009-10-12 15:40:17.000000000 +0200
+++ gcc-4.4.2/gcc/config/i386/i386.md	2009-11-26 18:14:17.000000000 +0100
@@ -154,6 +154,11 @@
    (UNSPEC_SP_TLS_SET		102)
    (UNSPEC_SP_TLS_TEST		103)

 /* After calling extract_insn, you can use this function to extract some
    information from the constraint strings into a more usable form.
    The collected data is stored in recog_op_alt.  */
@@ -3626,5 +3661,3 @@
   TODO_dump_func | TODO_verify_rtl_sharing /* todo_flags_finish */
  }
 };
