aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/msp430
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2014-01-30 23:17:38 -0500
committerDJ Delorie <dj@gcc.gnu.org>2014-01-30 23:17:38 -0500
commit4f50b9ff5690abc3508483ac1df2a6346fc10fe4 (patch)
tree1b34d89312b9772a7fe6aebe72dee13a81c256d9 /gcc/config/msp430
parentf221dc810d12ca6005ecee515f786eef31f81960 (diff)
downloadgcc-4f50b9ff5690abc3508483ac1df2a6346fc10fe4.zip
gcc-4f50b9ff5690abc3508483ac1df2a6346fc10fe4.tar.gz
gcc-4f50b9ff5690abc3508483ac1df2a6346fc10fe4.tar.bz2
msp430.h (LIB_SPEC): Add -lcrt
* config/msp430/msp430.h (LIB_SPEC): Add -lcrt * config/msp430/msp430.md (msp430_refsym_need_exit): New. * config/msp430/msp430.c (msp430_expand_epilogue): Call it whenever main() has an epilogue. From-SVN: r207334
Diffstat (limited to 'gcc/config/msp430')
-rw-r--r--gcc/config/msp430/msp430.c3
-rw-r--r--gcc/config/msp430/msp430.h1
-rw-r--r--gcc/config/msp430/msp430.md10
3 files changed, 14 insertions, 0 deletions
diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c
index 8b0af1a..97fa3f5 100644
--- a/gcc/config/msp430/msp430.c
+++ b/gcc/config/msp430/msp430.c
@@ -1429,6 +1429,9 @@ msp430_expand_epilogue (int is_eh)
emit_insn (gen_epilogue_start_marker ());
+ if (cfun->decl && strcmp (IDENTIFIER_POINTER (DECL_NAME (cfun->decl)), "main") == 0)
+ emit_insn (gen_msp430_refsym_need_exit ());
+
if (is_wakeup_func ())
/* Clear the SCG1, SCG0, OSCOFF and CPUOFF bits in the saved copy of the
status register current residing on the stack. When this function
diff --git a/gcc/config/msp430/msp430.h b/gcc/config/msp430/msp430.h
index 1afbfd4..f312474 100644
--- a/gcc/config/msp430/msp430.h
+++ b/gcc/config/msp430/msp430.h
@@ -68,6 +68,7 @@ extern bool msp430x;
--start-group \
-lc \
-lgcc \
+-lcrt \
%{msim:-lsim} \
%{!msim:-lnosys} \
--end-group \
diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md
index ee01cd1..0037d8b 100644
--- a/gcc/config/msp430/msp430.md
+++ b/gcc/config/msp430/msp430.md
@@ -45,6 +45,8 @@
UNS_POP_INTR
UNS_BIC_SR
UNS_BIS_SR
+
+ UNS_REFSYM_NEED_EXIT
])
(include "predicates.md")
@@ -938,6 +940,14 @@
"; start of epilogue"
)
+;; This makes the linker add a call to exit() after the call to main()
+;; in crt0
+(define_insn "msp430_refsym_need_exit"
+ [(unspec_volatile [(const_int 0)] UNS_REFSYM_NEED_EXIT)]
+ ""
+ ".refsym\t__crt0_call_exit"
+ )
+
;;------------------------------------------------------------
;; Jumps