From: Ian Lance Taylor Date: Tue, 19 Dec 1995 22:36:03 +0000 (+0000) Subject: * emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=67cf67787d01a8b07edcb582efe4d033b4615f36;p=binutils-gdb.git * emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set relocateable before calling ldctor_build_sets if the output file is in an XCOFF format. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index 7d46a569be6..7ab47d07cf9 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +Tue Dec 19 17:35:38 1995 Ian Lance Taylor + + * emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set + relocateable before calling ldctor_build_sets if the output file + is in an XCOFF format. + Fri Dec 15 16:34:36 1995 Ian Lance Taylor * ldwrite.c (build_link_order): When handling a data statement, if diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index 54476977e47..82427d4e583 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -75,6 +75,9 @@ static unsigned short modtype = ('1' << 8) | 'L'; permitted). */ static int textro; +/* Whether to implement Unix like linker semantics. */ +static int unix_ld; + /* Structure used to hold import file list. */ struct filelist @@ -128,7 +131,8 @@ gld${EMULATION_NAME}_parse_args (argc, argv) #define OPTION_EROK (OPTION_ERNOTOK + 1) #define OPTION_EXPORT (OPTION_EROK + 1) #define OPTION_IMPORT (OPTION_EXPORT + 1) -#define OPTION_MAXDATA (OPTION_IMPORT + 1) +#define OPTION_LOADMAP (OPTION_IMPORT + 1) +#define OPTION_MAXDATA (OPTION_LOADMAP + 1) #define OPTION_MAXSTACK (OPTION_MAXDATA + 1) #define OPTION_MODTYPE (OPTION_MAXSTACK + 1) #define OPTION_NOAUTOIMP (OPTION_MODTYPE + 1) @@ -136,6 +140,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv) #define OPTION_PD (OPTION_NOSTRCMPCT + 1) #define OPTION_PT (OPTION_PD + 1) #define OPTION_STRCMPCT (OPTION_PT + 1) +#define OPTION_UNIX (OPTION_STRCMPCT + 1) static struct option longopts[] = { {"basis", no_argument, NULL, OPTION_IGNORE}, @@ -155,6 +160,8 @@ gld${EMULATION_NAME}_parse_args (argc, argv) {"bhalt", required_argument, NULL, OPTION_IGNORE}, {"bI", required_argument, NULL, OPTION_IMPORT}, {"bimport", required_argument, NULL, OPTION_IMPORT}, + {"bl", required_argument, NULL, OPTION_LOADMAP}, + {"bloadmap", required_argument, NULL, OPTION_LOADMAP}, {"bmaxdata", required_argument, NULL, OPTION_MAXDATA}, {"bmaxstack", required_argument, NULL, OPTION_MAXSTACK}, {"bM", required_argument, NULL, OPTION_MODTYPE}, @@ -174,6 +181,7 @@ gld${EMULATION_NAME}_parse_args (argc, argv) {"bstrcmpct", no_argument, NULL, OPTION_STRCMPCT}, {"btextro", no_argument, &textro, 1}, {"static", no_argument, NULL, OPTION_NOAUTOIMP}, + {"unix", no_argument, NULL, OPTION_UNIX}, {NULL, no_argument, NULL, 0} }; @@ -291,6 +299,10 @@ gld${EMULATION_NAME}_parse_args (argc, argv) } break; + case OPTION_LOADMAP: + config.map_filename = optarg; + break; + case OPTION_MAXDATA: val = strtoul (optarg, &end, 0); if (*end != '\0') @@ -377,6 +389,10 @@ gld${EMULATION_NAME}_parse_args (argc, argv) case OPTION_STRCMPCT: config.traditional_format = false; break; + + case OPTION_UNIX: + unix_ld = true; + break; } return 1; @@ -393,9 +409,11 @@ gld${EMULATION_NAME}_after_open () /* Call ldctor_build_sets, after pretending that this is a relocateable link. We do this because AIX requires relocation entries for all references to symbols, even in a final - executable. */ + executable. Of course, we only want to do this if we are + producing an XCOFF output file. */ r = link_info.relocateable; - link_info.relocateable = true; + if (strstr (bfd_get_target (output_bfd), "xcoff") != NULL) + link_info.relocateable = true; ldctor_build_sets (); link_info.relocateable = r; @@ -433,6 +451,7 @@ gld${EMULATION_NAME}_before_allocation () struct filelist *fl; struct export_symbol_list *el; char *libpath; + boolean export_defineds; asection *special_sections[6]; int i; @@ -483,13 +502,20 @@ gld${EMULATION_NAME}_before_allocation () } } + /* If we are emulating the Unix linker, we want to export all + defined symbols, unless an explicit -bE option was used. */ + export_defineds = false; + if (unix_ld && export_symbols == NULL) + export_defineds = true; + /* Let the XCOFF backend set up the .loader section. */ if (! bfd_xcoff_size_dynamic_sections (output_bfd, &link_info, libpath, entry_symbol, file_align, maxstack, maxdata, - gc ? true : false, + gc && ! unix_ld ? true : false, modtype, textro ? true : false, + export_defineds, special_sections)) einfo ("%P%F: failed to set dynamic section sizes: %E\n");