Page MenuHomeFreeBSD

D20663.id58907.diff
No OneTemporary

D20663.id58907.diff

Index: lib/libc/gen/gen-private.h
===================================================================
--- lib/libc/gen/gen-private.h
+++ lib/libc/gen/gen-private.h
@@ -51,7 +51,11 @@
int dd_len; /* size of data buffer */
off_t dd_seek; /* magic cookie returned by getdirentries */
int dd_flags; /* flags for readdir */
+#ifndef IN_RTLD
struct pthread_mutex *dd_lock; /* lock */
+#else
+ struct _donotuse *dd_lock; /* unused in rtld, keep same layout */
+#endif
struct _telldir *dd_td; /* telldir position recording */
void *dd_compat_de; /* compat dirent */
};
Index: libexec/rtld-elf/Makefile
===================================================================
--- libexec/rtld-elf/Makefile
+++ libexec/rtld-elf/Makefile
@@ -63,7 +63,8 @@
CFLAGS.reloc.c+=-fno-jump-tables
.endif
LDFLAGS+= -shared -Wl,-Bsymbolic -Wl,-z,defs
-LIBADD= c_nossp_pic
+# Pull in the dependencies that we use from libc
+.include "rtld-libc/Makefile.inc"
.if ${MK_TOOLCHAIN} == "no"
LDFLAGS+= -L${LIBCDIR}
.endif
Index: libexec/rtld-elf/debug.h
===================================================================
--- libexec/rtld-elf/debug.h
+++ libexec/rtld-elf/debug.h
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#include <string.h>
-#include <unistd.h>
+#include "rtld_printf.h"
void debug_printf(const char *, ...) __printflike(1, 2);
extern int debug;
@@ -57,7 +57,7 @@
#define assert(cond) ((cond) ? (void) 0 : \
(msg(_MYNAME ": assert failed: " __FILE__ ":" \
__XSTRING(__LINE__) "\n"), abort()))
-#define msg(s) write(STDOUT_FILENO, s, strlen(s))
+#define msg(s) rtld_putstr(s)
#define trace() msg(_MYNAME ": " __XSTRING(__LINE__) "\n")
Index: libexec/rtld-elf/libmap.c
===================================================================
--- libexec/rtld-elf/libmap.c
+++ libexec/rtld-elf/libmap.c
@@ -17,6 +17,7 @@
#include "rtld.h"
#include "libmap.h"
#include "paths.h"
+#include "rtld_libc.h"
TAILQ_HEAD(lm_list, lm);
struct lm {
Index: libexec/rtld-elf/rtld-libc/Makefile.inc
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/Makefile.inc
@@ -0,0 +1,64 @@
+# $FreeBSD$
+
+# Add the necessary libc dependencies for RTLD without pulling in all of the
+# complex libc bits such as locales, etc.
+# TODO: avoid linking libc_pic
+LIBADD= c_nossp_pic
+CFLAGS+= -I${SRCTOP}/libexec/rtld-elf/rtld-libc
+
+# Build all the files that use __libc_interposing here with -DIN_RTLD. With that
+# define they avoid the use of __libc_interposing and call the syscall directly.
+.PATH: ${SRCTOP}/lib/libc/gen
+SRCS+= opendir.c closedir.c readdir.c telldir.c
+
+# Avoid further dependencies by providing simple implementations of libc
+# functions such as __error(), etc.
+.PATH: ${SRCTOP}/libexec/rtld-elf/rtld-libc
+SRCS+= rtld_libc.c
+
+# The following logic was used to avoid dependencies. If you would like to
+# verify that we haven't started including more files from libc due to more
+# recent changes, you can compile with -DRTLD_VERIFY_LIBC_DEPENDENCIES and
+# check that rtld still compiles.
+.ifdef RTLD_VERIFY_LIBC_DEPENDENCIES
+# __libc_interposing adds lots of unncessary dependencies
+_blacklisted_symbols=__libc_interposing
+# So does _elf_aux_info (it pulls in pthreads)
+_blacklisted_symbols+= _elf_aux_info
+# Avoid pthreads depedency
+_blacklisted_symbols+=_pthread_mutex_lock pthread_mutex_lock
+# And fprintf (pulls in all the locale code)
+_blacklisted_symbols+=fprintf
+# Now list all symbols inside the __libc_interposing table:
+_blacklisted_symbols+=accept accept4 aio_suspend close connect fcntl fsync \
+ fork msync nanosleep openat poll pselect recvfrom recvmsg select sendmsg \
+ sendto setcontext sigaction sigsuspend sigwait sigtimedwait sigwaitinfo \
+ swapcontext system tcdrain read readv wait4 write writev \
+ _pthread_mutex_init_calloc_cb spinlock spinunlock kevent wait6 ppoll \
+ map_stacks_exec fdatasync clock_nanosleep distribute_static_tls
+# Some more symbols that were previously defined in rtld (but are not needed)
+_blacklisted_symbols+=__pthread_cxa_finalize
+_blacklisted_symbols+=exit
+
+# Note: this library is a hack to verify that we didn't link those symbols. It
+# would be nice if LD supported a flag that caused an error when linking against
+# a given symbol.
+LDADD+=${.OBJDIR}/rtld_verify_linked_symbols.a
+${sym}.c: ensure_not_linked.h
+_blacklisted_objs=
+LDFLAGS+= -Wl,--trace
+.for sym in ${_blacklisted_symbols}
+${sym}.c: ensure_not_linked.h
+ printf "#include \"ensure_not_linked.h\"\nLINK_ERROR_ON_REFERENCE(${sym})\n" > ${sym}.c
+${sym}.o: ${sym}.c
+ ${CC} ${CFLAGS} ${sym}.c -c -o ${sym}.o
+_blacklisted_objs+= ${sym}.o
+CLEANFILES+=${sym}.o
+LDFLAGS+= -Wl,--trace-symbol=${sym}
+.endfor
+
+rtld_verify_linked_symbols.a: ensure_not_linked.h ${_blacklisted_objs}
+ ${AR} cr ${.OBJDIR}/${.TARGET} ${_blacklisted_objs}
+CLEANFILES+=rtld_verify_linked_symbols.a
+${PROG}: rtld_verify_linked_symbols.a
+.endif RTLD_VERIFY_LIBC_DEPENDENCIES
Index: libexec/rtld-elf/rtld-libc/ensure_not_linked.h
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/ensure_not_linked.h
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#define LINK_ERROR_ON_REFERENCE(symbol) \
+ void symbol(void); \
+ extern void should_not_reference_##symbol(void); \
+ void symbol(void) { should_not_reference_##symbol(); }
+
Index: libexec/rtld-elf/rtld-libc/libc_private.h
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/libc_private.h
@@ -0,0 +1,37 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _RTLD_LIBC_PRIVATE_H_
+#define _RTLD_LIBC_PRIVATE_H_
+
+#include "rtld_libc.h"
+
+#endif /* _RTLD_LIBC_PRIVATE_H_ */
Index: libexec/rtld-elf/rtld-libc/namespace.h
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/namespace.h
@@ -0,0 +1,37 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#define fcntl _fcntl
+#define open _open
+#define openat _openat
+#define fstatfs _fstatfs
+#define close _close
+#define getdirentries _getdirentries
Index: libexec/rtld-elf/rtld-libc/rtld_libc.h
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/rtld_libc.h
@@ -0,0 +1,75 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _RTLD_AVOID_LIBC_DEPS_H_
+#define _RTLD_AVOID_LIBC_DEPS_H_
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/fcntl.h>
+
+/* Avoid dependencies on libthr (used by closedir/opendir/readdir) */
+#define __isthreaded 0
+#define _pthread_mutex_lock(mtx) (void)0
+#define _pthread_mutex_unlock(mtx) (void)0
+#define _pthread_mutex_destroy(mtx) (void)0
+
+void __sys_exit(int) __dead2;
+int __sys_fcntl(int, int, ...);
+int __sys_close(int);
+int __sys_open(const char *, int, ...);
+int __sys_openat(int, const char *, int, ...);
+int __sys_sigprocmask(int, const sigset_t *, sigset_t *);
+__ssize_t __sys_pread(int, void *, __size_t, __off_t);
+__ssize_t __sys_read(int, void *, __size_t);
+__ssize_t __sys_write(int, const void *, __size_t);
+
+int __getosreldate(void);
+
+/*
+ * Don't pull in any of the libc wrappers. Instead we use the system call
+ * directly inside RTLD to avoid pulling in __libc_interposing (which pulls
+ * in lots more object files).
+ */
+#define exit(status) __sys_exit(status)
+#define _exit(status) __sys_exit(status)
+#define open(path, ...) __sys_open(path, __VA_ARGS__)
+#define close(fd) __sys_close(fd)
+#define _close(fd) __sys_close(fd)
+#define fcntl(fd, cmd, arg) __sys_fcntl(fd, cmd, arg)
+#define _fcntl(fd, cmd, arg) __sys_fcntl(fd, cmd, arg)
+#define read(fd, buf, nbytes) __sys_read(fd, buf, nbytes)
+#define write(fd, buf, nbytes) __sys_write(fd, buf, nbytes)
+#define pread(fd, buf, nbytes, offset) __sys_pread(fd, buf, nbytes, offset)
+#define sigprocmask(how, set, oset) __sys_sigprocmask(how, set, oset)
+#define strerror(errno) rtld_strerror(errno)
+
+#endif /* _RTLD_AVOID_LIBC_DEPS_H_ */
Index: libexec/rtld-elf/rtld-libc/rtld_libc.c
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/rtld_libc.c
@@ -0,0 +1,126 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <assert.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "rtld.h"
+#include "rtld_printf.h"
+#include "rtld_libc.h"
+
+/*
+ * Avoid dependencies from various libc calls on abort(). Since this is only
+ * used for assertions in RTLD, we can just raise SIGABRT directly.
+ */
+void
+abort(void)
+{
+ raise(SIGABRT);
+ __builtin_trap();
+}
+
+static int rtld_errno;
+int *__error(void);
+int *
+__error(void)
+{
+
+ return (&rtld_errno);
+}
+
+/* Avoid dependency on __libc_interposing, use the system call directly. */
+#undef sigprocmask
+int
+sigprocmask(int how, const sigset_t *set, sigset_t *oset)
+{
+
+ return (__sys_sigprocmask(how, set, oset));
+}
+__strong_reference(sigprocmask, __libc_sigprocmask);
+
+#if defined DEBUG || !defined(NDEBUG)
+/* Provide an implementation of __assert that does not pull in fprintf() */
+void
+__assert(const char *func, const char *file, int line, const char *failedexpr)
+{
+
+ if (func == NULL)
+ (void)rtld_fdprintf(STDERR_FILENO,
+ "Assertion failed: (%s), file %s, line %d.\n", failedexpr,
+ file, line);
+ else
+ (void)rtld_fdprintf(STDERR_FILENO,
+ "Assertion failed: (%s), function %s, file %s, line %d.\n",
+ failedexpr, func, file, line);
+ abort();
+ /* NOTREACHED */
+}
+#endif
+
+/*
+ * Avoid pulling in all of pthreads from getpagesize().
+ * It normally uses libc/gen/auxv.c which pulls in pthread_once().
+ */
+int
+getpagesize(void)
+{
+ int mib[2];
+ int value;
+ size_t size;
+
+ static int pagesize;
+
+ if (pagesize != 0)
+ return (pagesize);
+
+ if (npagesizes > 0)
+ pagesize = pagesizes[0];
+
+ if (pagesize == 0) {
+ mib[0] = CTL_HW;
+ mib[1] = HW_PAGESIZE;
+ size = sizeof(value);
+ if (sysctl(mib, nitems(mib), &value, &size, NULL, 0) == -1)
+ pagesize = PAGE_SIZE;
+ else
+ pagesize = value;
+ }
+
+ return (pagesize);
+}
Index: libexec/rtld-elf/rtld-libc/un-namespace.h
===================================================================
--- /dev/null
+++ libexec/rtld-elf/rtld-libc/un-namespace.h
@@ -0,0 +1,39 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2019 Alex Richadson <arichardson@FreeBSD.org>
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#undef fcntl
+#undef open
+#undef openat
+#undef close
+#undef fstatfs
+#undef getdirentries
+
+#include "rtld_libc.h"
Index: libexec/rtld-elf/rtld.c
===================================================================
--- libexec/rtld-elf/rtld.c
+++ libexec/rtld-elf/rtld.c
@@ -69,6 +69,7 @@
#include "rtld_malloc.h"
#include "rtld_utrace.h"
#include "notes.h"
+#include "rtld_libc.h"
/* Types. */
typedef void (*func_ptr_type)(void);
@@ -250,7 +251,6 @@
/* Only here to fix -Wmissing-prototypes warnings */
int __getosreldate(void);
-void __pthread_cxa_finalize(struct dl_phdr_info *a);
func_ptr_type _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp);
Elf_Addr _rtld_bind(Obj_Entry *obj, Elf_Size reloff);
@@ -5641,26 +5641,6 @@
osreldate = osrel;
return (osreldate);
}
-
-void
-exit(int status)
-{
-
- _exit(status);
-}
-
-void (*__cleanup)(void);
-int __isthreaded = 0;
-int _thread_autoinit_dummy_decl = 1;
-
-/*
- * No unresolved symbols for rtld.
- */
-void
-__pthread_cxa_finalize(struct dl_phdr_info *a __unused)
-{
-}
-
const char *
rtld_strerror(int errnum)
{
Index: libexec/rtld-elf/rtld_lock.c
===================================================================
--- libexec/rtld-elf/rtld_lock.c
+++ libexec/rtld-elf/rtld_lock.c
@@ -52,6 +52,7 @@
#include "debug.h"
#include "rtld.h"
#include "rtld_machdep.h"
+#include "rtld_libc.h"
void _rtld_thread_init(struct RtldLockInfo *) __exported;
void _rtld_atfork_pre(int *) __exported;
Index: libexec/rtld-elf/rtld_printf.h
===================================================================
--- libexec/rtld-elf/rtld_printf.h
+++ libexec/rtld-elf/rtld_printf.h
@@ -31,6 +31,7 @@
#define RTLD_PRINTF_H 1
#include <sys/cdefs.h>
+#include <stdarg.h>
#include <unistd.h>
int rtld_snprintf(char *buf, size_t bufsize, const char *fmt, ...)
Index: libexec/rtld-elf/rtld_printf.c
===================================================================
--- libexec/rtld-elf/rtld_printf.c
+++ libexec/rtld-elf/rtld_printf.c
@@ -44,6 +44,7 @@
#include <string.h>
#include <unistd.h>
#include "rtld_printf.h"
+#include "rtld_libc.h"
#define MAXNBUF (sizeof(intmax_t) * NBBY + 1)
Index: libexec/rtld-elf/xmalloc.c
===================================================================
--- libexec/rtld-elf/xmalloc.c
+++ libexec/rtld-elf/xmalloc.c
@@ -34,6 +34,7 @@
#include "rtld.h"
#include "rtld_printf.h"
#include "rtld_malloc.h"
+#include "rtld_libc.h"
void *
xcalloc(size_t number, size_t size)

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 8, 12:24 PM (10 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14534735
Default Alt Text
D20663.id58907.diff (22 KB)

Event Timeline