mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-19 13:53:29 +08:00
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.
This commit is contained in:
@ -532,6 +532,9 @@ struct bfd_link_info
|
|||||||
/* TRUE if maxpagesize is set on command-line. */
|
/* TRUE if maxpagesize is set on command-line. */
|
||||||
unsigned int maxpagesize_is_set : 1;
|
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
|
/* Char that may appear as the first char of a symbol, but should be
|
||||||
skipped (like symbol_leading_char) when looking up symbols in
|
skipped (like symbol_leading_char) when looking up symbols in
|
||||||
wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
|
wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
|
||||||
|
@ -731,6 +731,7 @@ fragment <<EOF
|
|||||||
|| (link_info.commonpagesize & (link_info.commonpagesize - 1)) != 0)
|
|| (link_info.commonpagesize & (link_info.commonpagesize - 1)) != 0)
|
||||||
einfo (_("%F%P: invalid common page size \`%s'\n"),
|
einfo (_("%F%P: invalid common page size \`%s'\n"),
|
||||||
optarg + 17);
|
optarg + 17);
|
||||||
|
link_info.commonpagesize_is_set = true;
|
||||||
}
|
}
|
||||||
else if (startswith (optarg, "stack-size="))
|
else if (startswith (optarg, "stack-size="))
|
||||||
{
|
{
|
||||||
|
11
ld/ldelf.c
11
ld/ldelf.c
@ -82,8 +82,15 @@ ldelf_after_parse (void)
|
|||||||
|
|
||||||
after_parse_default ();
|
after_parse_default ();
|
||||||
if (link_info.commonpagesize > link_info.maxpagesize)
|
if (link_info.commonpagesize > link_info.maxpagesize)
|
||||||
einfo (_("%F%P: common page size (0x%v) > 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. */
|
/* Handle the generation of DT_NEEDED tags. */
|
||||||
|
@ -365,7 +365,7 @@ if { [istarget *-*-linux*]
|
|||||||
run_ld_link_exec_tests [list \
|
run_ld_link_exec_tests [list \
|
||||||
[list \
|
[list \
|
||||||
"Run mbind2a" \
|
"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.s mbind2b.c } \
|
||||||
"mbind2a" \
|
"mbind2a" \
|
||||||
@ -374,7 +374,7 @@ if { [istarget *-*-linux*]
|
|||||||
] \
|
] \
|
||||||
[list \
|
[list \
|
||||||
"Run mbind2b" \
|
"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 } \
|
{ mbind2a.s mbind2b.c } \
|
||||||
"mbind2b" \
|
"mbind2b" \
|
||||||
|
Reference in New Issue
Block a user