summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schlemmer <azarah@gentoo.org>2003-08-24 14:23:25 +0000
committerMartin Schlemmer <azarah@gentoo.org>2003-08-24 14:23:25 +0000
commitdebbc8b35e0e9ea323ae2f8a2478aff7b570e4de (patch)
tree94e342269a873f2d28b98d17b9d7c86894544a3c /sys-devel/binutils/files
parentUpdate version (diff)
downloadgentoo-2-debbc8b35e0e9ea323ae2f8a2478aff7b570e4de.tar.gz
gentoo-2-debbc8b35e0e9ea323ae2f8a2478aff7b570e4de.tar.bz2
gentoo-2-debbc8b35e0e9ea323ae2f8a2478aff7b570e4de.zip
Update version
Diffstat (limited to 'sys-devel/binutils/files')
-rw-r--r--sys-devel/binutils/files/2.14/binutils-2.14.90.0.5-place-orphan.patch51
-rw-r--r--sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-eh-frame-ro.patch398
-rw-r--r--sys-devel/binutils/files/digest-binutils-2.14.90.0.61
3 files changed, 450 insertions, 0 deletions
diff --git a/sys-devel/binutils/files/2.14/binutils-2.14.90.0.5-place-orphan.patch b/sys-devel/binutils/files/2.14/binutils-2.14.90.0.5-place-orphan.patch
new file mode 100644
index 000000000000..518284188fbd
--- /dev/null
+++ b/sys-devel/binutils/files/2.14/binutils-2.14.90.0.5-place-orphan.patch
@@ -0,0 +1,51 @@
+2003-08-05 Jakub Jelinek <jakub@redhat.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): If secname
+ is in the linker script but os->bfd_section is NULL, use
+ output_prev_sec_find to place it on the right place in the section
+ list.
+ * emulparams/elf64ppc.sh (OTHER_GOT_RELOC_SECTIONS): Add .rela.opd.
+
+--- ld/emulparams/elf64ppc.sh.jj 2003-07-28 10:24:45.000000000 -0400
++++ ld/emulparams/elf64ppc.sh 2003-08-05 08:35:58.000000000 -0400
+@@ -28,7 +28,8 @@ else
+ .toc 0 : { *(.toc) }"
+ fi
+ OTHER_GOT_RELOC_SECTIONS="
+- .rela.toc ${RELOCATING-0} : { *(.rela.toc) }"
++ .rela.toc ${RELOCATING-0} : { *(.rela.toc) }
++ .rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
+ OTHER_READWRITE_SECTIONS="
+ .toc1 ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc1) }
+ .opd ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { KEEP (*(.opd)) }"
+--- ld/emultempl/elf32.em.jj 2003-08-05 06:59:49.000000000 -0400
++++ ld/emultempl/elf32.em 2003-08-05 08:27:23.000000000 -0400
+@@ -1138,7 +1138,27 @@ gld${EMULATION_NAME}_place_orphan (lang_
+ {
+ /* We already have an output section statement with this
+ name, and its bfd section, if any, has compatible flags. */
+- lang_add_section (&os->children, s, os, file);
++ if (os->bfd_section != NULL)
++ lang_add_section (&os->children, s, os, file);
++ else
++ {
++ asection *prev_section = output_prev_sec_find (os);
++ lang_add_section (&os->children, s, os, file);
++ if (prev_section != NULL)
++ {
++ asection *snew = os->bfd_section, **pps;
++
++ /* Unlink the section. */
++ for (pps = &output_bfd->sections; *pps != snew;
++ pps = &(*pps)->next)
++ ;
++ bfd_section_list_remove (output_bfd, pps);
++
++ /* Now tack it on to the "os" section list. */
++ bfd_section_list_insert (output_bfd, &prev_section->next,
++ snew);
++ }
++ }
+ return TRUE;
+ }
+ }
diff --git a/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-eh-frame-ro.patch b/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-eh-frame-ro.patch
new file mode 100644
index 000000000000..ec6660a6393e
--- /dev/null
+++ b/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-eh-frame-ro.patch
@@ -0,0 +1,398 @@
+diff -urpN binutils-2.14.90.0.6/ld/emultempl/elf32.em binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/elf32.em
+--- binutils-2.14.90.0.6/ld/emultempl/elf32.em 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/elf32.em 2003-08-24 14:56:13.112585536 +0200
+@@ -1016,7 +1016,8 @@ output_rel_find (asection *sec, int isdy
+ for (u = lang_output_section_statement.head; u; u = lookup->next)
+ {
+ lookup = &u->output_section_statement;
+- if (strncmp (".rel", lookup->name, 4) == 0)
++ if (lookup->constraint != -1
++ && strncmp (".rel", lookup->name, 4) == 0)
+ {
+ int lookrela = lookup->name[4] == 'a';
+
+@@ -1264,7 +1265,7 @@ gld${EMULATION_NAME}_place_orphan (lang_
+ (bfd_vma) 0,
+ (etree_type *) NULL,
+ (etree_type *) NULL,
+- load_base);
++ load_base, 0);
+
+ lang_add_section (&os->children, s, os, file);
+
+diff -urpN binutils-2.14.90.0.6/ld/emultempl/mmo.em binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/mmo.em
+--- binutils-2.14.90.0.6/ld/emultempl/mmo.em 2003-07-23 17:08:12.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/mmo.em 2003-08-24 14:56:13.105586600 +0200
+@@ -47,6 +47,8 @@ output_prev_sec_find (lang_output_sectio
+ u = lookup->next)
+ {
+ lookup = &u->output_section_statement;
++ if (lookup->constraint == -1)
++ continue;
+ if (lookup == os)
+ break;
+ if (lookup->bfd_section != NULL
+@@ -130,7 +132,7 @@ mmo_place_orphan (lang_input_statement_t
+ (bfd_vma) 0,
+ (etree_type *) NULL,
+ (etree_type *) NULL,
+- (etree_type *) NULL);
++ (etree_type *) NULL, 0);
+
+ lang_add_section (&os->children, s, os, file);
+
+diff -urpN binutils-2.14.90.0.6/ld/emultempl/pe.em binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/pe.em
+--- binutils-2.14.90.0.6/ld/emultempl/pe.em 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/emultempl/pe.em 2003-08-24 14:56:13.108586144 +0200
+@@ -1453,6 +1453,8 @@ output_prev_sec_find (lang_output_sectio
+ u = lookup->next)
+ {
+ lookup = &u->output_section_statement;
++ if (lookup->constraint == -1)
++ continue;
+ if (lookup == os)
+ return s;
+
+@@ -1617,7 +1619,7 @@ gld_${EMULATION_NAME}_place_orphan (lang
+ (bfd_vma) 0,
+ (etree_type *) NULL,
+ (etree_type *) NULL,
+- (etree_type *) NULL);
++ (etree_type *) NULL, 0);
+
+ lang_add_section (&add_child, s, os, file);
+
+diff -urpN binutils-2.14.90.0.6/ld/ldgram.y binutils-2.14.90.0.6.eh-frame-ro/ld/ldgram.y
+--- binutils-2.14.90.0.6/ld/ldgram.y 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/ldgram.y 2003-08-24 14:59:55.391793960 +0200
+@@ -143,14 +143,14 @@ static int error_index;
+ %token ORIGIN FILL
+ %token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
+ %token ALIGNMOD AT SUBALIGN PROVIDE
+-%type <token> assign_op atype attributes_opt
++%type <token> assign_op atype attributes_opt sect_constraint
+ %type <name> filename
+ %token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
+ %token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
+ %token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
+ %token <name> VERS_TAG VERS_IDENTIFIER
+ %token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
+-%token KEEP
++%token KEEP ONLY_IF_RO ONLY_IF_RW
+ %token EXCLUDE_FILE
+ %type <versyms> vers_defns
+ %type <versnode> vers_tag
+@@ -833,22 +833,29 @@ opt_subalign:
+ | { $$ = 0; }
+ ;
+
++sect_constraint:
++ ONLY_IF_RO { $$ = ONLY_IF_RO; }
++ | ONLY_IF_RW { $$ = ONLY_IF_RW; }
++ | { $$ = 0; }
++ ;
++
+ section: NAME { ldlex_expression(); }
+ opt_exp_with_type
+ opt_at
+ opt_subalign { ldlex_popstate (); ldlex_script (); }
++ sect_constraint
+ '{'
+ {
+ lang_enter_output_section_statement($1, $3,
+ sectype,
+- 0, 0, $5, $4);
++ 0, 0, $5, $4, $7);
+ }
+ statement_list_opt
+ '}' { ldlex_popstate (); ldlex_expression (); }
+ memspec_opt memspec_at_opt phdr_opt fill_opt
+ {
+ ldlex_popstate ();
+- lang_leave_output_section_statement ($15, $12, $14, $13);
++ lang_leave_output_section_statement ($16, $13, $15, $14);
+ }
+ opt_comma
+ {}
+diff -urpN binutils-2.14.90.0.6/ld/ldlang.c binutils-2.14.90.0.6.eh-frame-ro/ld/ldlang.c
+--- binutils-2.14.90.0.6/ld/ldlang.c 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/ldlang.c 2003-08-24 15:00:50.927351272 +0200
+@@ -562,7 +562,7 @@ lang_memory_default (asection *section)
+ }
+
+ lang_output_section_statement_type *
+-lang_output_section_find (const char *const name)
++lang_output_section_find_1 (const char *const name, int constraint)
+ {
+ lang_statement_union_type *u;
+ lang_output_section_statement_type *lookup;
+@@ -570,18 +570,26 @@ lang_output_section_find (const char *co
+ for (u = lang_output_section_statement.head; u != NULL; u = lookup->next)
+ {
+ lookup = &u->output_section_statement;
+- if (strcmp (name, lookup->name) == 0)
++ if (strcmp (name, lookup->name) == 0
++ && lookup->constraint != -1
++ && (constraint == 0 || constraint == lookup->constraint))
+ return lookup;
+ }
+ return NULL;
+ }
+
+ lang_output_section_statement_type *
+-lang_output_section_statement_lookup (const char *const name)
++lang_output_section_find (const char *const name)
++{
++ return lang_output_section_find_1 (name, 0);
++}
++
++lang_output_section_statement_type *
++lang_output_section_statement_lookup_1 (const char *const name, int constraint)
+ {
+ lang_output_section_statement_type *lookup;
+
+- lookup = lang_output_section_find (name);
++ lookup = lang_output_section_find_1 (name, constraint);
+ if (lookup == NULL)
+ {
+ lookup = new_stat (lang_output_section_statement, stat_ptr);
+@@ -594,6 +602,7 @@ lang_output_section_statement_lookup (co
+ lookup->next = NULL;
+ lookup->bfd_section = NULL;
+ lookup->processed = FALSE;
++ lookup->constraint = constraint;
+ lookup->sectype = normal_section;
+ lookup->addr_tree = NULL;
+ lang_list_init (&lookup->children);
+@@ -613,6 +622,12 @@ lang_output_section_statement_lookup (co
+ return lookup;
+ }
+
++lang_output_section_statement_type *
++lang_output_section_statement_lookup (const char *const name)
++{
++ return lang_output_section_statement_lookup_1 (name, 0);
++}
++
+ static void
+ lang_map_flags (flagword flag)
+ {
+@@ -1278,6 +1293,30 @@ output_section_callback (lang_wild_state
+ }
+ }
+
++/* Check if all sections in a wild statement for a particular FILE
++ are readonly. */
++
++static void
++check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
++ struct wildcard_list *sec ATTRIBUTE_UNUSED,
++ asection *section,
++ lang_input_statement_type *file ATTRIBUTE_UNUSED,
++ void *output)
++{
++ /* Exclude sections that match UNIQUE_SECTION_LIST. */
++ if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
++ return;
++
++ if (section->output_section == NULL)
++ {
++ flagword flags = bfd_get_section_flags (section->owner, section);
++
++ if ((flags & SEC_READONLY) == 0)
++ ((lang_output_section_statement_type *) output)->all_input_readonly
++ = FALSE;
++ }
++}
++
+ /* This is passed a file name which must have been seen already and
+ added to the statement tree. We will see if it has been opened
+ already and had its symbols read. If not then we'll read it. */
+@@ -1923,6 +1962,40 @@ lang_place_undefineds (void)
+ insert_undefined (ptr->name);
+ }
+
++/* Check for all readonly or some readwrite sections. */
++
++static void
++check_input_sections (lang_statement_union_type *s,
++ lang_output_section_statement_type *output_section_statement)
++{
++ for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
++ {
++ switch (s->header.type)
++ {
++ case lang_wild_statement_enum:
++ walk_wild (&s->wild_statement, check_section_callback,
++ output_section_statement);
++ if (! output_section_statement->all_input_readonly)
++ return;
++ break;
++ case lang_constructors_statement_enum:
++ check_input_sections (constructor_list.head,
++ output_section_statement);
++ if (! output_section_statement->all_input_readonly)
++ return;
++ break;
++ case lang_group_statement_enum:
++ check_input_sections (s->group_statement.children.head,
++ output_section_statement);
++ if (! output_section_statement->all_input_readonly)
++ return;
++ break;
++ default:
++ break;
++ }
++ }
++}
++
+ /* Open input files and attach to output sections. */
+
+ static void
+@@ -1943,6 +2016,23 @@ map_input_to_output_sections
+ output_section_statement);
+ break;
+ case lang_output_section_statement_enum:
++ if (s->output_section_statement.constraint)
++ {
++ if (s->output_section_statement.constraint == -1)
++ break;
++ s->output_section_statement.all_input_readonly = TRUE;
++ check_input_sections (s->output_section_statement.children.head,
++ &s->output_section_statement);
++ if ((s->output_section_statement.all_input_readonly
++ && s->output_section_statement.constraint == ONLY_IF_RW)
++ || (!s->output_section_statement.all_input_readonly
++ && s->output_section_statement.constraint == ONLY_IF_RO))
++ {
++ s->output_section_statement.constraint = -1;
++ break;
++ }
++ }
++
+ map_input_to_output_sections (s->output_section_statement.children.head,
+ target,
+ &s->output_section_statement);
+@@ -2013,6 +2103,8 @@ strip_excluded_output_sections (void)
+ asection *s;
+
+ os = &u->output_section_statement;
++ if (os->constraint == -1)
++ continue;
+ s = os->bfd_section;
+ if (s != NULL && (s->flags & SEC_EXCLUDE) != 0)
+ {
+@@ -3857,13 +3949,15 @@ lang_enter_output_section_statement (con
+ bfd_vma block_value,
+ etree_type *align,
+ etree_type *subalign,
+- etree_type *ebase)
++ etree_type *ebase,
++ int constraint)
+ {
+ lang_output_section_statement_type *os;
+
+ current_section =
+ os =
+- lang_output_section_statement_lookup (output_section_statement_name);
++ lang_output_section_statement_lookup_1 (output_section_statement_name,
++ constraint);
+
+ /* Add this statement to tree. */
+ #if 0
+@@ -4558,6 +4652,8 @@ lang_record_phdrs (void)
+ struct lang_output_section_phdr_list *pl;
+
+ os = &u->output_section_statement;
++ if (os->constraint == -1)
++ continue;
+
+ pl = os->phdrs;
+ if (pl != NULL)
+@@ -4617,7 +4713,8 @@ lang_record_phdrs (void)
+ {
+ struct lang_output_section_phdr_list *pl;
+
+- if (u->output_section_statement.bfd_section == NULL)
++ if (u->output_section_statement.constraint == -1
++ || u->output_section_statement.bfd_section == NULL)
+ continue;
+
+ for (pl = u->output_section_statement.phdrs;
+@@ -4689,7 +4786,7 @@ lang_enter_overlay_section (const char *
+ etree_type *size;
+
+ lang_enter_output_section_statement (name, overlay_vma, normal_section,
+- 0, 0, overlay_subalign, 0);
++ 0, 0, overlay_subalign, 0, 0);
+
+ /* If this is the first section, then base the VMA of future
+ sections on this one. This will work correctly even if `.' is
+diff -urpN binutils-2.14.90.0.6/ld/ldlang.h binutils-2.14.90.0.6.eh-frame-ro/ld/ldlang.h
+--- binutils-2.14.90.0.6/ld/ldlang.h 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/ldlang.h 2003-08-24 14:56:13.123583864 +0200
+@@ -132,6 +132,8 @@ typedef struct lang_output_section_state
+
+ int subsection_alignment; /* alignment of components */
+ int section_alignment; /* alignment of start of section */
++ int constraint;
++ bfd_boolean all_input_readonly;
+
+ union etree_union *load_base;
+
+@@ -394,7 +396,7 @@ extern lang_output_section_statement_typ
+ bfd_vma block_value,
+ etree_type *align,
+ etree_type *subalign,
+- etree_type *);
++ etree_type *, int);
+ extern void lang_final
+ (void);
+ extern void lang_process
+diff -urpN binutils-2.14.90.0.6/ld/ldlex.l binutils-2.14.90.0.6.eh-frame-ro/ld/ldlex.l
+--- binutils-2.14.90.0.6/ld/ldlex.l 2003-08-21 17:28:48.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/ldlex.l 2003-08-24 14:56:13.136581888 +0200
+@@ -299,6 +299,8 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^]([*?
+ <EXPRESSION,BOTH,SCRIPT>"COPY" { RTOKEN(COPY);}
+ <EXPRESSION,BOTH,SCRIPT>"INFO" { RTOKEN(INFO);}
+ <EXPRESSION,BOTH,SCRIPT>"OVERLAY" { RTOKEN(OVERLAY);}
++<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RO" { RTOKEN(ONLY_IF_RO); }
++<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RW" { RTOKEN(ONLY_IF_RW); }
+ <BOTH,SCRIPT>"o" { RTOKEN(ORIGIN);}
+ <BOTH,SCRIPT>"org" { RTOKEN(ORIGIN);}
+ <BOTH,SCRIPT>"l" { RTOKEN( LENGTH);}
+diff -urpN binutils-2.14.90.0.6/ld/mri.c binutils-2.14.90.0.6.eh-frame-ro/ld/mri.c
+--- binutils-2.14.90.0.6/ld/mri.c 2003-07-23 17:08:12.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/mri.c 2003-08-24 14:56:13.121584168 +0200
+@@ -220,7 +220,7 @@ mri_draw_tree (void)
+
+ lang_enter_output_section_statement (p->name, base,
+ p->ok_to_load ? 0 : noload_section,
+- 1, align, subalign, NULL);
++ 1, align, subalign, NULL, 0);
+ base = 0;
+ tmp = xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+diff -urpN binutils-2.14.90.0.6/ld/scripttempl/elf.sc binutils-2.14.90.0.6.eh-frame-ro/ld/scripttempl/elf.sc
+--- binutils-2.14.90.0.6/ld/scripttempl/elf.sc 2003-07-23 17:08:12.000000000 +0200
++++ binutils-2.14.90.0.6.eh-frame-ro/ld/scripttempl/elf.sc 2003-08-24 14:56:13.115585080 +0200
+@@ -283,6 +283,8 @@ cat <<EOF
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
++ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
++ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+@@ -316,8 +318,8 @@ cat <<EOF
+ .data1 ${RELOCATING-0} : { *(.data1) }
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+- .eh_frame ${RELOCATING-0} : { KEEP (*(.eh_frame)) }
+- .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) }
++ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
++ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table) }
+ ${WRITABLE_RODATA+${RODATA}}
+ ${OTHER_READWRITE_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
diff --git a/sys-devel/binutils/files/digest-binutils-2.14.90.0.6 b/sys-devel/binutils/files/digest-binutils-2.14.90.0.6
new file mode 100644
index 000000000000..26abe27b6c76
--- /dev/null
+++ b/sys-devel/binutils/files/digest-binutils-2.14.90.0.6
@@ -0,0 +1 @@
+MD5 71b99dba3045a359dc314dbebedcf502 binutils-2.14.90.0.6.tar.bz2 10399066