Date: Sun, 6 Dec 2020 12:19:30 -0500 From: Rich Felker <dalias@...c.org> To: Ariadne Conill <ariadne@...eferenced.org> Cc: Szabolcs Nagy <nsz@...t70.net>, musl@...ts.openwall.com, Drew DeVault <sir@...wn.com> Subject: Re: [PATCH v2] riscv64: correct struct __ucontext name On Sun, Dec 06, 2020 at 05:10:25PM +0000, Ariadne Conill wrote: > > On Sunday, December 6, 2020 10:06:49 AM MST Rich Felker wrote: > > On Sun, Dec 06, 2020 at 04:55:39PM +0000, Ariadne Conill wrote: > > > Hello, > > > > > > On Sunday, December 6, 2020 5:49:25 AM MST Drew DeVault wrote: > > > > On Sun Dec 6, 2020 at 3:51 AM EST, Szabolcs Nagy wrote: > > > > > * Drew DeVault <sir@...wn.com> [2020-12-05 18:10:06 +0000]: > > > > > > This makes it consistent with other architectures and fixes some > > > > > > issues > > > > > > with downstream software. > > > > > > > > > > which software? > > > > > > > > > > glibc uses struct ucontext_t too and user code should use ucontext_t > > > > > without struct. > > > > > > Some glibc architecture ports use the struct __ucontext and even struct > > > ucontext names, or at least did in the past. > > > > > > > libucontext, which does use ucontext_t. > > > > > > > > In fact, the issue was more related to the type conflict with > > > > ucontext.h, which declared struct __ucontext in the scope of its > > > > function declarations due to the naming mismatch. > > > > > > glibc uses the POSIX 2004 standardized ucontext_t type in its public > > > definitions. I believe musl should do the same. > > > > This produces a compile-time error is ucontext.h is included without > > the right feature test macros, since signal.h will not have defined > > ucontext_t in that case. That's why the public declarations must use > > the struct tag. > > Bummer. In that case, I suggest musl use the same struct tag consistently. It > should probably be struct ucontext_t for consistency with glibc. I don't recall the original reason it was inconsitent with glibc here. Note that signal.h has (which is probably wrong and should be removed): #ifdef _GNU_SOURCE #define __ucontext ucontext #endif so that the tag gets renamed if _GNU_SOURCE is defined. Maybe at one point glibc called it "struct ucontext", which was a namespace violation since it's not in a reserved namespace, and we used __ucontext to get the freedom to rename it and expose that only in a _GNU_SOURCE context. Whatever the reason, though, the struct tags is C++ABI and should not be changed. The rv64 inconsitency was unintentional and hopefully is not yet widely used enough for anyone to care that it's being fixed now (in theory could mess up linking C++ libs with ucontext_t in their public interface surface). Note that none of this is visible to applications that aren't doing anything horribly wrong. Neither "struct ucontext_t" nor "struct __ucontext" (nor "struct ucontext", which it looks like we were wrongly trying to support) is API. Rich
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.