aboutsummaryrefslogtreecommitdiff
path: root/bfd/reloc.c
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2003-10-17 23:03:44 +0000
committerHans-Peter Nilsson <hp@axis.com>2003-10-17 23:03:44 +0000
commit4e2147ff812032547eb25f3183a229373a4a3951 (patch)
treebae73d9dfbc7ce42d8c4a35e9c8ede5cf18f78bc /bfd/reloc.c
parent8bfee9a109b8a39fbc62dce0fc4ffe1044fce567 (diff)
downloadgdb-4e2147ff812032547eb25f3183a229373a4a3951.zip
gdb-4e2147ff812032547eb25f3183a229373a4a3951.tar.gz
gdb-4e2147ff812032547eb25f3183a229373a4a3951.tar.bz2
* reloc.c (bfd_generic_relax_section): Default-set
section->_cooked_size here. (bfd_generic_get_relocated_section_contents): Don't set it here. Explain why.
Diffstat (limited to 'bfd/reloc.c')
-rw-r--r--bfd/reloc.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/bfd/reloc.c b/bfd/reloc.c
index ddb0a4d..9ec83eb 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -4030,7 +4030,8 @@ SYNOPSIS
DESCRIPTION
Provides default handling for relaxing for back ends which
- don't do relaxing -- i.e., does nothing.
+ don't do relaxing -- i.e., does nothing except make sure that the
+ final size of the section is set.
*/
bfd_boolean
@@ -4039,6 +4040,11 @@ bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
bfd_boolean *again)
{
+ /* We're not relaxing the section, so just copy the size info if it's
+ zero. Someone else, like bfd_merge_sections, might have set it, so
+ don't overwrite a non-zero value. */
+ if (section->_cooked_size == 0)
+ section->_cooked_size = section->_raw_size;
*again = FALSE;
return TRUE;
}
@@ -4133,8 +4139,13 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
input_section->_raw_size))
goto error_return;
- /* We're not relaxing the section, so just copy the size info. */
- input_section->_cooked_size = input_section->_raw_size;
+ /* Don't set input_section->_cooked_size here. The caller has set
+ _cooked_size or called bfd_relax_section, which sets _cooked_size.
+ Despite using this generic relocation function, some targets perform
+ target-specific relaxation or string merging, which happens before
+ this function is called. We do not want to clobber the _cooked_size
+ they computed. */
+
input_section->reloc_done = TRUE;
reloc_count = bfd_canonicalize_reloc (input_bfd,