[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