Skip to content

Commit

Permalink
MSP430: Add -fno-exceptions multilib
Browse files Browse the repository at this point in the history
ChangeLog:

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

	* config-ml.in (msp430-*-*): Support --disable-no-exceptions configure
	flag.

gcc/ChangeLog:

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

	* config/msp430/msp430.h (STARTFILE_SPEC) [!fexceptions]: Use
	crtbegin_no_eh.o if building for the C language.
	[fno-exceptions]: Use crtbegin_no_eh.o if building for any language
	except C.
	(ENDFILE_SPEC) [!fexceptions]: Use crtend_no_eh.o if building for 
	the C language.
	[fno-exceptions]: Use crtend_no_eh.o if building for any language
	except C.
	* config/msp430/t-msp430: Add -fno-exceptions multilib.
	* doc/install.texi: Document --disable-no-exceptions multilib configure
	option.
	* doc/sourcebuild.texi: Document exceptions_enabled effective target.

gcc/testsuite/ChangeLog:

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

	* lib/gcc-dg.exp: Add dg-prune messages for when exception handling is
	disabled.
	* lib/target-supports.exp (check_effective_target_exceptions_enabled):
	New.

libgcc/ChangeLog:

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

	* config.host: Add crt{begin,end}_no_eh.o to "extra_parts".
	* config.host (msp430*-*-elf): Add crt{begin,end}_no_eh.o to
	"extra_parts".


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@279246 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
jozefl committed Dec 11, 2019
1 parent 81054ef commit 6c7499c
Show file tree
Hide file tree
Showing 13 changed files with 106 additions and 8 deletions.
7 changes: 6 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com>

* config-ml.in (msp430-*-*): Support --disable-no-exceptions configure
flag.

2019-12-10 Lewis Hyatt <lhyatt@gmail.com>

* MAINTAINERS (Write After Approval): Add myself.
* MAINTAINERS (Write After Approval): Add myself.

2019-11-27 Tobias Burnus <tobias@codesourcery.com>

Expand Down
13 changes: 13 additions & 0 deletions config-ml.in
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,19 @@ mips*-*-*)
done
fi
;;
msp430-*-*)
if [ x$enable_no_exceptions = xno ]
then
old_multidirs="${multidirs}"
multidirs=""
for x in ${old_multidirs}; do
case "$x" in
*no-exceptions* ) : ;;
*) multidirs="${multidirs} ${x}" ;;
esac
done
fi
;;
powerpc*-*-* | rs6000*-*-*)
if [ x$enable_aix64 = xno ]
then
Expand Down
15 changes: 15 additions & 0 deletions gcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com>

* config/msp430/msp430.h (STARTFILE_SPEC) [!fexceptions]: Use
crtbegin_no_eh.o if building for the C language.
[fno-exceptions]: Use crtbegin_no_eh.o if building for any language
except C.
(ENDFILE_SPEC) [!fexceptions]: Use crtend_no_eh.o if building for
the C language.
[fno-exceptions]: Use crtend_no_eh.o if building for any language
except C.
* config/msp430/t-msp430: Add -fno-exceptions multilib.
* doc/install.texi: Document --disable-no-exceptions multilib configure
option.
* doc/sourcebuild.texi: Document exceptions_enabled effective target.

2019-12-11 David Malcolm <dmalcolm@redhat.com>

* pretty-print.c (pretty_printer::pretty_printer): New copy-ctor.
Expand Down
11 changes: 9 additions & 2 deletions gcc/config/msp430/msp430.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,20 @@ extern bool msp430x;
} \
while (0)

/* For the "c" language where exceptions are implicitly disabled, use
crt*_no_eh.o unless -fexceptions is passed. For other languages, only use
crt*_no_eh.o if -fno-exceptions is explicitly passed. */
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{pg:gcrt0.o%s}" \
"%{!pg:%{minrt:crt0-minrt.o%s}%{!minrt:crt0.o%s}} %{!minrt:crtbegin.o%s}"
"%{!pg:%{minrt:crt0-minrt.o%s}%{!minrt:crt0.o%s}} " \
"%{!minrt:%{,c:%{!fexceptions:crtbegin_no_eh.o%s; :crtbegin.o%s}; " \
":%{fno-exceptions:crtbegin_no_eh.o%s; :crtbegin.o%s}}}"

/* -lgcc is included because crtend.o needs __mspabi_func_epilog_1. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "%{!minrt:crtend.o%s} " \
#define ENDFILE_SPEC \
"%{!minrt:%{,c:%{!fexceptions:crtend_no_eh.o%s; :crtend.o%s}; " \
":%{fno-exceptions:crtend_no_eh.o%s; :crtend.o%s}}} " \
"%{minrt:%:if-exists(crtn-minrt.o%s)}%{!minrt:%:if-exists(crtn.o%s)} -lgcc"

#define ASM_SPEC "-mP " /* Enable polymorphic instructions. */ \
Expand Down
9 changes: 5 additions & 4 deletions gcc/config/msp430/t-msp430
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ msp430-devices.o: $(srcdir)/config/msp430/msp430-devices.c \

# Enable multilibs:

MULTILIB_OPTIONS = mcpu=msp430 mlarge mdata-region=none
MULTILIB_DIRNAMES = 430 large full-memory-range
MULTILIB_OPTIONS = mcpu=msp430 mlarge mdata-region=none fno-exceptions
MULTILIB_DIRNAMES = 430 large full-memory-range no-exceptions

# Match -mcpu=430
MULTILIB_MATCHES = mcpu?msp430=mcpu?430
Expand All @@ -41,9 +41,10 @@ MULTILIB_MATCHES += mdata-region?none=mdata-region?either
# hard-coded data here, because DRIVER_SELF_SPECS will place the correct
# -mcpu option for a given mcu onto the command line.

MULTILIB_REQUIRED = mcpu=msp430
MULTILIB_REQUIRED += mlarge
MULTILIB_REQUIRED = mcpu=msp430 mlarge
MULTILIB_REQUIRED += fno-exceptions mcpu=msp430/fno-exceptions mlarge/fno-exceptions
MULTILIB_REQUIRED += mlarge/mdata-region=none
MULTILIB_REQUIRED += mlarge/mdata-region=none/fno-exceptions


MULTILIB_EXTRA_OPTS =
Expand Down
3 changes: 3 additions & 0 deletions gcc/doc/install.texi
Original file line number Diff line number Diff line change
Expand Up @@ -1086,6 +1086,9 @@ softfloat, m68881, m68000, m68020.
@item mips*-*-*
single-float, biendian, softfloat.

@item msp430-*-*
no-exceptions

@item powerpc*-*-*, rs6000*-*-*
aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian,
sysv, aix.
Expand Down
4 changes: 4 additions & 0 deletions gcc/doc/sourcebuild.texi
Original file line number Diff line number Diff line change
Expand Up @@ -2274,6 +2274,10 @@ Target has packed layout of structure members by default.
@item exceptions
Target supports exceptions.

@item exceptions_enabled
Target supports exceptions and they are enabled in the current
testing configuration.

@item fgraphite
Target supports Graphite optimizations.

Expand Down
7 changes: 7 additions & 0 deletions gcc/testsuite/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com>

* lib/gcc-dg.exp: Add dg-prune messages for when exception handling is
disabled.
* lib/target-supports.exp (check_effective_target_exceptions_enabled):
New.

2019-12-11 Jakub Jelinek <jakub@redhat.com>

PR c++/92869
Expand Down
12 changes: 12 additions & 0 deletions gcc/testsuite/lib/gcc-dg.exp
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,18 @@ proc gcc-dg-prune { system text } {
return "::unsupported::large return values"
}

# If exceptions are disabled, mark tests expecting exceptions to be enabled
# as unsupported.
if { ![check_effective_target_exceptions_enabled] } {
if [regexp "(^|\n)\[^\n\]*: error: exception handling disabled" $text] {
return "::unsupported::exception handling disabled"
}

if [regexp "(^|\n)\[^\n\]*: error: #error .__cpp_exceptions." $text] {
return "::unsupported::exception handling disabled"
}
}

return $text
}

Expand Down
18 changes: 18 additions & 0 deletions gcc/testsuite/lib/target-supports.exp
Original file line number Diff line number Diff line change
Expand Up @@ -8990,6 +8990,24 @@ proc check_effective_target_exceptions {} {
return 1
}

# Used to check if the testing configuration supports exceptions.
# Returns 0 if exceptions are unsupported or disabled (e.g. by passing
# -fno-exceptions). Returns 1 if exceptions are enabled.
proc check_effective_target_exceptions_enabled {} {
return [check_cached_effective_target exceptions_enabled {
if { [check_effective_target_exceptions] } {
return [check_no_compiler_messages exceptions_enabled assembly {
void foo (void)
{
throw 1;
}
}]
} else {
# If exceptions aren't supported, then they're not enabled.
return 0
}
}]
}

proc check_effective_target_tiny {} {
return [check_cached_effective_target tiny {
Expand Down
6 changes: 6 additions & 0 deletions libgcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com>

* config.host (msp430*-*-elf): Add crt{begin,end}_no_eh.o to
"extra_parts".
* config/msp430/t-msp430: Add rules to build crt{begin,end}_no_eh.o.

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

* crtstuff.c: Declare __dso_handle only if DEFAULT_USE_CXA_ATEXIT is
Expand Down
3 changes: 2 additions & 1 deletion libgcc/config.host
Original file line number Diff line number Diff line change
Expand Up @@ -1045,7 +1045,8 @@ moxie-*-elf | moxie-*-moxiebox* | moxie-*-uclinux* | moxie-*-rtems*)
;;
msp430*-*-elf)
tmake_file="$tm_file t-crtstuff t-fdpbit msp430/t-msp430"
extra_parts="$extra_parts libmul_none.a libmul_16.a libmul_32.a libmul_f5.a"
extra_parts="$extra_parts 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*)
# Basic makefile fragment and extra_parts for crt stuff.
Expand Down
6 changes: 6 additions & 0 deletions libgcc/config/msp430/t-msp430
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ LIB2ADD = \

HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections -mhwmult=none

crtbegin_no_eh.o: $(srcdir)/crtstuff.c
$(crt_compile) -U__LIBGCC_EH_FRAME_SECTION_NAME__ -c $< -DCRT_BEGIN

crtend_no_eh.o: $(srcdir)/crtstuff.c
$(crt_compile) -U__LIBGCC_EH_FRAME_SECTION_NAME__ -c $< -DCRT_END

mpy.o: $(srcdir)/config/msp430/mpy.c
$(gcc_compile) $< -c

Expand Down

0 comments on commit 6c7499c

Please sign in to comment.