diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/emultempl/generic.em | 4 | ||||
-rw-r--r-- | ld/emultempl/vms.em | 50 |
3 files changed, 63 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 6bf6349..9b5655d 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +2011-05-04 Tristan Gingold <gingold@adacore.com> + + * emultempl/generic.em (ld_${EMULATION_NAME}_emulation): Add + LDEMUL_ADD_OPTIONS and LDEMUL_HANDLE_OPTION. + * emultempl/vms.em (OPTION_IDENTIFICATION): New macro. + (gld${EMULATION_NAME}_add_options): New function. + (gld${EMULATION_NAME}_list_options): Ditto. + (gld${EMULATION_NAME}_handle_option): Ditto. + (LDEMUL_ADD_OPTIONS, LDEMUL_HANDLE_OPTION) + (LDEMUL_LIST_OPTIONS): Define. + 2011-05-04 Alan Modra <amodra@gmail.com> PR ld/12726 diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em index 4a84680..20ec356 100644 --- a/ld/emultempl/generic.em +++ b/ld/emultempl/generic.em @@ -138,8 +138,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_PLACE_ORPHAN-NULL}, ${LDEMUL_SET_SYMBOLS-NULL}, ${LDEMUL_PARSE_ARGS-NULL}, - NULL, /* add_options */ - NULL, /* handle_option */ + ${LDEMUL_ADD_OPTIONS-NULL}, + ${LDEMUL_HANDLE_OPTION-NULL}, ${LDEMUL_UNRECOGNIZED_FILE-NULL}, ${LDEMUL_LIST_OPTIONS-NULL}, ${LDEMUL_RECOGNIZED_FILE-NULL}, diff --git a/ld/emultempl/vms.em b/ld/emultempl/vms.em index fb8fd53..6107c56 100644 --- a/ld/emultempl/vms.em +++ b/ld/emultempl/vms.em @@ -23,6 +23,8 @@ # This file is sourced from generic.em. fragment <<EOF +#include "getopt.h" + static void gld${EMULATION_NAME}_before_parse (void) { @@ -117,6 +119,51 @@ vms_place_orphan (asection *s, else return NULL; } + +/* VMS specific options. */ +#define OPTION_IDENTIFICATION (300 + 1) + +static void +gld${EMULATION_NAME}_add_options + (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[] = { + {"identification", required_argument, NULL, OPTION_IDENTIFICATION}, + {NULL, no_argument, NULL, 0} + }; + + *longopts + = xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long)); + memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long)); +} + +static void +gld${EMULATION_NAME}_list_options (FILE *file) +{ + fprintf (file, _(" --identification <string> Set the identification of the output\n")); +} + +static bfd_boolean +gld${EMULATION_NAME}_handle_option (int optc) +{ + switch (optc) + { + default: + return FALSE; + + case OPTION_IDENTIFICATION: + /* Currently ignored. */ + break; + } + + return TRUE; +} + EOF LDEMUL_PLACE_ORPHAN=vms_place_orphan @@ -124,3 +171,6 @@ LDEMUL_BEFORE_PARSE=gld"$EMULATION_NAME"_before_parse LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=gld"$EMULATION_NAME"_create_output_section_statements LDEMUL_FIND_POTENTIAL_LIBRARIES=gld"$EMULATION_NAME"_find_potential_libraries LDEMUL_OPEN_DYNAMIC_ARCHIVE=gld"$EMULATION_NAME"_open_dynamic_archive +LDEMUL_ADD_OPTIONS=gld"$EMULATION_NAME"_add_options +LDEMUL_HANDLE_OPTION=gld"$EMULATION_NAME"_handle_option +LDEMUL_LIST_OPTIONS=gld"$EMULATION_NAME"_list_options |