[PATCH v2] elf: Avoid nested functions in the loader (all ports) [BZ #27220]

Fāng-ruì Sòng maskray@google.com
Fri Sep 24 07:32:25 GMT 2021


On 2021-09-24, Florian Weimer wrote:
>* Fāng-ruì Sòng:
>
>>> I have not
>>> reviewed the patch in detail and won't probably come to it for quite
>>> some time, but the project looks a lot less scary now.
>>
>> Ugh😹 Isn't the patch in a ready-to-push state now ?
>
>It does not build on some !PI_STATIC_AND_HIDDEN targets.  The error
>looks like this on those that I have checked:
>
>../sysdeps/m68k/dl-machine.h: In function ‘elf_machine_rela’:
>rtld.c:506:24: error: ‘info’ undeclared (first use in this function); did you mean ‘dlinfo’?
>  506 | # define bootstrap_map info.l
>      |                        ^~~~
>rtld.c:514:25: note: in expansion of macro ‘bootstrap_map’
>  514 | #define BOOTSTRAP_MAP (&bootstrap_map)
>      |                         ^~~~~~~~~~~~~
>rtld.c:515:54: note: in expansion of macro ‘BOOTSTRAP_MAP’
>  515 | #define RESOLVE_MAP(map, scope, sym, version, flags) BOOTSTRAP_MAP
>      |                                                      ^~~~~~~~~~~~~
>../sysdeps/m68k/dl-machine.h:232:34: note: in expansion of macro ‘RESOLVE_MAP’
>  232 |       struct link_map *sym_map = RESOLVE_MAP (map, scope, &sym, version,
>      |                                  ^~~~~~~~~~~
>rtld.c:506:24: note: each undeclared identifier is reported only once for each function it appears in
>  506 | # define bootstrap_map info.l
>      |                        ^~~~
>rtld.c:514:25: note: in expansion of macro ‘bootstrap_map’
>  514 | #define BOOTSTRAP_MAP (&bootstrap_map)
>      |                         ^~~~~~~~~~~~~
>rtld.c:515:54: note: in expansion of macro ‘BOOTSTRAP_MAP’
>  515 | #define RESOLVE_MAP(map, scope, sym, version, flags) BOOTSTRAP_MAP
>      |                                                      ^~~~~~~~~~~~~
>../sysdeps/m68k/dl-machine.h:232:34: note: in expansion of macro ‘RESOLVE_MAP’
>  232 |       struct link_map *sym_map = RESOLVE_MAP (map, scope, &sym, version,
>      |                                  ^~~~~~~~~~~
>
>mipsel-linux-gnu has a different error:
>
>In file included from dynamic-link.h:94,
>                 from dl-reloc.c:189:
>../sysdeps/mips/dl-machine.h: In function ‘elf_machine_got_rel’:
>../sysdeps/mips/dl-machine.h:840:8: error: macro "RESOLVE_MAP" requires 5 arguments, but only 3 given
>  840 |                 *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT);
>      |        ^        ~~~~~~~
>dl-reloc.c:166: note: macro "RESOLVE_MAP" defined here
>  166 | #define RESOLVE_MAP(l, scope, ref, version, r_type)                           \
>      |
>In file included from dynamic-link.h:94,
>                 from dl-reloc.c:189:
>../sysdeps/mips/dl-machine.h:791:17: error: ‘RESOLVE_MAP’ undeclared (first use in this function)
>  791 |       sym_map = RESOLVE_MAP (&ref, version, reloc);                       \
>      |                 ^~~~~~~~~~~
>../sysdeps/mips/dl-machine.h:840:24: note: in expansion of macro ‘RESOLVE_GOTSYM’
>  840 |                 *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT);
>      |                        ^~~~~~~~~~~~~~
>../sysdeps/mips/dl-machine.h:791:17: note: each undeclared identifier is reported only once for each function it appears in
>  791 |       sym_map = RESOLVE_MAP (&ref, version, reloc);                       \
>      |                 ^~~~~~~~~~~
>../sysdeps/mips/dl-machine.h:840:24: note: in expansion of macro ‘RESOLVE_GOTSYM’
>  840 |                 *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT);
>      |                        ^~~~~~~~~~~~~~
>../sysdeps/mips/dl-machine.h:843:8: error: macro "RESOLVE_MAP" requires 5 arguments, but only 3 given
>  843 |             *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32);
>      |        ^    ~~~~
>dl-reloc.c:166: note: macro "RESOLVE_MAP" defined here
>  166 | #define RESOLVE_MAP(l, scope, ref, version, r_type)                           \
>      |
>In file included from dynamic-link.h:94,
>                 from dl-reloc.c:189:
>../sysdeps/mips/dl-machine.h:846:8: error: macro "RESOLVE_MAP" requires 5 arguments, but only 3 given
>  846 |         *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32);
>      |        ^~~~~~~~~
>dl-reloc.c:166: note: macro "RESOLVE_MAP" defined here
>  166 | #define RESOLVE_MAP(l, scope, ref, version, r_type)                           \
>      |
>In file included from dynamic-link.h:94,
>                 from dl-reloc.c:189:
>../sysdeps/mips/dl-machine.h:855:8: error: macro "RESOLVE_MAP" requires 5 arguments, but only 3 given
>  855 |             *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT);
>      |        ^    ~~~~
>dl-reloc.c:166: note: macro "RESOLVE_MAP" defined here
>  166 | #define RESOLVE_MAP(l, scope, ref, version, r_type)                           \
>      |
>In file included from dynamic-link.h:94,
>                 from dl-reloc.c:189:
>../sysdeps/mips/dl-machine.h:863:8: error: macro "RESOLVE_MAP" requires 5 arguments, but only 3 given
>  863 |         *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32);
>      |        ^~~~~~~~~
>dl-reloc.c:166: note: macro "RESOLVE_MAP" defined here
>  166 | #define RESOLVE_MAP(l, scope, ref, version, r_type)                           \
>      |

Adding the bootstrap_map parameter to ELF_MACHINE_BEFORE_RTLD_RELOC ?

I pushed a commit to https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/maskray/unnest

It is unfortunate that elf_machine_runtime_setup now needs the `scope`
parameter as well.


>> ---
>>
>> Looks like hppa-linux-gnu may be broken in master:
>>
>> % (cd /tmp/glibc-many/src/glibc/; git checkout master)
>> % cd ~/Dev/glibc
>> % scripts/build-many-glibcs.py /tmp/glibc-many compilers hppa-linux-gnu
>> ...
>> % /tmp/glibc-many/install/compilers/hppa-linux-gnu/sysroot/lib/ld.so.1
>>   # using qemu-hppa-static 6.1.0
>> Inconsistency detected by ld.so: rtld.c: 1593: dl_main: Assertion
>> `GL(dl_rtld_map).l_libname' failed!
>
>I'm going to look into that.
>
>Thanks,
>Florian
>


More information about the Libc-alpha mailing list