changeset 10995:842974f9ab7d

(unexec): Adjust the file offset of sections located after the section header table.
author Richard M. Stallman <rms@gnu.org>
date Mon, 13 Mar 1995 23:12:41 +0000
parents d173d21f14e2
children 356f658dbd65
files src/unexelf.c
diffstat 1 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/unexelf.c	Mon Mar 13 22:50:35 1995 +0000
+++ b/src/unexelf.c	Mon Mar 13 23:12:41 1995 +0000
@@ -719,11 +719,19 @@
 	  NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign;
 	  NEW_SECTION_H (nn).sh_size = 0;
 	}
-      /* Any section that was original placed AFTER the bss section should now
-	 be off by NEW_DATA2_SIZE. */
-      else if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset)
-	NEW_SECTION_H (nn).sh_offset += new_data2_size;
-      
+      else
+	{
+	  /* Any section that was original placed AFTER the bss
+	     section should now be off by NEW_DATA2_SIZE. */
+	  if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset)
+	    NEW_SECTION_H (nn).sh_offset += new_data2_size;
+	  /* Any section that was originally placed after the section
+	     header table should now be off by the size of one section
+	     header table entry.  */
+	  if (NEW_SECTION_H (nn).sh_offset > new_file_h->e_shoff)
+	    NEW_SECTION_H (nn).sh_offset += new_file_h->e_shentsize;
+	}
+
       /* If any section hdr refers to the section after the new .data
 	 section, make it refer to next one because we have inserted 
 	 a new section in between.  */