* [committed] hppa: Implement swapcontext in assembler (bug 28960)
@ 2022-03-15 15:24 John David Anglin
2022-03-15 15:50 ` Andreas Schwab
0 siblings, 1 reply; 3+ messages in thread
From: John David Anglin @ 2022-03-15 15:24 UTC (permalink / raw)
To: libc-alpha
[-- Attachment #1: Type: text/plain, Size: 2263 bytes --]
When swapcontext.c is compiled without -g, the following error occurs:
Error: CFI instruction used without previous .cfi_startproc
Fix by converting swapcontext routine to assembler.
Dave
---
--- /dev/null 2022-03-12 12:11:51.050000000 -0500
+++ sysdeps/unix/sysv/linux/hppa/swapcontext.S 2022-03-14 15:27:41.545416644 -0400
@@ -0,0 +1,72 @@
+/* Swap to new context.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "ucontext_i.h"
+
+ .text
+ENTRY(__swapcontext)
+
+ /* Copy rp to ret0 (r28). */
+ copy %rp,%ret0
+
+ /* Create a frame. */
+ ldo 64(%sp),%sp
+ .cfi_def_cfa_offset -64
+
+ /* Save the current machine context to oucp. */
+ bl __getcontext,%rp
+
+ /* Copy oucp to register ret1 (r29). __getcontext saves and
+ restores it on a normal return. It is restored from oR29
+ on reactivation. */
+ copy %r26,%ret1
+
+ /* Pop frame. */
+ ldo -64(%sp),%sp
+ .cfi_def_cfa_offset 0
+
+ /* Load return pointer from oR28. */
+ ldw oR28(%ret1),%rp
+
+ /* Return if error. */
+ or,= %r0,%ret0,%r0
+ bv,n %r0(%rp)
+
+ /* Load sc_sar flag. */
+ ldb oSAR(%ret1),%r20
+
+ /* Return if oucp context has been reactivated. */
+ or,= %r0,%r20,%r0
+ bv,n %r0(%rp)
+
+ /* Mark sc_sar flag. */
+ ldi 1,%r20
+ stb %r20,oSAR(%ret1)
+
+ /* Activate the machine context in ucp. */
+ bl __setcontext,%rp
+ ldw oR25(%ret1),%r26
+
+ /* Load return pointer. */
+ ldw oR28(%ret1),%rp
+ bv,n %r0(%rp)
+
+PSEUDO_END(__swapcontext)
+
+weak_alias (__swapcontext, swapcontext)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [committed] hppa: Implement swapcontext in assembler (bug 28960)
2022-03-15 15:24 [committed] hppa: Implement swapcontext in assembler (bug 28960) John David Anglin
@ 2022-03-15 15:50 ` Andreas Schwab
2022-03-15 16:04 ` John David Anglin
0 siblings, 1 reply; 3+ messages in thread
From: Andreas Schwab @ 2022-03-15 15:50 UTC (permalink / raw)
To: John David Anglin; +Cc: libc-alpha
On Mär 15 2022, John David Anglin wrote:
> +PSEUDO_END(__swapcontext)
PSEUDO_END is supposed to pair with PSEUDO, to be used for syscalls
only. General assembler routines should be terminated with END.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [committed] hppa: Implement swapcontext in assembler (bug 28960)
2022-03-15 15:50 ` Andreas Schwab
@ 2022-03-15 16:04 ` John David Anglin
0 siblings, 0 replies; 3+ messages in thread
From: John David Anglin @ 2022-03-15 16:04 UTC (permalink / raw)
To: Andreas Schwab; +Cc: libc-alpha
On 2022-03-15 11:50 a.m., Andreas Schwab wrote:
> On Mär 15 2022, John David Anglin wrote:
>
>> +PSEUDO_END(__swapcontext)
> PSEUDO_END is supposed to pair with PSEUDO, to be used for syscalls
> only. General assembler routines should be terminated with END.
Okay. But I didn't see any issues with it in the generated .s file:
.EXIT ! .PROCEND ! .cfi_endproc ! .size __swapcontext, .-__swapcontext !
Dave
--
John David Anglin dave.anglin@bell.net
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-03-15 16:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-15 15:24 [committed] hppa: Implement swapcontext in assembler (bug 28960) John David Anglin
2022-03-15 15:50 ` Andreas Schwab
2022-03-15 16:04 ` John David Anglin
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).