MSP430: Add new msp430-elfbare target

contrib/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config-list.mk: Add msp430-elfbare.

gcc/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config.gcc: s/msp430*-*-*/msp430-*-*.
	Handle msp430-*-elfbare.
	* config/msp430/msp430-devices.c (TARGET_SUBDIR): Define.
	(_MSPMKSTR): Define.
	(__MSPMKSTR): Define.
	(rest_of_devices_path): Use TARGET_SUBDIR value in string.
	* config/msp430/msp430.c (msp430_option_override): Error if
	-fuse-cxa-atexit is used when it has been disabled at configure time.
	* config/msp430/t-msp430: Define TARGET_SUBDIR when building
	msp430-devices.o.
	* doc/install.texi: Document msp430-*-elf and msp430-*-elfbare.
	* doc/invoke.texi: Update documentation about which path devices.csv is
	searched for.

gcc/testsuite/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* g++.dg/init/dso_handle1.C: Require cxa_atexit support.
	* g++.dg/init/dso_handle2.C: Likewise.
	* g++.dg/other/cxa-atexit1.C: Likewise.
	* gcc.target/msp430/msp430.exp: Update csv-using-installed.c test to
	handle msp430-elfbare configuration.

libgcc/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config.host: s/msp430*-*-elf/msp430-*-elf*.
	Override default "extra_parts" variable.
	* configure: Regenerate.
	* configure.ac: Disable TM clone registry by default for
	msp430-elfbare.

From-SVN: r279442
This commit is contained in:
Jozef Lawrynowicz 2019-12-16 11:02:10 +00:00 committed by Jozef Lawrynowicz
parent 1edfb10a5a
commit e8aa9f55f6
18 changed files with 121 additions and 12 deletions

View File

@ -1,3 +1,7 @@
2019-12-16 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config-list.mk: Add msp430-elfbare.
2019-12-09 Lewis Hyatt <lhyatt@gmail.com>
PR preprocessor/49973

View File

@ -68,7 +68,7 @@ LIST = aarch64-elf aarch64-linux-gnu aarch64-rtems \
mipsel-elf mips64-elf mips64vr-elf mips64orion-elf mips-rtems \
mips-wrs-vxworks mipstx39-elf mmix-knuth-mmixware mn10300-elf moxie-elf \
moxie-uclinux moxie-rtems \
msp430-elf \
msp430-elf msp430-elfbare \
nds32le-elf nds32be-elf \
nios2-elf nios2-linux-gnu nios2-rtems \
nvptx-none \

View File

@ -1,3 +1,19 @@
2019-12-16 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config.gcc: s/msp430*-*-*/msp430-*-*.
Handle msp430-*-elfbare.
* config/msp430/msp430-devices.c (TARGET_SUBDIR): Define.
(_MSPMKSTR): Define.
(__MSPMKSTR): Define.
(rest_of_devices_path): Use TARGET_SUBDIR value in string.
* config/msp430/msp430.c (msp430_option_override): Error if
-fuse-cxa-atexit is used when it has been disabled at configure time.
* config/msp430/t-msp430: Define TARGET_SUBDIR when building
msp430-devices.o.
* doc/install.texi: Document msp430-*-elf and msp430-*-elfbare.
* doc/invoke.texi: Update documentation about which path devices.csv is
searched for.
2019-12-16 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/92950

View File

@ -2624,7 +2624,7 @@ mn10300-*-*)
use_collect2=no
use_gcc_stdint=wrap
;;
msp430*-*-*)
msp430-*-*)
tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
c_target_objs="msp430-c.o"
cxx_target_objs="msp430-c.o"
@ -2637,6 +2637,18 @@ msp430*-*-*)
if test x${disable_initfini_array} != xyes; then
gcc_cv_initfini_array=yes
fi
case ${target} in
msp430-*-elfbare)
# __cxa_atexit increases code size, and we don't need to support
# dynamic shared objects on MSP430, so regular Newlib atexit is a
# fine replacement as it also supports registration of more than 32
# functions.
default_use_cxa_atexit=no
# This target does not match the generic *-*-elf case above which
# sets use_gcc_stdint=wrap, so explicitly set it here.
use_gcc_stdint=wrap
;;
esac
;;
nds32*-*-*)
target_cpu_default="0"

View File

@ -71,8 +71,23 @@ msp430_dirname (char *path)
return path;
}
/* We need to support both the msp430-elf and msp430-elfbare target aliases.
gcc/config/msp430/t-msp430 will define TARGET_SUBDIR to the target_subdir
Makefile variable, which will evaluate to the correct subdirectory that
needs to be searched for devices.csv. */
#ifndef TARGET_SUBDIR
#define TARGET_SUBDIR msp430-elf
#endif
#define _MSPMKSTR(x) __MSPMKSTR(x)
#define __MSPMKSTR(x) #x
/* devices.csv path from the toolchain root. */
static const char rest_of_devices_path[] = "/msp430-elf/include/devices/";
static const char rest_of_devices_path[] =
"/" _MSPMKSTR (TARGET_SUBDIR) "/include/devices/";
#undef _MSPMKSTR
#undef __MSPMKSTR
/* "The default value of GCC_EXEC_PREFIX is prefix/lib/gcc". Strip lib/gcc
from GCC_EXEC_PREFIX to get the path to the installed toolchain. */

View File

@ -288,6 +288,16 @@ msp430_option_override (void)
if (TARGET_OPT_SPACE && optimize < 3)
optimize_size = 1;
#if !DEFAULT_USE_CXA_ATEXIT
/* For some configurations, we use atexit () instead of __cxa_atexit () by
default to save on code size and remove the declaration of __dso_handle
from the CRT library.
Configuring GCC with --enable-__cxa-atexit re-enables it by defining
DEFAULT_USE_CXA_ATEXIT to 1. */
if (flag_use_cxa_atexit)
error ("%<-fuse-cxa-atexit%> is not supported for msp430-elf");
#endif
#ifndef HAVE_NEWLIB_NANO_FORMATTED_IO
if (TARGET_TINY_PRINTF)
error ("GCC must be configured with %<--enable-newlib-nano-formatted-io%> "

View File

@ -24,7 +24,7 @@ driver-msp430.o: $(srcdir)/config/msp430/driver-msp430.c \
msp430-devices.o: $(srcdir)/config/msp430/msp430-devices.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) -DTARGET_SUBDIR=$(target_subdir) $(INCLUDES) $<
# Enable multilibs:

View File

@ -4330,10 +4330,24 @@ The moxie processor.
<hr />
@end html
@anchor{msp430-x-elf}
@heading msp430-*-elf
@heading msp430-*-elf*
TI MSP430 processor.
This configuration is intended for embedded systems.
@samp{msp430-*-elf} is the standard configuration with most GCC
features enabled by default.
@samp{msp430-*-elfbare} is tuned for a bare-metal environment, and disables
features related to shared libraries and other functionality not used for
this device. This reduces code and data usage of the GCC libraries, resulting
in a minimal run-time environment by default.
Features disabled by default include:
@itemize
@item transactional memory
@item __cxa_atexit
@end itemize
@html
<hr />
@end html

View File

@ -23311,8 +23311,8 @@ this directory for devices.csv. If devices.csv is found, this directory will
also be registered as an include path, and linker library path. Header files
and linker scripts in this directory can therefore be used without manually
specifying @code{-I} and @code{-L} on the command line.
@item The @samp{msp430-elf/include/devices} directory
Finally, GCC will examine @samp{msp430-elf/include/devices} from the
@item The @samp{msp430-elf@{,bare@}/include/devices} directory
Finally, GCC will examine @samp{msp430-elf@{,bare@}/include/devices} from the
toolchain root directory. This directory does not exist in a default
installation, but if the user has created it and copied @samp{devices.csv}
there, then the MCU data will be read. As above, this directory will

View File

@ -1,3 +1,11 @@
2019-12-16 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* g++.dg/init/dso_handle1.C: Require cxa_atexit support.
* g++.dg/init/dso_handle2.C: Likewise.
* g++.dg/other/cxa-atexit1.C: Likewise.
* gcc.target/msp430/msp430.exp: Update csv-using-installed.c test to
handle msp430-elfbare configuration.
2019-12-16 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/clause_on_volatile.ads,

View File

@ -1,6 +1,7 @@
// PR c++/17042
// { dg-do assemble }
/* { dg-require-weak "" } */
// { dg-require-effective-target cxa_atexit }
// { dg-options "-fuse-cxa-atexit" }
struct A

View File

@ -1,4 +1,5 @@
// PR c++/58846
// { dg-require-effective-target cxa_atexit }
// { dg-options "-fuse-cxa-atexit" }
extern "C" { char* __dso_handle; }

View File

@ -1,4 +1,5 @@
// { dg-do compile }
// { dg-require-effective-target cxa_atexit }
// { dg-options "-O2 -fuse-cxa-atexit" }
# 1 "cxa-atexit1.C"

View File

@ -141,18 +141,20 @@ proc msp430_device_permutations_runtest { tests } {
}
# Return $TOOLCHAIN_ROOT/msp430-elf/include/devices/
# Return $TOOLCHAIN_ROOT/$target_alias/include/devices/
# target_alias is expected to be either msp430-elf or msp430-elfbare.
proc get_installed_device_data_path { } {
global target_alias
set compiler [lindex [regexp -all -inline {\S+} \
[board_info [target_info name] compiler]] 0]
# $compiler is actually a file, but normalize will still get us the desired
# result.
return [file normalize \
"$compiler/../../msp430-elf/include/devices/devices.csv"]
"$compiler/../../$target_alias/include/devices/devices.csv"]
}
# If the devices.csv is installed in
# $TOOLCHAIN_ROOT/msp430-elf/include/devices/, rename it so it doesn't
# $TOOLCHAIN_ROOT/$target_alias/include/devices/, rename it so it doesn't
# interfere with the hard-coded device data tests.
proc msp430_hide_installed_devices_data { } {
set devices_path [get_installed_device_data_path]

View File

@ -1,3 +1,11 @@
2019-12-16 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config.host: s/msp430*-*-elf/msp430-*-elf*.
Override default "extra_parts" variable.
* configure: Regenerate.
* configure.ac: Disable TM clone registry by default for
msp430-elfbare.
2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config.host (msp430*-*-elf): Add crt{begin,end}_no_eh.o to

View File

@ -1043,9 +1043,9 @@ moxie-*-elf | moxie-*-moxiebox* | moxie-*-uclinux* | moxie-*-rtems*)
tmake_file="$tmake_file moxie/t-moxie t-softfp-sfdf t-softfp-excl t-softfp"
extra_parts="$extra_parts crti.o crtn.o crtbegin.o crtend.o"
;;
msp430*-*-elf)
msp430-*-elf*)
tmake_file="$tm_file t-crtstuff t-fdpbit msp430/t-msp430"
extra_parts="$extra_parts crtbegin_no_eh.o crtend_no_eh.o"
extra_parts="crtbegin.o crtend.o crtbegin_no_eh.o crtend_no_eh.o"
extra_parts="$extra_parts libmul_none.a libmul_16.a libmul_32.a libmul_f5.a"
;;
nds32*-linux*)

9
libgcc/configure vendored
View File

@ -4964,6 +4964,15 @@ if test "$enable_tm_clone_registry" = no; then
use_tm_clone_registry=-DUSE_TM_CLONE_REGISTRY=0
fi
else
use_tm_clone_registry=
case $target in
msp430*elfbare)
use_tm_clone_registry=-DUSE_TM_CLONE_REGISTRY=0
;;
esac
fi

View File

@ -268,6 +268,14 @@ use_tm_clone_registry=
if test "$enable_tm_clone_registry" = no; then
use_tm_clone_registry=-DUSE_TM_CLONE_REGISTRY=0
fi
],
[
use_tm_clone_registry=
case $target in
msp430*elfbare)
use_tm_clone_registry=-DUSE_TM_CLONE_REGISTRY=0
;;
esac
])
AC_SUBST([use_tm_clone_registry])