Commit Graph

34 Commits

Author SHA1 Message Date
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
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 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
Jeff Johnston 2ec54fb1d1 Patch from Richard Earnshaw <Richard.Earnshaw@arm.com>
* aarch64/cpu-init/rdimon-aem-el3.S (cpu_init_hook): Simplify
  entry/exit sequences.  Add CFI unwind rules.
2018-08-01 14:02:56 -04:00
Yaakov Selkowitz 70ee6b17df ansification: remove _EXFUN, _EXFUN_NOTHROW
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17 11:47:29 -06:00
Yaakov Selkowitz eea249da3b ansification: remove _PARAMS
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17 11:47:13 -06:00
Alexander Fedotov f6ef29c48f Fixed semihosting for AArch64 when heapinfo parameters are not provided by debugger 2017-10-24 17:27:51 +02:00
Alexander Fedotov-B55613 3ec9892f5d move ILP32 sanity check on heap base code under ARM_RDI_MONITOR 2017-08-24 14:41:19 +02:00
Szabolcs Nagy cfa64a86d1 Fix crt0 init fini code
__USES_INITFINI__ ifdef was incorrectly copied from arm
(it's an arm backend thing in gcc, not meaningful on aarch64)
2017-08-17 13:45:26 +02:00
Alexander Fedotov-B55613 7e69f983a4 fix typo in AArch64 crt0 2017-08-15 16:19:25 +02:00
Alexander Fedotov-B55613 1f6644876e use stack from linker script when nosys 2017-08-14 10:18:14 +02:00
Yao Qi 32ca315312 Don't fetch command line options without semi-hosting
Nowadays, the code fetching command line options via semi-hosting are
unconditionally pulled in, so that the semi-hosting code is still
there even I compile with option --specs=nosys.specs.

gdb ./aarch64-none-elf/libgloss/aarch64/crt0.o

(gdb) disassemble _start

   0x0000000000000050 <+80>:	ldr	x1, 0x128 <_cpu_init_hook+48>
   0x0000000000000054 <+84>:	mov	w0, #0x15
   0x0000000000000058 <+88>:	hlt	#0xf000

This patch fixes this problem by wrapping the code by ARM_RDI_MONITOR.
When semi-hosting is not used, set command line options to NULL.
2017-08-09 17:43:09 +02:00
Tamar Christina 61ddc7a436 Fix crt0 overwriting.
On AArch64 we currently always link in crt0 regardless of if another
one is being provided by something else, like rdimon.a. This was never
an issue before as nosys was not supported on AArch64.

This updates the specs to supply a different crt0 when a semihosting
call is required.

Signed-off-by: Tamar Christina <tamar.christina@arm.com>
2017-08-09 14:50:13 +02:00
Tamar Christina cd26662dc5 Previous patch to support nosys.specs accidentally broke validation specs because ARM_RDI_MONITOR was never passed to the build rule for crt0.
This fixed the compile for nosys and validation specs
but nosys won't run because of existing limitations to
aarch64's syscalls.c, it requires semihosting to get
commandline arguments and heap info without having a
fallback method as ARM does.

Signed-off-by: Tamar Christina <tamar.christina@arm.com>
2017-07-21 10:41:37 +02:00
Tamar Christina 13665a7c30 Fix link when nosys.specs is used to link
This patch fixes the issue where nosys.specs is used to link.
e.g. The use of crt0 without any support for semihosting requested.

The AArch64 crt0 was missing an #ifdef for the initialise_monitor_handles
which was causing the link to fail. Sorry for missing this before.
2017-07-14 10:36:32 +02:00
Tamar Christina ddb6f8a02a Add support for Semihosting v2 support for AArch64 in libgloss.
Semihosting v2 changes are documented here:
https://developer.arm.com/docs/100863/latest/

The biggest change is the addition of an extensions mechanism
to add more extensions in the future.

Signed-off-by: Tamar Christina <tamar.christina@arm.com>
2017-07-05 14:41:27 +02:00
Tamar Christina bfa3bbcf33 Adds the needed build system changes in order to compile and create the new libraries for Semihosting v2.
This uses the new recursive build target in multi-build.in

For AArch64 no new spec files are needed but the makefiles
are modified to keep them in sync with the ARM ones.

Signed-off-by: Tamar Christina <tamar.christina@arm.com>
2017-07-05 14:41:27 +02:00
Laurent ALFONSI 9b1167219a ARM/AArch64: Fix GetCmdLine semihosting directives
When simulating arm code, the target program startup code (crt0) uses
semihosting invocations to get the command line from the simulator. The
simulator returns the command line and its size into the area passed in
parameter. (ARM 32-bit specifications :
http://infocenter.arm.com/help/topic/com.arm.doc.dui0058d/DUI0058.pdf
chapter "5.4.19 SYS_GET_CMDLINE").

The memory area pointed by the semihosting register argument is located
in .text section (usually not writtable (RX)).

If we run this code on a simulator that respects this rights properties
(qemu user-mode for instance), the command line will not be written to
the .text program memory, in particular the length of the string. The
program runs with an empty command line. This problem hasn't been seen
earlier probably because qemu user-mode is not so much used, but this can
happen with another simulator that refuse to write in a read-only segment.

With this modification, the command line can be correctly passed to the
target program.

Changes:
- libgloss/arm/crt0.S : Arguments passed to the AngelSWI_Reason_GetCmdLine
  semihosting invocation are placed into .data section instead of .text
- libgloss/aarch64/crt0.S : Idem for aarch64 AngelSVC_Reason_GetCmdLine
  semihosting.
2017-05-19 15:45:58 -04:00
Richard Earnshaw 75d1027ccd * aarch64/Makefile.in (RDIMON_SCRIPTS): Rule to build in-tree copies
of scripts.
	(all): Build the in-tree copies of the scripts.
	(clean): Also delete the in-tree copies of the scripts.
2014-02-03 10:30:34 +00:00
Corinna Vinschen 645ec39159 * aarch64/cpu-init/rdimon-aem-el3.S (flat_map): Use bic-immediate
form to clear WXN bit.
2014-01-28 11:16:19 +00:00
Jeff Johnston 0388ee3d90 2014-01-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* aarch64/cpu-init/rdimon-aem-el3.S (flat_map): Clear WXN bit
        in SCTLR_EL3. Add dsb.
2014-01-24 19:01:15 +00:00
Marcus Shawcroft 37d3b04f88 [AArch64] Set errno in ftruncate() and truncate(). 2013-11-21 15:53:52 +00:00
Marcus Shawcroft 7c62befe16 [AArch64] Provide ftruncate() and truncate() stubs. 2013-11-18 10:04:56 +00:00
Corinna Vinschen 387b584725 * aarch64/crt0.S: Remove 'start'.
* arm/crt0.S: Ditto.
	* arm/redboot-crt0.S: Ditto.
2013-08-12 11:27:37 +00:00
Marcus Shawcroft 81fc3e842a [AArch64] Ensure vector table is page aligned.
2013-07-12  Marcus Shawcroft  <marcus.shawcroft@arm.com>

        * aarch64/cpu-init/rdimon-aem-el3.S (vectors): Page align.
2013-07-12 09:42:46 +00:00
Corinna Vinschen a5be77b2fe * aarch64/syscalls.c (stack_ptr): Defined with asm ("wsp") if __ILP32__
is defined.
2013-07-04 10:21:52 +00:00
Corinna Vinschen b5cfad0bf1 * aarch64/syscalls.c (POINTER_TO_PARAM_BLOCK_T): New macro.
(initialise_monitor_handles): Replace cast with macro
	POINTER_TO_PARAM_BLOCK_T.
	(_swiread): Likewise.
	(_swiwrite): Likewise.
	(_swiopen): Likewise.
	(_unlink): Likewise.
	(_system): Likewise.
	(_rename): Likewise.
2013-06-28 09:34:46 +00:00
Corinna Vinschen 15b1ed6dc7 * aarch64/crt0.S (GEN_DWORD): New macro definition.
(PTR_REG): Ditto.
	(PTR_SIZE): Ditto.
	(PTR_LOG_SIZE): Ditto.
	(start): Use GEN_DWORD to replace the .dword of HeapBase,
	__bss_start__, __bss_end__, FUNCTION(_fini), env and
	CommandLine; when __ILP32__ is defined, set the stack base to
	the top end of the 32-bit address space if the returned value
	from the Angel API call is larger than or equal to 4 GiB.
	Also carry out sanity check on the heap base; abort if the
	base is larger than or equal to 4 GiB.  Use other new
	macros in the instructions that processes the argv arrays.
	(StackBase): New lable; replace __stack_base__.
	(__stack_base__): Set with StackBase or StackBase + 4.
2013-06-25 12:06:15 +00:00
Marcus Shawcroft 289a9a6d9b [AArch64] Honour CFLAGS.
2013-04-19  Yufeng Zhang  <yufeng.zhang@arm.com>

	* aarch64/Makefile.in (rdimon-crt0.o, rdimon-trap.o)
	(rdimon-_exit.o, rdimon-_kill.o, rdimon-syscalls.o)
	(rdimon-libcfunc.o): Add $(CFLAGS) to the compiler command line.
	* aarch64/cpu-init/Makefile.in (${CPU_INIT_OBJS}): Add $(CFLAGS)
	to the compiler command line.
2013-04-19 14:24:45 +00:00
Marcus Shawcroft 761dfa99ba Correcting my previous commit.
In my previous commit I forget to cvs add two new files, this commit
corrects my mistake.
2013-01-22 09:49:27 +00:00
Marcus Shawcroft 085461c3ec 2013-01-18 Marcus Shawcroft <marcus.shawcroft@arm.com>
* aarch64/Machine.in (RDIMON_SCRIPTS):
        Add aem-ve.specs and aem-validation.specs.
        * aarch64/elf-aem-validation.specs: New file.
        * aarch64/elf-aem-ve.specs: New file.
2013-01-18 15:52:32 +00:00
Corinna Vinschen 77a74ed692 * aarch64/configure.in: Replace the direct generation of
cpu-init/Makefile.in with AC_CONFIG_SUBDIRS(cpu-init).
	* aarch64/configure: Re-generate.
	* aarch64/cpu-init/Makefile.in (objtype): Remove.
	(Makefile, config.status): Update the rules.
	* aarch64/cpu-init/aclocal.m4: New file (generated).
	* aarch64/cpu-init/configure.in: New file.
	* aarch64/cpu-init/configure: New file (generated).
2012-11-23 10:43:31 +00:00
Jeff Johnston cdf81c0c4c 2012-09-26 Ian Bolton <ian.bolton@arm.com>
Jim MacArthur  <jim.macarthur@arm.com>
        Marcus Shawcroft  <marcus.shawcroft@arm.com>
        Nigel Stephens  <nigel.stephens@arm.com>
        Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
        Richard Earnshaw  <rearnsha@arm.com>
        Sofiane Naci  <sofiane.naci@arm.com>
        Tejas Belagod  <tejas.belagod@arm.com>
        Yufeng Zhang  <yufeng.zhang@arm.com>

        * aarch64/Makefile.in: New file.
        * aarch64/_exit.c: New file.
        * aarch64/_kill.c: New file.
        * aarch64/aclocal.m4: Generated.
        * aarch64/configure: Generated.
        * aarch64/configure.in: New file.
        * aarch64/cpu-init/Makefile.in: New file.
        * aarch64/cpu-init/rdimon-aem-el3.S: New file.
        * aarch64/crt0.S: New file.
        * aarch64/elf-rdimon.specs: New file.
        * aarch64/libcfunc.c: New file.
        * aarch64/svc.h: New file.
        * aarch64/syscalls.c: New file.
        * configure.in: Add AArch64.
        * configure: Re-generated.
2012-09-26 20:11:54 +00:00