From ff66e8c5bee8a57b531515342e6126782ea9a651 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 14 Jan 2022 21:55:51 +1030 Subject: [PATCH] PR28751 mbind2a / mbind2b regressions on powerpc*-linux include/ * bfdlink.h (struct bfd_link_info): Add commonpagesize_is_set. ld/ PR 28751 * emultempl/elf.em (handle_option): Set commonpagesize_is_set. * ldelf.c (ldelf_after_parse): Don't error when only one of -z max-page-size or -z common-page-size is given, correct the other value to make it sane. * testsuite/ld-elf/elf.exp (mbind2a, mbind2b): Do not pass -z max-page-size. --- include/bfdlink.h | 3 +++ ld/emultempl/elf.em | 1 + ld/ldelf.c | 11 +++++++++-- ld/testsuite/ld-elf/elf.exp | 4 ++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/bfdlink.h b/include/bfdlink.h index 92e3e32360b..69fc9d33ff4 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -532,6 +532,9 @@ struct bfd_link_info /* TRUE if maxpagesize is set on command-line. */ unsigned int maxpagesize_is_set : 1; + /* TRUE if commonpagesize is set on command-line. */ + unsigned int commonpagesize_is_set : 1; + /* Char that may appear as the first char of a symbol, but should be skipped (like symbol_leading_char) when looking up symbols in wrap_hash. Used by PowerPC Linux for 'dot' symbols. */ diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em index 59775260b06..7325872e1d9 100644 --- a/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em @@ -731,6 +731,7 @@ fragment < maximum page size (0x%v)\n"), - link_info.commonpagesize, link_info.maxpagesize); + { + if (!link_info.commonpagesize_is_set) + link_info.commonpagesize = link_info.maxpagesize; + else if (!link_info.maxpagesize_is_set) + link_info.maxpagesize = link_info.commonpagesize; + else + einfo (_("%F%P: common page size (0x%v) > maximum page size (0x%v)\n"), + link_info.commonpagesize, link_info.maxpagesize); + } } /* Handle the generation of DT_NEEDED tags. */ diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp index 16128c2989f..119908cda4e 100644 --- a/ld/testsuite/ld-elf/elf.exp +++ b/ld/testsuite/ld-elf/elf.exp @@ -365,7 +365,7 @@ if { [istarget *-*-linux*] run_ld_link_exec_tests [list \ [list \ "Run mbind2a" \ - "$NOPIE_LDFLAGS -Wl,-z,common-page-size=0x4000,-z,max-page-size=0x4000" \ + "$NOPIE_LDFLAGS -Wl,-z,common-page-size=0x4000" \ "" \ { mbind2a.s mbind2b.c } \ "mbind2a" \ @@ -374,7 +374,7 @@ if { [istarget *-*-linux*] ] \ [list \ "Run mbind2b" \ - "-static -Wl,-z,common-page-size=0x4000,-z,max-page-size=0x4000" \ + "-static -Wl,-z,common-page-size=0x4000" \ "" \ { mbind2a.s mbind2b.c } \ "mbind2b" \