+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
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 \
+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
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"
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"
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. */
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%> "
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:
<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
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
+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,
// PR c++/17042
// { dg-do assemble }
/* { dg-require-weak "" } */
+// { dg-require-effective-target cxa_atexit }
// { dg-options "-fuse-cxa-atexit" }
struct A
// PR c++/58846
+// { dg-require-effective-target cxa_atexit }
// { dg-options "-fuse-cxa-atexit" }
extern "C" { char* __dso_handle; }
// { dg-do compile }
+// { dg-require-effective-target cxa_atexit }
// { dg-options "-O2 -fuse-cxa-atexit" }
# 1 "cxa-atexit1.C"
}
-# 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]
+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
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*)
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
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])