From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1035) id 929FE393C877; Wed, 30 Sep 2020 10:23:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 929FE393C877 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Richard Earnshaw To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] libgloss: aarch64: Add support for Armv8-R AArch64 X-Act-Checkin: newlib-cygwin X-Git-Author: Alex Coplan via Newlib X-Git-Refname: refs/heads/master X-Git-Oldrev: c5bdf60ac46401a51a7e974333d9622966e22d67 X-Git-Newrev: 63a901705ee7e720820539c8732caeeb970f77e4 Message-Id: <20200930102333.929FE393C877@sourceware.org> Date: Wed, 30 Sep 2020 10:23:33 +0000 (GMT) X-BeenThere: newlib-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib GIT logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Sep 2020 10:23:33 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=63a901705ee7e720820539c8732caeeb970f77e4 commit 63a901705ee7e720820539c8732caeeb970f77e4 Author: Alex Coplan via Newlib Date: Tue Sep 29 17:27:18 2020 +0100 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. Diff: --- libgloss/aarch64/Makefile.in | 3 ++- libgloss/aarch64/cpu-init/Makefile.in | 8 +++++--- libgloss/aarch64/cpu-init/rdimon-aem-el3.S | 11 +++++++++++ libgloss/aarch64/elf-aem-v8-r.specs | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/libgloss/aarch64/Makefile.in b/libgloss/aarch64/Makefile.in index 546557e3c..b8c2ca43c 100644 --- a/libgloss/aarch64/Makefile.in +++ b/libgloss/aarch64/Makefile.in @@ -85,7 +85,8 @@ RDIMON_BSP = librdimon${${MULTILIBNAME}}.a RDIMON_OBJS = $(patsubst %,rdimon-%,$(OBJS)) RDIMON_SCRIPTS = rdimon${${MULTILIBNAME}}.specs \ aem-ve${${MULTILIBNAME}}.specs \ - aem-validation${${MULTILIBNAME}}.specs + aem-validation${${MULTILIBNAME}}.specs \ + aem-v8-r${${MULTILIBNAME}}.specs RDIMON_INSTALL = install-rdimon CFLAGS = -g diff --git a/libgloss/aarch64/cpu-init/Makefile.in b/libgloss/aarch64/cpu-init/Makefile.in index 08aa1760f..c96f4ee0e 100644 --- a/libgloss/aarch64/cpu-init/Makefile.in +++ b/libgloss/aarch64/cpu-init/Makefile.in @@ -62,7 +62,7 @@ AR = @AR@ LD = @LD@ RANLIB = @RANLIB@ -CPU_INIT_OBJS = rdimon-aem-el3.o +CPU_INIT_OBJS = rdimon-aem-el3.o rdimon-aem-v8-r.o CPU_INIT_INSTALL = install-cpu-init CFLAGS = -g @@ -79,10 +79,12 @@ all: ${CPU_INIT_OBJS} .PHONY: test test: -# Static pattern rule for assembling cpu init files to object files. -${CPU_INIT_OBJS}: %.o: %.S +rdimon-aem-el3.o : rdimon-aem-el3.S $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< +rdimon-aem-v8-r.o : rdimon-aem-el3.S + $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -DBUILD_FOR_R_PROFILE -o $@ -c $< + clean mostlyclean: rm -f a.out core *.i *.o *-test *.srec *.dis *.x diff --git a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S index e00f0b2c8..0296a8054 100644 --- a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S +++ b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S @@ -43,7 +43,9 @@ _init_vectors: /* Installs a table of exception vectors to catch and handle all exceptions by terminating the process with a diagnostic. */ adr x0, vectors +#ifndef BUILD_FOR_R_PROFILE msr vbar_el3, x0 +#endif msr vbar_el2, x0 msr vbar_el1, x0 ret @@ -110,6 +112,14 @@ vectors: .text .align 2 _flat_map: +#ifdef BUILD_FOR_R_PROFILE + mrs x0, sctlr_el2 + orr x0, x0, #1 // SCTLR_EL2.M (enable MPU) + orr x0, x0, #(1 << 17) // SCTLR_EL2.BR (background regions) + msr sctlr_el2, x0 + isb + ret +#else /* Page table setup (identity mapping). */ adrp x0, ttb add x0, x0, :lo12:ttb @@ -173,6 +183,7 @@ _flat_map: isb .Lnosve: ret +#endif .data .align 12 diff --git a/libgloss/aarch64/elf-aem-v8-r.specs b/libgloss/aarch64/elf-aem-v8-r.specs new file mode 100644 index 000000000..4daeffd11 --- /dev/null +++ b/libgloss/aarch64/elf-aem-v8-r.specs @@ -0,0 +1,20 @@ +# elf-aem-v8-r.specs +# +# Spec file for AArch64 baremetal newlib, libgloss on Armv8-R with version 2 of +# AngelAPI semi-hosting. + +%rename link old_link + +*link: +-Ttext-segment 0x10000 %(old_link) + +%rename lib libc + +*libgloss: +-lrdimon + +*lib: +cpu-init/rdimon-aem-v8-r.o%s --start-group %(libc) %(libgloss) --end-group + +*startfile: +crti%O%s crtbegin%O%s %{!pg:rdimon-crt0%O%s} %{pg:rdimon-crt0%O%s}