The implementation of makecontext() for ia64 (ports/sysdeps/unix/sysv/linux/ia64/makecontext.c) writes to stderr if there are more than 8 arguments. The function should not write to stderr, see bug #13983 for some background. Instead the function should set errno and return. Unfortunately POSIX doesn't seem to dictate any errno for makecontext(), almost as if it should never fail. This is IMO an oversight, we should return EINVAL when > 8 arguments. At least IBM's XL C runtime returns EINVAL with invalid argc. We must strive for a high QoI and avoid arbitrarily writing to stderr.
i did see this failure, but was trying to figure out how to make it work. i'm not really worried about the stderr write ... the fact that it calls exit() seems like a much worse violation. i could have it setup the context in such a way that when it calls setcontext, that function would return an error ...
Mike, I didn't notice the call to exit(). Calling exit() is definitely the wrong thing to do in this context. Returning EINVAL when argc > 8 would fix both of these problems. I wonder if you couldn't somehow macro-ize this to fail at build time if argc was greater than 8?
It's possible to make it fail at compile-time using macros if the function is called directly, but this won't catch all cases, such as calls to makecontext via a function pointer or when the caller prototypes the function without including the header. The test at runtime is really necessary.
The master branch has been updated by Adhemerval Zanella <azanella@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=460860f457e2a889785c506e8c77d4a7dff24d3e commit 460860f457e2a889785c506e8c77d4a7dff24d3e Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Mon Jan 8 10:21:17 2024 -0300 Remove ia64-linux-gnu Linux 6.7 removed ia64 from the official tree [1], following the general principle that a glibc port needs upstream support for the architecture in all the components it depends on (binutils, GCC, and the Linux kernel). Apart from the removal of sysdeps/ia64 and sysdeps/unix/sysv/linux/ia64, there are updates to various comments referencing ia64 for which removal of those references seemed appropriate. The configuration is removed from README and build-many-glibcs.py. The CONTRIBUTED-BY, elf/elf.h, manual/contrib.texi (the porting mention), *.po files, config.guess, and longlong.h are not changed. For Linux it allows cleanup some clone2 support on multiple files. The following bug can be closed as WONTFIX: BZ 22634 [2], BZ 14250 [3], BZ 21634 [4], BZ 10163 [5], BZ 16401 [6], and BZ 11585 [7]. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=43ff221426d33db909f7159fdf620c3b052e2d1c [2] https://sourceware.org/bugzilla/show_bug.cgi?id=22634 [3] https://sourceware.org/bugzilla/show_bug.cgi?id=14250 [4] https://sourceware.org/bugzilla/show_bug.cgi?id=21634 [5] https://sourceware.org/bugzilla/show_bug.cgi?id=10163 [6] https://sourceware.org/bugzilla/show_bug.cgi?id=16401 [7] https://sourceware.org/bugzilla/show_bug.cgi?id=11585 Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Per last comment.