diff options
Diffstat (limited to 'ld/emultempl/aix.em')
-rw-r--r-- | ld/emultempl/aix.em | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index a540d0b..f4dff85 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -134,6 +134,9 @@ static lang_input_statement_type *initfini_file; /* Whether to do run time linking */ static boolean rtld; +/* Explicit command line library path, -blibpath */ +static char *command_line_blibpath = NULL; + /* This routine is called before anything else is done. */ static void @@ -196,6 +199,8 @@ gld${EMULATION_NAME}_parse_args (argc, argv) OPTION_UNIX, OPTION_32, OPTION_64, + OPTION_LIBPATH, + OPTION_NOLIBPATH, }; /* -binitfini has special handling in the linker backend. The native linker @@ -252,6 +257,8 @@ gld${EMULATION_NAME}_parse_args (argc, argv) {"b64", no_argument, NULL, OPTION_64}, {"static", no_argument, NULL, OPTION_NOAUTOIMP}, {"unix", no_argument, NULL, OPTION_UNIX}, + {"blibpath", required_argument, NULL, OPTION_LIBPATH}, + {"bnolibpath", required_argument, NULL, OPTION_NOLIBPATH}, {NULL, no_argument, NULL, 0} }; @@ -518,6 +525,14 @@ gld${EMULATION_NAME}_parse_args (argc, argv) symbol_mode_mask = 0x0e; break; + case OPTION_LIBPATH: + command_line_blibpath=optarg; + break; + + case OPTION_NOLIBPATH: + command_line_blibpath=NULL; + break; + } return 1; @@ -638,10 +653,13 @@ gld${EMULATION_NAME}_before_allocation () .loader relocs for them. */ lang_for_each_statement (gld${EMULATION_NAME}_find_relocs); - /* We need to build LIBPATH from the -L arguments. If any -rpath - arguments were used, though, we use -rpath instead, as a GNU - extension. */ - if (command_line.rpath != NULL) + /* Precedence of LIBPATH + -blibpath: native support always first + -rpath: gnu extension + -L build from command line -L's */ + if (command_line_blibpath != NULL) + libpath = command_line_blibpath; + else if (command_line.rpath != NULL) libpath = command_line.rpath; else if (search_head == NULL) libpath = (char *) ""; |