[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/unexelf.c
From: |
Richard M. Stallman |
Subject: |
[Emacs-diffs] Changes to emacs/src/unexelf.c |
Date: |
Tue, 22 Jan 2002 15:56:29 -0500 |
Index: emacs/src/unexelf.c
diff -c emacs/src/unexelf.c:1.46 emacs/src/unexelf.c:1.47
*** emacs/src/unexelf.c:1.46 Sun Jan 20 13:04:16 2002
--- emacs/src/unexelf.c Tue Jan 22 15:56:29 2002
***************
*** 1183,1232 ****
for (n = new_file_h->e_shnum - 1; n; n--)
{
ElfW(Shdr) section = NEW_SECTION_H (n);
! 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. */
! nn = section.sh_info;
! if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".sdata")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".lit4")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".lit8")
#if __sgi
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".got")
#endif
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".sdata1")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".data1"))
! {
! ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr -
! NEW_SECTION_H (nn).sh_offset;
! caddr_t reloc = old_base + section.sh_offset, end;
! for (end = reloc + section.sh_size; reloc < end;
! reloc += section.sh_entsize)
! {
! ElfW(Addr) addr = ((ElfW(Rel) *) reloc)->r_offset - 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 (((ElfW(Rel) *) reloc)->r_offset == 0)
continue;
#endif
! memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr)));
! }
! }
! break;
! }
}
/* Write out new_file, and free the buffers. */
--- 1183,1237 ----
for (n = new_file_h->e_shnum - 1; n; n--)
{
ElfW(Shdr) section = NEW_SECTION_H (n);
!
! /* Cause a compilation error if anyone uses n instead of nn below. */
! struct {int a;} n;
!
! 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. */
! nn = section.sh_info;
! if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".sdata")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".lit4")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".lit8")
#if __sgi
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".got")
#endif
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".sdata1")
! || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
! ".data1"))
! {
! ElfW(Addr) offset = (NEW_SECTION_H (nn).sh_addr
! - NEW_SECTION_H (nn).sh_offset);
! caddr_t reloc = old_base + section.sh_offset, end;
! for (end = reloc + section.sh_size; reloc < end;
! reloc += section.sh_entsize)
! {
! ElfW(Addr) addr = ((ElfW(Rel) *) reloc)->r_offset - 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 (((ElfW(Rel) *) reloc)->r_offset == 0)
continue;
#endif
! memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr)));
! }
! }
! break;
! }
}
/* Write out new_file, and free the buffers. */