]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
powerpc common-page-size
authorAlan Modra <amodra@gmail.com>
Sat, 14 Apr 2018 06:53:56 +0000 (16:23 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 14 Apr 2018 08:26:40 +0000 (17:56 +0930)
commit702d167134149f420ea3bcbc194d63a2653a0c27
tree3039514093375d874d15ac74aed9cfc5d1a0ecfb
parent03aa968462e0345b2d846ca240b8c723d713761a
powerpc common-page-size

max-page-size only matters for demand paged executables or shared
libraries, and the ideal size is the largest value used by your
operating system.  Values larger than necessary just waste file space
and memory.  common-page-size also affects file and memory size,
trading a possible small increase in file size for a decrease in
memory size when the operating system is using a common-page-size
page.  With a powerpc max-page-size of 64k and common-page-size of 4k
many executables will use no more memory pages when the system page
size is 4k than an executable linked with -z max-page-size=0x1000,
yet will still run on a system using 64k pages.  However, when running
on a system using 64k pages relro protection will not be completely
effective.

Due to the relro problem, powerpc binutils has been using a default
common-page-size of 64k since 2014-12-18 (git commit 04c6a44c7),
leading to complaints about increased file and memory sizes.  People
not using relro do have a valid reason to complain..

So this patch introduces an extra back-end value to use as the default
for common-page-size when generating relro executables, and enables
the support for powerpc.  Non relro executables will now be generated
with a default common-page-size of 4k.

bfd/
* elf-bfd.h (struct elf_backend_data): Add relropagesize.
* elfxx-target.h (ELF_RELROPAGESIZE): Provide default and
sanity test.
(elfNN_bed): Init relropagesize.
* bfd.c (bfd_emul_get_commonpagesize): Add boolean param to
select relropagesize.
* elf32-ppc.c (ELF_COMMONPAGESIZE): Define as 0x1000.
(ELF_RELROPAGESIZE): Define as ELF_MAXPAGESIZE.
(ELF_MINPAGESIZE): Don't define.
* elf64-ppc.c (ELF_COMMONPAGESIZE): Define as 0x1000.
(ELF_RELROPAGESIZE): Define as ELF_MAXPAGESIZE.
* bfd-in2.h: Regenerate.
ld/
* ldmain.c (main): Move config.maxpagesize and
config.commonpagesize initialization to..
* ldemul.c (after_parse_default): ..here.
* testsuite/ld-powerpc/ppc476-shared.d: Pass -z common-page-size.
* testsuite/ld-powerpc/ppc476-shared2.d: Likewise.
12 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/bfd.c
bfd/elf-bfd.h
bfd/elf32-ppc.c
bfd/elf64-ppc.c
bfd/elfxx-target.h
ld/ChangeLog
ld/ldemul.c
ld/ldmain.c
ld/testsuite/ld-powerpc/ppc476-shared.d
ld/testsuite/ld-powerpc/ppc476-shared2.d