Add linker option: --warn-shared-textrel to produce warnings when adding a

DT_TEXTREL to a shared object.
This commit is contained in:
Nick Clifton 2004-10-07 14:45:24 +00:00
parent 48c9f030c9
commit 8fdd7217a7
9 changed files with 72 additions and 33 deletions

View File

@ -1,3 +1,9 @@
2004-10-07 Jeff Baker <jbaker@qnx.com>
* elflink.c (_bfd_elf_add_dynamic_entry): Add code to warn if
adding a DT_TEXTREL to a shared object and --warn-shared-textrel
was specified.
2004-10-04 Roland McGrath <roland@redhat.com>
* hash.c (bfd_hash_set_default_size): Use const for table.

View File

@ -2,21 +2,21 @@
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "bfd.h"
#include "sysdep.h"
@ -2701,6 +2701,10 @@ _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
if (! is_elf_hash_table (hash_table))
return FALSE;
if (info->warn_shared_textrel && info->shared && tag == DT_TEXTREL)
_bfd_error_handler
(_("warning: creating a DT_TEXTREL in a shared object."));
bed = get_elf_backend_data (hash_table->dynobj);
s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
BFD_ASSERT (s != NULL);

View File

@ -1,3 +1,7 @@
2004-10-07 Jeff Baker <jbaker@qnx.com>
* bfdlink.h (bfd_link_info): Add bitfield: warn_shared_textrel.
2004-09-17 Paul Brook <paul@codesourcery.com>
* elf/arm.h: Remove R_ARM_STKCHK and R_ARM_THM_STKCHK.

View File

@ -308,6 +308,9 @@ struct bfd_link_info
/* TRUE if PT_GNU_RELRO segment should be created. */
unsigned int relro: 1;
/* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */
unsigned int warn_shared_textrel: 1;
/* What to do with unresolved symbols in an object file.
When producing executables the default is GENERATE_ERROR.
When producing shared libraries the default is IGNORE. The

View File

@ -1,3 +1,11 @@
2004-10-07 Jeff Baker <jbaker@qnx.com>
* lexsup.c: Handle --warn-shared-textrel option.
(ld_options): Restore alpha sorting of options.
* ldmain.c (main): Initialise warn_shared_info field to FALSE.
* ld.texinfo: Add documentation for --warn-shared-textrel.
* NEWS: Added mention of --warn-shared-textrel option.
2004-10-05 Tomer Levi <Tomer.Levi@nsc.com>
* emultempl/crxelf.em (disable_relaxation): Add.

14
ld/NEWS
View File

@ -1,5 +1,8 @@
-*- text -*-
* ELF: --warn-shared-textrel option to warn if adding a DT_TEXTREL to a shared
object.
* Added SORT_BY_NAME and SORT_BY_ALIGNMENT to the linker script
language to permit sorting sections by section name or section
maximum alignment.
@ -7,9 +10,8 @@
* Added a new linker command line switch, --sort-section name|alignment,
to sort sections by section name or maximum alignment.
* New ELF --add-needed/--no-add-needed options to control if a
DT_NEEDED tag should be added when a shared library comes from
DT_NEEDED tags.
* ELF: --add-needed/--no-add-needed options to control if a DT_NEEDED tag
should be added when a shared library comes from DT_NEEDED tags.
* Support for the crx-elf target added.
@ -29,10 +31,10 @@ DT_NEEDED tags.
Changes in 2.15:
* New ELF --as-needed/--no-as-needed options to control if a DT_NEEDED
tag should be added only when a shared library is referenced.
* ELF: --as-needed/--no-as-needed options to control if a DT_NEEDED tag should
be added only when a shared library is referenced.
* New PE --large-address-aware option to indicate executables support virtual
* PE: --large-address-aware option to indicate executables support virtual
addresses greater than 2 gigabytes.
* DWARF 2 support for i386pe added.

View File

@ -1690,6 +1690,10 @@ The address will only be changed if it not explicitly specified; that
is, if the @code{SECTIONS} command does not specify a start address for
the section (@pxref{SECTIONS}).
@kindex --warn-shared-textrel
@item --warn-shared-textrel
Warn if the linker adds a DT_TEXTREL to a shared object.
@kindex --warn-unresolved-symbols
@item --warn-unresolved-symbols
If the linker is going to report an unresolved symbol (see the option

View File

@ -336,6 +336,7 @@ main (int argc, char **argv)
link_info.flags = 0;
link_info.flags_1 = 0;
link_info.need_relax_finalize = FALSE;
link_info.warn_shared_textrel = FALSE;
ldfile_add_arch ("");

View File

@ -147,6 +147,7 @@ enum option_values
OPTION_UNRESOLVED_SYMBOLS,
OPTION_WARN_UNRESOLVED_SYMBOLS,
OPTION_ERROR_UNRESOLVED_SYMBOLS,
OPTION_WARN_SHARED_TEXTREL,
OPTION_REDUCE_MEMORY_OVERHEADS
};
@ -304,6 +305,18 @@ static const struct ld_option ld_options[] =
OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH},
'\0', NULL, N_("Reject input files whose architecture is unknown"),
TWO_DASHES },
{ {"add-needed", no_argument, NULL, OPTION_ADD_NEEDED},
'\0', NULL, N_("Set DT_NEEDED tags for DT_NEEDED entries in\n"
"\t\t\t\tfollowing dynamic libs"), TWO_DASHES },
{ {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_NEEDED},
'\0', NULL, N_("Do not set DT_NEEDED tags for DT_NEEDED entries\n"
"\t\t\t\tin following dynamic libs"), TWO_DASHES },
{ {"as-needed", no_argument, NULL, OPTION_AS_NEEDED},
'\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
TWO_DASHES },
{ {"no-as-needed", no_argument, NULL, OPTION_NO_AS_NEEDED},
'\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"),
TWO_DASHES },
{ {"assert", required_argument, NULL, OPTION_ASSERT},
'\0', N_("KEYWORD"), N_("Ignored for SunOS compatibility"), ONE_DASH },
{ {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED},
@ -337,6 +350,9 @@ static const struct ld_option ld_options[] =
TWO_DASHES },
{ {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS},
'\0', NULL, N_("Generate embedded relocs"), TWO_DASHES},
{ {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL},
'\0', NULL, N_("Treat warnings as errors"),
TWO_DASHES },
{ {"fini", required_argument, NULL, OPTION_FINI},
'\0', N_("SYMBOL"), N_("Call SYMBOL at unload-time"), ONE_DASH },
{ {"force-exe-suffix", no_argument, NULL, OPTION_FORCE_EXE_SUFFIX},
@ -476,30 +492,18 @@ static const struct ld_option ld_options[] =
{ {"warn-section-align", no_argument, NULL, OPTION_WARN_SECTION_ALIGN},
'\0', NULL, N_("Warn if start of section changes due to alignment"),
TWO_DASHES },
{ {"warn-shared-textrel", no_argument, NULL, OPTION_WARN_SHARED_TEXTREL},
'\0', NULL, N_("Warn if shared object has DT_TEXTREL"),
TWO_DASHES },
{ {"warn-unresolved-symbols", no_argument, NULL,
OPTION_WARN_UNRESOLVED_SYMBOLS},
'\0', NULL, N_("Report unresolved symbols as warnings"), TWO_DASHES },
{ {"error-unresolved-symbols", no_argument, NULL,
OPTION_ERROR_UNRESOLVED_SYMBOLS},
'\0', NULL, N_("Report unresolved symbols as errors"), TWO_DASHES },
{ {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL},
'\0', NULL, N_("Treat warnings as errors"),
TWO_DASHES },
{ {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE},
'\0', NULL, N_("Include all objects from following archives"),
TWO_DASHES },
{ {"add-needed", no_argument, NULL, OPTION_ADD_NEEDED},
'\0', NULL, N_("Set DT_NEEDED tags for DT_NEEDED entries in\n"
"\t\t\t\tfollowing dynamic libs"), TWO_DASHES },
{ {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_NEEDED},
'\0', NULL, N_("Do not set DT_NEEDED tags for DT_NEEDED entries\n"
"\t\t\t\tin following dynamic libs"), TWO_DASHES },
{ {"as-needed", no_argument, NULL, OPTION_AS_NEEDED},
'\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
TWO_DASHES },
{ {"no-as-needed", no_argument, NULL, OPTION_NO_AS_NEEDED},
'\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"),
TWO_DASHES },
{ {"wrap", required_argument, NULL, OPTION_WRAP},
'\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
};
@ -1214,6 +1218,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_WARN_SECTION_ALIGN:
config.warn_section_align = TRUE;
break;
case OPTION_WARN_SHARED_TEXTREL:
link_info.warn_shared_textrel = TRUE;
break;
case OPTION_WHOLE_ARCHIVE:
whole_archive = TRUE;
break;