[patch] ARM EABI support routine
Jeff Johnston
jjohnstn@redhat.com
Wed Aug 31 20:47:00 GMT 2005
Modified patch checked in.
-- Jeff J.
Jeff Johnston wrote:
> Paul Brook wrote:
>
>> 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
>>
>
> Yes, just what I was looking for. There are a couple settings of
> have_crt0 to yes when "may_supply_syscalls" is no (thumb,xscale). I
> assume these are just typos and I'll fix them up when I apply the patch.
>
> Thanks,
>
> -- Jeff J.
>
>> 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);
>> +}
>
>
More information about the Newlib
mailing list