- int alignment = (NEW_PROGRAM_H (n)).p_align;
- if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment)
- alignment = OLD_SECTION_H (old_bss_index).sh_addralign;
-
- /* Supposedly this condition is okay for the SGI. */
-#if 0
- if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz > old_base_addr)
- fatal ("Program segment above .bss in %s\n", old_name);
+ l_Elf_Phdr * ph = (l_Elf_Phdr *)((byte *) new_program_h +
+ new_file_h->e_phentsize*(n));
+#ifdef DEBUG
+ printf ("%d @ %0x + %0x against %0x + %0x",
+ n, ph->p_vaddr, ph->p_memsz,
+ oldbss->sh_addr, oldbss->sh_size);
+#endif
+ if ((ph->p_type == PT_LOAD) &&
+ (ph->p_vaddr <= oldbss->sh_addr) &&
+ ((ph->p_vaddr + ph->p_memsz)>=(oldbss->sh_addr + oldbss->sh_size))) {
+ ph->p_filesz += new_offsets_shift;
+ ph->p_memsz = ph->p_filesz;
+#ifdef DEBUG
+ puts (" That's the one!");
+ fflush (stdout);
+#endif
+ break;
+ }
+#ifdef DEBUG
+ putchar ('\n');
+ fflush (stdout);