rtld-elf: link udivmoddi4 from compiler_rt
This fixes the gcc9 build of rtld-elf32 on amd64, which needed an implementation of udivmoddi4. rtld-elf uses certain functions normally found in libc, and so it includes certain files from libc in its own build. It has two mechanisms to include files from libc: one that rebuilds source files in the rtld-elf environment, and one that extracts object files from a purpose-built no-SSP PIC archive. In addition to libc functions, rtld-elf may need to link functions normally found in libcompiler_rt (formerly libgcc). Now, add an ability to rebuild libcompiler_rt source files in the rtld-elf environment. We don't yet have a need for an object file extraction mechanism. libcompiler_rt could also supply udivdi3 and umoddi3, but leave them alone for now. Reviewed by: arichardson, kib Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D27665
This commit is contained in:
parent
caae510faf
commit
47dcf9e234
@ -51,8 +51,12 @@ _libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \
|
|||||||
getdirentries _getdirentries _close _fcntl _open _openat _read \
|
getdirentries _getdirentries _close _fcntl _open _openat _read \
|
||||||
_sigprocmask _write readlink __realpathat _setjmp setjmp setjmperr
|
_sigprocmask _write readlink __realpathat _setjmp setjmp setjmperr
|
||||||
|
|
||||||
|
# Allow building files from libcompiler_rt. Beware, there are some name
|
||||||
|
# collisions between libcompiler_rt files and libc files.
|
||||||
|
CRTSRC= ${SRCTOP}/contrib/llvm-project/compiler-rt/lib/builtins
|
||||||
|
.PATH: ${CRTSRC}
|
||||||
|
|
||||||
# Finally add additional architecture-dependent libc dependencies
|
# Finally add additional architecture-dependent dependencies
|
||||||
.if ${LIBC_ARCH} == "arm"
|
.if ${LIBC_ARCH} == "arm"
|
||||||
# ARM needs aeabi_unwind_cpp for _setjmp
|
# ARM needs aeabi_unwind_cpp for _setjmp
|
||||||
_libc_other_objects+=aeabi_unwind_cpp
|
_libc_other_objects+=aeabi_unwind_cpp
|
||||||
@ -60,6 +64,7 @@ _libc_other_objects+=aeabi_unwind_cpp
|
|||||||
# __udivdi3 is needed by kvprintf() in rtld_printf.c
|
# __udivdi3 is needed by kvprintf() in rtld_printf.c
|
||||||
# i386 also needs i386_set_gsbase for allocate_initial_tls()
|
# i386 also needs i386_set_gsbase for allocate_initial_tls()
|
||||||
_libc_other_objects+=umoddi3 udivdi3 qdivrem i386_set_gsbase
|
_libc_other_objects+=umoddi3 udivdi3 qdivrem i386_set_gsbase
|
||||||
|
SRCS+= udivmoddi4.c
|
||||||
.elif ${LIBC_ARCH} == "powerpc" || ${LIBC_ARCH} == "powerpcspe"
|
.elif ${LIBC_ARCH} == "powerpc" || ${LIBC_ARCH} == "powerpcspe"
|
||||||
# ppc needs __syncicache for reloc.c and __umoddi3+__udivdi3 for rtld_printf.c
|
# ppc needs __syncicache for reloc.c and __umoddi3+__udivdi3 for rtld_printf.c
|
||||||
_libc_other_objects+=syncicache umoddi3 udivdi3 qdivrem
|
_libc_other_objects+=syncicache umoddi3 udivdi3 qdivrem
|
||||||
|
Loading…
Reference in New Issue
Block a user