msp430.c (msp430_attr): Produce an error if a static interrupt handler is detected.
authorNick Clifton <nickc@redhat.com>
Wed, 25 May 2016 14:31:46 +0000 (14:31 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 25 May 2016 14:31:46 +0000 (14:31 +0000)
* config/msp430/msp430.c (msp430_attr): Produce an error if a
static interrupt handler is detected.
* config/msp430/msp430.h (LIB_SPEC): Do not use msp430.ld as the
default linker script.
* config/msp430/msp430.md (movpsihi2_lo): New pattern for loading
the low part of a symbolic pointer.

From-SVN: r236704

gcc/ChangeLog
gcc/config/msp430/msp430.c
gcc/config/msp430/msp430.h
gcc/config/msp430/msp430.md

index aca886c90cb5ad60fa59f0526231cd108de39bc8..d7eb4333d1d9be007d0fc9ad4ec391e0a8ac1d37 100644 (file)
@@ -1,3 +1,12 @@
+2016-05-25  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.c (msp430_attr): Produce an error if a
+       static interrupt handler is detected.
+       * config/msp430/msp430.h (LIB_SPEC): Do not use msp430.ld as the
+       default linker script.
+       * config/msp430/msp430.md (movpsihi2_lo): New pattern for loading
+       the low part of a symbolic pointer.
+
 2016-05-25  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/71261
index 2e2a02c0d1a534e1447010e2db1aec40bc19c47a..65d5767d73d5c5d8b4d881ab22bc2d4f3e1aede7 100644 (file)
@@ -1832,6 +1832,7 @@ msp430_attr (tree * node,
 
   if (args != NULL)
     {
+      /* Only the interrupt attribute takes an argument.  */
       gcc_assert (TREE_NAME_EQ (name, ATTR_INTR));
 
       tree value = TREE_VALUE (args);
@@ -1878,6 +1879,9 @@ msp430_attr (tree * node,
       if (TREE_CODE (TREE_TYPE (* node)) == FUNCTION_TYPE
          && ! VOID_TYPE_P (TREE_TYPE (TREE_TYPE (* node))))
        message = "interrupt handlers must be void";
+
+      if (! TREE_PUBLIC (* node))
+       message = "interrupt handlers cannot be static";
     }
   else if (TREE_NAME_EQ (name, ATTR_REENT))
     {
index b2f0764565f18cee3ae49ff5f76cd71ceb2b68f5..41862bd7c762f32862c1a9a692fc093f4c6be374 100644 (file)
@@ -98,7 +98,6 @@ extern const char * msp430_select_hwmult_lib (int, const char **);
 %{!msim:-lnosys}                                       \
 --end-group                                            \
 %{!T*:%{!msim:%{mmcu=*:--script=%*.ld}}}               \
-%{!T*:%{!msim:%{!mmcu=*:%Tmsp430.ld}}}                 \
 %{!T*:%{msim:%{mlarge:%Tmsp430xl-sim.ld}%{!mlarge:%Tmsp430-sim.ld}}} \
 "
 \f
index abab672a9567050fb27d3ad4ead8925454564a8c..3a3fbf10ebea0308d4e2e5e2fb44475e52513c67 100644 (file)
   "PUSH.W\t%H1 { PUSH.W\t%L1 { POPM.A #1, %0 ; Move reg-pair %L1:%H1 into pointer %0"
 )
 
+;; Produced when converting a pointer to an integer via a union, eg gcc.dg/pr47201.c.
+(define_insn "*movpsihi2_lo"
+  [(set (match_operand:HI             0 "register_operand" "=r")
+       (subreg:HI (match_operand:PSI 1 "msp430_symbol_operand" "i") 0))]
+  "msp430x"
+  "MOVA\t%1, %0"
+)
+
 ;;------------------------------------------------------------
 ;; Math