From: H.J. Lu Date: Wed, 26 May 2010 14:10:15 +0000 (+0000) Subject: Warn if value of SEGMENT_START isn't multiple of maximum page size. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c8ce57109cba194742fc1d0b6f953cf535571750;p=binutils-gdb.git Warn if value of SEGMENT_START isn't multiple of maximum page size. ld/ 2010-05-26 H.J. Lu PR ld/11628 * ldexp.c (fold_binary): Warn if value of SEGMENT_START isn't multiple of maximum page size. ld/testsuite/ 2010-05-26 H.J. Lu PR ld/11628 * ld-elf/textaddr3.d: New. * ld-elf/textaddr4.d: Likewise. * ld-elf/textaddr5.d: Likewise. * ld-elf/textaddr6.d: Likewise. * ld-elf/textaddr7.d: Likewise. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index ffa59e7db96..d6324e0254b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2010-05-26 H.J. Lu + + PR ld/11628 + * ldexp.c (fold_binary): Warn if value of SEGMENT_START isn't + multiple of maximum page size. + 2010-05-25 Nick Clifton * Makefile.am: Fix typo. diff --git a/ld/ldexp.c b/ld/ldexp.c index 34d9eabde7f..c0ca818247a 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -299,6 +299,11 @@ fold_binary (etree_type *tree) for (seg = segments; seg; seg = seg->next) if (strcmp (seg->name, segment_name) == 0) { + if (!seg->used + && config.magic_demand_paged + && (seg->value % config.maxpagesize) != 0) + einfo (_("%P: warning: address of `%s' isn't multiple of maximum page size\n"), + segment_name); seg->used = TRUE; expld.result.value = seg->value; expld.result.str = NULL; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 4a3989e08d0..a59ad4a2b78 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2010-05-26 H.J. Lu + + PR ld/11628 + * ld-elf/textaddr3.d: New. + * ld-elf/textaddr4.d: Likewise. + * ld-elf/textaddr5.d: Likewise. + * ld-elf/textaddr6.d: Likewise. + * ld-elf/textaddr7.d: Likewise. + 2010-05-25 Daniel Jacobowitz Joseph Myers Andrew Stubbs diff --git a/ld/testsuite/ld-elf/textaddr3.d b/ld/testsuite/ld-elf/textaddr3.d new file mode 100644 index 00000000000..d533e242bd0 --- /dev/null +++ b/ld/testsuite/ld-elf/textaddr3.d @@ -0,0 +1,4 @@ +#source: maxpage1.s +#ld: -Ttext-segment 0x10000 -z max-page-size=0x200000 +#target: *-*-linux-gnu +#warning: .*address of `text-segment' isn't multiple of maximum page size diff --git a/ld/testsuite/ld-elf/textaddr4.d b/ld/testsuite/ld-elf/textaddr4.d new file mode 100644 index 00000000000..bfd7630e47b --- /dev/null +++ b/ld/testsuite/ld-elf/textaddr4.d @@ -0,0 +1,8 @@ +#source: maxpage1.s +#ld: -z max-page-size=0x10000 -Ttext-segment 0x10000 +#readelf: -l --wide +#target: *-*-linux-gnu + +#... + LOAD +0x0+ 0x0*10000 0x0*10000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x10000 +#pass diff --git a/ld/testsuite/ld-elf/textaddr5.d b/ld/testsuite/ld-elf/textaddr5.d new file mode 100644 index 00000000000..5fe41d0aa9d --- /dev/null +++ b/ld/testsuite/ld-elf/textaddr5.d @@ -0,0 +1,4 @@ +#source: maxpage1.s +#ld: -shared -z max-page-size=0x200000 -Ttext-segment 0x10000 +#target: *-*-linux-gnu +#warning: .*address of `text-segment' isn't multiple of maximum page size diff --git a/ld/testsuite/ld-elf/textaddr6.d b/ld/testsuite/ld-elf/textaddr6.d new file mode 100644 index 00000000000..b3b9f847328 --- /dev/null +++ b/ld/testsuite/ld-elf/textaddr6.d @@ -0,0 +1,8 @@ +#source: maxpage1.s +#ld: -shared -z max-page-size=0x10000 -Ttext-segment 0x10000 +#readelf: -l --wide +#target: *-*-linux-gnu + +#... + LOAD +0x0+ 0x0*10000 0x0*10000 0x0*[0-9a-f][0-9a-f][0-9a-f] 0x0*[0-9a-f][0-9a-f][0-9a-f] R E 0x10000 +#pass diff --git a/ld/testsuite/ld-elf/textaddr7.d b/ld/testsuite/ld-elf/textaddr7.d new file mode 100644 index 00000000000..54a571f5839 --- /dev/null +++ b/ld/testsuite/ld-elf/textaddr7.d @@ -0,0 +1,8 @@ +#source: maxpage1.s +#ld: -n -z max-page-size=0x200000 -Ttext-segment 0x10000 +#readelf: -l --wide +#target: *-*-linux-gnu + +#... + LOAD .* +#pass