On Sat, 13 Feb 2016, Konstantin Belousov wrote:

On Sun, Feb 14, 2016 at 04:02:05AM +1100, Bruce Evans wrote:
The old visibility bugs with mc_* should be fixed someday.  I said that
uc_* could be used.  _mc_* should have been used originally.  Maybe we
can just change to either of these, since nothing except libc should
have used the internals of mcontext_t.

mcontext_t is needed and used by many language runtimes which handle
exceptions for their functionality. It could be gc barriers, hacks with
tagging, and many more. API cannot be broken there by renaming the
structure members.

But it is not part of the API.  The API is specified to be opaque.
getcontext(3) doesn't even document the visible parts of it.

The only way to hide mc_* is to rename them to __mc_* and provide compat
redefinitions when <machine/ucontext.h> is included directly. This is
extremely cumbersome and I do not see a need in such fix for perceived
use case of pure ANSI C code which, to be broken, must #define mc_XXX
and then include <signal.h>.

How likely is third party code to use undocumented internals of opqaue
types when FreeBSD code mostly doesn't used them.

I checked all files in /usr/src outside of /sys/ that contain "ucontext.h".
There are 71 such files with 204 lines matching "mc_".  The actual users
of mcontext_t's internals are:

contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc: 8 instances
contrib/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h: 30 instances
lib/libc: 102 instances
lib/libthread_db: 60 instances
tools/KSE/ksetest/kse_threads_test.c: 2 instances
tools/KSE/rr/rr.c: 2 instances

So there are 4 instances outside of libraries (counting compiler_rt as
a libraries) and these 4 are to support KSE which went away about 11
years ago IIRC.  tools/KSE doesn't compile now of course.  The first
error is that its asm source file is i386-only, so fails on i386.
The next error is that its primary (?) API file <sys/kse.h> no longer
exists.

I hoped to find no instances outside of libc.  Bits in contrib are are
problem.

Bruce
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to