Re: git: 47ff149afaea - main - Move arm64 EENTRY uses before ENTRY
- In reply to: Jessica Clarke : "Re: git: 47ff149afaea - main - Move arm64 EENTRY uses before ENTRY"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 03 Apr 2023 22:03:15 UTC
On 31 Mar 2023, at 17:00, Jessica Clarke <jrtc27@FreeBSD.org> wrote: > On 31 Mar 2023, at 16:56, Andrew Turner <andrew@FreeBSD.org> wrote: >> >> The branch main has been updated by andrew: >> >> URL: https://cgit.FreeBSD.org/src/commit/?id=47ff149afaea6a403b8d044e26673bc3cd605fe4 >> >> commit 47ff149afaea6a403b8d044e26673bc3cd605fe4 >> Author: Andrew Turner <andrew@FreeBSD.org> >> AuthorDate: 2023-03-31 12:34:51 +0000 >> Commit: Andrew Turner <andrew@FreeBSD.org> >> CommitDate: 2023-03-31 15:45:31 +0000 >> >> Move arm64 EENTRY uses before ENTRY >> >> The ENTRY macro adds instructions to the start of a function but not >> EENTRY. To use these instructions in both functions move the EENTRY >> use before the ENTRY use. > > This doesn’t work. ENTRY is what has the .text and .align 2, so this > could have the EENTRY symbols be unaligned or in the wrong section. In > this specific case it happens to work, but in general this is broken > and so your original problem needs fixing another way. Or I guess you > could make both ENTRY and EENTRY include the .text and .align 2 (but on > other architectures with variable-length instructions, or even on arm64 > were you to ever want to over-align functions, this would still be > insufficient). Ping. Jess >> Sponsored by: Arm Ltd >> --- >> sys/arm64/arm64/memcpy.S | 4 ++-- >> sys/arm64/arm64/support.S | 8 ++++---- >> 2 files changed, 6 insertions(+), 6 deletions(-) >> >> diff --git a/sys/arm64/arm64/memcpy.S b/sys/arm64/arm64/memcpy.S >> index d5fbfa64e0fa..b394d6c1d30a 100644 >> --- a/sys/arm64/arm64/memcpy.S >> +++ b/sys/arm64/arm64/memcpy.S >> @@ -55,8 +55,8 @@ >> The loop tail is handled by always copying 64 bytes from the end. >> */ >> >> -ENTRY(memcpy) >> EENTRY(memmove) >> +ENTRY(memcpy) >> add srcend, src, count >> add dstend, dstin, count >> cmp count, 128 >> @@ -237,6 +237,6 @@ L(copy64_from_start): >> stp B_l, B_h, [dstin, 16] >> stp C_l, C_h, [dstin] >> ret >> -EEND(memmove) >> END(memcpy) >> +EEND(memmove) >> >> diff --git a/sys/arm64/arm64/support.S b/sys/arm64/arm64/support.S >> index 885af5676159..28ac1d553fbc 100644 >> --- a/sys/arm64/arm64/support.S >> +++ b/sys/arm64/arm64/support.S >> @@ -175,15 +175,15 @@ END(fueword32) >> * long fueword(volatile const void *, int64_t *) >> * int64_t fueword64(volatile const void *, int64_t *) >> */ >> -ENTRY(fueword) >> EENTRY(fueword64) >> +ENTRY(fueword) >> check_user_access 0, (VM_MAXUSER_ADDRESS-7), fsu_fault_nopcb >> fsudata ldtr, x0, 0 >> str x0, [x1] /* Save the data in kernel space */ >> mov x0, #0 /* Success */ >> ret /* Return */ >> -EEND(fueword64) >> END(fueword) >> +EEND(fueword64) >> >> /* >> * int subyte(volatile void *, int) >> @@ -218,14 +218,14 @@ END(suword32) >> /* >> * int suword(volatile void *, long) >> */ >> -ENTRY(suword) >> EENTRY(suword64) >> +ENTRY(suword) >> check_user_access 0, (VM_MAXUSER_ADDRESS-7), fsu_fault_nopcb >> fsudata sttr, x1, 0 >> mov x0, #0 /* Success */ >> ret /* Return */ >> -EEND(suword64) >> END(suword) >> +EEND(suword64) >> >> ENTRY(setjmp) >> /* Store the stack pointer */