svn commit: r368789 - head/libexec/rtld-elf/rtld-libc
Ryan Libby
rlibby at freebsd.org
Sun Dec 20 04:27:44 UTC 2020
On Sat, Dec 19, 2020 at 7:23 PM John Baldwin <jhb at freebsd.org> wrote:
>
> On 12/19/20 12:38 AM, Ryan Libby wrote:
> > Author: rlibby
> > Date: Sat Dec 19 08:38:31 2020
> > New Revision: 368789
> > URL: https://svnweb.freebsd.org/changeset/base/368789
> >
> > Log:
> > 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
>
> Hmm, I had just linked against libcompiler_rt directly as we do on arm:
>
> https://reviews.freebsd.org/D26199
>
> It was stuck waiting for review feedback.
>
> Given libcompiler_rt is a static archive, we could probably safely link
> against it directly unlike libc where we have to pick specific object
> files.
>
> --
> John Baldwin
Sorry, I wasn't aware of your review. Do you want this backed out?
I did see the arm path. I think it is not quite right, because
libcompiler_rt is compiled with -fstack-protector-strong, which is not
compatible with rtld. However, it will work in practice if stack
protection doesn't actually get used on any linked function.
We could build a special libcompiler_rt with no stack protection like we
do just for rtld with libc, but since we'd only want this no-SSP library
for rtld, that's not much different from just rebuilding its source
files in rtld. In addition, by rebuilding specific files we avoid
overlinking--although that may not be a big deal (?), and there may be
other cleaner ways to avoid that (?).
On a tangent, it might be neat to split out an rtld_bootstrap
(everything through init_rtld()) so that only the bootstrap code needs
to be compiled and linked with no-SSP. I looked at this some but I
figured there might not be appetite for a bunch of reorganization of
rtld just to enable SSP. Anyway the bootstrap code would still need
these particular libcompiler_rt functions to be no-SSP, as they get used
in the printf procedure, which I am guessing the bootstrap may need.
Ryan
More information about the svn-src-head
mailing list