This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] ARM EABI support routine


On Wednesday 24 August 2005 18:27, Jeff Johnston wrote:
> This actually opens a small can of worms due to the fact that
> libc/sys/arm should not exist as it does today.  To solve the problem
> with board packages, newlib added the configuration setting:
> --disable-newlib-supplied-syscalls.  At the moment, this removes the
> entire sys/arm directory from building so your file won't get built.
> The irony is that the file you are adding is actually what belongs in
> libc/sys/arm.
>
> So, a change is needed in the configuration files in libc/sys/arm to
> allow only this one file to build in the case of
> --disable-newlib-supplied-syscalls.
>
> There is also the problem with crt0.o.  Currently, the configuration
> checks to see if sys_dir is defined and if yes, expects crt0.o.  This
> could easily be changed by adding a new variable to configure.host which
> specifies no crt0.o regardless.

Something like this?

Paul

2005-08-24  Paul Brook  <paul@codesourcery.com>

	* configure.host: Set have_crt0 to no for Arm targts when not
	providing syscalls.  Set sys_dir=arm unconditionally.
	Default have_crt0 based on sys_dir.
	* configure.in: Use have_crt0.
	* libc/configure.in: Ditto.
	* libc/sys/configure.in: Ditto.
	* configure: Regenerate.
	* libc/configure: Regenerate.
	* libc/sys/configure: Regenerate.
	* libc/sys/arm/Makefile.am (lib_a_SOURCES): Add aeabi_atexit.c.
	Only build other files when providing syscalls.
	* libc/sys/arm/Makefile.in: Regenerate.
	* libc/sys/arm/aeabi_atexit.c: New file.

Index: newlib/configure.host
===================================================================
RCS file: /var/cvsroot/src-cvs/src/newlib/configure.host,v
retrieving revision 1.75
diff -u -p -r1.75 configure.host
--- newlib/configure.host	10 Aug 2005 20:35:13 -0000	1.75
+++ newlib/configure.host	31 Aug 2005 19:33:37 -0000
@@ -42,6 +42,8 @@
 #   oext                object file extension - needed for libtool support
 #   crt1                name of crt1 object if one is provided
 #   crt1_dir            directory where crt1 object is found
+#   have_crt0		"yes"/"no" if crt0 is/isn't provided.
+#			"" if crt0 is provided when sys_dir is set
 
 newlib_cflags=
 libm_machine_dir=
@@ -55,6 +57,7 @@ unix_dir=
 mach_add_setjmp=
 crt1=
 crt1_dir=
+have_crt0=
 use_libtool=no
 have_sys_mach_dir=no
 default_newlib_io_long_long=no
@@ -318,8 +321,9 @@ case "${host}" in
 	sys_dir=arc
 	;;
   arm-*-*)
-	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
-	  sys_dir=arm
+	sys_dir=arm
+	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+	  have_crt0="no"
 	fi
 	;;
   crx*)
@@ -332,8 +336,9 @@ case "${host}" in
 	sys_dir=
 	;;
   ep9312-*-*)
-	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
-	  sys_dir=arm
+	sys_dir=arm
+	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+	  have_crt0="no"
 	fi
 	;;
   frv*)
@@ -413,13 +418,15 @@ case "${host}" in
 	unix_dir=unix
 	;;
   strongarm-*-*)
-	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
-	  sys_dir=arm
+	sys_dir=arm
+	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+	  have_crt0="no"
 	fi
 	;;
   thumb-*-*)
-	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
-	  sys_dir=arm
+	sys_dir=arm
+	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+	  have_crt0="yes"
 	fi
 	;;
   tic80*)
@@ -444,8 +451,9 @@ case "${host}" in
 	sys_dir=w65
 	;;
   xscale-*-*)
-	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
-	  sys_dir=arm
+	sys_dir=arm
+	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+	  have_crt0="yes"
 	fi
 	;;
   z8k-*-coff)
@@ -725,3 +733,7 @@ if [ "x${newlib_io_pos_args}" = "x" ]; t
 		newlib_io_pos_args="yes";
 	fi
 fi
+
+if test -z "${have_crt0}" && test -n "${sys_dir}"; then
+  have_crt0="yes"
+fi
Index: newlib/configure.in
===================================================================
RCS file: /var/cvsroot/src-cvs/src/newlib/configure.in,v
retrieving revision 1.27
diff -u -p -r1.27 configure.in
--- newlib/configure.in	17 Mar 2005 20:11:17 -0000	1.27
+++ newlib/configure.in	31 Aug 2005 18:48:14 -0000
@@ -139,7 +139,7 @@ AC_CONFIG_SUBDIRS(${configdirs})
 
 CRT0=
 CRT0_DIR=
-if test -n "${sys_dir}"; then
+if test "x${have_crt0}" = "xyes"; then
   CRT0=crt0.o
   CRT0_DIR=libc/
 fi
Index: newlib/libc/configure.in
===================================================================
RCS file: /var/cvsroot/src-cvs/src/newlib/libc/configure.in,v
retrieving revision 1.11
diff -u -p -r1.11 configure.in
--- newlib/libc/configure.in	15 Sep 2004 20:50:07 -0000	1.11
+++ newlib/libc/configure.in	31 Aug 2005 18:50:08 -0000
@@ -30,7 +30,7 @@ fi
 AC_CONFIG_SUBDIRS(machine sys)
 
 CRT0=
-if test -n "${sys_dir}"; then
+if test "x${have_crt0}" = "xyes"; then
   CRT0=crt0.o
 fi
 AC_SUBST(CRT0)
Index: newlib/libc/sys/configure.in
===================================================================
RCS file: /var/cvsroot/src-cvs/src/newlib/libc/sys/configure.in,v
retrieving revision 1.4
diff -u -p -r1.4 configure.in
--- newlib/libc/sys/configure.in	15 Sep 2004 20:50:07 -0000	1.4
+++ newlib/libc/sys/configure.in	31 Aug 2005 18:50:22 -0000
@@ -22,7 +22,7 @@ if test -n "${sys_dir}"; then
 fi
 
 CRT0=
-if test -n "${sys_dir}"; then
+if test "x${have_crt0}" = "xyes"; then
   CRT0=crt0.o
 fi
 AC_SUBST(CRT0)
Index: newlib/libc/sys/arm/Makefile.am
===================================================================
RCS file: /var/cvsroot/src-cvs/src/newlib/libc/sys/arm/Makefile.am,v
retrieving revision 1.4
diff -u -p -r1.4 Makefile.am
--- newlib/libc/sys/arm/Makefile.am	9 Jun 2004 19:05:09 -0000	1.4
+++ newlib/libc/sys/arm/Makefile.am	31 Aug 2005 18:44:14 -0000
@@ -7,16 +7,18 @@ INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLA
 noinst_LIBRARIES = lib.a
 
 if MAY_SUPPLY_SYSCALLS
-extra_objs = syscalls.o
+extra_objs = libcfunc.o trap.o syscalls.o
 else
 extra_objs =
 endif
 
-lib_a_SOURCES = libcfunc.c trap.S
+lib_a_SOURCES = aeabi_atexit.c
 lib_a_LIBADD = $(extra_objs)
 lib_a_DEPENDENCIES = $(extra_objs)
 
+if MAY_SUPPLY_SYSCALLS
 all: crt0.o
+endif
 
 ACLOCAL_AMFLAGS = -I ../../..
 CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
Index: newlib/libc/sys/arm/aeabi_atexit.c
===================================================================
RCS file: newlib/libc/sys/arm/aeabi_atexit.c
diff -N newlib/libc/sys/arm/aeabi_atexit.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ newlib/libc/sys/arm/aeabi_atexit.c	24 Aug 2005 14:21:57 -0000
@@ -0,0 +1,10 @@
+#include <stdlib.h>
+
+/* Register a function to be called by exit or when a shared library
+   is unloaded.  This routine is like __cxa_atexit, but uses the
+   calling sequence required by the ARM EABI.  */
+int
+__aeabi_atexit (void *arg, void (*func) (void *), void *d)
+{
+  return __cxa_atexit (func, arg, d);
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]