When building small programs for MSP430, the impact of the unused
functions pulled in from the CRT libraries is quite noticeable. Most of these
relates to feature that will never be used for MSP430 (Transactional memory,
supporting shared objects and dynamic linking), or rarely used (exception
handling).

The following patches change the default configuration for msp430-elf with the
aim of reducing code size by removing these unsupported features.

Related generic changes to GCC have been submitted here:
https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00415.html
(But note that the first patch to disable eh frame registry has been retracted
as it's no longer necessary).

I picked random C and C++ programs from the testsuite to give an
indication of the size reduction:

$ msp430-elf-gcc testsuite/gcc.dg/20000108-1.c -Os -msim -ffunction-sections \
    -fdata-sections -Wl,-gc-sections
Before:
   text    data     bss     dec     hex filename
    708     242      28     978     3d2 20000108-1.exe
After:
   text    data     bss     dec     hex filename
    444     234       2     680     2a8 20000108-1.exe

$ msp430-elf-g++ -msim -Os testsuite/g++.dg/abi/covariant5.C \
    -ffunction-sections -fdata-sections -Wl,-gc-sections
Before:
   text    data     bss     dec     hex filename
   4090     396      18    4504    1198 covariant5.exe
Before (-fno-exceptions):
   text    data     bss     dec     hex filename
   3912     396      18    4326    10e6 a.out
After:
   text    data     bss     dec     hex filename
   3396     122       2    3520     dc0 covariant5.exe

The writeup for the -minrt patch has some more code size comparisons related to
that option.

Successfully regtested for msp430-elf.

Ok to apply?

Jozef Lawrynowicz (4):
  MSP430: Disable TM clone registry by default
  MSP430: Disable exception handling by default for C++
  MSP430: Disable __cxa_atexit
  MSP430: Remove -minrt option

 config-ml.in                                  | 13 +++++++++
 gcc/config.gcc                                |  7 +++++
 gcc/config/msp430/msp430.c                    |  9 +++++++
 gcc/config/msp430/msp430.h                    | 20 +++++++++++---
 gcc/config/msp430/msp430.opt                  |  4 +--
 gcc/config/msp430/t-msp430                    |  9 ++++---
 gcc/doc/install.texi                          |  3 +++
 gcc/doc/invoke.texi                           | 15 ++++-------
 gcc/testsuite/g++.dg/cpp1y/sized-dealloc2.C   |  2 +-
 gcc/testsuite/g++.dg/cpp2a/explicit1.C        |  2 +-
 gcc/testsuite/g++.dg/cpp2a/explicit2.C        |  2 +-
 gcc/testsuite/g++.dg/cpp2a/explicit5.C        |  2 +-
 gcc/testsuite/g++.dg/dg.exp                   |  9 ++++++-
 gcc/testsuite/g++.dg/eh/array1.C              |  2 +-
 gcc/testsuite/g++.dg/eh/spec11.C              |  2 +-
 gcc/testsuite/g++.dg/eh/spec6.C               |  2 +-
 gcc/testsuite/g++.dg/ext/vla4.C               |  2 +-
 gcc/testsuite/g++.dg/init/dso_handle1.C       |  1 +
 gcc/testsuite/g++.dg/init/dso_handle2.C       |  1 +
 gcc/testsuite/g++.dg/ipa/pr64612.C            |  2 +-
 gcc/testsuite/g++.dg/other/cxa-atexit1.C      |  1 +
 gcc/testsuite/g++.dg/other/error32.C          |  2 +-
 gcc/testsuite/g++.dg/torture/dg-torture.exp   |  9 ++++++-
 gcc/testsuite/g++.dg/torture/pr34850.C        |  2 +-
 gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C      |  2 +-
 gcc/testsuite/g++.dg/tree-ssa/pr33615.C       |  2 +-
 gcc/testsuite/g++.dg/warn/Wcatch-value-1.C    |  2 +-
 gcc/testsuite/g++.dg/warn/Wcatch-value-2.C    |  2 +-
 gcc/testsuite/g++.dg/warn/Wcatch-value-3.C    |  2 +-
 .../g++.dg/warn/Wstringop-truncation-2.C      |  2 +-
 gcc/testsuite/g++.dg/warn/Wterminate1.C       |  2 +-
 gcc/testsuite/g++.dg/warn/pr83054.C           |  2 +-
 gcc/testsuite/g++.old-deja/g++.other/cond5.C  |  2 +-
 gcc/testsuite/g++.old-deja/old-deja.exp       |  9 ++++++-
 gcc/testsuite/lib/gcc-dg.exp                  | 10 +++++++
 gcc/testsuite/lib/target-supports.exp         | 27 ++++++++++++++++---
 libgcc/config.host                            |  3 ++-
 libgcc/config/msp430/t-msp430                 |  6 +++++
 libgcc/configure                              |  9 +++++++
 libgcc/configure.ac                           |  8 ++++++
 40 files changed, 166 insertions(+), 47 deletions(-)

-- 
2.17.1

Reply via email to