From 862517b6506a76ce9dc0e06b8f1d98577371e3b4 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 29 Sep 2001 12:07:01 +0000 Subject: [PATCH] * 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. * ldlang.c (section_already_linked): Remove assignment to kept_section. --- bfd/ChangeLog | 14 ++++++++++++++ bfd/bfd-in2.h | 4 ---- bfd/cofflink.c | 6 ++---- bfd/configure | 2 +- bfd/configure.in | 2 +- bfd/ecoff.c | 4 ++-- bfd/elflink.h | 55 ++++++++++++------------------------------------------- bfd/section.c | 9 ++------- ld/ChangeLog | 4 ++++ ld/ldlang.c | 5 +---- 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 + * 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 + * 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 + + * ldlang.c (section_already_linked): Remove assignment to kept_section. + 2001-09-26 Alan Modra * 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; } -- 2.7.4