emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/unexelf.c,v


From: Dan Nicolaescu
Subject: [Emacs-diffs] Changes to emacs/src/unexelf.c,v
Date: Thu, 26 Jun 2008 04:25:12 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Dan Nicolaescu <dann>   08/06/26 04:24:54

Index: src/unexelf.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/unexelf.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -b -r1.66 -r1.67
--- src/unexelf.c       14 May 2008 07:49:56 -0000      1.66
+++ src/unexelf.c       26 Jun 2008 04:24:39 -0000      1.67
@@ -433,9 +433,6 @@
 #if __sgi
 #include <syms.h> /* for HDRR declaration */
 #endif /* __sgi */
-#ifdef BROKEN_NOCOMBRELOC
-#include <assert.h>
-#endif
 
 #ifndef MAP_ANON
 #ifdef MAP_ANONYMOUS
@@ -690,9 +687,6 @@
   int old_mdebug_index;
   struct stat stat_buf;
   int old_file_size;
-#ifdef BROKEN_NOCOMBRELOC
-  int unreloc_sections[10], n_unreloc_sections;
-#endif
 
   /* Open the old file, allocate a buffer of the right size, and read
      in the file contents.  */
@@ -982,23 +976,11 @@
             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.
-            (not really stored) and therefore sections after the bss
-            section start at the plt offset. The plt section is always
-            the one just before the bss section.
-            It would be better to put the new data section before
-            the .plt section, or use libelf instead.
-            Erik Deumens, address@hidden  */
-         if (NEW_SECTION_H (nn).sh_offset
-             >= OLD_SECTION_H (old_bss_index-1).sh_offset)
-           NEW_SECTION_H (nn).sh_offset += new_data2_size;
-#else
+
          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
             header table should now be off by the size of one section
             header table entry.  */
@@ -1224,7 +1206,6 @@
 
   /* This loop seeks out relocation sections for the data section, so
      that it can undo relocations performed by the runtime linker.  */
-#ifndef BROKEN_NOCOMBRELOC
   for (n = new_file_h->e_shnum - 1; n; n--)
     {
       ElfW(Shdr) section = NEW_SECTION_H (n);
@@ -1279,81 +1260,6 @@
          break;
        }
     }
-#else /* BROKEN_NOCOMBRELOC */
-  for (n = 1, n_unreloc_sections = 0; n < new_file_h->e_shnum; n++)
-    if (!strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data")
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".sdata")
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".lit4")
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".lit8")
-#ifdef IRIX6_5                 /* see above */
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".got")
-#endif
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".sdata1")
-       || !strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data1"))
-      {
-       assert (n_unreloc_sections
-               < (sizeof (unreloc_sections) / sizeof (unreloc_sections[0])));
-       unreloc_sections[n_unreloc_sections++] = n;
-#ifdef DEBUG
-       fprintf (stderr, "section %d: %s\n", n,
-                old_section_names + NEW_SECTION_H (n).sh_name);
-#endif
-      }
-
-  for (n = new_file_h->e_shnum - 1; n; n--)
-    {
-      ElfW(Shdr) section = NEW_SECTION_H (n);
-      caddr_t reloc, end;
-      ElfW(Addr) addr, offset;
-      int target;
-
-      switch (section.sh_type)
-       {
-       default:
-         break;
-       case SHT_REL:
-       case SHT_RELA:
-         /* This code handles two different size structs, but there should
-            be no harm in that provided that r_offset is always the first
-            member.  */
-         for (reloc = old_base + section.sh_offset,
-                end = reloc + section.sh_size;
-              reloc < end;
-              reloc += section.sh_entsize)
-           {
-             addr = ((ElfW(Rel) *) reloc)->r_offset;
-#ifdef __alpha__
-             /* The Alpha ELF binutils currently have a bug that
-                sometimes results in relocs that contain all
-                zeroes.  Work around this for now...  */
-             if (addr == 0)
-               continue;
-#endif
-             for (nn = 0; nn < n_unreloc_sections; nn++)
-               {
-                 target = unreloc_sections[nn];
-                 if (NEW_SECTION_H (target).sh_addr <= addr
-                     && addr < (NEW_SECTION_H (target).sh_addr +
-                                NEW_SECTION_H (target).sh_size))
-                   {
-                     offset = (NEW_SECTION_H (target).sh_addr -
-                               NEW_SECTION_H (target).sh_offset);
-                     memcpy (new_base + addr - offset,
-                             old_base + addr - offset,
-                             sizeof (ElfW(Addr)));
-#ifdef DEBUG
-                     fprintf (stderr, "unrelocate: [%08lx] <= %08lx\n",
-                              (long) addr,
-                              (long) *((long *) (new_base + addr - offset)));
-#endif
-                     break;
-                   }
-               }
-           }
-         break;
-       }
-    }
-#endif /* BROKEN_NOCOMBRELOC */
 
   /* Write out new_file, and free the buffers.  */
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]