* ldemul.c (ldemul_add_options, ldemul_handle_option): New functions.
(ldemul_parse_args): Return bfd_boolean. Formatting. * ldemul.h (ldemul_add_options, ldemul_handle_option): Declare. (ldemul_parse_args): Adjust. (struct ld_emulation_xfer_struct): Add add_options and handle_option. Return bfd_boolean from parse_args. * lexsup.c (parse_args): Malloc shortopts, longopts and really_longopts. Call ldemul_add_options and ldemul_handle_option. * emultempl/aix.em (gld${EMULATION_NAME}_add_options): Split out from gld${EMULATION_NAME}_parse_args. (gld${EMULATION_NAME}_handle_option): Likewise. (ld_${EMULATION_NAME}_emulation): Adjust initializer. * emultempl/armcoff.em: As for aix.em, but remove parse_args. * emultempl/beos.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/ticoff.em: Likewise. * emultempl/elf32.em: Likewise. Don't duplicate long options either. (gld${EMULATION_NAME}_add_sysroot): Prototype. * emultempl/armelf.em (PARSE_AND_LIST_LONGOPTS): Don't duplicate options. * emultempl/hppaelf.em (PARSE_AND_LIST_LONGOPTS): Likewise. * emultempl/ppc32elf.em (PARSE_AND_LIST_LONGOPTS): Likewise. * emultempl/ppc64elf.em (PARSE_AND_LIST_LONGOPTS): Likewise. * emultempl/armelf_oabi.em (ld_${EMULATION_NAME}_emulation): Adjust initializer. * emultempl/generic.em: Likewise. * emultempl/gld960.em: Likewise. * emultempl/gld960c.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/lnk960.em: Likewise. * emultempl/m68kcoff.em: Likewise. * emultempl/mipsecoff.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/vanilla.em: Likewise. * emultempl/netbsd.em (gldnetbsd_before_parse): Prototype.
This commit is contained in:
parent
2c4c2bc0a5
commit
3bcf55573d
38
ld/ChangeLog
38
ld/ChangeLog
@ -1,3 +1,41 @@
|
|||||||
|
2003-02-28 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* ldemul.c (ldemul_add_options, ldemul_handle_option): New functions.
|
||||||
|
(ldemul_parse_args): Return bfd_boolean. Formatting.
|
||||||
|
* ldemul.h (ldemul_add_options, ldemul_handle_option): Declare.
|
||||||
|
(ldemul_parse_args): Adjust.
|
||||||
|
(struct ld_emulation_xfer_struct): Add add_options and handle_option.
|
||||||
|
Return bfd_boolean from parse_args.
|
||||||
|
* lexsup.c (parse_args): Malloc shortopts, longopts and
|
||||||
|
really_longopts. Call ldemul_add_options and ldemul_handle_option.
|
||||||
|
* emultempl/aix.em (gld${EMULATION_NAME}_add_options): Split out from
|
||||||
|
gld${EMULATION_NAME}_parse_args.
|
||||||
|
(gld${EMULATION_NAME}_handle_option): Likewise.
|
||||||
|
(ld_${EMULATION_NAME}_emulation): Adjust initializer.
|
||||||
|
* emultempl/armcoff.em: As for aix.em, but remove parse_args.
|
||||||
|
* emultempl/beos.em: Likewise.
|
||||||
|
* emultempl/pe.em: Likewise.
|
||||||
|
* emultempl/ticoff.em: Likewise.
|
||||||
|
* emultempl/elf32.em: Likewise. Don't duplicate long options either.
|
||||||
|
(gld${EMULATION_NAME}_add_sysroot): Prototype.
|
||||||
|
* emultempl/armelf.em (PARSE_AND_LIST_LONGOPTS): Don't duplicate
|
||||||
|
options.
|
||||||
|
* emultempl/hppaelf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
|
||||||
|
* emultempl/ppc32elf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
|
||||||
|
* emultempl/ppc64elf.em (PARSE_AND_LIST_LONGOPTS): Likewise.
|
||||||
|
* emultempl/armelf_oabi.em (ld_${EMULATION_NAME}_emulation): Adjust
|
||||||
|
initializer.
|
||||||
|
* emultempl/generic.em: Likewise.
|
||||||
|
* emultempl/gld960.em: Likewise.
|
||||||
|
* emultempl/gld960c.em: Likewise.
|
||||||
|
* emultempl/linux.em: Likewise.
|
||||||
|
* emultempl/lnk960.em: Likewise.
|
||||||
|
* emultempl/m68kcoff.em: Likewise.
|
||||||
|
* emultempl/mipsecoff.em: Likewise.
|
||||||
|
* emultempl/sunos.em: Likewise.
|
||||||
|
* emultempl/vanilla.em: Likewise.
|
||||||
|
* emultempl/netbsd.em (gldnetbsd_before_parse): Prototype.
|
||||||
|
|
||||||
2003-02-25 Alexandre Oliva <aoliva@redhat.com>
|
2003-02-25 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
* emultempl/elf32.em (gld${EMULATION_NAME}_add_sysroot): Fix
|
* emultempl/elf32.em (gld${EMULATION_NAME}_add_sysroot): Fix
|
||||||
|
@ -9,7 +9,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* AIX emulation code for ${EMULATION_NAME}
|
/* AIX emulation code for ${EMULATION_NAME}
|
||||||
Copyright 1991, 1993, 1995, 1996, 1997, 1998, 2000, 2001, 2002
|
Copyright 1991, 1993, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain <sac@cygnus.com>
|
Written by Steve Chamberlain <sac@cygnus.com>
|
||||||
AIX support by Ian Lance Taylor <ian@cygnus.com>
|
AIX support by Ian Lance Taylor <ian@cygnus.com>
|
||||||
@ -58,8 +58,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
|
|
||||||
static void gld${EMULATION_NAME}_before_parse
|
static void gld${EMULATION_NAME}_before_parse
|
||||||
PARAMS ((void));
|
PARAMS ((void));
|
||||||
static int gld${EMULATION_NAME}_parse_args
|
static bfd_boolean gld${EMULATION_NAME}_parse_args
|
||||||
PARAMS ((int, char **));
|
PARAMS ((int, char **));
|
||||||
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
static bfd_boolean gld${EMULATION_NAME}_handle_option
|
||||||
|
PARAMS ((int));
|
||||||
static void gld${EMULATION_NAME}_after_open
|
static void gld${EMULATION_NAME}_after_open
|
||||||
PARAMS ((void));
|
PARAMS ((void));
|
||||||
static char *gld${EMULATION_NAME}_choose_target
|
static char *gld${EMULATION_NAME}_choose_target
|
||||||
@ -180,20 +184,7 @@ gld${EMULATION_NAME}_before_parse ()
|
|||||||
|
|
||||||
/* Handle AIX specific options. */
|
/* Handle AIX specific options. */
|
||||||
|
|
||||||
static int
|
enum
|
||||||
gld${EMULATION_NAME}_parse_args (argc, argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
int prevoptind = optind;
|
|
||||||
int prevopterr = opterr;
|
|
||||||
int indx;
|
|
||||||
int longind;
|
|
||||||
int optc;
|
|
||||||
bfd_signed_vma val;
|
|
||||||
const char *end;
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
{
|
||||||
OPTION_IGNORE = 300,
|
OPTION_IGNORE = 300,
|
||||||
OPTION_AUTOIMP,
|
OPTION_AUTOIMP,
|
||||||
@ -218,6 +209,17 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
OPTION_NOLIBPATH,
|
OPTION_NOLIBPATH,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns;
|
||||||
|
char **shortopts;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
|
static const char xtra_short[] = "D:H:KT:z";
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
/* -binitfini has special handling in the linker backend. The native linker
|
/* -binitfini has special handling in the linker backend. The native linker
|
||||||
uses the arguemnts to generate a table of init and fini functions for
|
uses the arguemnts to generate a table of init and fini functions for
|
||||||
the executable. The important use for this option is to support aix 4.2+
|
the executable. The important use for this option is to support aix 4.2+
|
||||||
@ -227,7 +229,6 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
the first symbol in the loader symbol table is __rtinit. The gnu linker
|
the first symbol in the loader symbol table is __rtinit. The gnu linker
|
||||||
generates this symbol and makes it the first loader symbol. */
|
generates this symbol and makes it the first loader symbol. */
|
||||||
|
|
||||||
static const struct option longopts[] = {
|
|
||||||
{"basis", no_argument, NULL, OPTION_IGNORE},
|
{"basis", no_argument, NULL, OPTION_IGNORE},
|
||||||
{"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
|
{"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
|
||||||
{"bcomprld", no_argument, NULL, OPTION_IGNORE},
|
{"bcomprld", no_argument, NULL, OPTION_IGNORE},
|
||||||
@ -288,6 +289,20 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
-bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
|
-bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
|
||||||
-bx, -bX, -bxref. */
|
-bx, -bX, -bxref. */
|
||||||
|
|
||||||
|
*shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
|
||||||
|
memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
gld${EMULATION_NAME}_parse_args (argc, argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
int indx;
|
||||||
|
|
||||||
/* If the current option starts with -b, change the first : to an =.
|
/* If the current option starts with -b, change the first : to an =.
|
||||||
The AIX linker uses : to separate the option from the argument;
|
The AIX linker uses : to separate the option from the argument;
|
||||||
changing it to = lets us treat it as a getopt option. */
|
changing it to = lets us treat it as a getopt option. */
|
||||||
@ -308,22 +323,20 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
/* We add s and u so to the short options list so that -s and -u on
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
the command line do not match -static and -unix. */
|
int optc;
|
||||||
|
{
|
||||||
opterr = 0;
|
bfd_signed_vma val;
|
||||||
optc = getopt_long_only (argc, argv, "-D:H:KT:zsu", longopts, &longind);
|
const char *end;
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
case 's':
|
|
||||||
case 'u':
|
|
||||||
default:
|
default:
|
||||||
optind = prevoptind;
|
return FALSE;
|
||||||
return 0;
|
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
/* Long option which just sets a flag. */
|
/* Long option which just sets a flag. */
|
||||||
@ -358,10 +371,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
ignore the AIX option, because gcc passes it to the linker. */
|
ignore the AIX option, because gcc passes it to the linker. */
|
||||||
val = bfd_scan_vma (optarg, &end, 0);
|
val = bfd_scan_vma (optarg, &end, 0);
|
||||||
if (*end != '\0')
|
if (*end != '\0')
|
||||||
{
|
return FALSE;
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
lang_section_start (".text", exp_intop (val));
|
lang_section_start (".text", exp_intop (val));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -552,7 +562,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called when an input file can not be recognized as a BFD
|
/* This is called when an input file can not be recognized as a BFD
|
||||||
@ -945,7 +955,7 @@ is_syscall (input, flag)
|
|||||||
|
|
||||||
/* Read an import or export file. For an import file, this is called
|
/* Read an import or export file. For an import file, this is called
|
||||||
by the before_allocation emulation routine. For an export file,
|
by the before_allocation emulation routine. For an export file,
|
||||||
this is called by the parse_args emulation routine. */
|
this is called by the handle_option emulation routine. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_read_file (filename, import)
|
gld${EMULATION_NAME}_read_file (filename, import)
|
||||||
@ -1391,6 +1401,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
|
|||||||
0, /* place_orphan */
|
0, /* place_orphan */
|
||||||
0, /* set_symbols */
|
0, /* set_symbols */
|
||||||
gld${EMULATION_NAME}_parse_args,
|
gld${EMULATION_NAME}_parse_args,
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
gld${EMULATION_NAME}_unrecognized_file,
|
gld${EMULATION_NAME}_unrecognized_file,
|
||||||
NULL, /* list_options */
|
NULL, /* list_options */
|
||||||
NULL, /* recognized_file */
|
NULL, /* recognized_file */
|
||||||
|
@ -4,7 +4,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* emulate the original gld for the given ${EMULATION_NAME}
|
/* emulate the original gld for the given ${EMULATION_NAME}
|
||||||
Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain steve@cygnus.com
|
Written by Steve Chamberlain steve@cygnus.com
|
||||||
|
|
||||||
@ -43,8 +43,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
|
static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
|
||||||
static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
|
static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
|
||||||
static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
|
static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
|
||||||
static int gld${EMULATION_NAME}_parse_args PARAMS((int, char **));
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
static void gld${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
static void gld${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
||||||
|
static bfd_boolean gld${EMULATION_NAME}_handle_option PARAMS ((int));
|
||||||
static void gld${EMULATION_NAME}_finish PARAMS ((void));
|
static void gld${EMULATION_NAME}_finish PARAMS ((void));
|
||||||
static void gld${EMULATION_NAME}_after_open PARAMS ((void));
|
static void gld${EMULATION_NAME}_after_open PARAMS ((void));
|
||||||
|
|
||||||
@ -57,12 +59,25 @@ static char * thumb_entry_symbol = NULL;
|
|||||||
#define OPTION_SUPPORT_OLD_CODE 300
|
#define OPTION_SUPPORT_OLD_CODE 300
|
||||||
#define OPTION_THUMB_ENTRY 301
|
#define OPTION_THUMB_ENTRY 301
|
||||||
|
|
||||||
static struct option longopts[] =
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns ATTRIBUTE_UNUSED;
|
||||||
|
char **shortopts ATTRIBUTE_UNUSED;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
{"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
|
{"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
|
||||||
{"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
|
{"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_list_options (file)
|
gld${EMULATION_NAME}_list_options (file)
|
||||||
@ -72,34 +87,14 @@ gld${EMULATION_NAME}_list_options (file)
|
|||||||
fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
|
fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static bfd_boolean
|
||||||
gld${EMULATION_NAME}_parse_args (argc, argv)
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
int argc;
|
|
||||||
char ** argv;
|
|
||||||
{
|
|
||||||
int longind;
|
|
||||||
int optc;
|
int optc;
|
||||||
int prevoptind = optind;
|
{
|
||||||
int prevopterr = opterr;
|
|
||||||
int wanterror;
|
|
||||||
static int lastoptind = -1;
|
|
||||||
|
|
||||||
if (lastoptind != optind)
|
|
||||||
opterr = 0;
|
|
||||||
|
|
||||||
wanterror = opterr;
|
|
||||||
lastoptind = optind;
|
|
||||||
|
|
||||||
optc = getopt_long_only (argc, argv, "-", longopts, & longind);
|
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
if (wanterror)
|
return FALSE;
|
||||||
xexit (1);
|
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case OPTION_SUPPORT_OLD_CODE:
|
case OPTION_SUPPORT_OLD_CODE:
|
||||||
support_old_code = 1;
|
support_old_code = 1;
|
||||||
@ -110,7 +105,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -286,7 +281,9 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* open dynamic archive */
|
NULL, /* open dynamic archive */
|
||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
gld${EMULATION_NAME}_parse_args,
|
NULL, /* parse_args */
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
NULL, /* unrecognised file */
|
NULL, /* unrecognised file */
|
||||||
gld${EMULATION_NAME}_list_options,
|
gld${EMULATION_NAME}_list_options,
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# This shell script emits a C file. -*- C -*-
|
# This shell script emits a C file. -*- C -*-
|
||||||
# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2002
|
# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2002, 2003
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GLD, the Gnu Linker.
|
# This file is part of GLD, the Gnu Linker.
|
||||||
@ -195,11 +195,7 @@ PARSE_AND_LIST_PROLOGUE='
|
|||||||
|
|
||||||
PARSE_AND_LIST_SHORTOPTS=p
|
PARSE_AND_LIST_SHORTOPTS=p
|
||||||
|
|
||||||
# Note we have duplicate entries for no-pipeline-knowledge in order
|
|
||||||
# to prevent getopt_long_only from thinking that -n is a unique
|
|
||||||
# abbreviation for --no-pipeline-knowledge.
|
|
||||||
PARSE_AND_LIST_LONGOPTS='
|
PARSE_AND_LIST_LONGOPTS='
|
||||||
{ "no-pipeline-knowledge", no_argument, NULL, '\'p\''},
|
|
||||||
{ "no-pipeline-knowledge", no_argument, NULL, '\'p\''},
|
{ "no-pipeline-knowledge", no_argument, NULL, '\'p\''},
|
||||||
{ "thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
|
{ "thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
|
||||||
'
|
'
|
||||||
|
@ -4,7 +4,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* emulate the original gld for the given ${EMULATION_NAME}
|
/* emulate the original gld for the given ${EMULATION_NAME}
|
||||||
Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain steve@cygnus.com
|
Written by Steve Chamberlain steve@cygnus.com
|
||||||
|
|
||||||
@ -171,6 +171,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -7,7 +7,7 @@ else
|
|||||||
fi
|
fi
|
||||||
cat >e${EMULATION_NAME}.c <<EOF
|
cat >e${EMULATION_NAME}.c <<EOF
|
||||||
/* This file is part of GLD, the Gnu Linker.
|
/* This file is part of GLD, the Gnu Linker.
|
||||||
Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002
|
Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
@ -58,7 +58,6 @@ static void gld_${EMULATION_NAME}_before_allocation PARAMS ((void));
|
|||||||
static bfd_boolean gld${EMULATION_NAME}_place_orphan
|
static bfd_boolean gld${EMULATION_NAME}_place_orphan
|
||||||
PARAMS ((lang_input_statement_type *, asection *));
|
PARAMS ((lang_input_statement_type *, asection *));
|
||||||
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
||||||
static int gld_${EMULATION_NAME}_parse_args PARAMS ((int, char **));
|
|
||||||
|
|
||||||
static int sort_by_file_name PARAMS ((const PTR, const PTR));
|
static int sort_by_file_name PARAMS ((const PTR, const PTR));
|
||||||
static int sort_by_section_name PARAMS ((const PTR, const PTR));
|
static int sort_by_section_name PARAMS ((const PTR, const PTR));
|
||||||
@ -110,7 +109,19 @@ gld_${EMULATION_NAME}_before_parse()
|
|||||||
#define OPTION_SUBSYSTEM (OPTION_STACK + 1)
|
#define OPTION_SUBSYSTEM (OPTION_STACK + 1)
|
||||||
#define OPTION_HEAP (OPTION_SUBSYSTEM + 1)
|
#define OPTION_HEAP (OPTION_SUBSYSTEM + 1)
|
||||||
|
|
||||||
static struct option longopts[] = {
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns ATTRIBUTE_UNUSED;
|
||||||
|
char **shortopts ATTRIBUTE_UNUSED;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
/* PE options */
|
/* PE options */
|
||||||
{"base-file", required_argument, NULL, OPTION_BASE_FILE},
|
{"base-file", required_argument, NULL, OPTION_BASE_FILE},
|
||||||
{"dll", no_argument, NULL, OPTION_DLL},
|
{"dll", no_argument, NULL, OPTION_DLL},
|
||||||
@ -129,6 +140,11 @@ static struct option longopts[] = {
|
|||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
|
/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
|
||||||
parameters which may be input from the command line */
|
parameters which may be input from the command line */
|
||||||
@ -299,35 +315,17 @@ set_pe_stack_heap (resname, comname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bfd_boolean gld${EMULATION_NAME}_handle_option
|
||||||
|
PARAMS ((int));
|
||||||
|
|
||||||
static int
|
static bfd_boolean
|
||||||
gld_${EMULATION_NAME}_parse_args(argc, argv)
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
int longind;
|
|
||||||
int optc;
|
int optc;
|
||||||
int prevoptind = optind;
|
{
|
||||||
int prevopterr = opterr;
|
|
||||||
int wanterror;
|
|
||||||
static int lastoptind = -1;
|
|
||||||
|
|
||||||
if (lastoptind != optind)
|
|
||||||
opterr = 0;
|
|
||||||
wanterror = opterr;
|
|
||||||
|
|
||||||
lastoptind = optind;
|
|
||||||
|
|
||||||
optc = getopt_long_only (argc, argv, "-", longopts, &longind);
|
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
if (wanterror)
|
return FALSE;
|
||||||
xexit (1);
|
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case OPTION_BASE_FILE:
|
case OPTION_BASE_FILE:
|
||||||
link_info.base_file = (PTR) fopen (optarg, FOPEN_WB);
|
link_info.base_file = (PTR) fopen (optarg, FOPEN_WB);
|
||||||
@ -380,7 +378,7 @@ gld_${EMULATION_NAME}_parse_args(argc, argv)
|
|||||||
set_pe_value ("__image_base__");
|
set_pe_value ("__image_base__");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign values to the special symbols before the linker script is
|
/* Assign values to the special symbols before the linker script is
|
||||||
@ -870,7 +868,9 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* open dynamic archive */
|
NULL, /* open dynamic archive */
|
||||||
gld${EMULATION_NAME}_place_orphan,
|
gld${EMULATION_NAME}_place_orphan,
|
||||||
gld_${EMULATION_NAME}_set_symbols,
|
gld_${EMULATION_NAME}_set_symbols,
|
||||||
gld_${EMULATION_NAME}_parse_args,
|
NULL, /* parse_args */
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -51,6 +51,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#include "ldemul.h"
|
#include "ldemul.h"
|
||||||
#include <ldgram.h>
|
#include <ldgram.h>
|
||||||
#include "elf/common.h"
|
#include "elf/common.h"
|
||||||
|
#include "getopt.h"
|
||||||
|
|
||||||
static void gld${EMULATION_NAME}_before_parse
|
static void gld${EMULATION_NAME}_before_parse
|
||||||
PARAMS ((void));
|
PARAMS ((void));
|
||||||
@ -444,6 +445,8 @@ if [ "x${USE_LIBPATH}" = xyes ] ; then
|
|||||||
|
|
||||||
/* Add the sysroot to every entry in a colon-separated path. */
|
/* Add the sysroot to every entry in a colon-separated path. */
|
||||||
|
|
||||||
|
static char * gld${EMULATION_NAME}_add_sysroot PARAMS ((const char *));
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
gld${EMULATION_NAME}_add_sysroot (path)
|
gld${EMULATION_NAME}_add_sysroot (path)
|
||||||
const char *path;
|
const char *path;
|
||||||
@ -1514,8 +1517,6 @@ fi
|
|||||||
|
|
||||||
if test -n "$PARSE_AND_LIST_ARGS_CASES" -o x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
if test -n "$PARSE_AND_LIST_ARGS_CASES" -o x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
||||||
|
|
||||||
if test x"$LDEMUL_PARSE_ARGS" != xgld"$EMULATION_NAME"_parse_args; then
|
|
||||||
|
|
||||||
if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
|
if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
$PARSE_AND_LIST_PROLOGUE
|
$PARSE_AND_LIST_PROLOGUE
|
||||||
@ -1524,28 +1525,33 @@ fi
|
|||||||
|
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
|
|
||||||
#include "getopt.h"
|
|
||||||
|
|
||||||
#define OPTION_DISABLE_NEW_DTAGS (400)
|
#define OPTION_DISABLE_NEW_DTAGS (400)
|
||||||
#define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
|
#define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
|
||||||
#define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
|
#define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
|
||||||
#define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
|
#define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
|
||||||
|
|
||||||
static struct option longopts[] =
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns;
|
||||||
|
char **shortopts;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
|
static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:";
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
/* getopt allows abbreviations, so we do this to stop it from
|
|
||||||
treating -d/-e as abbreviations for these options. */
|
|
||||||
{"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
|
{"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
|
||||||
{"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
|
|
||||||
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
|
|
||||||
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
|
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
|
||||||
{"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
|
{"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
|
||||||
{"Bgroup", no_argument, NULL, OPTION_GROUP},
|
{"Bgroup", no_argument, NULL, OPTION_GROUP},
|
||||||
{"Bgroup", no_argument, NULL, OPTION_GROUP},
|
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1557,40 +1563,26 @@ fi
|
|||||||
|
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
|
||||||
|
memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
static int gld${EMULATION_NAME}_parse_args PARAMS ((int, char **));
|
static bfd_boolean gld${EMULATION_NAME}_handle_option
|
||||||
|
PARAMS ((int));
|
||||||
|
|
||||||
static int
|
static bfd_boolean
|
||||||
gld${EMULATION_NAME}_parse_args (argc, argv)
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
int argc;
|
|
||||||
char ** argv;
|
|
||||||
{
|
|
||||||
int longind;
|
|
||||||
int optc;
|
int optc;
|
||||||
static int prevoptind = -1;
|
{
|
||||||
int prevopterr = opterr;
|
|
||||||
int wanterror;
|
|
||||||
|
|
||||||
if (prevoptind != optind)
|
|
||||||
opterr = 0;
|
|
||||||
|
|
||||||
wanterror = opterr;
|
|
||||||
prevoptind = optind;
|
|
||||||
|
|
||||||
optc = getopt_long_only (argc, argv,
|
|
||||||
"-${PARSE_AND_LIST_SHORTOPTS}z:", longopts,
|
|
||||||
&longind);
|
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
if (wanterror)
|
return FALSE;
|
||||||
xexit (1);
|
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -1663,11 +1655,10 @@ fi
|
|||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
|
if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
@ -1721,11 +1712,10 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if test x"$LDEMUL_PARSE_ARGS" != xgld"$EMULATION_NAME"_parse_args; then
|
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
#define gld${EMULATION_NAME}_parse_args NULL
|
#define gld${EMULATION_NAME}_add_options NULL
|
||||||
|
#define gld${EMULATION_NAME}_handle_option NULL
|
||||||
EOF
|
EOF
|
||||||
fi
|
|
||||||
if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
|
if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
#define gld${EMULATION_NAME}_list_options NULL
|
#define gld${EMULATION_NAME}_list_options NULL
|
||||||
@ -1754,7 +1744,9 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
|
${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
|
||||||
${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
|
${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
|
||||||
${LDEMUL_SET_SYMBOLS-NULL},
|
${LDEMUL_SET_SYMBOLS-NULL},
|
||||||
${LDEMUL_PARSE_ARGS-gld${EMULATION_NAME}_parse_args},
|
${LDEMUL_PARSE_ARGS-NULL},
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
${LDEMUL_UNRECOGNIZED_FILE-NULL},
|
${LDEMUL_UNRECOGNIZED_FILE-NULL},
|
||||||
${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
|
${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
|
||||||
${LDEMUL_RECOGNIZED_FILE-NULL},
|
${LDEMUL_RECOGNIZED_FILE-NULL},
|
||||||
|
@ -141,6 +141,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
${LDEMUL_PLACE_ORPHAN-NULL},
|
${LDEMUL_PLACE_ORPHAN-NULL},
|
||||||
${LDEMUL_SET_SYMBOLS-NULL},
|
${LDEMUL_SET_SYMBOLS-NULL},
|
||||||
${LDEMUL_PARSE_ARGS-NULL},
|
${LDEMUL_PARSE_ARGS-NULL},
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
${LDEMUL_UNRECOGNIZED_FILE-NULL},
|
${LDEMUL_UNRECOGNIZED_FILE-NULL},
|
||||||
${LDEMUL_LIST_OPTIONS-NULL},
|
${LDEMUL_LIST_OPTIONS-NULL},
|
||||||
${LDEMUL_RECOGNIZED_FILE-NULL},
|
${LDEMUL_RECOGNIZED_FILE-NULL},
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This shell script emits a C file. -*- C -*-
|
# This shell script emits a C file. -*- C -*-
|
||||||
# It does some substitutions.
|
# It does some substitutions.
|
||||||
cat >e${EMULATION_NAME}.c <<EOF
|
cat >e${EMULATION_NAME}.c <<EOF
|
||||||
/* Copyright 1991, 1992, 1994, 1999, 2000, 2001, 2002
|
/* Copyright 1991, 1992, 1994, 1999, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
@ -186,6 +186,8 @@ struct ld_emulation_xfer_struct ld_gld960_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This shell script emits a C file. -*- C -*-
|
# This shell script emits a C file. -*- C -*-
|
||||||
# It does some substitutions.
|
# It does some substitutions.
|
||||||
cat >e${EMULATION_NAME}.c <<EOF
|
cat >e${EMULATION_NAME}.c <<EOF
|
||||||
/* Copyright 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002
|
/* Copyright 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
@ -201,6 +201,8 @@ struct ld_emulation_xfer_struct ld_gld960coff_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -360,12 +360,8 @@ PARSE_AND_LIST_PROLOGUE='
|
|||||||
#define OPTION_STUBGROUP_SIZE (OPTION_MULTI_SUBSPACE + 1)
|
#define OPTION_STUBGROUP_SIZE (OPTION_MULTI_SUBSPACE + 1)
|
||||||
'
|
'
|
||||||
|
|
||||||
# The options are repeated below so that no abbreviations are allowed.
|
|
||||||
# Otherwise -s matches stub-group-size
|
|
||||||
PARSE_AND_LIST_LONGOPTS='
|
PARSE_AND_LIST_LONGOPTS='
|
||||||
{ "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
|
{ "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
|
||||||
{ "multi-subspace", no_argument, NULL, OPTION_MULTI_SUBSPACE },
|
|
||||||
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
|
||||||
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* Linux a.out emulation code for ${EMULATION_NAME}
|
/* Linux a.out emulation code for ${EMULATION_NAME}
|
||||||
Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002
|
Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain <sac@cygnus.com>
|
Written by Steve Chamberlain <sac@cygnus.com>
|
||||||
Linux support by Eric Youngdale <ericy@cais.cais.com>
|
Linux support by Eric Youngdale <ericy@cais.cais.com>
|
||||||
@ -218,6 +218,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# It does some substitutions.
|
# It does some substitutions.
|
||||||
cat >e${EMULATION_NAME}.c <<EOF
|
cat >e${EMULATION_NAME}.c <<EOF
|
||||||
/* intel coff loader emulation specific stuff
|
/* intel coff loader emulation specific stuff
|
||||||
Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002
|
Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain steve@cygnus.com
|
Written by Steve Chamberlain steve@cygnus.com
|
||||||
|
|
||||||
@ -341,6 +341,8 @@ struct ld_emulation_xfer_struct ld_lnk960_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -4,7 +4,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* Handle embedded relocs for m68k.
|
/* Handle embedded relocs for m68k.
|
||||||
Copyright 2000, 2002 Free Software Foundation, Inc.
|
Copyright 2000, 2002, 2003 Free Software Foundation, Inc.
|
||||||
Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on generic.em
|
Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on generic.em
|
||||||
by Steve Chamberlain <steve@cygnus.com>, embedded relocs code based on
|
by Steve Chamberlain <steve@cygnus.com>, embedded relocs code based on
|
||||||
mipsecoff.em by Ian Lance Taylor <ian@cygnus.com>.
|
mipsecoff.em by Ian Lance Taylor <ian@cygnus.com>.
|
||||||
@ -237,6 +237,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -9,7 +9,8 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* Handle embedded relocs for MIPS.
|
/* Handle embedded relocs for MIPS.
|
||||||
Copyright 1994, 1995, 1997, 2000, 2002 Free Software Foundation, Inc.
|
Copyright 1994, 1995, 1997, 2000, 2002, 2003
|
||||||
|
Free Software Foundation, Inc.
|
||||||
Written by Ian Lance Taylor <ian@cygnus.com> based on generic.em.
|
Written by Ian Lance Taylor <ian@cygnus.com> based on generic.em.
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
@ -252,6 +253,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
LDEMUL_BEFORE_PARSE=gldnetbsd_before_parse
|
LDEMUL_BEFORE_PARSE=gldnetbsd_before_parse
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
|
static void gldnetbsd_before_parse PARAMS ((void));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gldnetbsd_before_parse ()
|
gldnetbsd_before_parse ()
|
||||||
{
|
{
|
||||||
|
@ -114,10 +114,12 @@ static asection *output_prev_sec_find
|
|||||||
static bfd_boolean gld_${EMULATION_NAME}_place_orphan
|
static bfd_boolean gld_${EMULATION_NAME}_place_orphan
|
||||||
PARAMS ((lang_input_statement_type *, asection *));
|
PARAMS ((lang_input_statement_type *, asection *));
|
||||||
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
||||||
static int gld_${EMULATION_NAME}_parse_args PARAMS ((int, char **));
|
|
||||||
static void gld_${EMULATION_NAME}_finish PARAMS ((void));
|
static void gld_${EMULATION_NAME}_finish PARAMS ((void));
|
||||||
static bfd_boolean gld_${EMULATION_NAME}_open_dynamic_archive
|
static bfd_boolean gld_${EMULATION_NAME}_open_dynamic_archive
|
||||||
PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *));
|
PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *));
|
||||||
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
static bfd_boolean gld${EMULATION_NAME}_handle_option PARAMS ((int));
|
||||||
static void gld_${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
static void gld_${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
||||||
static void set_pe_name PARAMS ((char *, long));
|
static void set_pe_name PARAMS ((char *, long));
|
||||||
static void set_pe_subsystem PARAMS ((void));
|
static void set_pe_subsystem PARAMS ((void));
|
||||||
@ -228,7 +230,16 @@ gld_${EMULATION_NAME}_before_parse()
|
|||||||
#define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \
|
#define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \
|
||||||
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
|
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
|
||||||
|
|
||||||
static struct option longopts[] = {
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns ATTRIBUTE_UNUSED;
|
||||||
|
char **shortopts ATTRIBUTE_UNUSED;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
|
{
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
/* PE options */
|
/* PE options */
|
||||||
{"base-file", required_argument, NULL, OPTION_BASE_FILE},
|
{"base-file", required_argument, NULL, OPTION_BASE_FILE},
|
||||||
{"dll", no_argument, NULL, OPTION_DLL},
|
{"dll", no_argument, NULL, OPTION_DLL},
|
||||||
@ -275,8 +286,12 @@ static struct option longopts[] = {
|
|||||||
{"disable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC},
|
{"disable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC},
|
||||||
#endif
|
#endif
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
|
/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
|
||||||
parameters which may be input from the command line. */
|
parameters which may be input from the command line. */
|
||||||
@ -512,34 +527,14 @@ set_pe_stack_heap (resname, comname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static bfd_boolean
|
||||||
gld_${EMULATION_NAME}_parse_args (argc, argv)
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
int longind;
|
|
||||||
int optc;
|
int optc;
|
||||||
int prevoptind = optind;
|
{
|
||||||
int prevopterr = opterr;
|
|
||||||
int wanterror;
|
|
||||||
static int lastoptind = -1;
|
|
||||||
|
|
||||||
if (lastoptind != optind)
|
|
||||||
opterr = 0;
|
|
||||||
wanterror = opterr;
|
|
||||||
|
|
||||||
lastoptind = optind;
|
|
||||||
|
|
||||||
optc = getopt_long_only (argc, argv, "-", longopts, &longind);
|
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
if (wanterror)
|
return FALSE;
|
||||||
xexit (1);
|
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case OPTION_BASE_FILE:
|
case OPTION_BASE_FILE:
|
||||||
link_info.base_file = (PTR) fopen (optarg, FOPEN_WB);
|
link_info.base_file = (PTR) fopen (optarg, FOPEN_WB);
|
||||||
@ -661,7 +656,7 @@ gld_${EMULATION_NAME}_parse_args (argc, argv)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1968,7 +1963,9 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
gld_${EMULATION_NAME}_open_dynamic_archive,
|
gld_${EMULATION_NAME}_open_dynamic_archive,
|
||||||
gld_${EMULATION_NAME}_place_orphan,
|
gld_${EMULATION_NAME}_place_orphan,
|
||||||
gld_${EMULATION_NAME}_set_symbols,
|
gld_${EMULATION_NAME}_set_symbols,
|
||||||
gld_${EMULATION_NAME}_parse_args,
|
NULL, /* parse_args */
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
gld_${EMULATION_NAME}_unrecognized_file,
|
gld_${EMULATION_NAME}_unrecognized_file,
|
||||||
gld_${EMULATION_NAME}_list_options,
|
gld_${EMULATION_NAME}_list_options,
|
||||||
gld_${EMULATION_NAME}_recognized_file,
|
gld_${EMULATION_NAME}_recognized_file,
|
||||||
|
@ -61,10 +61,8 @@ PARSE_AND_LIST_PROLOGUE='
|
|||||||
#define OPTION_NO_TLS_OPT 301
|
#define OPTION_NO_TLS_OPT 301
|
||||||
'
|
'
|
||||||
|
|
||||||
# The options are repeated below so that no abbreviations are allowed.
|
|
||||||
PARSE_AND_LIST_LONGOPTS='
|
PARSE_AND_LIST_LONGOPTS='
|
||||||
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
||||||
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
|
||||||
'
|
'
|
||||||
|
|
||||||
PARSE_AND_LIST_OPTIONS='
|
PARSE_AND_LIST_OPTIONS='
|
||||||
|
@ -476,16 +476,10 @@ PARSE_AND_LIST_PROLOGUE='
|
|||||||
#define OPTION_NO_TLS_OPT (OPTION_NO_DOTSYMS + 1)
|
#define OPTION_NO_TLS_OPT (OPTION_NO_DOTSYMS + 1)
|
||||||
'
|
'
|
||||||
|
|
||||||
# The options are repeated below so that no abbreviations are allowed.
|
|
||||||
# Otherwise -s matches stub-group-size
|
|
||||||
PARSE_AND_LIST_LONGOPTS='
|
PARSE_AND_LIST_LONGOPTS='
|
||||||
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
||||||
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
|
|
||||||
{ "dotsyms", no_argument, NULL, OPTION_DOTSYMS },
|
|
||||||
{ "dotsyms", no_argument, NULL, OPTION_DOTSYMS },
|
{ "dotsyms", no_argument, NULL, OPTION_DOTSYMS },
|
||||||
{ "no-dotsyms", no_argument, NULL, OPTION_NO_DOTSYMS },
|
{ "no-dotsyms", no_argument, NULL, OPTION_NO_DOTSYMS },
|
||||||
{ "no-dotsyms", no_argument, NULL, OPTION_NO_DOTSYMS },
|
|
||||||
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
|
||||||
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ cat >e${EMULATION_NAME}.c <<EOF
|
|||||||
/* This file is is generated by a shell script. DO NOT EDIT! */
|
/* This file is is generated by a shell script. DO NOT EDIT! */
|
||||||
|
|
||||||
/* SunOS emulation code for ${EMULATION_NAME}
|
/* SunOS emulation code for ${EMULATION_NAME}
|
||||||
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
|
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain <sac@cygnus.com>
|
Written by Steve Chamberlain <sac@cygnus.com>
|
||||||
SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
|
SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
|
||||||
@ -1047,6 +1047,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
gld${EMULATION_NAME}_set_symbols,
|
gld${EMULATION_NAME}_set_symbols,
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
(echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
|
(echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
|
||||||
cat >>e${EMULATION_NAME}.c <<EOF
|
cat >>e${EMULATION_NAME}.c <<EOF
|
||||||
/* This file is part of GLD, the Gnu Linker.
|
/* This file is part of GLD, the Gnu Linker.
|
||||||
Copyright 1999, 2000, 2002 Free Software Foundation, Inc.
|
Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -43,18 +43,33 @@ static int coff_version;
|
|||||||
|
|
||||||
static void gld_${EMULATION_NAME}_before_parse PARAMS ((void));
|
static void gld_${EMULATION_NAME}_before_parse PARAMS ((void));
|
||||||
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
static char *gld_${EMULATION_NAME}_get_script PARAMS ((int *));
|
||||||
static int gld_${EMULATION_NAME}_parse_args PARAMS ((int, char **));
|
static void gld${EMULATION_NAME}_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
static bfd_boolean gld${EMULATION_NAME}_handle_option PARAMS ((int));
|
||||||
static void gld_${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
static void gld_${EMULATION_NAME}_list_options PARAMS ((FILE *));
|
||||||
|
|
||||||
/* TI COFF extra command line options */
|
/* TI COFF extra command line options */
|
||||||
#define OPTION_COFF_FORMAT (300 + 1)
|
#define OPTION_COFF_FORMAT (300 + 1)
|
||||||
|
|
||||||
static struct option longopts[] =
|
static void
|
||||||
|
gld${EMULATION_NAME}_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns ATTRIBUTE_UNUSED;
|
||||||
|
char **shortopts ATTRIBUTE_UNUSED;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl ATTRIBUTE_UNUSED;
|
||||||
|
struct option **really_longopts ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
|
static const struct option xtra_long[] = {
|
||||||
/* TI COFF options */
|
/* TI COFF options */
|
||||||
{"format", required_argument, NULL, OPTION_COFF_FORMAT },
|
{"format", required_argument, NULL, OPTION_COFF_FORMAT },
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*longopts = (struct option *)
|
||||||
|
xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
|
||||||
|
memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gld_${EMULATION_NAME}_list_options (file)
|
gld_${EMULATION_NAME}_list_options (file)
|
||||||
@ -63,34 +78,14 @@ gld_${EMULATION_NAME}_list_options (file)
|
|||||||
fprintf (file, _(" --format 0|1|2 Specify which COFF version to use"));
|
fprintf (file, _(" --format 0|1|2 Specify which COFF version to use"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static bfd_boolean
|
||||||
gld_${EMULATION_NAME}_parse_args(argc, argv)
|
gld${EMULATION_NAME}_handle_option (optc)
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
int longind;
|
|
||||||
int optc;
|
int optc;
|
||||||
int prevoptind = optind;
|
{
|
||||||
int prevopterr = opterr;
|
|
||||||
int wanterror;
|
|
||||||
static int lastoptind = -1;
|
|
||||||
|
|
||||||
if (lastoptind != optind)
|
|
||||||
opterr = 0;
|
|
||||||
wanterror = opterr;
|
|
||||||
|
|
||||||
lastoptind = optind;
|
|
||||||
|
|
||||||
optc = getopt_long_only (argc, argv, "-", longopts, &longind);
|
|
||||||
opterr = prevopterr;
|
|
||||||
|
|
||||||
switch (optc)
|
switch (optc)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
if (wanterror)
|
return FALSE;
|
||||||
xexit (1);
|
|
||||||
optind = prevoptind;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case OPTION_COFF_FORMAT:
|
case OPTION_COFF_FORMAT:
|
||||||
if ((*optarg == '0' || *optarg == '1' || *optarg == '2')
|
if ((*optarg == '0' || *optarg == '1' || *optarg == '2')
|
||||||
@ -106,11 +101,10 @@ gld_${EMULATION_NAME}_parse_args(argc, argv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
einfo (_("%P%F: invalid COFF format version %s\n"), optarg);
|
einfo (_("%P%F: invalid COFF format version %s\n"), optarg);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -193,7 +187,9 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
NULL, /* open dynamic archive */
|
NULL, /* open dynamic archive */
|
||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set_symbols */
|
NULL, /* set_symbols */
|
||||||
gld_${EMULATION_NAME}_parse_args,
|
NULL, /* parse_args */
|
||||||
|
gld${EMULATION_NAME}_add_options,
|
||||||
|
gld${EMULATION_NAME}_handle_option,
|
||||||
NULL, /* unrecognized_file */
|
NULL, /* unrecognized_file */
|
||||||
gld_${EMULATION_NAME}_list_options,
|
gld_${EMULATION_NAME}_list_options,
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
# It does some substitutions.
|
# It does some substitutions.
|
||||||
cat >e${EMULATION_NAME}.c <<EOF
|
cat >e${EMULATION_NAME}.c <<EOF
|
||||||
/* A vanilla emulation with no defaults
|
/* A vanilla emulation with no defaults
|
||||||
Copyright 1991, 1992, 1994, 2000, 2001 Free Software Foundation, Inc.
|
Copyright 1991, 1992, 1994, 2000, 2001, 2002, 2003
|
||||||
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain steve@cygnus.com
|
Written by Steve Chamberlain steve@cygnus.com
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
@ -79,6 +80,8 @@ struct ld_emulation_xfer_struct ld_vanilla_emulation =
|
|||||||
NULL, /* place orphan */
|
NULL, /* place orphan */
|
||||||
NULL, /* set symbols */
|
NULL, /* set symbols */
|
||||||
NULL, /* parse args */
|
NULL, /* parse args */
|
||||||
|
NULL, /* add_options */
|
||||||
|
NULL, /* handle_option */
|
||||||
NULL, /* unrecognized file */
|
NULL, /* unrecognized file */
|
||||||
NULL, /* list options */
|
NULL, /* list options */
|
||||||
NULL, /* recognized file */
|
NULL, /* recognized file */
|
||||||
|
31
ld/ldemul.c
31
ld/ldemul.c
@ -133,17 +133,38 @@ ldemul_place_orphan (file, s)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
|
ldemul_add_options (ns, shortopts, nl, longopts, nrl, really_longopts)
|
||||||
|
int ns;
|
||||||
|
char **shortopts;
|
||||||
|
int nl;
|
||||||
|
struct option **longopts;
|
||||||
|
int nrl;
|
||||||
|
struct option **really_longopts;
|
||||||
|
{
|
||||||
|
if (ld_emulation->add_options)
|
||||||
|
(*ld_emulation->add_options) (ns, shortopts, nl, longopts,
|
||||||
|
nrl, really_longopts);
|
||||||
|
}
|
||||||
|
|
||||||
|
bfd_boolean
|
||||||
|
ldemul_handle_option (optc)
|
||||||
|
int optc;
|
||||||
|
{
|
||||||
|
if (ld_emulation->handle_option)
|
||||||
|
return (*ld_emulation->handle_option) (optc);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bfd_boolean
|
||||||
ldemul_parse_args (argc, argv)
|
ldemul_parse_args (argc, argv)
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
{
|
{
|
||||||
/* Try and use the emulation parser if there is one. */
|
/* Try and use the emulation parser if there is one. */
|
||||||
if (ld_emulation->parse_args)
|
if (ld_emulation->parse_args)
|
||||||
{
|
return (*ld_emulation->parse_args) (argc, argv);
|
||||||
return ld_emulation->parse_args (argc, argv);
|
return TRUE;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Let the emulation code handle an unrecognized file. */
|
/* Let the emulation code handle an unrecognized file. */
|
||||||
|
21
ld/ldemul.h
21
ld/ldemul.h
@ -51,8 +51,12 @@ extern void ldemul_create_output_section_statements
|
|||||||
PARAMS ((void));
|
PARAMS ((void));
|
||||||
extern bfd_boolean ldemul_place_orphan
|
extern bfd_boolean ldemul_place_orphan
|
||||||
PARAMS ((struct lang_input_statement_struct *, asection *));
|
PARAMS ((struct lang_input_statement_struct *, asection *));
|
||||||
extern int ldemul_parse_args
|
extern bfd_boolean ldemul_parse_args
|
||||||
PARAMS ((int, char **));
|
PARAMS ((int, char **));
|
||||||
|
extern void ldemul_add_options
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
extern bfd_boolean ldemul_handle_option
|
||||||
|
PARAMS ((int));
|
||||||
extern bfd_boolean ldemul_unrecognized_file
|
extern bfd_boolean ldemul_unrecognized_file
|
||||||
PARAMS ((struct lang_input_statement_struct *));
|
PARAMS ((struct lang_input_statement_struct *));
|
||||||
extern bfd_boolean ldemul_recognized_file
|
extern bfd_boolean ldemul_recognized_file
|
||||||
@ -142,9 +146,18 @@ typedef struct ld_emulation_xfer_struct {
|
|||||||
reading the script. Used to initialize symbols used in the script. */
|
reading the script. Used to initialize symbols used in the script. */
|
||||||
void (*set_symbols) PARAMS ((void));
|
void (*set_symbols) PARAMS ((void));
|
||||||
|
|
||||||
/* Run to parse args which the base linker doesn't
|
/* Parse args which the base linker doesn't understand.
|
||||||
understand. Return non zero on sucess. */
|
Return TRUE on success. */
|
||||||
int (*parse_args) PARAMS ((int, char **));
|
bfd_boolean (*parse_args) PARAMS ((int, char **));
|
||||||
|
|
||||||
|
/* Hook to add options to parameters passed by the base linker to
|
||||||
|
getopt_long and getopt_long_only calls. */
|
||||||
|
void (*add_options)
|
||||||
|
PARAMS ((int, char **, int, struct option **, int, struct option **));
|
||||||
|
|
||||||
|
/* Companion to the above to handle an option. Returns TRUE if it is
|
||||||
|
one of our options. */
|
||||||
|
bfd_boolean (*handle_option) PARAMS ((int));
|
||||||
|
|
||||||
/* Run to handle files which are not recognized as object files or
|
/* Run to handle files which are not recognized as object files or
|
||||||
archives. Return TRUE if the file was handled. */
|
archives. Return TRUE if the file was handled. */
|
||||||
|
17
ld/lexsup.c
17
ld/lexsup.c
@ -467,11 +467,17 @@ parse_args (argc, argv)
|
|||||||
int is, il, irl;
|
int is, il, irl;
|
||||||
int ingroup = 0;
|
int ingroup = 0;
|
||||||
char *default_dirlist = NULL;
|
char *default_dirlist = NULL;
|
||||||
char shortopts[OPTION_COUNT * 3 + 2];
|
char *shortopts;
|
||||||
struct option longopts[OPTION_COUNT + 1];
|
struct option *longopts;
|
||||||
struct option really_longopts[OPTION_COUNT + 1];
|
struct option *really_longopts;
|
||||||
int last_optind;
|
int last_optind;
|
||||||
|
|
||||||
|
shortopts = (char *) xmalloc (OPTION_COUNT * 3 + 2);
|
||||||
|
longopts = (struct option *) xmalloc (sizeof (*longopts)
|
||||||
|
* (OPTION_COUNT + 1));
|
||||||
|
really_longopts = (struct option *) xmalloc (sizeof (*really_longopts)
|
||||||
|
* (OPTION_COUNT + 1));
|
||||||
|
|
||||||
/* Starting the short option string with '-' is for programs that
|
/* Starting the short option string with '-' is for programs that
|
||||||
expect options and other ARGV-elements in any order and that care about
|
expect options and other ARGV-elements in any order and that care about
|
||||||
the ordering of the two. We describe each non-option ARGV-element
|
the ordering of the two. We describe each non-option ARGV-element
|
||||||
@ -516,6 +522,8 @@ parse_args (argc, argv)
|
|||||||
longopts[il].name = NULL;
|
longopts[il].name = NULL;
|
||||||
really_longopts[irl].name = NULL;
|
really_longopts[irl].name = NULL;
|
||||||
|
|
||||||
|
ldemul_add_options (is, &shortopts, il, &longopts, irl, &really_longopts);
|
||||||
|
|
||||||
/* The -G option is ambiguous on different platforms. Sometimes it
|
/* The -G option is ambiguous on different platforms. Sometimes it
|
||||||
specifies the largest data size to put into the small data
|
specifies the largest data size to put into the small data
|
||||||
section. Sometimes it is equivalent to --shared. Unfortunately,
|
section. Sometimes it is equivalent to --shared. Unfortunately,
|
||||||
@ -586,6 +594,9 @@ parse_args (argc, argv)
|
|||||||
optc = getopt_long (argc, argv, "-", really_longopts, &longind);
|
optc = getopt_long (argc, argv, "-", really_longopts, &longind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ldemul_handle_option (optc))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (optc == -1)
|
if (optc == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user