From 1e72c52e237b5251a40c11950c4d4798c77ccc94 Mon Sep 17 00:00:00 2001 From: Conrad Meyer Date: Sat, 25 Apr 2020 14:24:54 +0000 Subject: [PATCH] libc: partially revert r326576 In r326576 ("use @@@ instead of @@ in __sym_default"), an earlier version of the phabricator-discussed patch was inadvertently committed. The commit message claims that @@@ means that weak is not needed, but that was due to a misunderstanding of the use of weak symbols in this context by the submitted in the first draft of the patch; the description text was not updated to match the discussion. As discussed in phabricator, weak is needed for symbol interposing because of the behavior of our rtld, and is widely used elsewhere in libc. This partial revert restores the approved version of the patch and permits symbol interposing for openat. Reported by: Raymond Ramsden Reviewed by: dim, emaste, kib (2017) Discussed with: kib (2020) Differential Revision: https://reviews.freebsd.org/D11653 --- lib/libc/sys/openat.c | 1 + lib/libc/sys/setcontext.c | 1 + lib/libc/sys/swapcontext.c | 1 + 3 files changed, 3 insertions(+) diff --git a/lib/libc/sys/openat.c b/lib/libc/sys/openat.c index 586effe08f9d..1bd12ea2a8d8 100644 --- a/lib/libc/sys/openat.c +++ b/lib/libc/sys/openat.c @@ -43,6 +43,7 @@ __sym_compat(openat, __impl_openat, FBSD_1.1); __weak_reference(openat, __impl_openat); __sym_default(openat, openat, FBSD_1.2); +#pragma weak openat int openat(int fd, const char *path, int flags, ...) { diff --git a/lib/libc/sys/setcontext.c b/lib/libc/sys/setcontext.c index 005b449b3725..31b888f2bcff 100644 --- a/lib/libc/sys/setcontext.c +++ b/lib/libc/sys/setcontext.c @@ -42,6 +42,7 @@ __sym_compat(setcontext, __impl_setcontext, FBSD_1.0); __weak_reference(setcontext, __impl_setcontext); __sym_default(setcontext, setcontext, FBSD_1.2); +#pragma weak setcontext int setcontext(const ucontext_t *uc) { diff --git a/lib/libc/sys/swapcontext.c b/lib/libc/sys/swapcontext.c index eab78c5731f6..0a8125eeabb5 100644 --- a/lib/libc/sys/swapcontext.c +++ b/lib/libc/sys/swapcontext.c @@ -43,6 +43,7 @@ __sym_compat(swapcontext, __impl_swapcontext, FBSD_1.0); __weak_reference(swapcontext, __impl_swapcontext); __sym_default(swapcontext, swapcontext, FBSD_1.2); +#pragma weak swapcontext int swapcontext(ucontext_t *oucp, const ucontext_t *ucp) {