View | Details | Raw Unified
Collapse All | Expand All

(-) emacs-21.4/src/unexelf.c (-6 / +24 lines)
 Lines 697-703   unexec (new_name, old_name, data_start, Link Here 
  ElfW(Addr) new_data2_addr;
  ElfW(Addr) new_data2_addr;
  int n, nn;
  int n, nn;
  int old_bss_index, old_sbss_index;
  int old_bss_index, old_sbss_index, old_plt_index;
  int old_data_index, new_data2_index;
  int old_data_index, new_data2_index;
  int old_mdebug_index;
  int old_mdebug_index;
  struct stat stat_buf;
  struct stat stat_buf;
 Lines 759-770   unexec (new_name, old_name, data_start, Link Here 
    if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)
    if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)
      old_sbss_index = -1;
      old_sbss_index = -1;
  if (old_sbss_index == -1)
  /* PowerPC64 has .plt in the BSS section.  */
  old_plt_index = find_section (".plt", old_section_names,
				old_name, old_file_h, old_section_h, 1);
  if (old_plt_index != -1)
    if (OLD_SECTION_H (old_plt_index).sh_type != SHT_NOBITS)
      old_plt_index = -1;
  if (old_sbss_index == -1 && old_plt_index == -1)
    {
    {
      old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
      old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
      old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
      old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
      new_data2_index = old_bss_index;
      new_data2_index = old_bss_index;
    }
    }
  else if (old_plt_index != -1
	   && (old_sbss_index == -1
	       || (OLD_SECTION_H (old_sbss_index).sh_addr
		   > OLD_SECTION_H (old_plt_index).sh_addr)))
    {
      old_bss_addr = OLD_SECTION_H (old_plt_index).sh_addr;
      old_bss_size = OLD_SECTION_H (old_bss_index).sh_size
	+ OLD_SECTION_H (old_plt_index).sh_size;
      if (old_sbss_index != -1)
	old_bss_size += OLD_SECTION_H (old_sbss_index).sh_size;
      new_data2_index = old_plt_index;
    }
  else
  else
    {
    {
      old_bss_addr = OLD_SECTION_H (old_sbss_index).sh_addr;
      old_bss_addr = OLD_SECTION_H (old_sbss_index).sh_addr;
 Lines 955-961   unexec (new_name, old_name, data_start, Link Here 
      if (n == old_bss_index
      if (n == old_bss_index
	  /* The new bss and sbss section's size is zero, and its file offset
	  /* The new bss and sbss section's size is zero, and its file offset
	     and virtual address should be off by NEW_DATA2_SIZE.  */
	     and virtual address should be off by NEW_DATA2_SIZE.  */
	  || n == old_sbss_index
	  || n == old_sbss_index || n == old_plt_index
	  )
	  )
	{
	{
	  /* NN should be `old_s?bss_index + 1' at this point. */
	  /* NN should be `old_s?bss_index + 1' at this point. */
 Lines 986-994   unexec (new_name, old_name, data_start, Link Here 
	      >= OLD_SECTION_H (old_bss_index-1).sh_offset)
	      >= OLD_SECTION_H (old_bss_index-1).sh_offset)
	    NEW_SECTION_H (nn).sh_offset += new_data2_size;
	    NEW_SECTION_H (nn).sh_offset += new_data2_size;
#else
#else
	  if (round_up (NEW_SECTION_H (nn).sh_offset,
	  if (NEW_SECTION_H (nn).sh_offset + NEW_SECTION_H (nn).sh_size
			OLD_SECTION_H (old_bss_index).sh_addralign)
	      > new_data2_offset)
	      >= new_data2_offset)
	    NEW_SECTION_H (nn).sh_offset += new_data2_size;
	    NEW_SECTION_H (nn).sh_offset += new_data2_size;
#endif
#endif
	  /* Any section that was originally placed after the section
	  /* Any section that was originally placed after the section