aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog14
-rw-r--r--bfd/bfd-in2.h4
-rw-r--r--bfd/cofflink.c6
-rwxr-xr-xbfd/configure2
-rw-r--r--bfd/configure.in2
-rw-r--r--bfd/ecoff.c4
-rw-r--r--bfd/elflink.h55
-rw-r--r--bfd/section.c9
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/ldlang.c5
10 files changed, 39 insertions, 66 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3b5da8e..b1782e3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,19 @@
2001-09-29 Alan Modra <amodra@bigpond.net.au>
+ * section.c (struct sec): Remove kept_section.
+ (STD_SECTION): Remove kept_section initialisation.
+ (bfd_make_section_anyway): Here too.
+ * ecoff.c (bfd_debug_section): Remove kept_section initialisation.
+ * cofflink.c (_bfd_coff_link_input_bfd): Don't test kept_section.
+ * elflink.h (elf_link_input_bfd): Set discarded link-once section
+ symbols to zero, and remove all code involved with kept_section
+ and tracking section symbol values.
+ * bfd-in2.h: Regenerate.
+ * configure.in: Bump version number.
+ * configure: Regenerate.
+
+2001-09-29 Alan Modra <amodra@bigpond.net.au>
+
* elf64-ppc.c (struct ppc_dyn_relocs): New.
(IS_ABSOLUTE_RELOC): Define.
(struct ppc_link_hash_entry): New.
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 5e893f9..793bb62 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1319,10 +1319,6 @@ typedef struct sec
struct bfd_comdat_info *comdat;
- /* Points to the kept section if this section is a link-once section,
- and is discarded. */
- struct sec *kept_section;
-
/* When a section is being output, this value changes as more
linenumbers are written out. */
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index 31ac756..594b169 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -1516,15 +1516,13 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
#ifndef COFF_WITH_PE
/* Skip section symbols for sections which are not going to be
- emitted, or which belong to linkonce sections that are going
- to be discarded. */
+ emitted. */
if (!skip
&& isym.n_sclass == C_STAT
&& isym.n_type == T_NULL
&& isym.n_numaux > 0)
{
- if ((*secpp)->output_section == bfd_abs_section_ptr
- || (*secpp)->kept_section)
+ if ((*secpp)->output_section == bfd_abs_section_ptr)
skip = true;
}
#endif
diff --git a/bfd/configure b/bfd/configure
index fef25b3..d30e1d4 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -1127,7 +1127,7 @@ fi
PACKAGE=bfd
-VERSION=2.11.91
+VERSION=2.11.92
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
diff --git a/bfd/configure.in b/bfd/configure.in
index 46bc1ed..081fe08 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -7,7 +7,7 @@ AC_INIT(libbfd.c)
AC_CANONICAL_SYSTEM
AC_ISC_POSIX
-AM_INIT_AUTOMAKE(bfd, 2.11.91)
+AM_INIT_AUTOMAKE(bfd, 2.11.92)
dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index 359c254..4e0e953 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -86,8 +86,8 @@ static asection bfd_debug_section =
NULL, NULL, 0, 0, 0,
/* line_filepos, userdata, contents, lineno, lineno_count, */
0, NULL, NULL, NULL, 0,
- /* entsize, comdat, kept_section, moving_line_filepos, */
- 0, NULL, NULL, 0,
+ /* entsize, comdat, moving_line_filepos, */
+ 0, NULL, 0,
/* target_index, used_by_bfd, constructor_chain, owner, */
0, NULL, NULL, NULL,
/* symbol, */
diff --git a/bfd/elflink.h b/bfd/elflink.h
index 73687fb..39f8811 100644
--- a/bfd/elflink.h
+++ b/bfd/elflink.h
@@ -5962,12 +5962,8 @@ elf_link_input_bfd (finfo, input_bfd)
}
}
- name = NULL;
if (isym->st_shndx == SHN_UNDEF)
- {
- isec = bfd_und_section_ptr;
- name = isec->name;
- }
+ isec = bfd_und_section_ptr;
else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
{
isec = section_from_elf_index (input_bfd, isym->st_shndx);
@@ -5979,15 +5975,9 @@ elf_link_input_bfd (finfo, input_bfd)
isym->st_value, (bfd_vma) 0);
}
else if (isym->st_shndx == SHN_ABS)
- {
- isec = bfd_abs_section_ptr;
- name = isec->name;
- }
+ isec = bfd_abs_section_ptr;
else if (isym->st_shndx == SHN_COMMON)
- {
- isec = bfd_com_section_ptr;
- name = isec->name;
- }
+ isec = bfd_com_section_ptr;
else
{
/* Who knows? */
@@ -6002,39 +5992,18 @@ elf_link_input_bfd (finfo, input_bfd)
if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
{
- asection *ksec;
-
- /* Save away all section symbol values. */
- if (isec != NULL)
- {
- if (name)
- {
- if (isec->symbol->value != isym->st_value)
- (*_bfd_error_handler)
- (_("%s: invalid section symbol index 0x%x (%s) ignored"),
- bfd_archive_filename (input_bfd), isym->st_shndx,
- name);
- continue;
- }
- isec->symbol->value = isym->st_value;
- }
-
- /* If this is a discarded link-once section symbol, update
- it's value to that of the kept section symbol. The
- linker will keep the first of any matching link-once
- sections, so we should have already seen it's section
- symbol. I trust no-one will have the bright idea of
- re-ordering the bfd list... */
+ /* If this is a discarded link-once section symbol, set its
+ value to 0. We should really undefine it, and complain
+ if anything in the final link tries to use it, but
+ DWARF-based exception handling might have an entry in
+ .eh_frame to describe a routine in the linkonce section,
+ and it turns out to be hard to remove the .eh_frame entry
+ too. FIXME. */
if (isec != NULL
&& (bfd_get_section_flags (input_bfd, isec) & SEC_LINK_ONCE) != 0
- && (ksec = isec->kept_section) != NULL)
+ && bfd_is_abs_section (isec->output_section))
{
- isym->st_value = ksec->symbol->value;
-
- /* That put the value right, but the section info is all
- wrong. I hope this works. */
- isec->output_offset = ksec->output_offset;
- isec->output_section = ksec->output_section;
+ isym->st_value = 0;
}
/* We never output section symbols. Instead, we use the
diff --git a/bfd/section.c b/bfd/section.c
index 274979b..f3bd381 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -485,10 +485,6 @@ CODE_FRAGMENT
.
. struct bfd_comdat_info *comdat;
.
-. {* Points to the kept section if this section is a link-once section,
-. and is discarded. *}
-. struct sec *kept_section;
-.
. {* When a section is being output, this value changes as more
. linenumbers are written out. *}
.
@@ -599,8 +595,8 @@ static const asymbol global_syms[] =
/* line_filepos, userdata, contents, lineno, lineno_count, */ \
0, NULL, NULL, NULL, 0, \
\
- /* entsize, comdat, kept_section, moving_line_filepos, */ \
- 0, NULL, NULL, 0, \
+ /* entsize, comdat, moving_line_filepos, */ \
+ 0, NULL, 0, \
\
/* target_index, used_by_bfd, constructor_chain, owner, */ \
0, NULL, NULL, NULL, \
@@ -807,7 +803,6 @@ bfd_make_section_anyway (abfd, name)
newsect->line_filepos = 0;
newsect->owner = abfd;
newsect->comdat = NULL;
- newsect->kept_section = NULL;
/* Create a symbol whos only job is to point to this section. This is
useful for things like relocs which are relative to the base of a
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 1186705..de5b83d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2001-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (section_already_linked): Remove assignment to kept_section.
+
2001-09-26 Alan Modra <amodra@bigpond.net.au>
* ldmisc.c (USE_STDARG): Remove.
diff --git a/ld/ldlang.c b/ld/ldlang.c
index db420e8..1b63468 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1013,11 +1013,8 @@ section_already_linked (abfd, sec, data)
/* Set the output_section field so that lang_add_section
does not create a lang_input_section structure for this
- section. Since there might be a symbol in the section
- being discarded, we must retain a pointer to the section
- which we are really going to use. */
+ section. */
sec->output_section = bfd_abs_section_ptr;
- sec->kept_section = l->sec;
return;
}