rtld: get syscall implementations from libsys
When I added libsys I failed to update rtld's reuse of object files
from libc to use ones from libsys instead. This would have turned up
as a broken system in d7847a8d35, but SHARED_CFLAGS is not being
applied to assembly files.
PR: 286975
Reviewed by: jrtc27, jhb
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D50475
This commit is contained in:
@@ -52,22 +52,23 @@ CFLAGS.strspn.c+=-Wno-sign-compare
|
||||
CFLAGS.strstr.c+=-Wno-cast-qual -Wno-sign-compare
|
||||
CFLAGS.strtok.c+=-Wno-cast-qual
|
||||
|
||||
# Also use all the syscall .o files from libc_nossp_pic:
|
||||
_libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \
|
||||
# Also use all the syscall .o files from libsys_pic (libsys is always NO_SSP):
|
||||
_libsys_other_objects= fstat fstatat fstatfs syscall \
|
||||
cerror geteuid getegid sigfastblock munmap mprotect \
|
||||
sysarch __sysctl issetugid __getcwd utrace getpid \
|
||||
thr_self thr_kill pread mmap lseek _exit \
|
||||
getdirentries _close _fcntl _open _openat _read \
|
||||
_sigprocmask _write readlink ___realpathat _setjmp setjmp setjmperr
|
||||
_sigprocmask _write readlink ___realpathat
|
||||
# A few other bits from libc_nossp_pic:
|
||||
_libc_other_objects= sigsetjmp lstat stat _setjmp setjmp setjmperr
|
||||
|
||||
|
||||
# Finally add additional architecture-dependent libc dependencies
|
||||
# Finally add additional architecture-dependent libc and libsys dependencies
|
||||
.if ${LIBC_ARCH} == "arm"
|
||||
# ARM needs aeabi_unwind_cpp for _setjmp
|
||||
_libc_other_objects+=aeabi_unwind_cpp
|
||||
.elif ${LIBC_ARCH} == "i386"
|
||||
# i386 needs i386_set_gsbase for allocate_initial_tls()
|
||||
_libc_other_objects+=i386_set_gsbase
|
||||
_libsys_other_objects+=i386_set_gsbase
|
||||
.elif ${LIBC_ARCH} == "powerpc" || ${LIBC_ARCH} == "powerpcspe"
|
||||
# ppc needs __syncicache and abs for reloc.c
|
||||
_libc_other_objects+=syncicache abs
|
||||
@@ -76,23 +77,30 @@ _libc_other_objects+=syncicache abs
|
||||
_libc_other_objects+=syncicache
|
||||
.endif
|
||||
|
||||
# Extract all the .o files from libc_nossp_pic.a. This ensures that
|
||||
# we don't accidentally pull in the interposing table or similar by linking
|
||||
# directly against libc_nossp_pic.a
|
||||
# Extract all the .o files from libc_nossp_pic.a and libsys_pic.a. This
|
||||
# ensures that we don't accidentally pull in the interposing table or
|
||||
# similar by linking directly against libc_nossp_pic.a
|
||||
_rtld_libc_objs=
|
||||
.for _obj in ${_libc_other_objects}
|
||||
_rtld_libc_objs+=${_obj}.nossppico
|
||||
CLEANFILES+=${_obj}.nossppico
|
||||
# LDFLAGS+= -Wl,--trace-symbol=${_obj}
|
||||
.endfor
|
||||
_rtld_libsys_objs=
|
||||
.for _obj in ${_libsys_other_objects}
|
||||
_rtld_libsys_objs+=${_obj}.pico
|
||||
CLEANFILES+=${_obj}.pico
|
||||
# LDFLAGS+= -Wl,--trace-symbol=${_obj}
|
||||
.endfor
|
||||
# LDFLAGS+= -Wl,--trace
|
||||
|
||||
# We insert all the .o files from libc_nossp_pic.a into a new rtld_libc.a file
|
||||
# to ensure that only .o files that are actually used end up being included.
|
||||
rtld_libc.a: ${LIBC_NOSSP_PIC} ${SRCTOP}/libexec/rtld-elf/rtld-libc/Makefile.inc
|
||||
rtld_libc.a: ${LIBC_NOSSP_PIC} ${LIBSYS_PIC} ${SRCTOP}/libexec/rtld-elf/rtld-libc/Makefile.inc
|
||||
@rm -f ${.TARGET}
|
||||
${AR} x ${LIBC_NOSSP_PIC} ${_rtld_libc_objs}
|
||||
${AR} cr ${.TARGET} ${_rtld_libc_objs}
|
||||
${AR} x ${LIBSYS_PIC} ${_rtld_libsys_objs}
|
||||
${AR} cr ${.TARGET} ${_rtld_libc_objs} ${_rtld_libsys_objs}
|
||||
CLEANFILES+=rtld_libc.a
|
||||
LDADD+=${.OBJDIR}/rtld_libc.a
|
||||
beforelinking: rtld_libc.a
|
||||
|
||||
Reference in New Issue
Block a user