SOURCES: binutils-pr4497.patch (NEW) - https://bugs.pld-linux.org/...
sls
sls at pld-linux.org
Sat Jun 16 20:54:23 CEST 2007
Author: sls Date: Sat Jun 16 18:54:23 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- https://bugs.pld-linux.org/show_bug.cgi?id=23
---- Files affected:
SOURCES:
binutils-pr4497.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/binutils-pr4497.patch
diff -u /dev/null SOURCES/binutils-pr4497.patch:1.1
--- /dev/null Sat Jun 16 20:54:23 2007
+++ SOURCES/binutils-pr4497.patch Sat Jun 16 20:54:18 2007
@@ -0,0 +1,125 @@
+===================================================================
+RCS file: /cvs/src/src/bfd/elf-eh-frame.c,v
+retrieving revision 1.57
+retrieving revision 1.58
+diff -u -r1.57 -r1.58
+--- src/bfd/elf-eh-frame.c 2007/05/10 15:08:02 1.57
++++ src/bfd/elf-eh-frame.c 2007/05/12 14:27:34 1.58
+@@ -32,12 +32,16 @@
+ unsigned int length;
+ unsigned int hash;
+ unsigned char version;
++ unsigned char local_personality;
+ char augmentation[20];
+ bfd_vma code_align;
+ bfd_signed_vma data_align;
+ bfd_vma ra_column;
+ bfd_vma augmentation_size;
+- bfd_vma personality;
++ union {
++ struct elf_link_hash_entry *h;
++ bfd_vma val;
++ } personality;
+ asection *output_sec;
+ struct eh_cie_fde *cie_inf;
+ unsigned char per_encoding;
+@@ -216,13 +220,15 @@
+ if (c1->hash == c2->hash
+ && c1->length == c2->length
+ && c1->version == c2->version
++ && c1->local_personality == c2->local_personality
+ && strcmp (c1->augmentation, c2->augmentation) == 0
+ && strcmp (c1->augmentation, "eh") != 0
+ && c1->code_align == c2->code_align
+ && c1->data_align == c2->data_align
+ && c1->ra_column == c2->ra_column
+ && c1->augmentation_size == c2->augmentation_size
+- && c1->personality == c2->personality
++ && memcmp (&c1->personality, &c2->personality,
++ sizeof (c1->personality)) == 0
+ && c1->output_sec == c2->output_sec
+ && c1->per_encoding == c2->per_encoding
+ && c1->lsda_encoding == c2->lsda_encoding
+@@ -670,12 +676,10 @@
+ REQUIRE (skip_bytes (&buf, end, length));
+ }
+ ENSURE_NO_RELOCS (buf);
+- /* Ensure we have a reloc here, against
+- a global symbol. */
++ /* Ensure we have a reloc here. */
+ if (GET_RELOC (buf) != NULL)
+ {
+ unsigned long r_symndx;
+- asection *sym_sec = NULL;
+
+ #ifdef BFD64
+ if (ptr_size == 8)
+@@ -683,7 +687,9 @@
+ else
+ #endif
+ r_symndx = ELF32_R_SYM (cookie->rel->r_info);
+- if (r_symndx >= cookie->locsymcount)
++ if (r_symndx >= cookie->locsymcount
++ || ELF_ST_BIND (cookie->locsyms[r_symndx]
++ .st_info) != STB_LOCAL)
+ {
+ struct elf_link_hash_entry *h;
+
+@@ -695,33 +701,29 @@
+ h = (struct elf_link_hash_entry *)
+ h->root.u.i.link;
+
+- if (h->root.type == bfd_link_hash_defined
+- || h->root.type == bfd_link_hash_defweak)
+- {
+- cie->personality = h->root.u.def.value;
+- sym_sec = h->root.u.def.section;
+- }
++ cie->personality.h = h;
+ }
+ else
+ {
+- Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Sym *sym;
++ asection *sym_sec;
++ bfd_vma val;
+
+- symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+- sym = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+- 1, r_symndx,
+- NULL, NULL, NULL);
+- if (sym != NULL)
++ sym = &cookie->locsyms[r_symndx];
++ sym_sec = (bfd_section_from_elf_index
++ (abfd, sym->st_shndx));
++ if (sym_sec->kept_section != NULL)
++ sym_sec = sym_sec->kept_section;
++ if (sym_sec != NULL
++ && sym_sec->output_section != NULL)
+ {
+- cie->personality = sym->st_value;
+- sym_sec = (bfd_section_from_elf_index
+- (abfd, sym->st_shndx));
+- free (sym);
++ val = (sym->st_value
++ + sym_sec->output_offset
++ + sym_sec->output_section->vma);
++ cie->personality.val = val;
++ cie->local_personality = 1;
+ }
+ }
+- if (sym_sec != NULL)
+- cie->personality += (sym_sec->output_section->vma
+- + sym_sec->output_offset);
+
+ /* Cope with MIPS-style composite relocations. */
+ do
+@@ -729,7 +731,7 @@
+ while (GET_RELOC (buf) != NULL);
+ }
+ REQUIRE (skip_bytes (&buf, end, per_width));
+- REQUIRE (cie->personality);
++ REQUIRE (cie->local_personality || cie->personality.h);
+ }
+ break;
+ default:
================================================================
More information about the pld-cvs-commit
mailing list