summaryrefslogtreecommitdiff
path: root/src/unexelf.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2003-07-12 21:53:28 +0000
committerRichard M. Stallman <rms@gnu.org>2003-07-12 21:53:28 +0000
commitad5378567ab7901a3f2d6cc115b90f851cde8052 (patch)
treeed1731820c3181d866000caebc5e1ba91cdd4b2a /src/unexelf.c
parent69e38995354befdc5e97820660875ac2a32896b9 (diff)
downloademacs-ad5378567ab7901a3f2d6cc115b90f851cde8052.tar.gz
(unexec): Consider a section to precede the .bss
section if its addresses overlap that of .bss.
Diffstat (limited to 'src/unexelf.c')
-rw-r--r--src/unexelf.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/unexelf.c b/src/unexelf.c
index b3075f08b2f..d88b8ec37c0 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -950,8 +950,13 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
}
else
{
- /* Any section that was original placed AFTER the bss
- section should now be off by NEW_DATA2_SIZE. */
+ /* Any section that was originally placed after the .bss
+ section should now be off by NEW_DATA2_SIZE. If a
+ section overlaps the .bss section, consider it to be
+ placed after the .bss section. Overlap can occur if the
+ section just before .bss has less-strict alignment; this
+ was observed between .symtab and .bss on Solaris 2.5.1
+ (sparc) with GCC snapshot 960602. */
#ifdef SOLARIS_POWERPC
/* On PPC Reference Platform running Solaris 2.5.1
the plt section is also of type NOBI like the bss section.
@@ -965,9 +970,8 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
>= OLD_SECTION_H (old_bss_index-1).sh_offset)
NEW_SECTION_H (nn).sh_offset += new_data2_size;
#else
- if (round_up (NEW_SECTION_H (nn).sh_offset,
- OLD_SECTION_H (old_bss_index).sh_addralign)
- >= new_data2_offset)
+ if (NEW_SECTION_H (nn).sh_offset + NEW_SECTION_H (nn).sh_size
+ > new_data2_offset)
NEW_SECTION_H (nn).sh_offset += new_data2_size;
#endif
/* Any section that was originally placed after the section