This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SafeStack proposal in GCC


On Mon, May 9, 2016 at 12:35 PM, Rich Felker <dalias@libc.org> wrote:
> On Mon, May 09, 2016 at 09:02:33PM +0200, Michael Matz wrote:
>> Hi,
>>
>> On Sat, 7 May 2016, Rich Felker wrote:
>>
>> > > > * sigaltstack and swapcontext are broken too.
>> > >
>> > > We have prototype that supports swapcontext that we're happy to
>> > > release, but it clearly requires more work before being ready to merge
>> > > upstream.
>> >
>> > The *context APIs are deprecated and I'm not sure they're worth
>> > supporting with this. It would be a good excuse to get people to stop
>> > using them.
>>
>> How?  POSIX decided to remove the facilities without any adequate
>> replacement (thread aren't).
>
> Threads work just as well as the ucontext api for coroutines. Due to
> the requirement to save/restore signal masks, the latter requires a
> syscall, making it no faster than a voluntary context switch via
> futex syscall.

No, threads do not work as well.  You can not ignore efficiency
considerations.  Coroutine switching is much faster with setcontext,
even though it does a system call.


> Most of the other hacks people used the ucontext API for were complete
> hacks with undefined behavior, anyway.

And yet code like gccgo's library works, on many different systems.


> BTW it's not even possible to implement makecontext on most targets
> due to the wacky variadic calling convention it uses -- in most ABIs,
> there's simply no way to shift the variadic args into the right slots
> for calling the start function for the new context without knowing
> their types, and the implementation has no way to know the types. So
> it's really an unusably broken API.

I certainly agree that makecontext is broken by design.  But it is
easy enough, and safe, to use makecontext with functions that take no
arguments.  I would fully support an effort to propagate a replacement
for makecontext that can actually work more generally.  I think the
current approach of simply dropping support is unwise.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]