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] |
Won't this require all users to now use a link script in order to build their binaries. If so, then I think this will break testing of GCC.
1. Remove the ARM syscall and crt0.o from newlib and update gcc and dejagnu to cope with this.
Undoubtedly lots of people will complain when they run into this.
2. Keep things the way that they. Try to keep the libgloss and newlib versions of crt0.o and the syscall functions synchronized.
Now before anyone complains, I will admit that this is a horrible hack, but it does work, and it does mean that there would only be one copy of crt0.o and the syscall functions.
1. The syscall functions are loaded *before* the rest of the objects on the linker command line, so they cannot be in a library.
I solved this problem by compiling the syscall functions with -ffunction-sections specified. So that if the final executable is linked with -gc-sections then any unused syscalls will be discarded.
2. For some reason that I cannot work out, when compiling with -flto two copies of crt0.o are linked in. Why this does not cause errors with normal crt0.o files I do not know, but the solution I have used here is to make the syscall functions weak. That way duplicates do not matter, and if the user ever wants to provide their own syscall functions they can do so.
Cheers Nick
newlib/ChangeLog 2011-08-02 Nick Clifton <nickc@redhat.com>
* configure.host (arm-*-*): Set have_crt0 to "no". Add note about ARM syscall support. * libc/sys/arm/Makefile.am: Remove syscall functions. * libc/sys/arm/configure.in (AC_CONFIG_SRCDIR): Use aeabi_atext.c. * libc/sys/arm/Makefile.in: Regenerate. * libc/sys/arm/aclocal.m4: Regenerate. * libc/sys/arm/configure: Regenerate. * libc/sys/arm/crt0.S: Delete. * libc/sys/arm/libcfunc.c: Delete. * libc/sys/arm/swi.h: Delete. * libc/sys/arm/syscalls.c: Delete. * libc/sys/arm/trap.S: Delete. * libc/sys/arm/README-syscalls: New file.
libgloss/ChangeLog 2011-08-02 Nick Clifton <nickc@redhat.com>
* arm/Makefile.in (CRT0): Always define. (NEWLIB_CRT0): Define. (NEWLIB_OBJS): Define. (CRT0_INSTALL): Always define. (all): Add NEWLIB_CRT0 and NEWLIB_OBJS. crt0.o: Build from crt0.in. (install-newlib): New target. * arm/configure.in: Remove check of disable-newlib-supplied-syscalls. * arm/configure: Regenerate. * arm/crt0.S: Make function symbols weak. * arm/syscalls.c: Make functions weak. (_kill): Import from newlib. (_exit): Import from newlib. * arm/crt0.in: New file.
Attachment:
newlib.arm.patch.2
Description: Unix manual page
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |