diff options
author | DJ Delorie <dj@redhat.com> | 2014-01-30 23:17:38 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2014-01-30 23:17:38 -0500 |
commit | 4f50b9ff5690abc3508483ac1df2a6346fc10fe4 (patch) | |
tree | 1b34d89312b9772a7fe6aebe72dee13a81c256d9 /gcc | |
parent | f221dc810d12ca6005ecee515f786eef31f81960 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.c | 3 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.h | 1 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.md | 10 |
4 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8939e12..158f2d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-01-30 DJ Delorie <dj@redhat.com> + + * 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. + 2014-01-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * config/rs6000/rs6000.c (rs6000_expand_vector_init): Remove 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 |