Patchwork ARM EABI support for RTEMS

login
register
mail settings
Submitter Sebastian Huber
Date Nov. 4, 2011, 12:57 p.m.
Message ID <4EB3E13F.9000903@embedded-brains.de>
Download mbox | patch
Permalink /patch/123629/
State New
Headers show

Comments

Sebastian Huber - Nov. 4, 2011, 12:57 p.m.
Hello Ramana,

thanks for the quick review.

On 11/04/2011 12:43 PM, Ramana Radhakrishnan wrote:
>> /home/sh/archive/gcc-4.7-20111029/libgcc/unwind-dw2.c: In function
>> 'init_dwarf_reg_size_table':
>> /home/sh/archive/gcc-4.7-20111029/libgcc/unwind-dw2.c:1482:39: internal
>> compiler error: in arm_dbx_register_number, at config/arm/arm.c:23536
>
> Your original post in this thread suggested that you wanted to switch
> the rtems port to use the AAPCS
> http://gcc.gnu.org/ml/gcc/2011-04/msg00100.html .
>
> If the above is what was intended this is not the right way of
> achieving it because you are missing an include of bpabi.h which sets
> ARM_DEFAULT_ABI to ARM_ABI_AAPCS and a raft of other pre-processor
> defines that you need to get the backend in the right form for using
> the AAPCS implementation.

Yes, the above is what was intended.  The bpabi.h is provided by the common 
EABI part in the gcc/config.gcc section.

> The other problem is that you aren't using
> the right unwind info which is why you are hitting this issue because
> it just uses the standard eh_frame implementation .Look at how this is
> done in libgcc/config.host.

Thanks for the hint.  This libgcc/config.host part seems to be new in GCC 4.7.

Attached is a new patch.  It builds well and the test suite runs currently.

Kind regards,
	Sebastian
Sebastian Huber - Nov. 4, 2011, 2:30 p.m.
On 11/04/2011 01:57 PM, Sebastian Huber wrote:
> It builds well and the test suite runs currently.

http://gcc.gnu.org/ml/gcc-testresults/2011-11/msg00407.html
Ralf Corsepius - Nov. 7, 2011, 3:29 a.m.
On 11/04/2011 03:30 PM, Sebastian Huber wrote:
> On 11/04/2011 01:57 PM, Sebastian Huber wrote:
>> It builds well and the test suite runs currently.
>
> http://gcc.gnu.org/ml/gcc-testresults/2011-11/msg00407.html
>

The second version of your patch is OK with me and seems to work fine.

Patch commited to svn-trunk.

Ralf

Patch

2011-11-04	Sebastian Huber <sebastian.huber@embedded-brains.de>

	* gcc/config.gcc (arm*-*-rtemseabi*): New target.
	* gcc/config/arm/rtems-eabi.h: New.
	* gcc/config/arm/t-rtems-eabi: New.
	* libgcc/config.host (arm*-*-rtemseabi*): New target.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 2c18655..a1e7a6d 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -904,7 +904,7 @@  arm*-*-ecos-elf)
 	tm_file="dbxelf.h elfos.h newlib-stdint.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/ecos-elf.h"
 	tmake_file="arm/t-arm arm/t-arm-elf"
 	;;
-arm*-*-eabi* | arm*-*-symbianelf* )
+arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtemseabi*)
 	# The BPABI long long divmod functions return a 128-bit value in
 	# registers r0-r3.  Correctly modeling that requires the use of
 	# TImode.
@@ -919,6 +919,10 @@  arm*-*-eabi* | arm*-*-symbianelf* )
 	  tmake_file="${tmake_file} arm/t-bpabi"
 	  use_gcc_stdint=wrap
 	  ;;
+	arm*-*-rtemseabi*)
+	  tm_file="${tm_file} rtems.h arm/rtems-eabi.h newlib-stdint.h"
+	  tmake_file="${tmake_file} arm/t-bpabi t-rtems arm/t-rtems-eabi"
+	  ;;
 	arm*-*-symbianelf*)
 	  tm_file="${tm_file} arm/symbian.h"
 	  libgcc_tm_file="$libgcc_tm_file arm/symbian-lib.h"
diff --git a/gcc/config/arm/rtems-eabi.h b/gcc/config/arm/rtems-eabi.h
new file mode 100644
index 0000000..ced98a9
--- /dev/null
+++ b/gcc/config/arm/rtems-eabi.h
@@ -0,0 +1,29 @@ 
+/* Definitions for RTEMS based ARM systems using EABI.
+   Copyright (C) 2011 Free Software Foundation, Inc.
+ 
+   This file is part of GCC.
+ 
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+ 
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+ 
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#define HAS_INIT_SECTION
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS()		\
+    do {					\
+	builtin_define ("__rtems__");		\
+	builtin_define ("__USE_INIT_FINI__");	\
+	builtin_assert ("system=rtems");	\
+	TARGET_BPABI_CPP_BUILTINS();    	\
+    } while (0)
diff --git a/gcc/config/arm/t-rtems-eabi b/gcc/config/arm/t-rtems-eabi
new file mode 100644
index 0000000..f0e714a
--- /dev/null
+++ b/gcc/config/arm/t-rtems-eabi
@@ -0,0 +1,8 @@ 
+# Custom RTEMS EABI multilibs
+
+MULTILIB_OPTIONS    = mthumb march=armv6-m/march=armv7/march=armv7-m
+MULTILIB_DIRNAMES   = thumb armv6-m armv7 armv7-m
+MULTILIB_EXCEPTIONS = march=armv6-m march=armv7 march=armv7-m
+MULTILIB_MATCHES    =
+MULTILIB_EXCLUSIONS =
+MULTILIB_OSDIRNAMES =
diff --git a/libgcc/config.host b/libgcc/config.host
index 08c00a3..57b044a 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -300,10 +300,10 @@  arm*-*-uclinux*)		# ARM ucLinux
 arm*-*-ecos-elf)
 	tmake_file="$tmake_file t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 	;;
-arm*-*-eabi* | arm*-*-symbianelf* )
+arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtemseabi*)
 	tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
 	case ${host} in
-	arm*-*-eabi*)
+	arm*-*-eabi* | arm*-*-rtemseabi*)
 	  tmake_file="${tmake_file} arm/t-bpabi"
 	  ;;
 	arm*-*-symbianelf*)