|
Message-ID: <20200417014831.GL26902@gate.crashing.org> Date: Thu, 16 Apr 2020 20:48:31 -0500 From: Segher Boessenkool <segher@...nel.crashing.org> To: Rich Felker <dalias@...c.org> Cc: Florian Weimer <fw@...eb.enyo.de>, musl@...ts.openwall.com, libc-alpha@...rceware.org, linuxppc-dev@...ts.ozlabs.org, Nicholas Piggin <npiggin@...il.com>, libc-dev@...ts.llvm.org Subject: Re: Powerpc Linux 'scv' system call ABI proposal take 2 On Thu, Apr 16, 2020 at 08:34:42PM -0400, Rich Felker wrote: > On Thu, Apr 16, 2020 at 06:02:35PM -0500, Segher Boessenkool wrote: > > On Thu, Apr 16, 2020 at 08:12:19PM +0200, Florian Weimer wrote: > > > > I think my choice would be just making the inline syscall be a single > > > > call insn to an asm source file that out-of-lines the loading of TOC > > > > pointer and call through it or branch based on hwcap so that it's not > > > > repeated all over the place. > > > > > > I don't know how problematic control flow out of an inline asm is on > > > POWER. But this is basically the -moutline-atomics approach. > > > > Control flow out of inline asm (other than with "asm goto") is not > > allowed at all, just like on any other target (and will not work in > > practice, either -- just like on any other target). But the suggestion > > was to use actual assembler code, not inline asm? > > Calling it control flow out of inline asm is something of a misnomer. > The enclosing state is not discarded or altered; the asm statement > exits normally, reaching the next instruction in the enclosing > block/function as soon as the call from the asm statement returns, > with all register/clobber constraints satisfied. Ah. That should always Just Work, then -- our ABIs guarantee you can. > Control flow out of inline asm would be more like longjmp, and it can > be valid -- for instance, you can implement coroutines this way > (assuming you switch stack correctly) or do longjmp this way (jumping > to the location saved by setjmp). But it's not what'd be happening > here. Yeah, you cannot do that in C, not without making assumptions about what machine code the compiler generates. GCC explicitly disallows it, too: 'asm' statements may not perform jumps into other 'asm' statements, only to the listed GOTOLABELS. GCC's optimizers do not know about other jumps; therefore they cannot take account of them when deciding how to optimize. Segher
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.