public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Fangrui Song <maskray@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc/maskray/unnest] Fix mips Date: Fri, 24 Sep 2021 07:46:11 +0000 (GMT) [thread overview] Message-ID: <20210924074611.7BD4F385842D@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f0229857693128141c6efee3c9e41bd81fdaf94f commit f0229857693128141c6efee3c9e41bd81fdaf94f Author: Fangrui Song <maskray@google.com> Date: Fri Sep 24 00:46:02 2021 -0700 Fix mips Unfortunately elf_machine_runtime_setup needs the scope parameter as well Diff: --- elf/dl-reloc-static-pie.c | 2 +- elf/dynamic-link.h | 6 +++--- elf/rtld.c | 5 ++--- sysdeps/aarch64/dl-machine.h | 3 ++- sysdeps/arc/dl-machine.h | 3 ++- sysdeps/arm/dl-machine.h | 3 ++- sysdeps/csky/dl-machine.h | 3 ++- sysdeps/hppa/dl-machine.h | 7 ++++--- sysdeps/i386/dl-machine.h | 3 ++- sysdeps/ia64/dl-machine.h | 7 ++++--- sysdeps/m68k/dl-machine.h | 3 ++- sysdeps/microblaze/dl-machine.h | 3 ++- sysdeps/mips/dl-machine.h | 15 ++++++--------- sysdeps/nios2/dl-machine.h | 3 ++- sysdeps/powerpc/powerpc32/dl-machine.h | 2 +- sysdeps/powerpc/powerpc64/dl-machine.h | 3 ++- sysdeps/riscv/dl-machine.h | 3 ++- sysdeps/s390/s390-32/dl-machine.h | 3 ++- sysdeps/s390/s390-64/dl-machine.h | 3 ++- sysdeps/sh/dl-machine.h | 3 ++- sysdeps/sparc/sparc32/dl-machine.h | 3 ++- sysdeps/sparc/sparc64/dl-machine.h | 3 ++- sysdeps/x86_64/dl-machine.h | 3 ++- 23 files changed, 53 insertions(+), 39 deletions(-) diff --git a/elf/dl-reloc-static-pie.c b/elf/dl-reloc-static-pie.c index 9e3d811207..4007580453 100644 --- a/elf/dl-reloc-static-pie.c +++ b/elf/dl-reloc-static-pie.c @@ -54,7 +54,7 @@ _dl_relocate_static_pie (void) elf_get_dynamic_info (main_map); # ifdef ELF_MACHINE_BEFORE_RTLD_RELOC - ELF_MACHINE_BEFORE_RTLD_RELOC (main_map->l_info); + ELF_MACHINE_BEFORE_RTLD_RELOC (main_map, main_map->l_info); # endif /* Relocate ourselves so we can do normal function calls and diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h index e1a5f40dc3..f3f6c3bcac 100644 --- a/elf/dynamic-link.h +++ b/elf/dynamic-link.h @@ -196,10 +196,10 @@ elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[], to inline functions containing inlines themselves. */ # define ELF_DYNAMIC_RELOCATE(map, scope, lazy, consider_profile, skip_ifunc) \ do { \ - int edr_lazy = elf_machine_runtime_setup ((map), (lazy), \ + int edr_lazy = elf_machine_runtime_setup ((map), (scope), (lazy), \ (consider_profile)); \ - ELF_DYNAMIC_DO_REL ((map), scope, edr_lazy, skip_ifunc); \ - ELF_DYNAMIC_DO_RELA ((map), scope, edr_lazy, skip_ifunc); \ + ELF_DYNAMIC_DO_REL ((map), (scope), edr_lazy, skip_ifunc); \ + ELF_DYNAMIC_DO_RELA ((map), (scope), edr_lazy, skip_ifunc); \ } while (0) #endif diff --git a/elf/rtld.c b/elf/rtld.c index 8b7fa53879..0c27e5d486 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -511,8 +511,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) Since ld.so must not have any undefined symbols the result is trivial: always the map of ld.so itself. */ #define RTLD_BOOTSTRAP -#define BOOTSTRAP_MAP (&bootstrap_map) -#define RESOLVE_MAP(map, scope, sym, version, flags) BOOTSTRAP_MAP +#define RESOLVE_MAP(map, scope, sym, version, flags) map #include "dynamic-link.h" static ElfW(Addr) __attribute_used__ @@ -554,7 +553,7 @@ _dl_start (void *arg) #endif #ifdef ELF_MACHINE_BEFORE_RTLD_RELOC - ELF_MACHINE_BEFORE_RTLD_RELOC (bootstrap_map.l_info); + ELF_MACHINE_BEFORE_RTLD_RELOC (&bootstrap_map, bootstrap_map.l_info); #endif if (bootstrap_map.l_addr || ! bootstrap_map.l_info[VALIDX(DT_GNU_PRELINKED)]) diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h index 15b909dc68..e30e81c902 100644 --- a/sysdeps/aarch64/dl-machine.h +++ b/sysdeps/aarch64/dl-machine.h @@ -59,7 +59,8 @@ elf_machine_dynamic (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { if (l->l_info[DT_JMPREL] && lazy) { diff --git a/sysdeps/arc/dl-machine.h b/sysdeps/arc/dl-machine.h index 2fb91926a5..4b64ffec25 100644 --- a/sysdeps/arc/dl-machine.h +++ b/sysdeps/arc/dl-machine.h @@ -122,7 +122,8 @@ elf_machine_load_address (void) static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (void); diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index d54568cd53..68a0b4b476 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -57,7 +57,8 @@ elf_machine_dynamic (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got; extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/csky/dl-machine.h b/sysdeps/csky/dl-machine.h index 4dad2c28d2..ec22f87577 100644 --- a/sysdeps/csky/dl-machine.h +++ b/sysdeps/csky/dl-machine.h @@ -58,7 +58,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got; extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h index 97ce826b9b..e6a4575fce 100644 --- a/sysdeps/hppa/dl-machine.h +++ b/sysdeps/hppa/dl-machine.h @@ -68,8 +68,8 @@ __hppa_init_bootstrap_fdesc_table (struct link_map *map) map->l_mach.fptr_table = boot_table; } -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __hppa_init_bootstrap_fdesc_table (BOOTSTRAP_MAP); \ +#define ELF_MACHINE_BEFORE_RTLD_RELOC(map, dynamic_info) \ + __hppa_init_bootstrap_fdesc_table (map); \ _dl_fptr_init(); /* Return nonzero iff ELF header is compatible with the running host. */ @@ -162,7 +162,8 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got = NULL; Elf32_Addr l_addr, iplt, jmprel, end_jmprel, r_type, r_sym; diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 03b5c8c3ca..78ce890c0f 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -61,7 +61,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got; extern void _dl_runtime_resolve (Elf32_Word) attribute_hidden; diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h index a0d9b37018..2217d0b556 100644 --- a/sysdeps/ia64/dl-machine.h +++ b/sysdeps/ia64/dl-machine.h @@ -44,8 +44,8 @@ __ia64_init_bootstrap_fdesc_table (struct link_map *map) map->l_mach.fptr_table = boot_table; } -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __ia64_init_bootstrap_fdesc_table (BOOTSTRAP_MAP); +#define ELF_MACHINE_BEFORE_RTLD_RELOC(map, dynamic_info) \ + __ia64_init_bootstrap_fdesc_table (map); /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute__ ((unused)) @@ -98,7 +98,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (void); extern void _dl_runtime_profile (void); diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h index b8f55ec46e..5e34c4784e 100644 --- a/sysdeps/m68k/dl-machine.h +++ b/sysdeps/m68k/dl-machine.h @@ -68,7 +68,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got; extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/microblaze/dl-machine.h b/sysdeps/microblaze/dl-machine.h index f4b1bd8071..3fd4988e60 100644 --- a/sysdeps/microblaze/dl-machine.h +++ b/sysdeps/microblaze/dl-machine.h @@ -69,7 +69,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (Elf32_Word); extern void _dl_runtime_profile (Elf32_Word); diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h index 09f8e38177..2d2469bdbb 100644 --- a/sysdeps/mips/dl-machine.h +++ b/sysdeps/mips/dl-machine.h @@ -187,9 +187,9 @@ elf_machine_load_address (void) /* We can't rely on elf_machine_got_rel because _dl_object_relocation_scope fiddles with global data. */ -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ +#define ELF_MACHINE_BEFORE_RTLD_RELOC(bootstrap_map, dynamic_info) \ do { \ - struct link_map *map = BOOTSTRAP_MAP; \ + struct link_map *map = bootstrap_map; \ ElfW(Sym) *sym; \ ElfW(Addr) *got; \ int i, n; \ @@ -507,12 +507,8 @@ elf_machine_reloc (struct link_map *map, struct r_scope_elem *scope[], case R_MIPS_TLS_TPREL32: # endif { -#if defined RTLD_BOOTSTRAP || defined STATIC_PIE_BOOTSTRAP - struct link_map *sym_map = map; -#else struct link_map *sym_map = RESOLVE_MAP (map, scope, &sym, version, r_type); -#endif switch (r_type) { @@ -775,7 +771,7 @@ elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, /* Relocate GOT. */ static inline void __attribute__((always_inline)) -elf_machine_got_rel (struct link_map *map, int lazy) +elf_machine_got_rel (struct link_map *map, struct r_scope_elem *scope[], int lazy) { ElfW(Addr) *got; ElfW(Sym) *sym; @@ -876,7 +872,8 @@ elf_machine_got_rel (struct link_map *map, int lazy) static inline int __attribute__((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { # ifndef RTLD_BOOTSTRAP ElfW(Addr) *got; @@ -906,7 +903,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) } /* Relocate global offset table. */ - elf_machine_got_rel (l, lazy); + elf_machine_got_rel (l, scope, lazy); /* If using PLTs, fill in the first two entries of .got.plt. */ if (l->l_info[DT_JMPREL] && lazy) diff --git a/sysdeps/nios2/dl-machine.h b/sysdeps/nios2/dl-machine.h index af074d06e6..4de602b13d 100644 --- a/sysdeps/nios2/dl-machine.h +++ b/sysdeps/nios2/dl-machine.h @@ -67,7 +67,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index c1a34f6b57..bbef88520e 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -172,7 +172,7 @@ extern int __elf_machine_runtime_setup (struct link_map *map, int lazy, int profile); static inline int -elf_machine_runtime_setup (struct link_map *map, +elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[], int lazy, int profile) { if (map->l_info[DT_JMPREL] == 0) diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index 531f8b0ed1..3ace63f502 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -345,7 +345,8 @@ dl_platform_init (void) /* Set up the loaded object described by MAP so its unrelocated PLT entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[], + int lazy, int profile) { if (map->l_info[DT_JMPREL]) { diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h index d1ac6df5fb..e7289d7ddc 100644 --- a/sysdeps/riscv/dl-machine.h +++ b/sysdeps/riscv/dl-machine.h @@ -324,7 +324,8 @@ elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[], static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { #ifndef RTLD_BOOTSTRAP /* If using PLTs, fill in the first two entries of .got.plt. */ diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h index acd8776fdd..cd16cc7e00 100644 --- a/sysdeps/s390/s390-32/dl-machine.h +++ b/sysdeps/s390/s390-32/dl-machine.h @@ -84,7 +84,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (Elf32_Word); extern void _dl_runtime_profile (Elf32_Word); diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h index edf20ea85b..0330a8d7de 100644 --- a/sysdeps/s390/s390-64/dl-machine.h +++ b/sysdeps/s390/s390-64/dl-machine.h @@ -74,7 +74,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { extern void _dl_runtime_resolve (Elf64_Word); extern void _dl_runtime_profile (Elf64_Word); diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h index 39041b645e..0c22dfd848 100644 --- a/sysdeps/sh/dl-machine.h +++ b/sysdeps/sh/dl-machine.h @@ -69,7 +69,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *got; extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 31f6501573..6361cfae9e 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -97,7 +97,8 @@ elf_machine_load_address (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf32_Addr *plt; extern void _dl_runtime_resolve (Elf32_Word); diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index c8df895012..3fd18c6e5e 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -126,7 +126,8 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { if (l->l_info[DT_JMPREL] && lazy) { diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h index 7cfdaa9798..9c0182d597 100644 --- a/sysdeps/x86_64/dl-machine.h +++ b/sysdeps/x86_64/dl-machine.h @@ -54,7 +54,8 @@ elf_machine_dynamic (void) entries will jump to the on-demand fixup code in dl-runtime.c. */ static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) { Elf64_Addr *got; extern void _dl_runtime_resolve_fxsave (ElfW(Word)) attribute_hidden;
next reply other threads:[~2021-09-24 7:46 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-24 7:46 Fangrui Song [this message] -- strict thread matches above, loose matches on Subject: below -- 2021-09-24 7:47 Fangrui Song 2021-09-24 7:47 Fangrui Song 2021-09-24 7:46 Fangrui Song 2021-09-24 7:30 Fangrui Song
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210924074611.7BD4F385842D@sourceware.org \ --to=maskray@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).