git: 63f93c7e11e3 - main - rtld-elf: link libcompiler_rt on all architectures

Ryan Libby rlibby at FreeBSD.org
Mon Dec 28 08:47:43 UTC 2020


The branch main has been updated by rlibby:

URL: https://cgit.FreeBSD.org/src/commit/?id=63f93c7e11e33149429ddc2831cd1683b2e7f3e1

commit 63f93c7e11e33149429ddc2831cd1683b2e7f3e1
Author:     Ryan Libby <rlibby at FreeBSD.org>
AuthorDate: 2020-12-28 08:44:25 +0000
Commit:     Ryan Libby <rlibby at FreeBSD.org>
CommitDate: 2020-12-28 08:44:25 +0000

    rtld-elf: link libcompiler_rt on all architectures
    
    Statically link rtld-elf with libcompiler_rt on all architectures so
    that we don't need to try to pick and choose the bits we need from it
    for each architecture (we now leave that to the linker).  Compilers may
    emit calls to support functions in this library, but because of the use
    of the linker flag -nostdlib for rtld's special needs, the library is
    not linked as normal.
    
    Previously we had two different solutions.  On some architectures, we
    were able to extract reimplementations of the necessary builtin
    functions from our special build of libc.  On ARM, we just linked
    libcompiler_rt.
    
    This is motivated by the same issue as D26199 and D27665, but should be
    a simpler solution that will apply to all architectures.
    
    Reviewed by:    arichardson, kib
    Sponsored by:   Dell EMC Isilon
    Differential Revision:  https://reviews.freebsd.org/D27736
---
 libexec/rtld-elf/Makefile               |  4 ++++
 libexec/rtld-elf/arm/Makefile.inc       |  5 -----
 libexec/rtld-elf/rtld-libc/Makefile.inc | 16 ++++------------
 3 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/libexec/rtld-elf/Makefile b/libexec/rtld-elf/Makefile
index c61477c68236..9ae998942a12 100644
--- a/libexec/rtld-elf/Makefile
+++ b/libexec/rtld-elf/Makefile
@@ -82,6 +82,10 @@ HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
 .endif
 
+# Some of the required math functions (div & mod) are implemented in
+# libcompiler_rt on some architectures.
+LIBADD+=	compiler_rt
+
 .include <bsd.prog.mk>
 ${PROG_FULL}:	${VERSION_MAP}
 .include <bsd.symver.mk>
diff --git a/libexec/rtld-elf/arm/Makefile.inc b/libexec/rtld-elf/arm/Makefile.inc
index 25bd4120edae..f39f1e89a8eb 100644
--- a/libexec/rtld-elf/arm/Makefile.inc
+++ b/libexec/rtld-elf/arm/Makefile.inc
@@ -1,8 +1,3 @@
 # $FreeBSD$
 
-# Some of the required math functions (div & mod) are implemented in
-# libcompiler_rt on ARM. The library also needs to be placed first to be
-# correctly linked. As some of the functions are used before we have
-# shared libraries.
-LIBADD+=	compiler_rt
 CFLAGS+=	-mfpu=none
diff --git a/libexec/rtld-elf/rtld-libc/Makefile.inc b/libexec/rtld-elf/rtld-libc/Makefile.inc
index 88f13c8db8cb..d682472c3cca 100644
--- a/libexec/rtld-elf/rtld-libc/Makefile.inc
+++ b/libexec/rtld-elf/rtld-libc/Makefile.inc
@@ -57,22 +57,14 @@ _libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \
 # ARM needs aeabi_unwind_cpp for _setjmp
 _libc_other_objects+=aeabi_unwind_cpp
 .elif ${LIBC_ARCH} == "i386"
-# __udivdi3 is needed by kvprintf() in rtld_printf.c
-# i386 also needs i386_set_gsbase for allocate_initial_tls()
-_libc_other_objects+=umoddi3 udivdi3 qdivrem i386_set_gsbase
+# i386 needs i386_set_gsbase for allocate_initial_tls()
+_libc_other_objects+=i386_set_gsbase
 .elif ${LIBC_ARCH} == "powerpc" || ${LIBC_ARCH} == "powerpcspe"
-# ppc needs __syncicache for reloc.c and __umoddi3+__udivdi3 for rtld_printf.c
-_libc_other_objects+=syncicache umoddi3 udivdi3 qdivrem
-# for some reason there is also a reference to abs()
-_libc_other_objects+=abs
+# ppc needs __syncicache and abs for reloc.c
+_libc_other_objects+=syncicache abs
 .elif ${LIBC_ARCH} == "powerpc64"
 # ppc64 needs __syncicache for reloc.c
 _libc_other_objects+=syncicache
-.elif ${LIBC_ARCH} == "mips"
-# 32-bit MIPS needs __umoddi3+__udivdi3 for rtld_printf.c
-.if ${MACHINE_ARCH:Mmipsn32*} == "" && ${MACHINE_ARCH:Mmips64*} == ""
-_libc_other_objects+=umoddi3 udivdi3 qdivrem
-.endif
 .endif
 
 # Extract all the .o files from libc_nossp_pic.a. This ensures that


More information about the dev-commits-src-all mailing list