diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2003-10-17 23:03:44 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2003-10-17 23:03:44 +0000 |
commit | 4e2147ff812032547eb25f3183a229373a4a3951 (patch) | |
tree | bae73d9dfbc7ce42d8c4a35e9c8ede5cf18f78bc /bfd/reloc.c | |
parent | 8bfee9a109b8a39fbc62dce0fc4ffe1044fce567 (diff) | |
download | gdb-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.c | 17 |
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, |