rpms/binutils/devel binutils-2.16.91.0.2-ppc32-got2.patch, NONE, 1.1 binutils.spec, 1.62, 1.63
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Fri Jul 29 07:21:36 UTC 2005
- Previous message (by thread): rpms/kernel/devel patch-2.6.13-rc4.bz2.sign, NONE, 1.1 kernel-2.6.spec, 1.1441, 1.1442 upstream, 1.113, 1.114 patch-2.6.13-rc3.bz2.sign, 1.1, NONE
- Next message (by thread): rpms/gcc/devel gcc4-pr17828-test.patch, NONE, 1.1 gcc4.spec, 1.60, 1.61 gcc4-pr20606.patch, 1.2, NONE gcc4-pr21149-test.patch, 1.1, NONE gcc4-pr22503.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: jakub
Update of /cvs/dist/rpms/binutils/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv22511
Modified Files:
binutils.spec
Added Files:
binutils-2.16.91.0.2-ppc32-got2.patch
Log Message:
2.16.91.0.2-2
binutils-2.16.91.0.2-ppc32-got2.patch:
bfd/bfd-in.h | 2
bfd/bfd-in2.h | 2
bfd/elf-bfd.h | 11 +++
bfd/elf-hppa.h | 12 +++
bfd/elf32-hppa.c | 1
bfd/elf32-ppc.c | 20 ++++++
bfd/elf64-hppa.c | 1
bfd/elflink.c | 125 +++++++++++++++++++--------------------
bfd/elfxx-target.h | 4 +
ld/ldlang.c | 7 +-
ld/testsuite/ld-elfweak/size2.d | 4 -
ld/testsuite/ld-elfweak/size2a.s | 6 +
ld/testsuite/ld-elfweak/size2b.s | 7 ++
13 files changed, 137 insertions(+), 65 deletions(-)
--- NEW FILE binutils-2.16.91.0.2-ppc32-got2.patch ---
bfd/
2005-07-29 Alan Modra <amodra at bigpond.net.au>
* elf-bfd.h (struct elf_backend_data): Add action_discarded.
(enum action_discarded): Move from..
* elflink.c (enum action_discarded): ..here.
(_bfd_elf_default_action_discarded): Rename from elf_action_discarded.
Remove target specific section checks.
(elf_link_input_bfd): Adjust.
* elfxx-target.h (elf_backend_action_discarded): Define.
(elfNN_bed): Init new field.
* bfd-in.h (_bfd_elf_default_action_discarded): Declare.
* bfd-in2.h: Regenerate.
* elf-hppa.h (elf_hppa_action_discarded): New function.
* elf32-hppa.c (elf_backend_action_discarded): Define.
* elf64-hppa.c (elf_backend_action_discarded): Define.
* elf32-ppc.c (ppc_elf_action_discarded): New function.
(elf_backend_action_discarded): Define.
2005-07-27 Alan Modra <amodra at bigpond.net.au>
* elflink.c (fix_syms): Handle symbols defined in input sections.
2005-07-27 Alan Modra <amodra at bigpond.net.au>
* elflink.c (_bfd_elf_merge_symbol): Skip weak redefinition
regardless of strength of previous definition.
2005-07-26 Alan Modra <amodra at bigpond.net.au>
* elflink.c (elf_gc_mark_dynamic_ref_symbol): Handle -shared.
(bfd_elf_gc_sections): Allow -gc-sections when -shared.
* elf32-ppc.c (ppc_elf_gc_sweep_hook): Correct for -shared.
2005-07-26 Alan Modra <amodra at bigpond.net.au>
* elflink.c (elf_gc_sweep): Move gcc_except_table code..
(bfd_elf_gc_sections): ..to here.
ld/
2005-07-28 DJ Delorie <dj at redhat.com>
* ldlang.c (lang_output_section_statement_lookup_1): Don't cast a
unary & address operator, as that breaks GCC's strict aliasing
rules.
ld/testsuite/
2005-07-27 Alan Modra <amodra at bigpond.net.au>
* ld-elfweak/size2a.s: Extend test to check size for two weaks.
* ld-elfweak/size2b.s: Likewise.
* ld-elfweak/size2.d: Update.
--- bfd/bfd-in.h 15 Jul 2005 12:18:01 -0000 1.106
+++ bfd/bfd-in.h 29 Jul 2005 02:46:02 -0000 1.107
@@ -656,6 +656,8 @@ extern struct bfd_link_needed_list *bfd_
(bfd *, struct bfd_link_info *);
extern bfd_boolean bfd_elf_discard_info
(bfd *, struct bfd_link_info *);
+extern unsigned int _bfd_elf_default_action_discarded
+ (struct bfd_section *);
/* Return an upper bound on the number of bytes required to store a
copy of ABFD's program header table entries. Return -1 if an error
--- bfd/bfd-in2.h 26 Jul 2005 03:21:49 -0000 1.355
+++ bfd/bfd-in2.h 29 Jul 2005 02:46:02 -0000 1.356
@@ -663,6 +663,8 @@ extern struct bfd_link_needed_list *bfd_
(bfd *, struct bfd_link_info *);
extern bfd_boolean bfd_elf_discard_info
(bfd *, struct bfd_link_info *);
+extern unsigned int _bfd_elf_default_action_discarded
+ (struct bfd_section *);
/* Return an upper bound on the number of bytes required to store a
copy of ABFD's program header table entries. Return -1 if an error
--- bfd/elf-bfd.h 25 Jul 2005 15:41:02 -0000 1.193
+++ bfd/elf-bfd.h 29 Jul 2005 02:46:02 -0000 1.194
@@ -546,6 +546,12 @@ struct bfd_elf_special_section
int attr;
};
+enum action_discarded
+ {
+ COMPLAIN = 1,
+ PRETEND = 2
+ };
+
struct elf_backend_data
{
/* The architecture for this backend. */
@@ -918,6 +924,11 @@ struct elf_backend_data
bfd_boolean (*elf_backend_ignore_discarded_relocs)
(asection *);
+ /* What to do when ld finds relocations against symbols defined in
+ discarded sections. */
+ unsigned int (*action_discarded)
+ (asection *);
+
/* This function returns the width of FDE pointers in bytes, or 0 if
that can't be determined for some reason. The default definition
goes by the bfd's EI_CLASS. */
--- bfd/elf-hppa.h 8 Jul 2005 06:19:56 -0000 1.79
+++ bfd/elf-hppa.h 29 Jul 2005 02:46:02 -0000 1.80
@@ -1057,6 +1057,18 @@ static bfd_boolean elf_hppa_sort_unwind
return TRUE;
}
+/* What to do when ld finds relocations against symbols defined in
+ discarded sections. */
+
+static unsigned int
+elf_hppa_action_discarded (asection *sec)
+{
+ if (strcmp (".PARISC.unwind", sec->name) == 0)
+ return 0;
+
+ return _bfd_elf_default_action_discarded (sec);
+}
+
#if ARCH_SIZE == 64
/* Hook called by the linker routine which adds symbols from an object
file. HP's libraries define symbols with HP specific section
--- bfd/elf32-hppa.c 8 Jul 2005 06:19:58 -0000 1.136
+++ bfd/elf32-hppa.c 29 Jul 2005 02:46:02 -0000 1.137
@@ -4251,6 +4251,7 @@ elf32_hppa_elf_get_symbol_type (Elf_Inte
#define elf_backend_post_process_headers elf32_hppa_post_process_headers
#define elf_backend_get_symbol_type elf32_hppa_elf_get_symbol_type
#define elf_backend_reloc_type_class elf32_hppa_reloc_type_class
+#define elf_backend_action_discarded elf_hppa_action_discarded
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
--- bfd/elf32-ppc.c 16 Jul 2005 03:30:23 -0000 1.174
+++ bfd/elf32-ppc.c 29 Jul 2005 02:46:03 -0000 1.176
@@ -3728,8 +3728,12 @@ ppc_elf_gc_sweep_hook (bfd *abfd,
case R_PPC_ADDR14_BRNTAKEN:
case R_PPC_UADDR32:
case R_PPC_UADDR16:
+ if (info->shared)
+ break;
+
case R_PPC_PLT32:
case R_PPC_PLTREL24:
+ case R_PPC_PLTREL32:
case R_PPC_PLT16_LO:
case R_PPC_PLT16_HI:
case R_PPC_PLT16_HA:
@@ -5299,6 +5303,21 @@ ppc_elf_set_sdata_syms (bfd *obfd, struc
_bfd_elf_provide_symbol (info, lsect->sym_name, val, s);
}
}
+
+/* What to do when ld finds relocations against symbols defined in
+ discarded sections. */
+
+static unsigned int
+ppc_elf_action_discarded (asection *sec)
+{
+ if (strcmp (".fixup", sec->name) == 0)
+ return 0;
+
+ if (strcmp (".got2", sec->name) == 0)
+ return 0;
+
+ return _bfd_elf_default_action_discarded (sec);
+}
/* Fill in the address for a pointer generated in a linker section. */
@@ -7356,6 +7375,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou
#define elf_backend_write_section ppc_elf_write_section
#define elf_backend_get_sec_type_attr ppc_elf_get_sec_type_attr
#define elf_backend_plt_sym_val ppc_elf_plt_sym_val
+#define elf_backend_action_discarded ppc_elf_action_discarded
#include "elf32-target.h"
--- bfd/elf64-hppa.c 8 Jul 2005 06:20:02 -0000 1.63
+++ bfd/elf64-hppa.c 29 Jul 2005 02:46:03 -0000 1.64
@@ -2745,6 +2745,7 @@ const struct elf_size_info hppa64_elf_si
#define elf_backend_reloc_type_class elf64_hppa_reloc_type_class
#define elf_backend_rela_normal 1
#define elf_backend_special_sections elf64_hppa_special_sections
+#define elf_backend_action_discarded elf_hppa_action_discarded
#include "elf64-target.h"
--- bfd/elflink.c 25 Jul 2005 15:35:37 -0000 1.179
+++ bfd/elflink.c 29 Jul 2005 02:46:03 -0000 1.184
@@ -1216,7 +1216,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
}
/* Skip weak definitions of symbols that are already defined. */
- if (newdef && olddef && newweak && !oldweak)
+ if (newdef && olddef && newweak)
*skip = TRUE;
/* If the old symbol is from a dynamic object, and the new symbol is
@@ -6690,12 +6690,6 @@ elf_section_ignore_discarded_relocs (ase
return FALSE;
}
-enum action_discarded
- {
- COMPLAIN = 1,
- PRETEND = 2
- };
-
/* Return a mask saying how ld should treat relocations in SEC against
symbols defined in discarded sections. If this function returns
COMPLAIN set, ld will issue a warning message. If this function
@@ -6705,8 +6699,8 @@ enum action_discarded
zero the reloc (at least that is the intent, but some cooperation by
the target dependent code is needed, particularly for REL targets). */
-static unsigned int
-elf_action_discarded (asection *sec)
+unsigned int
+_bfd_elf_default_action_discarded (asection *sec)
{
if (sec->flags & SEC_DEBUGGING)
return PRETEND;
@@ -6717,12 +6711,6 @@ elf_action_discarded (asection *sec)
if (strcmp (".gcc_except_table", sec->name) == 0)
return 0;
- if (strcmp (".PARISC.unwind", sec->name) == 0)
- return 0;
-
- if (strcmp (".fixup", sec->name) == 0)
- return 0;
-
return COMPLAIN | PRETEND;
}
@@ -7042,7 +7030,7 @@ elf_link_input_bfd (struct elf_final_lin
if (!elf_section_ignore_discarded_relocs (o))
{
Elf_Internal_Rela *rel, *relend;
- unsigned int action = elf_action_discarded (o);
+ unsigned int action = (*bed->action_discarded) (o);
rel = internal_relocs;
relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
@@ -8912,41 +8900,6 @@ elf_gc_sweep (struct bfd_link_info *info
if (o->gc_mark)
continue;
- /* Keep .gcc_except_table.* if the associated .text.* is
- marked. This isn't very nice, but the proper solution,
- splitting .eh_frame up and using comdat doesn't pan out
- easily due to needing special relocs to handle the
- difference of two symbols in separate sections.
- Don't keep code sections referenced by .eh_frame. */
- if (o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0)
- {
- if (strncmp (o->name, ".gcc_except_table.", 18) == 0)
- {
- unsigned long len;
- char *fn_name;
- asection *fn_text;
-
- len = strlen (o->name + 18) + 1;
- fn_name = bfd_malloc (len + 6);
- if (fn_name == NULL)
- return FALSE;
- memcpy (fn_name, ".text.", 6);
- memcpy (fn_name + 6, o->name + 18, len);
- fn_text = bfd_get_section_by_name (sub, fn_name);
- free (fn_name);
- if (fn_text != NULL && fn_text->gc_mark)
- o->gc_mark = 1;
- }
-
- /* If not using specially named exception table section,
- then keep whatever we are using. */
- else
- o->gc_mark = 1;
-
- if (o->gc_mark)
- continue;
- }
-
/* Skip sweeping sections already excluded. */
if (o->flags & SEC_EXCLUDE)
continue;
@@ -9107,19 +9060,25 @@ elf_gc_smash_unused_vtentry_relocs (stru
return TRUE;
}
-/* Mark sections containing dynamically referenced symbols. This is called
- through elf_link_hash_traverse. */
+/* Mark sections containing dynamically referenced symbols. When
+ building shared libraries, we must assume that any visible symbol is
+ referenced. */
static bfd_boolean
-elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h,
- void *okp ATTRIBUTE_UNUSED)
+elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
{
+ struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
if (h->root.type == bfd_link_hash_warning)
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)
- && h->ref_dynamic)
+ && (h->ref_dynamic
+ || (info->shared
+ && h->def_regular
+ && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
+ && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
h->root.u.def.section->flags |= SEC_KEEP;
return TRUE;
@@ -9139,7 +9098,6 @@ bfd_elf_gc_sections (bfd *abfd, struct b
if (!get_elf_backend_data (abfd)->can_gc_sections
|| info->relocatable
|| info->emitrelocations
- || info->shared
|| !is_elf_hash_table (info->hash))
{
(*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
@@ -9164,9 +9122,7 @@ bfd_elf_gc_sections (bfd *abfd, struct b
if (elf_hash_table (info)->dynamic_sections_created)
elf_link_hash_traverse (elf_hash_table (info),
elf_gc_mark_dynamic_ref_symbol,
- &ok);
- if (!ok)
- return FALSE;
+ info);
/* Grovel through relocs to find out who stays ... */
gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook;
@@ -9183,6 +9139,48 @@ bfd_elf_gc_sections (bfd *abfd, struct b
return FALSE;
}
+ /* ... again for sections marked from eh_frame. */
+ for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+ {
+ asection *o;
+
+ if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
+ continue;
+
+ /* Keep .gcc_except_table.* if the associated .text.* is
+ marked. This isn't very nice, but the proper solution,
+ splitting .eh_frame up and using comdat doesn't pan out
+ easily due to needing special relocs to handle the
+ difference of two symbols in separate sections.
+ Don't keep code sections referenced by .eh_frame. */
+ for (o = sub->sections; o != NULL; o = o->next)
+ if (!o->gc_mark && o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0)
+ {
+ if (strncmp (o->name, ".gcc_except_table.", 18) == 0)
+ {
+ unsigned long len;
+ char *fn_name;
+ asection *fn_text;
+
+ len = strlen (o->name + 18) + 1;
+ fn_name = bfd_malloc (len + 6);
+ if (fn_name == NULL)
+ return FALSE;
+ memcpy (fn_name, ".text.", 6);
+ memcpy (fn_name + 6, o->name + 18, len);
+ fn_text = bfd_get_section_by_name (sub, fn_name);
+ free (fn_name);
+ if (fn_text == NULL || !fn_text->gc_mark)
+ continue;
+ }
+
+ /* If not using specially named exception table section,
+ then keep whatever we are using. */
+ if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
+ return FALSE;
+ }
+ }
+
/* ... and mark SEC_EXCLUDE for those that go. */
if (!elf_gc_sweep (info, get_elf_backend_data (abfd)->gc_sweep_hook))
return FALSE;
@@ -9901,10 +9899,11 @@ fix_syms (struct bfd_link_hash_entry *h,
{
asection *s = h->u.def.section;
if (s != NULL
- && s == s->output_section
- && bfd_section_removed_from_list (obfd, s))
+ && s->output_section != NULL
+ && (s->output_section->flags & SEC_EXCLUDE) != 0
+ && bfd_section_removed_from_list (obfd, s->output_section))
{
- h->u.def.value += s->vma;
+ h->u.def.value += s->output_offset + s->output_section->vma;
h->u.def.section = bfd_abs_section_ptr;
}
}
--- bfd/elfxx-target.h 25 Jul 2005 15:35:37 -0000 1.87
+++ bfd/elfxx-target.h 29 Jul 2005 02:46:04 -0000 1.88
@@ -445,6 +445,9 @@
#ifndef elf_backend_ignore_discarded_relocs
#define elf_backend_ignore_discarded_relocs NULL
#endif
+#ifndef elf_backend_action_discarded
+#define elf_backend_action_discarded _bfd_elf_default_action_discarded
+#endif
#ifndef elf_backend_eh_frame_address_size
#define elf_backend_eh_frame_address_size _bfd_elf_eh_frame_address_size
#endif
@@ -596,6 +599,7 @@ static const struct elf_backend_data elf
elf_backend_reloc_type_class,
elf_backend_discard_info,
elf_backend_ignore_discarded_relocs,
+ elf_backend_action_discarded,
elf_backend_eh_frame_address_size,
elf_backend_can_make_relative_eh_frame,
elf_backend_can_make_lsda_relative_eh_frame,
--- ld/ldlang.c 15 Jul 2005 12:19:13 -0000 1.192
+++ ld/ldlang.c 28 Jul 2005 20:08:15 -0000 1.193
@@ -1010,6 +1010,7 @@ static lang_output_section_statement_typ
lang_output_section_statement_lookup_1 (const char *const name, int constraint)
{
lang_output_section_statement_type *lookup;
+ lang_output_section_statement_type **nextp;
lookup = lang_output_section_find_1 (name, constraint);
if (lookup == NULL)
@@ -1038,9 +1039,13 @@ lang_output_section_statement_lookup_1 (
lookup->update_dot_tree = NULL;
lookup->phdrs = NULL;
+ /* GCC's strict aliasing rules prevent us from just casting the
+ address, so we store the pointer in a variable and cast that
+ instead. */
+ nextp = &lookup->next;
lang_statement_append (&lang_output_section_statement,
(lang_statement_union_type *) lookup,
- (lang_statement_union_type **) &lookup->next);
+ (lang_statement_union_type **) nextp);
}
return lookup;
}
--- ld/testsuite/ld-elfweak/size2.d 5 May 2005 03:11:24 -0000 1.1
+++ ld/testsuite/ld-elfweak/size2.d 27 Jul 2005 00:08:40 -0000 1.2
@@ -4,5 +4,7 @@
#readelf: -s
Symbol table '.symtab' contains .* entries:
#...
- .*: [0-9a-f]* *1 *FUNC *GLOBAL *DEFAULT *[0-9] *_start
+ .*: [0-9a-f]* +1 +FUNC +GLOBAL +DEFAULT +[0-9] +_start
+#...
+ .*: [0-9a-f]* +1 +FUNC +WEAK +DEFAULT +[0-9] +foo
#...
--- ld/testsuite/ld-elfweak/size2a.s 5 May 2005 03:11:24 -0000 1.1
+++ ld/testsuite/ld-elfweak/size2a.s 27 Jul 2005 00:08:40 -0000 1.2
@@ -4,3 +4,9 @@
_start:
.byte 0
.size _start, 1
+
+ .weak foo
+ .type foo, "function"
+foo:
+ .byte 0
+ .size foo, 1
--- ld/testsuite/ld-elfweak/size2b.s 5 May 2005 03:11:24 -0000 1.1
+++ ld/testsuite/ld-elfweak/size2b.s 27 Jul 2005 00:08:40 -0000 1.2
@@ -5,3 +5,10 @@ _start:
.byte 0
.byte 0
.size _start, 2
+
+ .weak foo
+ .type foo, "function"
+foo:
+ .byte 0
+ .byte 0
+ .size foo, 2
Index: binutils.spec
===================================================================
RCS file: /cvs/dist/rpms/binutils/devel/binutils.spec,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- binutils.spec 22 Jul 2005 06:38:14 -0000 1.62
+++ binutils.spec 29 Jul 2005 07:21:34 -0000 1.63
@@ -1,7 +1,7 @@
Summary: A GNU collection of binary utilities.
Name: binutils
Version: 2.16.91.0.2
-Release: 1
+Release: 2
License: GPL
Group: Development/Tools
URL: http://sources.redhat.com/binutils
@@ -14,6 +14,7 @@
Patch6: binutils-2.16.91.0.2-cdtest-libsupcxx.patch
Patch7: binutils-2.16.91.0.2-gas-msg.patch
Patch8: binutils-2.16.91.0.2-readelf-ia64-unwind.patch
+Patch9: binutils-2.16.91.0.2-ppc32-got2.patch
Buildroot: %{_tmppath}/binutils-root
BuildRequires: texinfo >= 4.0, dejagnu, gettext, flex, bison
@@ -51,6 +52,7 @@
%patch6 -p0 -b .cdtest-libsupcxx~
%patch7 -p0 -b .gas-msg~
%patch8 -p0 -b .readelf-ia64-unwind~
+%patch9 -p0 -b .ppc32-got2~
# libtool sucks
perl -pi -e 'm/LIBADD/ && s/(\.\.\/bfd\/libbfd.la)/-L\.\.\/bfd\/\.libs \1/' opcodes/Makefile.{am,in}
# LTP sucks
@@ -159,6 +161,10 @@
%{_infodir}/*info*
%changelog
+* Fri Jul 29 2005 Jakub Jelinek <jakub at redhat.com> 2.16.91.0.2-2
+- don't complain about relocs to discarded sections in ppc32
+ .got2 sections (Alan Modra, PR target/17828)
+
* Fri Jul 22 2005 Jakub Jelinek <jakub at redhat.com> 2.16.91.0.2-1
- update to 2.16.91.0.2
- Previous message (by thread): rpms/kernel/devel patch-2.6.13-rc4.bz2.sign, NONE, 1.1 kernel-2.6.spec, 1.1441, 1.1442 upstream, 1.113, 1.114 patch-2.6.13-rc3.bz2.sign, 1.1, NONE
- Next message (by thread): rpms/gcc/devel gcc4-pr17828-test.patch, NONE, 1.1 gcc4.spec, 1.60, 1.61 gcc4-pr20606.patch, 1.2, NONE gcc4-pr21149-test.patch, 1.1, NONE gcc4-pr22503.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list