* [AArch64] use stack symbol provided by linker for nosys
@ 2017-08-11 13:55 Alexander Fedotov
2017-08-14 8:21 ` Corinna Vinschen
2017-08-15 12:47 ` Szabolcs Nagy
0 siblings, 2 replies; 11+ messages in thread
From: Alexander Fedotov @ 2017-08-11 13:55 UTC (permalink / raw)
To: newlib
[-- Attachment #1: Type: text/plain, Size: 102 bytes --]
Use the same approach for stack setup as for ARM when nosys is used.
Comments are appreciated.
Alex
[-- Attachment #2: aarch64_nosys_stack.patch --]
[-- Type: application/octet-stream, Size: 1935 bytes --]
From c049b628de5cd706721a57fa735c475bcde4ee5f Mon Sep 17 00:00:00 2001
From: Alexander Fedotov-B55613 <b55613@freescale.com>
Date: Fri, 11 Aug 2017 16:47:02 +0300
Subject: [PATCH] use stack from linker script when nosys
---
libgloss/aarch64/crt0.S | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
index 3bf0278..0c669d9 100644
--- a/libgloss/aarch64/crt0.S
+++ b/libgloss/aarch64/crt0.S
@@ -83,7 +83,7 @@
FUNC_START _start
/* Start by setting up a stack */
-
+#ifdef ARM_RDI_MONITOR
/* Issue Angel SVC to read memory info.
ptr to ptr to 4 words to receive data. */
@@ -101,6 +101,10 @@
exposed here in the HeapInfo Angel call. */
ldr x0, .LC0 /* point at returned values */
ldr x1, [x0, #8] /* get heap_limit */
+#else
+ /* Set up the stack pointer to a fixed value. */
+ ldr x1, .Lstack
+#endif
#ifdef __ILP32__
/* Sanity check on the heap base. */
ldr x0, [x0] /* get heap_base */
@@ -149,10 +153,12 @@
bl FUNCTION (initialise_monitor_handles)
#endif
+#ifdef __USES_INITFINI__
/* .init and .fini sections are used to create constructors
and destructors. Here we call the _init function and arrange
for _fini to be called at program exit. */
ldr x0, .Lfini
+#endif
bl FUNCTION (atexit)
bl FUNCTION (_init)
@@ -237,14 +243,24 @@ FUNCTION (_cpu_init_hook):
ret
.align 3
+#ifdef ARM_RDP_MONITOR
.LC0:
GEN_DWORD HeapBase
+#else
+.Lstack:
+ GEN_DWORD __stack
+
+ .weak __stack
+#endif
.LC1:
GEN_DWORD __bss_start__
.LC2:
GEN_DWORD __bss_end__
+#ifdef __USES_INITFINI__
.Lfini:
GEN_DWORD FUNCTION(_fini)
+#endif
+#ifdef ARM_RDI_MONITOR
.Lenvp:
GEN_DWORD env
.Lcmdline:
@@ -268,3 +284,4 @@ CommandLine: .space 256,0 /* Maximum length of 255 chars handled. */
AngelSVCArgs:
GEN_DWORD CommandLine
.dword 255
+#endif
\ No newline at end of file
--
2.7.4
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-11 13:55 [AArch64] use stack symbol provided by linker for nosys Alexander Fedotov
@ 2017-08-14 8:21 ` Corinna Vinschen
2017-08-15 12:47 ` Szabolcs Nagy
1 sibling, 0 replies; 11+ messages in thread
From: Corinna Vinschen @ 2017-08-14 8:21 UTC (permalink / raw)
To: newlib
[-- Attachment #1: Type: text/plain, Size: 246 bytes --]
On Aug 11 16:55, Alexander Fedotov wrote:
> Use the same approach for stack setup as for ARM when nosys is used.
>
> Comments are appreciated.
>
> Alex
Pushed.
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-11 13:55 [AArch64] use stack symbol provided by linker for nosys Alexander Fedotov
2017-08-14 8:21 ` Corinna Vinschen
@ 2017-08-15 12:47 ` Szabolcs Nagy
2017-08-15 13:35 ` Tamar Christina
1 sibling, 1 reply; 11+ messages in thread
From: Szabolcs Nagy @ 2017-08-15 12:47 UTC (permalink / raw)
To: Alexander Fedotov, newlib; +Cc: nd
On 11/08/17 14:55, Alexander Fedotov wrote:
> Use the same approach for stack setup as for ARM when nosys is used.
>
> Comments are appreciated.
>
> Alex
>
>
> aarch64_nosys_stack.patch
>
>
> From c049b628de5cd706721a57fa735c475bcde4ee5f Mon Sep 17 00:00:00 2001
> From: Alexander Fedotov-B55613 <b55613@freescale.com>
> Date: Fri, 11 Aug 2017 16:47:02 +0300
> Subject: [PATCH] use stack from linker script when nosys
>
this broke the build
aarch64-none-elf/lib/rdimon-crt0.o: In function `_start':
S/newlib-cygwin/libgloss/aarch64/crt0.S:90: undefined reference to `.LC0'
S/newlib-cygwin/libgloss/aarch64/crt0.S:90:(.text+0x0): relocation truncated to fit: R_AARCH64_ADR_PREL_LO21
against undefined symbol `.LC0'
S/newlib-cygwin/libgloss/aarch64/crt0.S:102: undefined reference to `.LC0'
S/newlib-cygwin/libgloss/aarch64/crt0.S:102:(.text+0xc): relocation truncated to fit: R_AARCH64_LD_PREL_LO19
against undefined symbol `.LC0'
collect2: error: ld returned 1 exit status
> ---
> libgloss/aarch64/crt0.S | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
> index 3bf0278..0c669d9 100644
> --- a/libgloss/aarch64/crt0.S
> +++ b/libgloss/aarch64/crt0.S
> @@ -83,7 +83,7 @@
> FUNC_START _start
>
> /* Start by setting up a stack */
> -
> +#ifdef ARM_RDI_MONITOR
i think this should match
...
> +#ifdef ARM_RDP_MONITOR
this.
> .LC0:
> GEN_DWORD HeapBase
^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 12:47 ` Szabolcs Nagy
@ 2017-08-15 13:35 ` Tamar Christina
2017-08-15 13:57 ` Alexander Fedotov
0 siblings, 1 reply; 11+ messages in thread
From: Tamar Christina @ 2017-08-15 13:35 UTC (permalink / raw)
To: Szabolcs Nagy, Alexander Fedotov, newlib; +Cc: nd
> > diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S index
> > 3bf0278..0c669d9 100644
> > --- a/libgloss/aarch64/crt0.S
> > +++ b/libgloss/aarch64/crt0.S
> > @@ -83,7 +83,7 @@
> > FUNC_START _start
> >
> > /* Start by setting up a stack */
> > -
> > +#ifdef ARM_RDI_MONITOR
>
> i think this should match
>
> ...
> > +#ifdef ARM_RDP_MONITOR
We don't define ARM_RDP_MONITOR in AArch64, so this should be ARM_RDI_MONITOR.
>
> this.
>
> > .LC0:
> > GEN_DWORD HeapBase
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 13:35 ` Tamar Christina
@ 2017-08-15 13:57 ` Alexander Fedotov
2017-08-15 14:06 ` Tamar Christina
0 siblings, 1 reply; 11+ messages in thread
From: Alexander Fedotov @ 2017-08-15 13:57 UTC (permalink / raw)
To: Tamar Christina; +Cc: Szabolcs Nagy, newlib, nd
[-- Attachment #1: Type: text/plain, Size: 692 bytes --]
Yes, there is a typo - it should be ARM_RDI_MONITOR
Thanks !
On Tue, Aug 15, 2017 at 3:46 PM, Tamar Christina
<Tamar.Christina@arm.com> wrote:
>> > diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S index
>> > 3bf0278..0c669d9 100644
>> > --- a/libgloss/aarch64/crt0.S
>> > +++ b/libgloss/aarch64/crt0.S
>> > @@ -83,7 +83,7 @@
>> > FUNC_START _start
>> >
>> > /* Start by setting up a stack */
>> > -
>> > +#ifdef ARM_RDI_MONITOR
>>
>> i think this should match
>>
>> ...
>> > +#ifdef ARM_RDP_MONITOR
>
> We don't define ARM_RDP_MONITOR in AArch64, so this should be ARM_RDI_MONITOR.
>
>>
>> this.
>>
>> > .LC0:
>> > GEN_DWORD HeapBase
>
--
Best regards,
AF
[-- Attachment #2: fix_typo.patch --]
[-- Type: text/x-patch, Size: 302 bytes --]
diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
index 0c669d9..cc7e84d 100644
--- a/libgloss/aarch64/crt0.S
+++ b/libgloss/aarch64/crt0.S
@@ -243,7 +243,7 @@ FUNCTION (_cpu_init_hook):
ret
.align 3
-#ifdef ARM_RDP_MONITOR
+#ifdef ARM_RDI_MONITOR
.LC0:
GEN_DWORD HeapBase
#else
^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 13:57 ` Alexander Fedotov
@ 2017-08-15 14:06 ` Tamar Christina
2017-08-15 14:20 ` Alexander Fedotov
0 siblings, 1 reply; 11+ messages in thread
From: Tamar Christina @ 2017-08-15 14:06 UTC (permalink / raw)
To: Alexander Fedotov; +Cc: Szabolcs Nagy, newlib, nd
> -----Original Message-----
> From: Alexander Fedotov [mailto:alfedotov@gmail.com]
> Sent: 15 August 2017 14:35
> To: Tamar Christina
> Cc: Szabolcs Nagy; newlib@sourceware.org; nd
> Subject: Re: [AArch64] use stack symbol provided by linker for nosys
>
> Yes, there is a typo - it should be ARM_RDI_MONITOR
Think you forgot to submit it as a git format-patch :)
>
> Thanks !
>
> On Tue, Aug 15, 2017 at 3:46 PM, Tamar Christina
> <Tamar.Christina@arm.com> wrote:
> >> > diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
> >> > index
> >> > 3bf0278..0c669d9 100644
> >> > --- a/libgloss/aarch64/crt0.S
> >> > +++ b/libgloss/aarch64/crt0.S
> >> > @@ -83,7 +83,7 @@
> >> > FUNC_START _start
> >> >
> >> > /* Start by setting up a stack */
> >> > -
> >> > +#ifdef ARM_RDI_MONITOR
> >>
> >> i think this should match
> >>
> >> ...
> >> > +#ifdef ARM_RDP_MONITOR
> >
> > We don't define ARM_RDP_MONITOR in AArch64, so this should be
> ARM_RDI_MONITOR.
> >
> >>
> >> this.
> >>
> >> > .LC0:
> >> > GEN_DWORD HeapBase
> >
>
>
>
> --
> Best regards,
> AF
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 14:06 ` Tamar Christina
@ 2017-08-15 14:20 ` Alexander Fedotov
2017-08-15 15:55 ` Corinna Vinschen
0 siblings, 1 reply; 11+ messages in thread
From: Alexander Fedotov @ 2017-08-15 14:20 UTC (permalink / raw)
To: Tamar Christina; +Cc: Szabolcs Nagy, newlib, nd
[-- Attachment #1: Type: text/plain, Size: 1268 bytes --]
Yes, old fashion habits )
Alex
On Tue, Aug 15, 2017 at 4:57 PM, Tamar Christina
<Tamar.Christina@arm.com> wrote:
>> -----Original Message-----
>> From: Alexander Fedotov [mailto:alfedotov@gmail.com]
>> Sent: 15 August 2017 14:35
>> To: Tamar Christina
>> Cc: Szabolcs Nagy; newlib@sourceware.org; nd
>> Subject: Re: [AArch64] use stack symbol provided by linker for nosys
>>
>> Yes, there is a typo - it should be ARM_RDI_MONITOR
>
> Think you forgot to submit it as a git format-patch :)
>
>>
>> Thanks !
>>
>> On Tue, Aug 15, 2017 at 3:46 PM, Tamar Christina
>> <Tamar.Christina@arm.com> wrote:
>> >> > diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
>> >> > index
>> >> > 3bf0278..0c669d9 100644
>> >> > --- a/libgloss/aarch64/crt0.S
>> >> > +++ b/libgloss/aarch64/crt0.S
>> >> > @@ -83,7 +83,7 @@
>> >> > FUNC_START _start
>> >> >
>> >> > /* Start by setting up a stack */
>> >> > -
>> >> > +#ifdef ARM_RDI_MONITOR
>> >>
>> >> i think this should match
>> >>
>> >> ...
>> >> > +#ifdef ARM_RDP_MONITOR
>> >
>> > We don't define ARM_RDP_MONITOR in AArch64, so this should be
>> ARM_RDI_MONITOR.
>> >
>> >>
>> >> this.
>> >>
>> >> > .LC0:
>> >> > GEN_DWORD HeapBase
>> >
>>
>>
>>
>> --
>> Best regards,
>> AF
--
Best regards,
AF
[-- Attachment #2: aarch64_fix_typo.patch --]
[-- Type: text/x-patch, Size: 603 bytes --]
From 041c8b2d571a96c1ebecb7cba6e8afb2d96064bb Mon Sep 17 00:00:00 2001
From: Alexander Fedotov-B55613 <b55613@freescale.com>
Date: Tue, 15 Aug 2017 17:01:05 +0300
Subject: [PATCH] fix typo in AArch64 crt0
---
libgloss/aarch64/crt0.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
index 0c669d9..cc7e84d 100644
--- a/libgloss/aarch64/crt0.S
+++ b/libgloss/aarch64/crt0.S
@@ -243,7 +243,7 @@ FUNCTION (_cpu_init_hook):
ret
.align 3
-#ifdef ARM_RDP_MONITOR
+#ifdef ARM_RDI_MONITOR
.LC0:
GEN_DWORD HeapBase
#else
--
2.7.4
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 14:20 ` Alexander Fedotov
@ 2017-08-15 15:55 ` Corinna Vinschen
2017-08-16 22:07 ` Szabolcs Nagy
0 siblings, 1 reply; 11+ messages in thread
From: Corinna Vinschen @ 2017-08-15 15:55 UTC (permalink / raw)
To: newlib
[-- Attachment #1: Type: text/plain, Size: 803 bytes --]
On Aug 15 17:06, Alexander Fedotov wrote:
> From 041c8b2d571a96c1ebecb7cba6e8afb2d96064bb Mon Sep 17 00:00:00 2001
> From: Alexander Fedotov-B55613 <b55613@freescale.com>
> Date: Tue, 15 Aug 2017 17:01:05 +0300
> Subject: [PATCH] fix typo in AArch64 crt0
>
> ---
> libgloss/aarch64/crt0.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
> index 0c669d9..cc7e84d 100644
> --- a/libgloss/aarch64/crt0.S
> +++ b/libgloss/aarch64/crt0.S
> @@ -243,7 +243,7 @@ FUNCTION (_cpu_init_hook):
> ret
>
> .align 3
> -#ifdef ARM_RDP_MONITOR
> +#ifdef ARM_RDI_MONITOR
> .LC0:
> GEN_DWORD HeapBase
> #else
> --
> 2.7.4
Pushed.
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-15 15:55 ` Corinna Vinschen
@ 2017-08-16 22:07 ` Szabolcs Nagy
2017-08-17 11:52 ` Szabolcs Nagy
0 siblings, 1 reply; 11+ messages in thread
From: Szabolcs Nagy @ 2017-08-16 22:07 UTC (permalink / raw)
To: newlib; +Cc: nd, Alexander Fedotov
On 15/08/17 15:20, Corinna Vinschen wrote:
> On Aug 15 17:06, Alexander Fedotov wrote:
>> From 041c8b2d571a96c1ebecb7cba6e8afb2d96064bb Mon Sep 17 00:00:00 2001
>> From: Alexander Fedotov-B55613 <b55613@freescale.com>
>> Date: Tue, 15 Aug 2017 17:01:05 +0300
>> Subject: [PATCH] fix typo in AArch64 crt0
>>
>> ---
>> libgloss/aarch64/crt0.S | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
>> index 0c669d9..cc7e84d 100644
>> --- a/libgloss/aarch64/crt0.S
>> +++ b/libgloss/aarch64/crt0.S
>> @@ -243,7 +243,7 @@ FUNCTION (_cpu_init_hook):
>> ret
>>
>> .align 3
>> -#ifdef ARM_RDP_MONITOR
>> +#ifdef ARM_RDI_MONITOR
>> .LC0:
>> GEN_DWORD HeapBase
>> #else
>> --
>> 2.7.4
>
> Pushed.
>
now the aarch64-none-elf toolchain builds but all
of our execution tests fail, because __call_exitprocs
eventually calls the 0x1 address.
i think this patch should be reverted or somebody
has to figure out what's going on (and test it
at least in qemu-user with the rdimon.specs before
committing it)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-16 22:07 ` Szabolcs Nagy
@ 2017-08-17 11:52 ` Szabolcs Nagy
2017-08-17 11:54 ` Corinna Vinschen
0 siblings, 1 reply; 11+ messages in thread
From: Szabolcs Nagy @ 2017-08-17 11:52 UTC (permalink / raw)
To: newlib; +Cc: nd, Alexander Fedotov
[-- Attachment #1: Type: text/plain, Size: 396 bytes --]
On 16/08/17 14:23, Szabolcs Nagy wrote:
> now the aarch64-none-elf toolchain builds but all
> of our execution tests fail, because __call_exitprocs
> eventually calls the 0x1 address.
>
> i think this patch should be reverted or somebody
> has to figure out what's going on (and test it
> at least in qemu-user with the rdimon.specs before
> committing it)
>
please apply the attached patch.
[-- Attachment #2: 0001-AArch64-Fix-crt0-init-fini-code.patch --]
[-- Type: text/x-patch, Size: 1139 bytes --]
From 703640745903f25341c2b1d8385ce6ae799ef4c8 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Thu, 17 Aug 2017 11:42:59 +0100
Subject: [PATCH] [AArch64] 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)
---
libgloss/aarch64/crt0.S | 4 ----
1 file changed, 4 deletions(-)
diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S
index cc7e84ddf..4ad435e03 100644
--- a/libgloss/aarch64/crt0.S
+++ b/libgloss/aarch64/crt0.S
@@ -153,12 +153,10 @@
bl FUNCTION (initialise_monitor_handles)
#endif
-#ifdef __USES_INITFINI__
/* .init and .fini sections are used to create constructors
and destructors. Here we call the _init function and arrange
for _fini to be called at program exit. */
ldr x0, .Lfini
-#endif
bl FUNCTION (atexit)
bl FUNCTION (_init)
@@ -256,10 +254,8 @@ FUNCTION (_cpu_init_hook):
GEN_DWORD __bss_start__
.LC2:
GEN_DWORD __bss_end__
-#ifdef __USES_INITFINI__
.Lfini:
GEN_DWORD FUNCTION(_fini)
-#endif
#ifdef ARM_RDI_MONITOR
.Lenvp:
GEN_DWORD env
--
2.11.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [AArch64] use stack symbol provided by linker for nosys
2017-08-17 11:52 ` Szabolcs Nagy
@ 2017-08-17 11:54 ` Corinna Vinschen
0 siblings, 0 replies; 11+ messages in thread
From: Corinna Vinschen @ 2017-08-17 11:54 UTC (permalink / raw)
To: newlib
[-- Attachment #1: Type: text/plain, Size: 907 bytes --]
On Aug 17 12:03, Szabolcs Nagy wrote:
> On 16/08/17 14:23, Szabolcs Nagy wrote:
> > now the aarch64-none-elf toolchain builds but all
> > of our execution tests fail, because __call_exitprocs
> > eventually calls the 0x1 address.
> >
> > i think this patch should be reverted or somebody
> > has to figure out what's going on (and test it
> > at least in qemu-user with the rdimon.specs before
> > committing it)
> >
>
> please apply the attached patch.
>
> >From 703640745903f25341c2b1d8385ce6ae799ef4c8 Mon Sep 17 00:00:00 2001
> From: Szabolcs Nagy <szabolcs.nagy@arm.com>
> Date: Thu, 17 Aug 2017 11:42:59 +0100
> Subject: [PATCH] [AArch64] 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)
Pushed.
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-08-17 11:52 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-11 13:55 [AArch64] use stack symbol provided by linker for nosys Alexander Fedotov
2017-08-14 8:21 ` Corinna Vinschen
2017-08-15 12:47 ` Szabolcs Nagy
2017-08-15 13:35 ` Tamar Christina
2017-08-15 13:57 ` Alexander Fedotov
2017-08-15 14:06 ` Tamar Christina
2017-08-15 14:20 ` Alexander Fedotov
2017-08-15 15:55 ` Corinna Vinschen
2017-08-16 22:07 ` Szabolcs Nagy
2017-08-17 11:52 ` Szabolcs Nagy
2017-08-17 11:54 ` Corinna Vinschen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).