Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102090832
D20663.id58907.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
22 KB
Referenced Files
None
Subscribers
None
D20663.id58907.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D20663: Reduce size of rtld by 22% by pulling in less code from libc
Attached
Detach File
Event Timeline
Log In to Comment