PATCH: Improved diagnosis of overflowed memory regions
Zack Weinberg
zack@codesourcery.com
Thu Jul 19 03:20:00 GMT 2007
[ For the curious - I'm doing some contract work for CodeSourcery over
the summer. ]
The linker's current diagnostics when a memory region overflows are
unhelpful in four ways. First, once a region is full, every output
section targeted to that region will generate another "region is full"
message. Second, you *also* get a flood of "section overlap" messages
for those sections, even though nothing the user did would have caused
section overlap if the memory regions were big enough. Third, while you
do get a mapfile if you give -Map, the reported position of every
section after the one that overflowed the region will be garbage.
Fourth, nothing tells you how big the region needs to be.
All these problems can be fixed with a few simple changes to ldlang.c.
The only nontrivial bit is that os_region_check was resetting
region->current to region->origin on overflow; that was the cause of the
section overlap messages and the unhelpful linker maps. As at that
point we are definitely not generating output, I believe it is safe to
remove it altogether; that makes the memory layout as reported in the
mapfile be what it would have been if the memory regions had all been
big enough, and section overlap is reported only if it's "real" (i.e. if
a region at lower addresses would have to be so big that it overlapped
a region at higher addresses.)
OK?
zw
ld:
* ldlang.c (lang_check_section_addresses): Also report size of
overflow for any overflowed memory regions.
(os_region_check): Diagnose an overflowed region only once per
region. Do not reset region->current on overflow.
ld/testsuite:
* ld-scripts/rgn-over.exp: New driver.
* ld-scripts/rgn-over.s: New file.
* ld-scripts/rgn-over1.d, ld-scripts/rgn-over1.t
* ld-scripts/rgn-over2.d, ld-scripts/rgn-over2.t
* ld-scripts/rgn-over3.d, ld-scripts/rgn-over3.t
* ld-scripts/rgn-over4.d, ld-scripts/rgn-over4.t
* ld-scripts/rgn-over5.d, ld-scripts/rgn-over5.t
* ld-scripts/rgn-over6.d, ld-scripts/rgn-over6.t
* ld-scripts/rgn-over7.d, ld-scripts/rgn-over7.t:
New test cases.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: region-overflow-diag.diff
Type: text/x-patch
Size: 16067 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20070719/185cf089/attachment.bin>
More information about the Binutils
mailing list