Commit Graph

822 Commits

Author SHA1 Message Date
Kuan-Wei Chiu 5f15d7c581 RISC-V: Fix timeval conversion in _gettimeofday()
Replace multiplication with division for microseconds calculation from
nanoseconds in _gettimeofday function.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
2023-11-29 10:14:55 +01:00
Alexey Lapshin 55485616ba Bring back libsim.a for riscv 2023-09-18 22:49:15 -04:00
Alexey Lapshin 42fc2fa37c libgloss: add Xtensa port
Supported esp32 and esp32s2 boards:
https://github.com/espressif/esp-toolchain-docs/blob/main/gcc/build-and-run-native-app.md
2023-08-24 10:52:36 -04:00
Torbjörn SVENSSON b9e867d088 Add stub for getentropy
Example test case that fails with undefined reference to getentropy:

Testing g++.robertl/eb77.C,  -std=c++20
doing compile
Executing on host: /build/gcc-13-2709-g9ac9fde961f/bin/arm-none-eabi-g++  /build/src/gcc/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C  -mthumb -march=armv6s-m -mcpu=cortex-m0 -mfloat-abi=soft -fdiagnostics-plain-output   -fmessage-length=0  -std=c++20 -pedantic-errors -Wno-long-long        -Wl,--start-group -lc -lm -Wl,--end-group --specs=nosys.specs -Wl,--allow-multiple-definition -Wl,-u,_isatty,-u,_fstat   -Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort -Wl,g++_tg.o -lm -o ./eb77.exe    (timeout = 800)
spawn -ignore SIGHUP /build/gcc-13-2709-g9ac9fde961f/bin/arm-none-eabi-g++ /build/src/gcc/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C -mthumb -march=armv6s-m -mcpu=cortex-m0 -mfloat-abi=soft -fdiagnostics-plain-output -fmessage-length=0 -std=c++20 -pedantic-errors -Wno-long-long -Wl,--start-group -lc -lm -Wl,--end-group --specs=nosys.specs -Wl,--allow-multiple-definition -Wl,-u,_isatty,-u,_fstat -Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort -Wl,g++_tg.o -lm -o ./eb77.exe
pid is 28414 -28414
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): in function `std::(anonymous namespace)::__libc_getentropy(void*)':
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): in function `std::random_device::_M_init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a(libc_a-arc4random.o): in function `_rs_stir':
(.text._rs_stir+0x8): undefined reference to `getentropy'
collect2: error: ld returned 1 exit status
pid is -1
close result is 28414 exp6 0 1
output is /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): in function `std::(anonymous namespace)::__libc_getentropy(void*)':
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): in function `std::random_device::_M_init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: /build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a(libc_a-arc4random.o): in function `_rs_stir':
(.text._rs_stir+0x8): undefined reference to `getentropy'
collect2: error: ld returned 1 exit status
 status 1
compiler exited with status 1
FAIL: g++.old-deja/g++.robertl/eb77.C  -std=c++20 (test for excess errors)
Excess errors:
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined reference to `getentropy'
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): undefined reference to `getentropy'
(.text._rs_stir+0x8): undefined reference to `getentropy'
UNRESOLVED: g++.old-deja/g++.robertl/eb77.C  -std=c++20 compilation failed to produce executable

Contributed by STMicroelectronics

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2023-08-09 11:38:03 +02:00
Sebastian Huber 59de816715 libgloss/epiphany: Fix move instruction in crt0.S
This patch relates to bug report:

https://sourceware.org/bugzilla/show_bug.cgi?id=30212
2023-03-08 14:27:52 -05:00
Srinath Parvathaneni 1d3d2ba54b arm: Restrict processor mode change when in hypervisor mode
If a CPU implements EL2 as its highest exception level then programs
using newlib may start in hypervisor mode.  In that state it is not
trivial to switch into the various EL1 modes to configure the
individual exception stacks, so do not try.
2023-03-03 13:27:31 +00:00
Srinath Parvathaneni b782dcb2b3 arm: Fix the SP used in setting stack limit for standalone application.
Move the instruction that saves SP before the mode check so that
applications that start in USER mode correctly set the stack limit.
2023-03-03 13:20:29 +00:00
Jeff Johnston 17ac400c11 Fix libgloss/newlib build to conditionally use top include dir
- conditionally use -idirafter option for arm
2023-02-22 14:53:05 -05:00
Mike Frysinger 73e4ded2fe libgloss: csky: fix pointer-to-integer warning
parameters is an array of integers, so assigning NULL (a pointer)
doesn't make sense.  Use 0 instead which produces the same code.
2023-01-13 17:24:17 -05:00
Mike Frysinger 4391d2aed3 libgloss: merge csky into top-level Makefile
Avoid a recursive make to speed things up a bit.
A csky-elf build shows installed objects & libs produce same code.
2023-01-13 17:24:17 -05:00
Xianmiao Qu 7f4c04755e libgloss: csky: use atexit to call fini-array functions.
__libc_fini_array should be called upon exit to call the
global termination functions in fini-array, use atexit to
register it at __start.
2023-01-13 14:08:23 +01:00
Mike Frysinger 3ef006f056 libgloss: merge nios2 into top-level Makefile
Avoid a recursive make to speed things up a bit.
A nios2-elf build shows installed objects & libs produce same code.
2023-01-12 05:26:57 -05:00
Mike Frysinger 0e1c0a02cf libgloss: merge d30v into top-level Makefile
Avoid a recursive make to speed things up a bit.
2023-01-11 08:42:19 -05:00
Mike Frysinger 5401db924f libgloss: merge arc into top-level Makefile
Avoid a recursive make to speed things up a bit.
2023-01-11 08:42:16 -05:00
Mike Frysinger 275b39e219 libgloss: merge arm into top-level Makefile
Avoid a recursive make to speed things up a bit.
2023-01-11 01:00:21 -05:00
Mike Frysinger 26f9cfd7a8 libgloss: arm: break newlib dependency
The libgloss port has been reaching back into newlib internals for a
single header whose contents have been frozen for almost a decade.
To break this backwards libgloss->newlib dependency, move the acle
header to the srcroot include/ so everyone can use the same copy.
2023-01-11 01:00:15 -05:00
Mike Frysinger 13a7b16ea3 libgloss: merge aarch64 into top-level Makefile
Avoid a recursive make to speed things up a bit.
2023-01-09 21:49:50 -05:00
Mike Frysinger d6468d6b9f libgloss: rs6000: fix incorrect install dir for xil files
The install steps were missing the multilib qualifier causing them
to always install in the same location and stomp each other.
2022-12-19 20:19:31 -05:00
Mike Frysinger 04411f45d0 libgloss: merge arm configure script up a level
Move the minor arm-specific logic to a dedicated variable so we can
merge its configure logic up a level.
2022-12-19 19:08:12 -05:00
Mike Frysinger 8893cd1006 libgloss: merge aarch64 configure script up a level
Move the minor aarch64-specific logic to a dedicated variable so we can
merge its configure logic up a level.
2022-12-19 19:08:12 -05:00
Mike Frysinger 2dfc4a9e97 libgloss: drop unused multi-build logic
Now that aarch64 & arm have migrated off this, we can punt it.
2022-12-19 19:07:38 -05:00
Mike Frysinger 6668403d2d libgloss: arm: inline multi-build logic
Since no other port uses this custom libgloss multi-build.in logic,
and it's making things difficult to unify, drop it all.  The set of
installed objects and their content should be the same.

There is a difference in the builds: currently we compile all the
objects in this subdir twice, but only a subset of them use a diff
set of flags, and are actually installed (the librdimon.a and its
objects).  So this change speeds things up by removing the duplicate
compilation.

There is a short term cost in having to duplicate the compile rules
for the files that are different, but this is minor when compared to
being able to delete the unused multi-build logic (which we'll do in
a sep commit), and we'll be able to clean this up when we move the
code to unified automake.

None of this should be confused with the common multilib logic.
This is *multi-build* which is processed in parallel.
2022-12-19 19:07:09 -05:00
Mike Frysinger 171d6fc1dc libgloss: aarch64: delete unused multi-build logic
This logic looks like it was copied from the arm port, but it isn't
actually used here.  Since no other port uses this custom libgloss
multi-build.in logic, and it's making things difficult to unify,
and aarch64 isn't even using it, drop it all.  The set of installed
objects and their content should be the same.

Once we move this to unified automake, if we want to readd support
for subdir multi-builds, it'll be a lot easier as we can just add
another set of objects with custom flags.

None of this should be confused with the common multilib logic.
This *multi-build* which is processed in parallel.
2022-12-19 18:50:20 -05:00
Mike Frysinger 42ddb40b58 libgloss: bfin: switch to CPPASCOMPILE for .S->.o
We're compiling .S files, so use CPPAS instead of CC to compile since
the point of CPPAS is to preprocess+assemble .S files.
2022-12-14 04:14:50 -05:00
Simon Cook 8c87ffd372 libgloss: riscv: Install machine/syscall.h
A recent change to the Makefile.in for riscv resulted in the
machine/syscall.h header not being installed. This updates the file
to install this file again.

Signed-off-by: Simon Cook <simon.cook@embecosm.com>
2022-10-20 16:53:06 +02:00
Palmer Dabbelt f59ff93046 libgloss: riscv: Convert to non-recursive automake
PR 29515 points out our documentation builds are broken, let's just move
over to the new non-recursive builds.

Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2022-08-26 16:47:48 +02:00
Sebastian Huber 2faeaf50fd Use global atexit data for all configurations
For the exit processing only members of _GLOBAL_REENT were used by default.  If
the _REENT_GLOBAL_ATEXIT option was enabled, then the data structures were
provided through dedicated global objects.  Make this option the default.
Remove the option.  Rename struct _reent members _atexit and _atexit0 to
_reserved_6 and _reserved_7, respectively.  Provide them only if
_REENT_BACKWARD_BINARY_COMPAT is defined.
2022-05-18 07:45:09 +02:00
Dimitar Dimitrov 21f0edbf9f libgloss: pru: Fix _open syscal arguments
The _open() C function is declared as having variable arguments in
newlib, so second and third arguments are passed on stack. Add code to
move them into registers, since that's where the PRU simulator expects
them.

Issue was exposed by the GCC test gcc.c-torture/execute/fprintf-2.c,
which relies on tmpnam implementation to pass correct flags to _open.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-04-27 11:43:08 +02:00
Jeff Law 157f03053d Revert accidental change to v850/sim.ld 2022-03-20 10:19:45 -04:00
Jeff Law 0c8679e080 Avoid using common symbols in v850 libgloss
I've had this lying around for probably a year or two at this point.
It just changes all the instance of "errno" from a common symbol to an
extern.  I can't offhand recall where the actual definition is, but it
certainly exists in the generic code.
2022-03-19 20:01:33 -04:00
Mike Frysinger 845515267b libgloss: add new Build System Internals node to the menu
Seems that some versions of texinfo require the @menu to have all
entries at the top level, so add the new build one to it.
2022-03-04 01:04:25 -05:00
Mike Frysinger 74885d4fbd libgloss: merge lm32 into top-level Makefile
Avoid a recursive make to speed things up a bit.

This drops the header install logic because the lm32/ subdir doesn't
actually have any header files to install.
2022-03-01 20:29:07 -05:00
Mike Frysinger 89f643e87b libgloss: use m4_foreach_w to simplify the logic a bit
It's functionally the same, but the configure.ac code is simpler and
less boiler plate duplicated.
2022-03-01 20:29:07 -05:00
Mike Frysinger ed459780f4 libgloss: add a little build system generation documentation
This is a bit of an abbreviated form of what's in the Newlib subdir,
but with emphasis on Libgloss-specific parts, and anything unique to
it.  I haven't put too much effort in.
2022-02-28 19:05:32 -05:00
Mike Frysinger 69d93f3121 libgloss: iq2000: fix prototype 2022-02-25 23:08:45 -05:00
Mike Frysinger 7f674bb4da libgloss: switch to AM_PROG_AR
Now that we require Automake 1.15, we can use this macro rather than
set the tool up ourselves.  The current code doesn't properly search
for a prefixed ar tool as-is.
2022-02-25 23:07:20 -05:00
Mike Frysinger e56bdf902b libgloss: document & localize custom multi-do rule
The multi-build.in file in libgloss duplicates common multilib logic
in the root source tree.  Document it a bit, and rename the rule so
it doesn't clash with the common multi-do rule.  This will let us use
them in the same makefile so we can merge aarch64/ & arm/ up (as the
only targets that use this local multi-build.in atm).
2022-02-24 19:12:45 -05:00
Mike Frysinger 15d7e0d417 libgloss: finish migration to AM_PROG_AS
When merging iq2000 up a level, it included a partial conversion to
AM_PROG_AS in the common directory.  Finish it for all directories
to kill off the custom LIB_AM_PROG_AS which we no longer need since
we require Automake 1.15 now.
2022-02-24 19:10:39 -05:00
Mike Frysinger 7edb25725d libgloss: switch to standard AC_PROG_CC
Now that we use AC_NO_EXECUTABLES, and we require a recent version of
autoconf, we don't need to define our own copies of these macros.  So
switch to the standard AC_PROG_CC.
2022-02-24 19:06:21 -05:00
Mike Frysinger 8d75828378 libgloss: merge sparc configure script up a level
Move the minor sparc-specific logic to a dedicated variable so we can
merge its configure logic up a level.
2022-02-23 19:44:10 -05:00
Mike Frysinger 4ed502ba02 libgloss: enable maintainer mode support
Use AM_MAINTAINER_MODE so devs have to opt-in to automatic rebuilds
of autotools.  This matches what newlib (and most every other GNU
toolchain package) does with automake.
2022-02-22 17:09:16 -05:00
Matt Joyce 44b60f0c4b Make __sdidinit unused
Remove dependency on __sdidinit member of struct _reent to check
object initialization. Like __sdidinit, the __cleanup member of
struct _reent is initialized in the __sinit() function. Checking
initialization against __cleanup serves the same purpose and will
reduce overhead in the __sfp() function in a follow up patch.
2022-02-22 12:38:46 +01:00
Mike Frysinger 2d53aadcc5 libgloss: have README point to the manual
The README has such little info in it, so point people to the much
more extensive porting manual.
2022-02-17 20:41:53 -05:00
Mike Frysinger 7a1c557b8e libgloss: merge mips configure script up a level
Move the minor mips-specific logic to a dedicated file & namespace
them so we can merge its configure logic up a level.
2022-02-17 20:36:41 -05:00
Mike Frysinger f9dc151186 libgloss: merge wince configure script up a level
Move the minor wince-specific logic to a dedicated file & namespace
them so we can merge its configure logic up a level.  The makefile
is a bit tricky, but maybe it still works.
2022-02-17 20:35:32 -05:00
Mike Frysinger e0c0ad8268 libgloss: build with -nostdinc
We don't want libgloss building against C library headers that happened
to be installed with the toolchain, so add -nostdinc to the build.  We
still need access to the compiler internal headers, so probe those and
include them via -isystem.  This uses a similar probing style as glibc,
which has used it for over a decade, so it should be safe & stable.

This should prevent any latent bugs due to testing with a toolchain that
is fully configured & installed already.
2022-02-16 20:29:08 -05:00
Mike Frysinger 5ca1f8c7ff libgloss: sparc: merge libsys/ up a level
The libsys/configure script isn't doing anything useful, so merge
the logic up to the parent dir.
2022-02-16 20:24:27 -05:00
Mike Frysinger aff735e4c6 libgloss: aarch64: merge cpu-init/ up a level
The cpu-init/configure script isn't doing anything useful, so merge
the logic up to the parent dir.  This is how the arm/ tree integrates
its cpu-init/ subdir too.
2022-02-16 20:23:26 -05:00
Mike Frysinger 538a37be5b libgloss: merge mn10300 configure script up a level
Move the minor mn10300-specific logic to a dedicated file & namespace
them so we can merge its configure logic up a level.  part_specific_obj
wasn't used anywhere (looks like copy & paste left over from mips), so
drop it entirely.
2022-02-16 20:20:14 -05:00
Mike Frysinger 0c45c7ce67 libgloss: merge mn10200 configure script up a level
The mn10200-specific logic (setting up part_specific_obj) isn't used
by the build anywhere -- looks like copy & paste left overs from mips.
So punt that & merge the target_makefile_frag_path up to the top-level.
2022-02-16 20:16:05 -05:00
Mike Frysinger 9a5f78d80e libgloss: merge m68k configure script up a level
Move the minor m68k-specific logic to a dedicated file & namespace them
so we can merge its configure logic up a level.
2022-02-16 20:14:55 -05:00
Mike Frysinger 7d565fe013 libgloss: m68k: switch to AC_NO_EXECUTABLES
Use this macro rather than hacking up the LDFLAGS settings.  This will
make it easier to merge the logic into the top-level which is already
using AC_NO_EXECUTABLES.
2022-02-16 20:12:42 -05:00
Mike Frysinger 91019da446 libgloss: merge mcore configure script up a level
Move the minor mcore-specific logic to a dedicated file & namespace them
so we can merge its configure logic up a level.
2022-02-16 20:11:55 -05:00
Mike Frysinger e7f8999918 libgloss: merge moxie configure script up a level
Move the minor moxie-specific logic to a dedicated file & namespace them
so we can merge its configure logic up a level.
2022-02-16 20:10:48 -05:00
Mike Frysinger 5200f756cc libgloss: merge i386 configure script up a level
Move the minor i386-specific logic to a dedicated variable so we can
merge its configure logic up a level.
2022-02-16 20:08:55 -05:00
Mike Frysinger e05f9c0c05 libgloss: i386: simplify target flags
Collapse these 3 settings into one variable to make it easier to
merge into the top-level.
2022-02-16 20:08:18 -05:00
Mike Frysinger 907764ebec newlib/libgloss: drop unused $(CROSS_CFLAGS)
This is used in a bunch of places, but nowhere is it ever set, and
nowhere can I find any documentation, nor can I find any other project
using it.  So delete the flags to simplify.
2022-02-15 20:02:51 -05:00
Mike Frysinger d4fa7379b0 libgloss: bfin: fix various warnings
No functional changes here, just fix warnings the compiler noticed.

bfin/syscalls.c:156:13: warning: conflicting types for built-in function ‘memset’

bfin/syscalls.c: In function ‘_unlink’:
bfin/syscalls.c:193:3: warning: passing argument 2 of ‘do_syscall’ discards qualifiers from pointer target type
bfin/syscalls.c:33:1: note: expected ‘void *’ but argument is of type ‘const char *’

bfin/syscalls.c: In function ‘_exit’:
bfin/syscalls.c:104:1: warning: ‘noreturn’ function does return
2022-02-12 01:34:21 -05:00
Mike Frysinger 395ce0f4c0 libgloss: bfin: fix local header usage after automake move
Compiling the basiccrt .S files missed an include to the local bfin/
headers causing the build to break when installing anew.

Reported-by: Jeff Law <jeffreyalaw@gmail.com>
2022-02-12 01:29:33 -05:00
Mike Frysinger 5365a7deee libgloss: merge csky configure script up a level
Now that the csky-specific logic ($DO) has been deleted, we can fold
it up a level easily enough.
2022-02-11 06:19:01 -05:00
Mike Frysinger 66dfedc287 libgloss: merge bfin into top-level Makefile
Avoid a recursive make to speed things up a bit.
2022-02-11 06:14:55 -05:00
Mike Frysinger 62e580f01b libgloss: merge iq2000 into top-level Makefile
Avoid a recursive make to speed things up a bit.
2022-02-11 06:14:55 -05:00
Mike Frysinger f8aede7855 libgloss: merge libnosys into top-level Makefile
Avoid a recursive make to speed things up a bit.
2022-02-11 04:29:37 -05:00
Mike Frysinger ad28934ad3 libgloss: csky: clean up unused m68k logic
It looks like csky was created by copying & pasting the m68k port,
but m68k-specific stuff was left over related to target selection.
The makefile doesn't do anything with it, so punt it all to make
the file much simpler.
2022-02-11 04:17:44 -05:00
Mike Frysinger 492e5fe8b0 libgloss: merge doc into top-level Makefile
Avoid a recursive make with this tiny subdir to speed things up a bit.
2022-02-09 20:01:40 -05:00
Mike Frysinger 7517551007 libgloss: convert top level to automake
The top level dir isn't doing anything interesting, just recursing into
subdirs.  So this change isn't terribly exciting.  But it sets us up for
doing more fun stuff in follow up commits.

[TODO] Check test targets
2022-02-09 20:01:40 -05:00
Mike Frysinger a49c5fcdb5 libgloss: m68k: rename $DO to $TARGET
The common $DO variable is used by the multilib logic to control which
target to multiplex.  But the m68k subdir is also using $DO to control
which target (m68k or fido) to build.  As we flatten things to automake,
this conflict shows up and breaks the m68k build.  Just rename the m68k
variable to something unique to avoid it.
2022-02-09 20:00:43 -05:00
Mike Frysinger 67c600b995 libgloss: restore multilib settings in subdir makefiles
Commit 754f8def0d ("libgloss: merge stub
arch configure scripts up a level") had an unintended side-effect: the
MULTI* variables in the Makefiles no longer get rewritten at configure
time in the subdirs.  Only the top-level Makefile still is.  This is
because the configure integration of multilib (both the way libgloss
did it manually and the way AM_ENABLE_MULTILIB does it) only rewrites
"Makefile".

We could try propagating the MULTI* variables from libgloss/Makefile
down via FLAGS_TO_PASS, but this runs into a limitation: the multilib
logic uses this variable to switch from libgloss/ to each multilib
libgloss/, and libgloss uses this variable to enter subdirectories.
The latter we want, but the former ends up overridding the Makefile
environment.  We could side-step that with some GNU Make directives,
but it feels like we're getting a bit too deep down the rabbit hole.

Instead, let's call config-ml.in ourselves for each subdir Makefile
that the top-level configure generates.  This restores the previous
behavior and should be less risky in general.

This logic should be unnecessary when/if we switch libgloss over to
a non-recursive Automake build (since all build+install settings are
in the single libgloss/Makefile), but it'll be a while before we can
land that rework, so let's fix this up now.
2022-02-04 19:33:29 -05:00
Mike Frysinger 8622002ffc libgloss: move to ../config/multi.m4 for multilib logic
The current libgloss multilib logic is almost exactly the same as the
config/multi.m4, and the differences should be minor, so switch over
to that to delete custom logic on ourside.

The insertions here look larger and that's because none of the scripts
were declaring --enable-multilib explicitly even though they checked the
flag and changed behavior.
2022-02-01 23:07:11 -05:00
Mike Frysinger 30f244155b libgloss: merge subdirs that have unique makefile_frags up a level
Merge the subdir configure scripts up that only existed to set unique
values for their target/host makefile_frags.
2022-02-01 23:06:21 -05:00
Mike Frysinger d5a20f0b70 libgloss: merge epiphany & libnosys & or1k configure scripts up a level
These subdirs have unique configure scripts to do some compiler tests.
The checks should work for all targets, so hoist them up to the top
libgloss dir.  This should allow us to delete these subdir configure
scripts.

It means the top-level gains autoheader support, but that's fine.
It wasn't exporting any defines previously (i.e. -D into CPPFLAGS),
and all of the defines it now exports are only used by code in the
libnosys subdir which was expecting to have a config.h.
2022-02-01 21:53:22 -05:00
Mike Frysinger 502cf4b7b5 libgloss: fix more missing dir with parallel install
Depending on the processing order of rules when installing in parallel,
these install rules might be processed before some other rule happens
to create the respective dirs.  Make sure each one creates the needed
dirs before installing into them.
2022-01-29 01:33:49 -05:00
Mike Frysinger 580817ec01 libgloss: update Makefile regen rules for merged arches
For arches that had their configure merged into the top-level, make
sure they don't still depend on a subdir configure script that no
longer exists.  I had cleaned this up for some of the subdirs, but
these got lost in the shuffle.
2022-01-29 00:10:59 -05:00
Jeff Law 063d67faf0 Finish this commit by prefixing HAVE_INITFINI_ARRAY and HAVE_INIT_FINI references in libgloss in the same way.
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Mon Jan 17 22:20:20 2022 -0500

    newlib: internalize HAVE_INITFINI_ARRAY

    This define is only used by newlib internally, so stop exporting it
    as HAVE_INITFINI_ARRAY since this can conflict with defines packages
    use themselves.

    We don't really need to add _ to HAVE_INIT_FINI too since it isn't
    exported in newlib.h, but might as well be consistent here.

    We can't (easily) add this to newlib_cflags like HAVE_INIT_FINI is
    because this is based on a compile-time test in the top configure,
    not on plain shell code in configure.host.  We'd have to replicate
    the test in every subdir in order to have it passed down.
2022-01-28 21:39:14 -07:00
Mike Frysinger 9d33524164 libgloss: aarch64/sparc: fix missing dir with parallel install
Depending on the processing order of rules when installing in parallel,
install-board might run first and the target dirs don't yet exist.
2022-01-28 06:21:41 -05:00
Mike Frysinger c6c414fcb3 libgloss: bfin: fix missing dir with parallel install
Depending on the processing order of rules when installing in parallel,
install-board might run first and the target dirs don't yet exist.
2022-01-28 05:57:37 -05:00
Dimitar Dimitrov b095628ecf libgloss: Fix PRU & Blackfin mkinstalldirs path
With the move of configure scripts out of target directories, relative
paths to top_srcdir got broken:

  /bin/sh: .../newlib/libgloss/../../mkinstalldirs: No such file or directory

Fix the PRU build by switching to srcroot relative path, as rest of targets do.

Fix the Blackfin build in the same way.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-01-27 19:40:10 -05:00
Mike Frysinger 43ab30fbd5 libgloss: merge stub iq2000 configure scripts up a level
This was supposed to be included in the previous commit.
2022-01-26 04:42:09 -05:00
Mike Frysinger 754f8def0d libgloss: merge stub arch configure scripts up a level
For about half the ports, we don't need a subdir configure script.
They're using the config/default.m[ht] rules, and they aren't doing
any unique configure tests, so they exist just to pass top-level
settings down to create the arch Makefile.  We can just as easily
do that from the top-level Mkaefile directly and skip configure.

Most of the remaining configure scripts could be migrated up to
the top-level too, but that would require care in each subdir.
So let's be lazy and put that off to another day.
2022-01-26 04:32:54 -05:00
Mike Frysinger c0bf2d68f9 libgloss: iq2000: drop unused configure vars
This will make it easier to merge up as it won't have unique settings.
2022-01-26 04:27:50 -05:00
Mike Frysinger 6d8c4e4ba1 libgloss: define default target_makefile_frag in top-level
A bunch of subdirs want this, so make it available in the common
dir to ease future merges.  It isn't used directly in libgloss so
it should be harmless as-is.
2022-01-25 21:56:47 -05:00
Mike Frysinger dfa088ab66 libgloss: bfin: fix subdir install for sim files
When building in parallel, make sure the subdir for the sim files
exist before trying to install into them.
2022-01-23 21:08:07 -05:00
Mike Frysinger 7c02fc3075 libgloss: clean up redundant shared lib warnings
Use standard AC_MSG_WARN macro in the top-level configure, and delete
the message from all the subdirs.  There's no need to issue this more
than once per libgloss build.
2022-01-17 04:30:37 -05:00
Mike Frysinger a100e80fc9 require autoconf-2.69 exactly
The newlib & libgloss dirs are already generated using autoconf-2.69.
To avoid merging new code and/or accidental regeneration using diff
versions, leverage config/override.m4 to pin to 2.69 exactly.  This
matches what gcc/binutils/gdb are already doing.

The README file already says to use autoconf-2.69.

To accomplish this, it's just as simple as adding -I flags to the
top-level config/ dir when running aclocal.  This is because the
override.m4 file overrides AC_INIT to first require the specific
autoconf version before calling the real AC_INIT.
2022-01-14 15:24:33 -05:00
Mike Frysinger 7f8fa1de4f libgloss: hardcode AC_CONFIG_AUX_DIR path
In order to transition to automake, we have to use hardcoded paths in
the AC_CONFIG_AUX_DIR macro call (since automake evaluates the path
itself, and doesn't expand vars), so simplify all the calls here.
2022-01-10 19:50:35 -05:00
Mike Frysinger 8c57b8b2b4 libnosys: update autoheader usage
The use of acconfig.h templates is deprecated, so migrate away from it
by moving the description text to configure.ac.
2022-01-07 15:54:57 -05:00
Mike Frysinger 0221728233 libgloss: wince: add ACLOCAL_AMFLAGS settings
This allows autoreconf to "just work" and find the right macros.
2022-01-07 15:54:57 -05:00
Mike Frysinger e29279b011 libgloss: wince: update to automake-1.15
Drop the cygnus options and migrate to current versions of autotools.
2021-12-29 23:22:44 -05:00
Mike Frysinger 873da400e0 libgloss: regenerate aclocal.m4 & configure w/newer versions
Regenerate the files using automake-1.15 & autoconf-2.69 to match the
binutils/gdb/gcc projects.  Ran:

libgloss $ find -name configure.ac -printf '%h\n' | while read d; do
  (cd $d; export WANT_AUTOCONF=2.69 WANT_AUTOMAKE=1.15;
   aclocal-1.15 -I.. && autoconf-2.69); done
2021-11-06 14:14:50 -04:00
Mike Frysinger 59e83de0b1 libgloss/newlib: update configure.ac in Makefile.in files
The maintainer rules refer to configure.in directly, so update that
after renaming all the configure.ac files.
2021-11-06 14:14:49 -04:00
Lewis Revill 92e488d5b8 libgloss/riscv: Fix hard coded reference to configure.in after rename
The file configure.in was renamed to configure.ac in libgloss/riscv but
the hard coded name in the Makefile for that directory was not updated.
This patch simply renamed this to configure.ac.
2021-10-27 17:44:48 +02:00
Mike Frysinger 1328009bb4 libgloss: add missing aclocal.m4 files
These subdirs were missing aclocal.m4 files pulling in macros from
../acinclude.m4 which caused some macros to not be expanded.  For
example, autoconf complains:

configure.ac:25: error: possibly undefined macro: LIB_AC_PROG_CC
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.

These were generated with aclocal-1.9 as that seems to be what was
used in these dirs previously, and with whatever version of autoconf
the specific subdir was using.  This should minimize diffs.
2021-09-15 10:08:20 -04:00
Mike Frysinger e215765041 libgloss: epiphany: rename symbol prefix cache var
Autoconf emits a warning for this:
configure.ac:75: warning: AC_CACHE_VAL(libc_symbol_prefix, ...): suspicious cache-id, must contain _cv_ to be cached

Rename the variable to match the naming in libnosys/ subdir.
2021-09-15 10:08:20 -04:00
Mike Frysinger 63c1f29a1d libgloss: fix AC_LANG_SOURCE warnings w/newer autoconf
When running autoconf-2.69 in here, we get:
configure.ac:57: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2503: _AC_PREPROC_IFELSE is expanded from...
../../lib/autoconf/general.m4:2518: AC_PREPROC_IFELSE is expanded from...
configure.ac:57: the top level
configure.ac:61: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2503: _AC_PREPROC_IFELSE is expanded from...
../../lib/autoconf/general.m4:2518: AC_PREPROC_IFELSE is expanded from...
configure.ac:61: the top level

Add AC_LANG_PROGRAM wrappings to fix these.
2021-09-15 10:08:20 -04:00
Mike Frysinger 920617998e libgloss/newlib: rename configure.in to configure.ac
The .in name has been deprecated for a long time in favor of .ac.
2021-09-13 10:14:37 -04:00
Christoph Muellner 0cb40f415b RISC-V: Reliably initialize t0 in _times()
The current implementation does not reliably initialize t0 once.
Additionally the initialization requires two calls to _gettimeofday().
Let's sacrifice a byte to keep the initialization status
and reduce the maximum number of calls to _gettimeofday().

This has caused issues in an application that invokes clock().
The problematic situation is as follows:

1) The program calls clock() which calls _times().
2) _gettimeofday(&t0, 0) puts 0 in t0.tv_usec (because less than 1 us has
   elapsed since the beginning of time).
3) _gettimeofday(&t, 0) puts 1 in t.tv_usec (since now more than 1 us has
   elapsed since the beginning of time).
4) That call to clock() returns 1 (the value from step 3 minus the value in
   step 2).
5) The program does a second call to clock().
6) The code above still sees 0 in t0 so it tries to update t0 again and
   _gettimeofday(&t0, 0) puts 1 in t0.tv_usec.
7) The _gettimeofday(&t, 0) puts 1 in t.tv_usec (since less than 1us has
   elapsed since step 3).
8) clock() returns 0 (step 7 minus step 6) and indicates that time is
   moving backwards.

Signed-off-by: Christoph Muellner <cmuellner@gcc.gnu.org>
2021-08-04 11:44:33 +02:00
Jeff Law c01f603df9 Fix builds on iq2000 and visium
visium and iq2000 have libgloss configure bits that reference
target_makefile_frag, but it's never set. This leads to failures during the
configure process and an empty libgloss/<target>/Makefile.  Naturally bad
things happen with an empty Makefile.

This patch initializes target_makefile_frag for both targets in their
configure.in files and updates the generated configure files.  This fixes the
build failures.  I've been using it in my tester for about a week and both
targets have flipped from consistently failing to consistently passing.

    * libgloss/visium/configure.in (target_makefile_frag): Define.
    * libgloss/visium/configure: Regenerated.
    * libgloss/iq2000/configure.in (target_makefile_frag): Define.
    * libgloss/iq2000/configure: Regenerated.
2021-07-06 10:46:09 -04:00
Stafford Horne 43999b660f libgloss/or1k: Correct the IMMU SXE and UXE flags
These have been defined incorrectly, as per specification and CPU
implementations SXE is bit 6 and UXE is bit 7.  This was noticed when
tracking down our test suite mmu test failures.

 Test Suite: https://github.com/openrisc/or1k-tests/blob/master/native/or1k/or1k-mmu.c#L68-L72
 Spec: https://raw.githubusercontent.com/openrisc/doc/master/openrisc-arch-1.3-rev1.pdf

See section 8.4.8 Instruction Translation Lookaside Buffer Way y Translate
Registers where these are defined.

Signed-off-by: Stafford Horne <shorne@gmail.com>
2021-07-05 18:00:40 -04:00
Dimitar Dimitrov df0ad84e91 libgloss: pru: Remove sim ld script
Binutils LD default linker script was recently fixed to allow memory
sizes to be set via command line. Use this feature to remove the special
sim linker script in libgloss.

It is acceptable to require newer Binutils version here because simulator
target is only used for regression testing the toolchain. Real HW
targets are not affected.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2021-06-09 14:15:56 -04:00
Dimitar Dimitrov 464c3f5d22 libgloss: pru: Place sim syscalls into their own sections
This should help reduce final ELF size if using --gc-sections linker
option.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2021-06-09 14:12:30 -04:00
Kito Cheng 20d0081998 RISC-V: Using SYS_clock_gettime64 for rv32 libgloss.
- RISC-V 32 bits linux/glibc didn't provide gettimeofday anymore
   after upstream, because RV32 didn't have backward compatible issue,
   so RV32 only support 64 bits time related system call.

 - So using clock_gettime64 call instead for rv32 libgloss.
2021-04-13 12:54:49 +02:00
Yeting Kuo 6aa0ab1c5d RISC-V: Use __bss_start for the starting point of .bss.
It's more flexible for the positions of .bss and .data.
2021-02-05 10:29:21 +01:00
Craig Blackmore 865cd30dcc RISC-V: Add semihosting support 2020-12-16 16:40:34 -05:00
Alex Coplan via Newlib 63a901705e libgloss: aarch64: Add support for Armv8-R AArch64
This patch adds support for Armv8-R AArch64.

Armv8-R AArch64 has no EL3, so we don't set vbar_el3, and adjust the
code to set up the MPU for Armv8-R.  So build a different flavour of the
startup code to support that.

We also add a specs file that uses this alternative startup code which
can be used with Armv8-R AArch64 models.
2020-09-30 11:08:46 +01:00
Jojo R 648365e0e9 Add C-SKY port for libgloss
This patch contain all libgloss for C-SKY

Contributor list:
  - Lifang Xia <lifang_xia@c-sky.com>
  - Jojo R <jiejie_rong@c-sky.com>
  - Xianmiao Qu <xianmiao_qu@c-sky.com>
  - Yunhai Shang <yunhai_shang@c-sky.com>
2020-09-25 11:02:34 -04:00
Jozef Lawrynowicz cae21d17ad MSP430: Fix calculation of string length in sbrk.c 2020-09-04 15:05:17 +02:00
Jozef Lawrynowicz d72ea86d41 MSP430: Fix message in sbrk.c printing binary character
The call to write() in sbrk.c was using the wrong value for the length
argument, causing the NUL terminating character of the string to be
printed.
2020-09-03 12:55:32 +02:00
Jozef Lawrynowicz 754386c7f5 Fix warnings when building for msp430-elf
The MSP430 target supports both 16-bit and 20-bit size_t and intptr_t.
Some implicit casts in Newlib expect these types to be
"long", (a 32-bit type on MSP430) which causes warnings during
compilation such as:
  "cast from pointer to integer of different size"
2020-09-03 12:55:32 +02:00
Jozef Lawrynowicz e3f29b2472 MSP430: Increase the amount of main memory available in sim ld scripts
The main memory region of the GDB simulator ends at address 0xFFBF,
but the simulator linker scripts do not make full use of this available
memory.

>From 61f3d212741acee583e21ff2c2808775584ecad6 Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date: Mon, 3 Aug 2020 19:38:23 +0100
Subject: [PATCH 2/2] MSP430: Increase the amount of main memory available in
 sim ld scripts

The main memory region of the GDB simulator ends at address 0xFFBF,
but the simulator linker scripts do not make full use of this available
memory.
2020-08-07 15:16:43 +02:00
Jozef Lawrynowicz 748970c833 MSP430: Word align __*_array_start symbols in sim linker scripts
__{preinit,init,fini}_array_start symbols must be word aligned in
linker scripts. If the section preceding the __*_array_start symbol
has an odd size, then a NULL byte will be present between the start
symbol and the .*_array section itself, when the section gets
automatically word-aligned.

This results in a branch to an invalid address when the CRT startup
code tries to run through the functions listed in the array sections.

>From de115144d05ecbaa82c9c737cc261715ca4b7d67 Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date: Mon, 3 Aug 2020 19:09:46 +0100
Subject: [PATCH 1/2] MSP430: Word align __*_array_start symbols in sim linker
 scripts

__{preinit,init,fini}_array_start symbols must be word aligned in
linker scripts. If the section preceding the __*_array_start symbol
has an odd size, then a NULL byte will be present between the start
symbol and the .*_array section itself, when the section gets
automatically word-aligned.

This results in a branch to an invalid address when the CRT startup
code tries to run through the functions listed in the array sections.
2020-08-07 15:16:43 +02:00
Dimitar Dimitrov 70cd4cbe65 pru: Fix memory corruption on syscall return
In the initial code I missed one level of pointer indirection. Instead
of storing errno in impure_data, _impure_ptr was corrupted.

Only simulator is impacted. Real targets have no OS and no syscalls.

This resolves a bunch of stdio cases from the GCC testsuite:
  FAIL->PASS: gcc.c-torture/execute/printf-2.c   -O0  execution test

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2020-07-02 11:00:33 +02:00
Richard Earnshaw f973a7d8be arm: Finish moving newlib to unified syntax for Thumb1
Most code in newlib already uses unified syntax, but just a couple of
laggards remain.  This patch removes these and means the the entire
code base has now been converted.
2020-03-02 13:33:11 +00:00
Georg Sauthoff 9b51beeb2a Only pass the minimum number of syscall arguments
Previously, __internal_syscall() compiled into asm-code that unconditionally
sets the syscall argument registers a0 to a5.

For example, the instruction sequence for a exit syscall looked like
this:

    li    a0, 1   # in ther caller of exit()
    # ...         # in newlib:
    li    a1, 0   # unused arguments
    li    a2, 0
    li    a3, 0
    li    a4, 0
    li    a5, 0
    li    a7, 93  # exit syscall number

(i.e. the binary contains then 5 superfluous instructions for this
one argument syscall)

This commit changes the RISC-V syscall code such that only the required
syscall argument registers are set.

GCC detects that argc is known at compile time and thus evaluates all the
if-statements where argc is used at compile time (tested with -O2 and -Os).
2020-02-11 09:41:52 +01:00
Sandra Loosemore cd78225a50 libgloss: Fix lseek semihosting bug on nios2 and m68k
When off_t is 32 bits, the value needs to be sign-extended to 64 bits
before shifting right to extract the high-order word.  Previously
negative offsets were incorrectly encoded.

Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
2020-02-06 11:02:38 +01:00
Jim Wilson 8ef32f2dcf RISC-V: Use newlib nano specific libm.
The libm gamma functions use the _gamma_signgam field of the reentrant
structure, which changes offset with the --enable-newlib-reent-small
configure option, which means we need to use a newlib nano specific
version of libm in addition to libc in the nano.specs file.  Reported
by Keith Packard.  There is a riscv-gnu-toolchain patch that goes
along with this to create the new libm_nano.a file.

Signed-off-by: Jim Wilson <jimw@sifive.com>
2020-01-31 12:42:52 +01:00
Keith Packard 9042d0ce65 Use remove-advertising-clause script to edit BSD licenses
This edits licenses held by Berkeley and NetBSD, both of which
have removed the advertising requirement from their licenses.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-01-29 19:03:31 +01:00
Jozef Lawrynowicz b74ba7dca6 MSP430: Support new msp430-elfbare target
Update the target triplet glob used when configuring for msp430 to
support a new msp430-elfbare target being added to gcc.
2019-12-16 10:15:06 +01:00
Anthony Green 78b7a3b0f8 Implement the unlink system call for the moxie simulator.
Corresponding support for this was just added to the gdb moxie simulator.
Unlink support is required by the GCC testsuite.
2019-12-14 05:27:38 -05:00
Jozef Lawrynowicz fa14f445ba Fix libgloss being built for disabled multilibs
Target libraries are considered to be built for GCC's "host", not GCC's
"target".  The "host" variable must be set by configure scripts using
"config-ml.in" to determine multilib support, otherwise disabled
multilibs (specified as a configure argument with --disable-<multilib>)
will still be built for the subdirectories those configure scripts
reside in.
2019-11-02 16:27:20 +01:00
Dimitar Dimitrov 0c7734673a Initial PRU port for libgloss and newlib
Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2019-10-31 14:47:19 -04:00
Jozef Lawrynowicz 0574317971 MSP430: Add missing build rule for unlink() to libgloss Makefile 2019-10-25 18:04:46 +02:00
Sandra Loosemore fa29288ef1 Adjust nios2 and m68k semihosting for sys/stat.h changes.
Commit 72ff9acad2 caused st_atime,
st_ctime, and st_mtime to be defined as macros.  This collided with
use of these identifiers as field names in struct gdb_stat (which
represents the GDB RSP encoding of struct stat) in libgloss
semihosting support for nios2 and m68k.  This patch renames the
affected fields of struct gdb_stat.

Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
2019-09-04 09:44:35 +02:00
Jeff Law d065170441 Fix regression in visium caused by sys/stat.h change 2019-08-20 18:15:41 +02:00
Jeff Johnston b99887c428 Revert previous change to sys/stat.h and fix cris libgloss
- revert previous fix which altered sys/stat.h
- fix libgloss/cris/gensyscalls to undef st_atime, st_mtime,
  and st_ctime macros which cannot be used with new_stat structure
2019-08-19 18:01:45 -04:00
Alexander Fedotov bf56973edc Align libgloss/arm and libc/sys/arm sources: miscellaneous fixes
1. Trim trailing spaces
2. Align comments, function declarations and definitions
2019-08-05 13:00:53 +01:00
Alexander Fedotov dfffe68303 Align libgloss/arm and libc/sys/arm sources: HeapInfo and __heap_limit
Applied changes from commit 8d98f95:

	* arm/crt0.S: Initialise __heap_limit when ARM_RDI_MONITOR is defined.
	* arm/syscalls.c: define __heap_limit global symbol.
	* arm/syscalls.c (_sbrk): Honour __heap_limit.

Applied changes from commit 8d98f95:
	Fixed semihosting for ARM when heapinfo not provided by debugger
2019-08-05 13:00:53 +01:00
Faraz Shahbazker 6661a67747 Align _end symbol to at least 4 in all MIPS scripts
Left-over part of commit 84b2a020da

The _end marker must be aligned to 4-bytes to ensure that the last
element written does not reach beyond the address of _end.  This is
also necessary as the termination condition is an equality test
instead of an ordered test so (_end - _fbss) must be a multiple of
4-bytes.  The alignment is already correct for mti*.ld files, fix
it for all remaining MIPS scripts that don't already align to at
least 4.
2019-07-30 09:38:13 +02:00
Jozef Lawrynowicz 884b05b54e MSP430: Remove .init/.fini sections
The .init/.fini sections are not required for msp430-elf, and add unnecessary
code bloat to the CRT library. These sections are specified as "unused" by
the MSP430 EABI.

.init existed to call __crt0_run_{init,preinit}_array which run through
the functions in .{init,preinit}_array.
__crt0_run_{init,preinit}_array are already dynamically included like the
other crt0 functions, so these can be placed before the call to main,
which ensures they are still called if needed.
With these functions moved, .init has no purpose and can be removed.

.fini existed to call __crt0_run_fini_array.
However, the "__msp430_fini" symbol which marks the start of .fini has
never been used, so no termination routines have ever been run for
msp430. On returning from main(), _exit() is called which just loops
forever.
So there is no current expectation that __crt0_run_fini_array will
get called by the CRT code. Further work is to ensure functions
registered with atexit can be optionally called during program termination,
and then __crt0_run_fini_array can be registered with atexit during
program initialization.

The mechanisms for supporting the "-minrt" option have also been removed.
"-minrt" enabled a "minimum runtime environment" by removing calls to
functions which run global static initializers and constructors. Since
this behaviour is now dynamic, and these functions are only included
when needed, the minrt versions of the CRT object files are no longer
required.
2019-07-24 16:22:00 -04:00
Alexander Fedotov 942f60d714 Stack Pointer and Stack Limit initialization refactored.
SP initialization changes:
  1. set default value in semihosting case as well
  2. moved existing SP & SL init code for processor modes in separate routine and made it as "hook"
  3. init SP for processor modes in Thumb mode as well

Add new macro FN_RETURN, FN_EH_START and FN_EH_END.
2019-07-23 10:00:06 +02:00
Alexander Fedotov a90aa583fb Arm: Use lrdimon-v2m_nano when semihosting v2 and nano selected respectively 2019-06-25 13:38:44 -04:00
Jim Wilson 77ac27dcf8 RISC-V: Add _LITE_EXIT in crt0.S.
This patch adds _LITE_EXIT in crt0.S to enable "lite exit" technique in
RISC-V. The changes have been tested in riscv/riscv-gnu-toolchain by
riscv-dejagnu with riscv-sim.exp/riscv-sim-nano.exp.
2019-05-22 17:41:25 -07:00
Faraz Shahbazker a9a0d219a4 Make .data section placement coincide with _fdata symbol
The _fdata symbol in MIPS linker scripts is aligned to a 16-byte
boundary.  The ALIGN function does not implicitly update current
location counter.  If sections positioned after the assignment
do not have the same natural alignment as the ALIGN function then
the start of the section group will not coincide with the value
of the symbol.

Given the linker command sequence:
  symbol = ALIGN (NN);
  (.section*)
where the idiom implies a desire to mark the beginning of .section
with symbol, there must be an assignment to the location counter
between the assignment to symbol and the .section pattern.

libgloss/
	* mips/array.ld: Update the location counter to match _fdata.
	* mips/cfe.ld: Likewise.
	* mips/ddb-kseg0.ld: Likewise.
	* mips/ddb.ld: Likewise.
	* mips/dve.ld: Likewise.
	* mips/idt.ld: Likewise.
	* mips/idt32.ld: Likewise.
	* mips/idt64.ld: Likewise.
	* mips/idtecoff.ld: Likewise.
	* mips/jmr3904app-java.ld: Likewise.
	* mips/jmr3904app.ld: Likewise.
	* mips/jmr3904dram-java.ld: Likewise.
	* mips/jmr3904dram.ld: Likewise.
	* mips/lsi.ld: Likewise.
	* mips/mti32.ld: Likewise.
	* mips/mti64.ld: Likewise.
	* mips/mti64_64.ld: Likewise.
	* mips/mti64_n32.ld: Likewise.
	* mips/nullmon.ld: Likewise.
	* mips/pmon.ld: Likewise.
	* mips/sde32.ld: Likewise.
	* mips/sde64.ld: Likewise.
2019-05-15 15:30:25 -04:00
Faraz Shahbazker ab2901c843 Fix order of eh_frame sections in linker scripts
The compiler driver positions the linker script at the end of the linker
command-line, after crtend.o.  As a result, any INPUT objects and archive
GROUPs introduced by the linker script are placed after crtend.o and the
end-of-frame marker provided by crtend.o ends up in between .eh_frames
instead of being at the end.

This has always been a problem, but a binutils update to clean-up
redundant NULL markers in .eh_frame exposes it as a execution failure in
exception-handling tests.  This patch re-orders .eh_frames in all
MIPS linker scripts so that the one from crtend.o is always placed last.

libgloss/
	* mips/array.ld: Re-order to place .eh_frame from crtend.o
	after all other .eh_frame sections.
	* mips/cfe.ld: Likewise.
	* mips/ddb-kseg0.ld: Likewise.
	* mips/ddb.ld: Likewise.
	* mips/dve.ld: Likewise.
	* mips/idt.ld: Likewise.
	* mips/idt32.ld: Likewise.
	* mips/idt64.ld: Likewise.
	* mips/jmr3904app.ld: Likewise.
	* mips/lsi.ld: Likewise.
	* mips/mti32.ld: Likewise.
	* mips/mti64.ld: Likewise.
	* mips/mti64_64.ld: Likewise.
	* mips/mti64_n32.ld: Likewise.
	* mips/nullmon.ld: Likewise.
	* mips/pmon.ld: Likewise.
	* mips/sde32.ld: Likewise.
	* mips/sde64.ld: Likewise.
2019-04-29 10:44:24 +02:00
Jozef Lawrynowicz f811485ffb MSP430: Make the inclusion of run_*_array fns depend on defined assembler symbols
Many of the MSP430 crt functions (e.g. to initialize bss) are linked
"dynamically", based on symbols defined in the program.
The GNU assembler defines the symbols corresponding to the crt
functions by examining the section names in the input file.

If GCC has been configured with --enable-initfini-array, then
.init_array and .fini_array will hold pointers to global
constructors/destructors. These sections can also hold functions that
need to be executed for other purposes.

The attached patch puts the __crt0_run_{preinit,init,fini}_array and
__crt0_run_array functions in their own object files, so they will
only be linked when needed.

Successfully regtested the DejaGNU GCC testsuite using the binutils and
newlib changes together with GCC trunk configured with
--enable-initfini-array.
2019-04-18 10:29:24 +02:00
Jozef Lawrynowicz 38ecf252e5 Fix incorrect assembly code in _msp430_run_array 2019-04-16 13:23:46 +02:00
Jozef Lawrynowicz a2e81650d1 Fix definition of write() to use const char * for the type of the buffer 2019-04-15 14:21:59 +02:00
Alexander Fedotov a0b0a4a018 Align comments and spaces in libgloss/arm/crt0.S and newlib/libc/sys/arm/crt0.S to ease further code alignment. 2019-04-12 14:34:47 +01:00
Christophe Lyon cc430406ac Include code in trap.S for APCS only.
The code in trap.S is to support the old APCS chunked stack variant,
which dates back to the Acorn days, so put it under #ifndef
__ARM_EABI__.

	* libgloss/arm/trap.S: Use __ARM_EABI rather than PREFER_THUMB.
	* newlib/libc/sys/arm/trap.S: Use __ARM_EABI rather than
	__thumb2__.
2019-04-11 14:20:21 +00:00
Sandra Loosemore c4c6140463 Add a dummy interrupt handler to nios2 crt0.s.
The location of the handler at offset 0x20 from the start of memory,
immediately after the 32-byte reset vector, matches the expectations
of real hardware (e.g., a 3c120 board).
2019-04-03 18:02:47 +02:00
Jeff Johnston 1cff36cdd7 Add semihosting docs for nios2 and m68k
Author: Sandra Loosemore <sandra@codesourcery.com>
Date:   Wed Mar 13 20:22:16 2019 -0700

    Add semihosting documentation for nios2 and m68k.

    QEMU maintainers have asked for a specification of the nios2
    semihosting interface.  Since it's essentially a copy of the m68k
    implementation, this patch adds a document for that target as well.
2019-03-14 10:23:25 -04:00
Tamar Christina 1ba66fe8fa AArch32: Fix the build for M class semihosting
The M class cores don't support Semihosting v2 mixed mode, but we were
accidentally using the new immediates for it.  My last patch changed the
immediates which broke the build because doing a full multi-lib build
including M architectures now results in an assembler error instead of
silently doing the wrong thing.

This fixes the issue by changing the defines around such that According
to the specs any M class build uses the normal semihosting instructions.

Regtested on arm-none-eabi and no issues, using a build with m class
multilibs too.
2019-02-11 12:49:23 +01:00
Tamar Christina 6d6a623e7d AArch32: Add support for HLT to Mixed Mode models
The Semihosting v2 protocol requires us to output the Armv8-a HLT instruction
when in mixed mode (SEMIHOST_V2_MIXED_MODE), however it also requires this to
be done for Armv7-a and earlier architectures.

The HLT instruction is defined in the undefined encoding space for older
architectures but simulators such as QEMU already trap on it [1] for all
architectures and is a requirement for semihosting v2 [2].

Unfortunately the GAS restricts the use of HLT to Armv8-a which requires us to
use the instruction encodings we want directly in crt0.

This patch does this, I have not updated newlib/libc/* as that is quite out of
date already.  A proper sync is needed in order to get things back in sync.

A different patch for this would be best.

[1] 19a6e31c9d
[2] https://developer.arm.com/docs/100863/latest/the-semihosting-interface
2019-02-08 12:37:16 +01:00
Jim Wilson 7e72be1c39 Add libgloss install-pdf and install-html targets.
The toplevel makefile used by binutils/gcc/newlib/etc has install-pdf and
install-html targets, but they fail because libgloss doesn't support them.
Tested with an arm-eabi combined tree build and install, and verifying that
the install-pdf and install-html targets now work, and that the pdf and html
doc files are now in the install tree.

	libgloss/
	* Makefile.in (install-html, install-pdf): New.
	* doc/Makefile.in (htmldir, pdfdir): New.
	(porting.ps): Delete white space on blank line.
	(install-pdf, install-html): New.
2018-11-20 11:13:34 +01:00
Matthew Malcomson 6dbd190111 Enable return code with semi-hosting SYS_EXIT_EXTENDED
The _exit function currently passes -1 as a "sig" to the _kill function as an
invalid signal number so that _kill can distinguish between an abort and a
standard exit.

For boards using the SYS_EXIT_EXTENDED semi-hosting operation to return a
status code, this means that the "status" paramter to _exit is ignored and the
return code is always -1.
https://developer.arm.com/docs/100863/latest/semihosting-operations/sys_exit_extended-0x20

This patch puts shared code between _kill and _exit into a new function
_kill_shared that takes the semi-hosting "reason" to use (if semi-hosting is
available) as an argument.

For semi-hosting _kill_shared provides that "reason".

Without the "sig" argument being used to distinguish between a normal and
abnormal exit, the _exit function can provide the return code to be used if the
SYS_EXIT_EXTENDED operation is available.

Hence the exit code can be returned.
2018-11-19 13:46:19 +01:00
Tamar Christina 9a7f131e0e Initialize SVE system registers.
This patch initializes the SVE system registers if available
and initializes the vector length to the maximum supported.

This is done according to the SVE specification [1].

[1] https://developer.arm.com/docs/ddi0584/latest/arm-architecture-reference-manual-supplement-the-scalable-vector-extension-sve-for-armv8-a
2018-10-31 11:14:57 +00:00
Christophe Lyon b6ba19e355 [Aarch64] Syscalls: fix prototypes
This patch is similar the arm one committed recently.

2018-10-08  Christophe Lyon  <christophe.lyon@linaro.org>

	* libgloss/aarch64/syscalls.c (_sbrk): Fix prototype.
	(_getpid, _write, _swiwrite, _lseek, _swilseek, _read, _wriread):
	Likewise.
2018-10-08 14:39:16 +01:00
Christophe Lyon 8a7536e91d [ARM] Make _kill() a noreturn function.
AngelSWI_Reason_ReportException does not return accoring to the ARM
documentation, so it is valid to mark _kill() as noreturn.  This way,
the compiler does not warn about _exit() returning a value despite
being noreturn.

2018-10-01  Christophe Lyon  <christophe.lyon@linaro.org>

	* libgloss/arm/_exit.c (_exit): Declare _kill() as noreturn.
	* libgloss/arm/_exit.c (_kill): Likewise. Remove the return
	statements.
	* newlib/libc/sys/arm/syscalls.c (_kill): Likewise..
2018-10-08 14:35:43 +01:00
Christophe Lyon 9edf0810db [Aarch64] Fix warning in _sbrk
2018-10-01  Christophe Lyon  <christophe.lyon@linaro.org>

    	* libgloss/aarch64/syscalls.c (_sbrk): Cast "__heap_limit" to
    	"char *".
2018-10-05 13:21:54 +01:00
Hans-Peter Nilsson a6837ca34f Committed, CRIS port: fix fallout from time_t defaulting to 64 bits, part 1
It's been a while...  I see the CRIS port broke with the
time_t-default-to-64-bit change, observable by a few test-cases in the
gcc fortran(!) tests failing, regressing when trying a recent newlib.

This is a two-part belt-and-suspenders change: adjust the CRIS port
gettimeofday syscall (the only one in newlib/CRIS passing a time_t or
struct timeval) to handle a userspace 64-bit time_t and secondly default
time_t to 32-bit long anyway.  I considered making the local
"kernel_timeval" copy in _gettimeofday conditional on (userspace) time_t
being 64 bits, but thought it not worth bothering with the few move insns.
The effect of a 64-bit time_t is however observable as longer simulation
time when running the gcc testsuite and as bigger binaries without any
actual upside from the larger time_t size, so I thought better make the
default for this port go back to being a "long" again.

Tested by running the gcc testsuite over the three combinations of two
parts of the patch and observing the expected changes.  Committed.

libgloss:
	Adjust for syscall and userspace having different time_t or timeval.
	* cris/linunistd.h (kernel_time_t, kernel_suseconds_t, kernel_timeval):
	New types.
	(gettimeofday): Change the type of the first argument to be a
	pointer to a struct kernel_timeval.
	* cris/gensyscalls (_gettimeofday): Use an intermediate struct
	kernel_timeval for the syscall and initialize the result from
	that.

Signed-off-by: Hans-Peter Nilsson <hp@axis.com>
2018-09-13 17:57:11 +02:00
Denis Ivanov 9e032fd939 RISC-V: Fix _sbrk, it's failed only when return value is -1.
Signed-off-by: Kito Cheng <kito.cheng@gmail.com>
2018-08-29 15:49:00 +02:00