Let the user change the dynamic linker used by ELF code.
* ld.h (args_type): Add new field interpreter. * lexsup.c (parse_args): Add dynamic-linker to longopts, and handle it. * ldmain.c (main): Initialize command_line.interpreter to NULL. * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Get the ELF backend to return the .interp section. If command_line.interpreter is not NULL, set the contents of .interp to it. * ld.texinfo: Mention -dynamic-linker.
This commit is contained in:
parent
57569ce8d1
commit
7fb9ca5fc2
4 changed files with 33 additions and 2 deletions
14
ld/ChangeLog
14
ld/ChangeLog
|
@ -1,5 +1,19 @@
|
|||
Wed Jun 15 01:54:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
Let the user change the dynamic linker used by ELF code.
|
||||
* ld.h (args_type): Add new field interpreter.
|
||||
* lexsup.c (parse_args): Add dynamic-linker to longopts, and
|
||||
handle it.
|
||||
* ldmain.c (main): Initialize command_line.interpreter to NULL.
|
||||
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Get
|
||||
the ELF backend to return the .interp section. If
|
||||
command_line.interpreter is not NULL, set the contents of .interp
|
||||
to it.
|
||||
* ld.texinfo: Mention -dynamic-linker.
|
||||
|
||||
* config/sun4sol2.mt (eelf32_sparc.c): Depend upon elf32.em, not
|
||||
generic.em.
|
||||
|
||||
* lexsup.c (parse_args): Sort out the option macros and change the
|
||||
definitions to make it easier to add a new option.
|
||||
|
||||
|
|
|
@ -59,6 +59,8 @@ gld${EMULATION_NAME}_before_parse()
|
|||
static void
|
||||
gld${EMULATION_NAME}_before_allocation ()
|
||||
{
|
||||
asection *sinterp;
|
||||
|
||||
/* If we are going to make any variable assignments, we need to let
|
||||
the ELF backend know about them in case the variables are
|
||||
referred to by dynamic objects. */
|
||||
|
@ -66,8 +68,17 @@ gld${EMULATION_NAME}_before_allocation ()
|
|||
|
||||
/* Let the ELF backend work out the sizes of any sections required
|
||||
by dynamic linking. */
|
||||
if (! bfd_elf32_size_dynamic_sections (output_bfd, &link_info))
|
||||
if (! bfd_elf32_size_dynamic_sections (output_bfd, &link_info,
|
||||
&sinterp))
|
||||
einfo ("%P%F: failed to set dynamic section sizes: %E\n");
|
||||
|
||||
/* Let the user override the dynamic linker we are using. */
|
||||
if (command_line.interpreter != NULL
|
||||
&& sinterp != NULL)
|
||||
{
|
||||
sinterp->contents = (bfd_byte *) command_line.interpreter;
|
||||
sinterp->_raw_size = strlen (command_line.interpreter) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* This is called by the before_allocation routine via
|
||||
|
|
|
@ -162,6 +162,7 @@ main (argc, argv)
|
|||
config.build_constructors = true;
|
||||
config.dynamic_link = false;
|
||||
command_line.force_common_definition = false;
|
||||
command_line.interpreter = NULL;
|
||||
|
||||
link_info.callbacks = &link_callbacks;
|
||||
link_info.relocateable = false;
|
||||
|
|
|
@ -57,7 +57,8 @@ parse_args (argc, argv)
|
|||
|
||||
#define OPTION_CALL_SHARED 150
|
||||
#define OPTION_DEFSYM (OPTION_CALL_SHARED + 1)
|
||||
#define OPTION_EB (OPTION_DEFSYM + 1)
|
||||
#define OPTION_DYNAMIC_LINKER (OPTION_DEFSYM + 1)
|
||||
#define OPTION_EB (OPTION_DYNAMIC_LINKER + 1)
|
||||
#define OPTION_EL (OPTION_EB + 1)
|
||||
#define OPTION_HELP (OPTION_EL + 1)
|
||||
#define OPTION_IGNORE (OPTION_HELP + 1)
|
||||
|
@ -85,6 +86,7 @@ parse_args (argc, argv)
|
|||
{"dn", no_argument, NULL, OPTION_NON_SHARED},
|
||||
{"dp", no_argument, NULL, 'd'},
|
||||
{"dy", no_argument, NULL, OPTION_CALL_SHARED},
|
||||
{"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER},
|
||||
{"EB", no_argument, NULL, OPTION_EB},
|
||||
{"EL", no_argument, NULL, OPTION_EL},
|
||||
{"format", required_argument, NULL, 'b'},
|
||||
|
@ -160,6 +162,9 @@ parse_args (argc, argv)
|
|||
parser_input = input_defsym;
|
||||
yyparse ();
|
||||
break;
|
||||
case OPTION_DYNAMIC_LINKER:
|
||||
command_line.interpreter = optarg;
|
||||
break;
|
||||
case OPTION_EB:
|
||||
/* FIXME: This is currently ignored. It means
|
||||
``produce a big-endian object file''. It could
|
||||
|
|
Loading…
Add table
Reference in a new issue