| 1 | # This shell script emits a C file. -*- C -*- |
| 2 | # It does some substitutions. |
| 3 | test -z "${ELFSIZE}" && ELFSIZE=32 |
| 4 | if [ -z "$MACHINE" ]; then |
| 5 | OUTPUT_ARCH=${ARCH} |
| 6 | else |
| 7 | OUTPUT_ARCH=${ARCH}:${MACHINE} |
| 8 | fi |
| 9 | fragment <<EOF |
| 10 | /* This file is is generated by a shell script. DO NOT EDIT! */ |
| 11 | |
| 12 | /* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME} |
| 13 | Copyright (C) 1991-2020 Free Software Foundation, Inc. |
| 14 | Written by Steve Chamberlain <sac@cygnus.com> |
| 15 | ELF support by Ian Lance Taylor <ian@cygnus.com> |
| 16 | |
| 17 | This file is part of the GNU Binutils. |
| 18 | |
| 19 | This program is free software; you can redistribute it and/or modify |
| 20 | it under the terms of the GNU General Public License as published by |
| 21 | the Free Software Foundation; either version 3 of the License, or |
| 22 | (at your option) any later version. |
| 23 | |
| 24 | This program is distributed in the hope that it will be useful, |
| 25 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 26 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 27 | GNU General Public License for more details. |
| 28 | |
| 29 | You should have received a copy of the GNU General Public License |
| 30 | along with this program; if not, write to the Free Software |
| 31 | Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
| 32 | MA 02110-1301, USA. */ |
| 33 | |
| 34 | #define TARGET_IS_${EMULATION_NAME} |
| 35 | |
| 36 | #include "sysdep.h" |
| 37 | #include "bfd.h" |
| 38 | #include "libiberty.h" |
| 39 | #include "getopt.h" |
| 40 | #include "bfdlink.h" |
| 41 | #include "ctf-api.h" |
| 42 | #include "ld.h" |
| 43 | #include "ldmain.h" |
| 44 | #include "ldmisc.h" |
| 45 | #include "ldexp.h" |
| 46 | #include "ldlang.h" |
| 47 | #include "ldfile.h" |
| 48 | #include "ldemul.h" |
| 49 | #include <ldgram.h> |
| 50 | #include "elf-bfd.h" |
| 51 | #include "ldelf.h" |
| 52 | #include "ldelfgen.h" |
| 53 | |
| 54 | /* Declare functions used by various EXTRA_EM_FILEs. */ |
| 55 | static void gld${EMULATION_NAME}_before_parse (void); |
| 56 | static void gld${EMULATION_NAME}_after_open (void); |
| 57 | static void gld${EMULATION_NAME}_before_allocation (void); |
| 58 | static void gld${EMULATION_NAME}_after_allocation (void); |
| 59 | EOF |
| 60 | |
| 61 | # Import any needed special functions and/or overrides. |
| 62 | # |
| 63 | source_em ${srcdir}/emultempl/elf-generic.em |
| 64 | if test -n "$EXTRA_EM_FILE" ; then |
| 65 | source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em |
| 66 | fi |
| 67 | |
| 68 | # Functions in this file can be overridden by setting the LDEMUL_* shell |
| 69 | # variables. If the name of the overriding function is the same as is |
| 70 | # defined in this file, then don't output this file's version. |
| 71 | # If a different overriding name is given then output the standard function |
| 72 | # as presumably it is called from the overriding function. |
| 73 | # |
| 74 | if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then |
| 75 | fragment <<EOF |
| 76 | |
| 77 | static void |
| 78 | gld${EMULATION_NAME}_before_parse (void) |
| 79 | { |
| 80 | ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); |
| 81 | input_flags.dynamic = ${DYNAMIC_LINK-TRUE}; |
| 82 | config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`; |
| 83 | config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`; |
| 84 | link_info.check_relocs_after_open_input = TRUE; |
| 85 | link_info.relro = DEFAULT_LD_Z_RELRO; |
| 86 | link_info.separate_code = DEFAULT_LD_Z_SEPARATE_CODE; |
| 87 | } |
| 88 | |
| 89 | EOF |
| 90 | fi |
| 91 | |
| 92 | fragment <<EOF |
| 93 | |
| 94 | /* These variables are used to implement target options */ |
| 95 | |
| 96 | static char *audit; /* colon (typically) separated list of libs */ |
| 97 | static char *depaudit; /* colon (typically) separated list of libs */ |
| 98 | |
| 99 | EOF |
| 100 | |
| 101 | if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then |
| 102 | |
| 103 | IS_LINUX_TARGET=FALSE |
| 104 | IS_FREEBSD_TARGET=FALSE |
| 105 | case ${target} in |
| 106 | *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*) |
| 107 | IS_LINUX_TARGET=TRUE ;; |
| 108 | *-*-freebsd* | *-*-dragonfly*) |
| 109 | IS_FREEBSD_TARGET=TRUE ;; |
| 110 | esac |
| 111 | IS_LIBPATH=FALSE |
| 112 | if test "x${USE_LIBPATH}" = xyes; then |
| 113 | IS_LIBPATH=TRUE |
| 114 | fi |
| 115 | IS_NATIVE=FALSE |
| 116 | if test "x${NATIVE}" = xyes; then |
| 117 | IS_NATIVE=TRUE |
| 118 | fi |
| 119 | |
| 120 | fragment <<EOF |
| 121 | |
| 122 | /* This is called after all the input files have been opened. */ |
| 123 | |
| 124 | static void |
| 125 | gld${EMULATION_NAME}_after_open (void) |
| 126 | { |
| 127 | ldelf_after_open ($IS_LIBPATH, $IS_NATIVE, |
| 128 | $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "$prefix"); |
| 129 | } |
| 130 | |
| 131 | EOF |
| 132 | fi |
| 133 | |
| 134 | if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then |
| 135 | if test x"${ELF_INTERPRETER_NAME}" = x; then |
| 136 | ELF_INTERPRETER_NAME=NULL |
| 137 | fi |
| 138 | fragment <<EOF |
| 139 | |
| 140 | /* This is called after the sections have been attached to output |
| 141 | sections, but before any sizes or addresses have been set. */ |
| 142 | |
| 143 | static void |
| 144 | gld${EMULATION_NAME}_before_allocation (void) |
| 145 | { |
| 146 | ldelf_before_allocation (audit, depaudit, ${ELF_INTERPRETER_NAME}); |
| 147 | } |
| 148 | |
| 149 | EOF |
| 150 | fi |
| 151 | |
| 152 | if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then |
| 153 | fragment <<EOF |
| 154 | |
| 155 | static void |
| 156 | gld${EMULATION_NAME}_after_allocation (void) |
| 157 | { |
| 158 | int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info); |
| 159 | |
| 160 | if (need_layout < 0) |
| 161 | einfo (_("%X%P: .eh_frame/.stab edit: %E\n")); |
| 162 | else |
| 163 | ldelf_map_segments (need_layout); |
| 164 | } |
| 165 | EOF |
| 166 | fi |
| 167 | |
| 168 | if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then |
| 169 | fragment <<EOF |
| 170 | |
| 171 | static char * |
| 172 | gld${EMULATION_NAME}_get_script (int *isfile) |
| 173 | EOF |
| 174 | |
| 175 | if test x"$COMPILE_IN" = xyes |
| 176 | then |
| 177 | # Scripts compiled in. |
| 178 | |
| 179 | # sed commands to quote an ld script as a C string. |
| 180 | sc="-f stringify.sed" |
| 181 | |
| 182 | fragment <<EOF |
| 183 | { |
| 184 | *isfile = 0; |
| 185 | |
| 186 | if (bfd_link_relocatable (&link_info) && config.build_constructors) |
| 187 | return |
| 188 | EOF |
| 189 | sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c |
| 190 | echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c |
| 191 | sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c |
| 192 | echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c |
| 193 | sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c |
| 194 | if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else |
| 195 | echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c |
| 196 | sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c |
| 197 | fi |
| 198 | if test -n "$GENERATE_PIE_SCRIPT" ; then |
| 199 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 200 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 201 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 202 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 203 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 204 | sed $sc ldscripts/${EMULATION_NAME}.xdwe >> e${EMULATION_NAME}.c |
| 205 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 206 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 207 | echo ' && link_info.relro' >> e${EMULATION_NAME}.c |
| 208 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 209 | sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c |
| 210 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 211 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 212 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 213 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 214 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 215 | sed $sc ldscripts/${EMULATION_NAME}.xdceo >> e${EMULATION_NAME}.c |
| 216 | fi |
| 217 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 218 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 219 | echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c |
| 220 | sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c |
| 221 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 222 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 223 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 224 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 225 | sed $sc ldscripts/${EMULATION_NAME}.xdco >> e${EMULATION_NAME}.c |
| 226 | fi |
| 227 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 228 | echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c |
| 229 | sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c |
| 230 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 231 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 232 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 233 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 234 | sed $sc ldscripts/${EMULATION_NAME}.xdeo >> e${EMULATION_NAME}.c |
| 235 | fi |
| 236 | fi |
| 237 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 238 | echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c |
| 239 | sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c |
| 240 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 241 | echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c |
| 242 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 243 | sed $sc ldscripts/${EMULATION_NAME}.xdo >> e${EMULATION_NAME}.c |
| 244 | fi |
| 245 | echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c |
| 246 | sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c |
| 247 | fi |
| 248 | if test -n "$GENERATE_SHLIB_SCRIPT" ; then |
| 249 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 250 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 251 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 252 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 253 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 254 | sed $sc ldscripts/${EMULATION_NAME}.xswe >> e${EMULATION_NAME}.c |
| 255 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 256 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 257 | echo ' && link_info.relro' >> e${EMULATION_NAME}.c |
| 258 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 259 | sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c |
| 260 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 261 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 262 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 263 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 264 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 265 | sed $sc ldscripts/${EMULATION_NAME}.xsceo >> e${EMULATION_NAME}.c |
| 266 | fi |
| 267 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 268 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 269 | echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c |
| 270 | sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c |
| 271 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 272 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 273 | echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c |
| 274 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 275 | sed $sc ldscripts/${EMULATION_NAME}.xsco >> e${EMULATION_NAME}.c |
| 276 | fi |
| 277 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 278 | echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c |
| 279 | sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c |
| 280 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 281 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 282 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 283 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 284 | sed $sc ldscripts/${EMULATION_NAME}.xseo >> e${EMULATION_NAME}.c |
| 285 | fi |
| 286 | fi |
| 287 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 288 | echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c |
| 289 | sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c |
| 290 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 291 | echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c |
| 292 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 293 | sed $sc ldscripts/${EMULATION_NAME}.xso >> e${EMULATION_NAME}.c |
| 294 | fi |
| 295 | echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c |
| 296 | sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c |
| 297 | fi |
| 298 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 299 | echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c |
| 300 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 301 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 302 | sed $sc ldscripts/${EMULATION_NAME}.xwe >> e${EMULATION_NAME}.c |
| 303 | echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c |
| 304 | echo ' && link_info.relro' >> e${EMULATION_NAME}.c |
| 305 | echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c |
| 306 | sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c |
| 307 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 308 | echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c |
| 309 | echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c |
| 310 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 311 | sed $sc ldscripts/${EMULATION_NAME}.xceo >> e${EMULATION_NAME}.c |
| 312 | fi |
| 313 | echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c |
| 314 | echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c |
| 315 | sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c |
| 316 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 317 | echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c |
| 318 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 319 | sed $sc ldscripts/${EMULATION_NAME}.xco >> e${EMULATION_NAME}.c |
| 320 | fi |
| 321 | echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c |
| 322 | sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c |
| 323 | fi |
| 324 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 325 | echo ' ; else if (link_info.separate_code' >> e${EMULATION_NAME}.c |
| 326 | echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c |
| 327 | sed $sc ldscripts/${EMULATION_NAME}.xeo >> e${EMULATION_NAME}.c |
| 328 | fi |
| 329 | echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c |
| 330 | sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c |
| 331 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 332 | echo ' ; else if (link_info.relro) return' >> e${EMULATION_NAME}.c |
| 333 | sed $sc ldscripts/${EMULATION_NAME}.xo >> e${EMULATION_NAME}.c |
| 334 | fi |
| 335 | echo ' ; else return' >> e${EMULATION_NAME}.c |
| 336 | sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c |
| 337 | echo '; }' >> e${EMULATION_NAME}.c |
| 338 | |
| 339 | else |
| 340 | # Scripts read from the filesystem. |
| 341 | |
| 342 | fragment <<EOF |
| 343 | { |
| 344 | *isfile = 1; |
| 345 | |
| 346 | if (bfd_link_relocatable (&link_info) && config.build_constructors) |
| 347 | return "ldscripts/${EMULATION_NAME}.xu"; |
| 348 | else if (bfd_link_relocatable (&link_info)) |
| 349 | return "ldscripts/${EMULATION_NAME}.xr"; |
| 350 | else if (!config.text_read_only) |
| 351 | return "ldscripts/${EMULATION_NAME}.xbn"; |
| 352 | EOF |
| 353 | if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : |
| 354 | else |
| 355 | fragment <<EOF |
| 356 | else if (!config.magic_demand_paged) |
| 357 | return "ldscripts/${EMULATION_NAME}.xn"; |
| 358 | EOF |
| 359 | fi |
| 360 | if test -n "$GENERATE_PIE_SCRIPT" ; then |
| 361 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 362 | fragment <<EOF |
| 363 | else if (bfd_link_pie (&link_info) |
| 364 | && link_info.combreloc |
| 365 | && link_info.relro |
| 366 | && (link_info.flags & DF_BIND_NOW)) |
| 367 | { |
| 368 | if (link_info.separate_code) |
| 369 | return "ldscripts/${EMULATION_NAME}.xdwe"; |
| 370 | else |
| 371 | return "ldscripts/${EMULATION_NAME}.xdw"; |
| 372 | } |
| 373 | EOF |
| 374 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 375 | fragment <<EOF |
| 376 | else if (bfd_link_pie (&link_info) |
| 377 | && link_info.combreloc |
| 378 | && link_info.relro) |
| 379 | { |
| 380 | if (link_info.separate_code) |
| 381 | return "ldscripts/${EMULATION_NAME}.xdceo"; |
| 382 | else |
| 383 | return "ldscripts/${EMULATION_NAME}.xdco"; |
| 384 | } |
| 385 | EOF |
| 386 | fi |
| 387 | fragment <<EOF |
| 388 | else if (bfd_link_pie (&link_info) |
| 389 | && link_info.combreloc) |
| 390 | { |
| 391 | if (link_info.separate_code) |
| 392 | return "ldscripts/${EMULATION_NAME}.xdce"; |
| 393 | else |
| 394 | return "ldscripts/${EMULATION_NAME}.xdc"; |
| 395 | } |
| 396 | EOF |
| 397 | fi |
| 398 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 399 | fragment <<EOF |
| 400 | else if (bfd_link_pie (&link_info) |
| 401 | && link_info.relro) |
| 402 | { |
| 403 | if (link_info.separate_code) |
| 404 | return "ldscripts/${EMULATION_NAME}.xdeo"; |
| 405 | else |
| 406 | return "ldscripts/${EMULATION_NAME}.xdo"; |
| 407 | } |
| 408 | EOF |
| 409 | fi |
| 410 | fragment <<EOF |
| 411 | else if (bfd_link_pie (&link_info)) |
| 412 | { |
| 413 | if (link_info.separate_code) |
| 414 | return "ldscripts/${EMULATION_NAME}.xde"; |
| 415 | else |
| 416 | return "ldscripts/${EMULATION_NAME}.xd"; |
| 417 | } |
| 418 | EOF |
| 419 | fi |
| 420 | if test -n "$GENERATE_SHLIB_SCRIPT" ; then |
| 421 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 422 | fragment <<EOF |
| 423 | else if (bfd_link_dll (&link_info) && link_info.combreloc |
| 424 | && link_info.relro && (link_info.flags & DF_BIND_NOW)) |
| 425 | { |
| 426 | if (link_info.separate_code) |
| 427 | return "ldscripts/${EMULATION_NAME}.xswe"; |
| 428 | else |
| 429 | return "ldscripts/${EMULATION_NAME}.xsw"; |
| 430 | } |
| 431 | EOF |
| 432 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 433 | fragment <<EOF |
| 434 | else if (bfd_link_dll (&link_info) |
| 435 | && link_info.combreloc |
| 436 | && link_info.relro) |
| 437 | { |
| 438 | if (link_info.separate_code) |
| 439 | return "ldscripts/${EMULATION_NAME}.xsceo"; |
| 440 | else |
| 441 | return "ldscripts/${EMULATION_NAME}.xsco"; |
| 442 | } |
| 443 | EOF |
| 444 | fi |
| 445 | fragment <<EOF |
| 446 | else if (bfd_link_dll (&link_info) && link_info.combreloc) |
| 447 | { |
| 448 | if (link_info.separate_code) |
| 449 | return "ldscripts/${EMULATION_NAME}.xsce"; |
| 450 | else |
| 451 | return "ldscripts/${EMULATION_NAME}.xsc"; |
| 452 | } |
| 453 | EOF |
| 454 | fi |
| 455 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 456 | fragment <<EOF |
| 457 | else if (bfd_link_dll (&link_info) |
| 458 | && link_info.relro) |
| 459 | { |
| 460 | if (link_info.separate_code) |
| 461 | return "ldscripts/${EMULATION_NAME}.xseo"; |
| 462 | else |
| 463 | return "ldscripts/${EMULATION_NAME}.xso"; |
| 464 | } |
| 465 | EOF |
| 466 | fi |
| 467 | fragment <<EOF |
| 468 | else if (bfd_link_dll (&link_info)) |
| 469 | { |
| 470 | if (link_info.separate_code) |
| 471 | return "ldscripts/${EMULATION_NAME}.xse"; |
| 472 | else |
| 473 | return "ldscripts/${EMULATION_NAME}.xs"; |
| 474 | } |
| 475 | EOF |
| 476 | fi |
| 477 | if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then |
| 478 | fragment <<EOF |
| 479 | else if (link_info.combreloc && link_info.relro |
| 480 | && (link_info.flags & DF_BIND_NOW)) |
| 481 | { |
| 482 | if (link_info.separate_code) |
| 483 | return "ldscripts/${EMULATION_NAME}.xwe"; |
| 484 | else |
| 485 | return "ldscripts/${EMULATION_NAME}.xw"; |
| 486 | } |
| 487 | EOF |
| 488 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 489 | fragment <<EOF |
| 490 | else if (link_info.combreloc |
| 491 | && link_info.relro) |
| 492 | { |
| 493 | if (link_info.separate_code) |
| 494 | return "ldscripts/${EMULATION_NAME}.xceo"; |
| 495 | else |
| 496 | return "ldscripts/${EMULATION_NAME}.xco"; |
| 497 | } |
| 498 | EOF |
| 499 | fi |
| 500 | fragment <<EOF |
| 501 | else if (link_info.combreloc) |
| 502 | { |
| 503 | if (link_info.separate_code) |
| 504 | return "ldscripts/${EMULATION_NAME}.xce"; |
| 505 | else |
| 506 | return "ldscripts/${EMULATION_NAME}.xc"; |
| 507 | } |
| 508 | EOF |
| 509 | fi |
| 510 | if test -n "$GENERATE_RELRO_SCRIPT" ; then |
| 511 | fragment <<EOF |
| 512 | else if (link_info.relro) |
| 513 | { |
| 514 | if (link_info.separate_code) |
| 515 | return "ldscripts/${EMULATION_NAME}.xeo"; |
| 516 | else |
| 517 | return "ldscripts/${EMULATION_NAME}.xo"; |
| 518 | } |
| 519 | EOF |
| 520 | fi |
| 521 | fragment <<EOF |
| 522 | else |
| 523 | { |
| 524 | if (link_info.separate_code) |
| 525 | return "ldscripts/${EMULATION_NAME}.xe"; |
| 526 | else |
| 527 | return "ldscripts/${EMULATION_NAME}.x"; |
| 528 | } |
| 529 | } |
| 530 | |
| 531 | EOF |
| 532 | fi |
| 533 | fi |
| 534 | |
| 535 | if test -n "$PARSE_AND_LIST_PROLOGUE" ; then |
| 536 | fragment <<EOF |
| 537 | $PARSE_AND_LIST_PROLOGUE |
| 538 | EOF |
| 539 | fi |
| 540 | |
| 541 | fragment <<EOF |
| 542 | |
| 543 | enum elf_options |
| 544 | { |
| 545 | OPTION_DISABLE_NEW_DTAGS = 400, |
| 546 | OPTION_ENABLE_NEW_DTAGS, |
| 547 | OPTION_GROUP, |
| 548 | OPTION_EH_FRAME_HDR, |
| 549 | OPTION_NO_EH_FRAME_HDR, |
| 550 | OPTION_EXCLUDE_LIBS, |
| 551 | OPTION_HASH_STYLE, |
| 552 | OPTION_BUILD_ID, |
| 553 | OPTION_AUDIT, |
| 554 | OPTION_COMPRESS_DEBUG |
| 555 | }; |
| 556 | |
| 557 | static void |
| 558 | gld${EMULATION_NAME}_add_options |
| 559 | (int ns, char **shortopts, int nl, struct option **longopts, |
| 560 | int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED) |
| 561 | { |
| 562 | EOF |
| 563 | if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then |
| 564 | fragment <<EOF |
| 565 | static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:"; |
| 566 | EOF |
| 567 | else |
| 568 | fragment <<EOF |
| 569 | static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:"; |
| 570 | EOF |
| 571 | fi |
| 572 | fragment <<EOF |
| 573 | static const struct option xtra_long[] = { |
| 574 | EOF |
| 575 | if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then |
| 576 | fragment <<EOF |
| 577 | {"audit", required_argument, NULL, OPTION_AUDIT}, |
| 578 | {"Bgroup", no_argument, NULL, OPTION_GROUP}, |
| 579 | EOF |
| 580 | fi |
| 581 | fragment <<EOF |
| 582 | {"build-id", optional_argument, NULL, OPTION_BUILD_ID}, |
| 583 | {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG}, |
| 584 | EOF |
| 585 | if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then |
| 586 | fragment <<EOF |
| 587 | {"depaudit", required_argument, NULL, 'P'}, |
| 588 | {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS}, |
| 589 | {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS}, |
| 590 | {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR}, |
| 591 | {"no-eh-frame-hdr", no_argument, NULL, OPTION_NO_EH_FRAME_HDR}, |
| 592 | {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS}, |
| 593 | {"hash-style", required_argument, NULL, OPTION_HASH_STYLE}, |
| 594 | EOF |
| 595 | fi |
| 596 | if test -n "$PARSE_AND_LIST_LONGOPTS" ; then |
| 597 | fragment <<EOF |
| 598 | $PARSE_AND_LIST_LONGOPTS |
| 599 | EOF |
| 600 | fi |
| 601 | fragment <<EOF |
| 602 | {NULL, no_argument, NULL, 0} |
| 603 | }; |
| 604 | |
| 605 | *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short)); |
| 606 | memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short)); |
| 607 | *longopts = (struct option *) |
| 608 | xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long)); |
| 609 | memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long)); |
| 610 | } |
| 611 | |
| 612 | #define DEFAULT_BUILD_ID_STYLE "sha1" |
| 613 | |
| 614 | static bfd_boolean |
| 615 | gld${EMULATION_NAME}_handle_option (int optc) |
| 616 | { |
| 617 | switch (optc) |
| 618 | { |
| 619 | default: |
| 620 | return FALSE; |
| 621 | |
| 622 | case OPTION_BUILD_ID: |
| 623 | free ((char *) ldelf_emit_note_gnu_build_id); |
| 624 | ldelf_emit_note_gnu_build_id = NULL; |
| 625 | if (optarg == NULL) |
| 626 | optarg = DEFAULT_BUILD_ID_STYLE; |
| 627 | if (strcmp (optarg, "none")) |
| 628 | ldelf_emit_note_gnu_build_id = xstrdup (optarg); |
| 629 | break; |
| 630 | |
| 631 | case OPTION_COMPRESS_DEBUG: |
| 632 | if (strcasecmp (optarg, "none") == 0) |
| 633 | link_info.compress_debug = COMPRESS_DEBUG_NONE; |
| 634 | else if (strcasecmp (optarg, "zlib") == 0) |
| 635 | link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB; |
| 636 | else if (strcasecmp (optarg, "zlib-gnu") == 0) |
| 637 | link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB; |
| 638 | else if (strcasecmp (optarg, "zlib-gabi") == 0) |
| 639 | link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB; |
| 640 | else |
| 641 | einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"), |
| 642 | optarg); |
| 643 | break; |
| 644 | EOF |
| 645 | |
| 646 | if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then |
| 647 | fragment <<EOF |
| 648 | case OPTION_AUDIT: |
| 649 | ldelf_append_to_separated_string (&audit, optarg); |
| 650 | break; |
| 651 | |
| 652 | case 'P': |
| 653 | ldelf_append_to_separated_string (&depaudit, optarg); |
| 654 | break; |
| 655 | |
| 656 | case OPTION_DISABLE_NEW_DTAGS: |
| 657 | link_info.new_dtags = FALSE; |
| 658 | break; |
| 659 | |
| 660 | case OPTION_ENABLE_NEW_DTAGS: |
| 661 | link_info.new_dtags = TRUE; |
| 662 | break; |
| 663 | |
| 664 | case OPTION_EH_FRAME_HDR: |
| 665 | link_info.eh_frame_hdr_type = DWARF2_EH_HDR; |
| 666 | break; |
| 667 | |
| 668 | case OPTION_NO_EH_FRAME_HDR: |
| 669 | link_info.eh_frame_hdr_type = 0; |
| 670 | break; |
| 671 | |
| 672 | case OPTION_GROUP: |
| 673 | link_info.flags_1 |= (bfd_vma) DF_1_GROUP; |
| 674 | /* Groups must be self-contained. */ |
| 675 | link_info.unresolved_syms_in_objects = RM_DIAGNOSE; |
| 676 | link_info.unresolved_syms_in_shared_libs = RM_DIAGNOSE; |
| 677 | break; |
| 678 | |
| 679 | case OPTION_EXCLUDE_LIBS: |
| 680 | add_excluded_libs (optarg); |
| 681 | break; |
| 682 | |
| 683 | case OPTION_HASH_STYLE: |
| 684 | link_info.emit_hash = FALSE; |
| 685 | link_info.emit_gnu_hash = FALSE; |
| 686 | if (strcmp (optarg, "sysv") == 0) |
| 687 | link_info.emit_hash = TRUE; |
| 688 | else if (strcmp (optarg, "gnu") == 0) |
| 689 | link_info.emit_gnu_hash = TRUE; |
| 690 | else if (strcmp (optarg, "both") == 0) |
| 691 | { |
| 692 | link_info.emit_hash = TRUE; |
| 693 | link_info.emit_gnu_hash = TRUE; |
| 694 | } |
| 695 | else |
| 696 | einfo (_("%F%P: invalid hash style \`%s'\n"), optarg); |
| 697 | break; |
| 698 | |
| 699 | EOF |
| 700 | fi |
| 701 | fragment <<EOF |
| 702 | case 'z': |
| 703 | if (strcmp (optarg, "defs") == 0) |
| 704 | link_info.unresolved_syms_in_objects = RM_DIAGNOSE; |
| 705 | else if (strcmp (optarg, "undefs") == 0) |
| 706 | link_info.unresolved_syms_in_objects = RM_IGNORE; |
| 707 | else if (strcmp (optarg, "muldefs") == 0) |
| 708 | link_info.allow_multiple_definition = TRUE; |
| 709 | else if (CONST_STRNEQ (optarg, "max-page-size=")) |
| 710 | { |
| 711 | char *end; |
| 712 | |
| 713 | config.maxpagesize = strtoul (optarg + 14, &end, 0); |
| 714 | if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0) |
| 715 | einfo (_("%F%P: invalid maximum page size \`%s'\n"), |
| 716 | optarg + 14); |
| 717 | } |
| 718 | else if (CONST_STRNEQ (optarg, "common-page-size=")) |
| 719 | { |
| 720 | char *end; |
| 721 | config.commonpagesize = strtoul (optarg + 17, &end, 0); |
| 722 | if (*end |
| 723 | || (config.commonpagesize & (config.commonpagesize - 1)) != 0) |
| 724 | einfo (_("%F%P: invalid common page size \`%s'\n"), |
| 725 | optarg + 17); |
| 726 | } |
| 727 | else if (CONST_STRNEQ (optarg, "stack-size=")) |
| 728 | { |
| 729 | char *end; |
| 730 | link_info.stacksize = strtoul (optarg + 11, &end, 0); |
| 731 | if (*end || link_info.stacksize < 0) |
| 732 | einfo (_("%F%P: invalid stack size \`%s'\n"), optarg + 11); |
| 733 | if (!link_info.stacksize) |
| 734 | /* Use -1 for explicit no-stack, because zero means |
| 735 | 'default'. */ |
| 736 | link_info.stacksize = -1; |
| 737 | } |
| 738 | else if (strcmp (optarg, "execstack") == 0) |
| 739 | { |
| 740 | link_info.execstack = TRUE; |
| 741 | link_info.noexecstack = FALSE; |
| 742 | } |
| 743 | else if (strcmp (optarg, "noexecstack") == 0) |
| 744 | { |
| 745 | link_info.noexecstack = TRUE; |
| 746 | link_info.execstack = FALSE; |
| 747 | } |
| 748 | else if (strcmp (optarg, "globalaudit") == 0) |
| 749 | { |
| 750 | link_info.flags_1 |= DF_1_GLOBAUDIT; |
| 751 | } |
| 752 | else if (CONST_STRNEQ (optarg, "start-stop-visibility=")) |
| 753 | { |
| 754 | if (strcmp (optarg, "start-stop-visibility=default") == 0) |
| 755 | link_info.start_stop_visibility = STV_DEFAULT; |
| 756 | else if (strcmp (optarg, "start-stop-visibility=internal") == 0) |
| 757 | link_info.start_stop_visibility = STV_INTERNAL; |
| 758 | else if (strcmp (optarg, "start-stop-visibility=hidden") == 0) |
| 759 | link_info.start_stop_visibility = STV_HIDDEN; |
| 760 | else if (strcmp (optarg, "start-stop-visibility=protected") == 0) |
| 761 | link_info.start_stop_visibility = STV_PROTECTED; |
| 762 | else |
| 763 | einfo (_("%F%P: invalid visibility in \`-z %s'; " |
| 764 | "must be default, internal, hidden, or protected"), |
| 765 | optarg); |
| 766 | } |
| 767 | EOF |
| 768 | |
| 769 | if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then |
| 770 | fragment <<EOF |
| 771 | else if (strcmp (optarg, "global") == 0) |
| 772 | link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL; |
| 773 | else if (strcmp (optarg, "initfirst") == 0) |
| 774 | link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST; |
| 775 | else if (strcmp (optarg, "interpose") == 0) |
| 776 | link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE; |
| 777 | else if (strcmp (optarg, "loadfltr") == 0) |
| 778 | link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR; |
| 779 | else if (strcmp (optarg, "nodefaultlib") == 0) |
| 780 | link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB; |
| 781 | else if (strcmp (optarg, "nodelete") == 0) |
| 782 | link_info.flags_1 |= (bfd_vma) DF_1_NODELETE; |
| 783 | else if (strcmp (optarg, "nodlopen") == 0) |
| 784 | link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN; |
| 785 | else if (strcmp (optarg, "nodump") == 0) |
| 786 | link_info.flags_1 |= (bfd_vma) DF_1_NODUMP; |
| 787 | else if (strcmp (optarg, "now") == 0) |
| 788 | { |
| 789 | link_info.flags |= (bfd_vma) DF_BIND_NOW; |
| 790 | link_info.flags_1 |= (bfd_vma) DF_1_NOW; |
| 791 | } |
| 792 | else if (strcmp (optarg, "lazy") == 0) |
| 793 | { |
| 794 | link_info.flags &= ~(bfd_vma) DF_BIND_NOW; |
| 795 | link_info.flags_1 &= ~(bfd_vma) DF_1_NOW; |
| 796 | } |
| 797 | else if (strcmp (optarg, "origin") == 0) |
| 798 | { |
| 799 | link_info.flags |= (bfd_vma) DF_ORIGIN; |
| 800 | link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN; |
| 801 | } |
| 802 | else if (strcmp (optarg, "combreloc") == 0) |
| 803 | link_info.combreloc = TRUE; |
| 804 | else if (strcmp (optarg, "nocombreloc") == 0) |
| 805 | link_info.combreloc = FALSE; |
| 806 | else if (strcmp (optarg, "nocopyreloc") == 0) |
| 807 | link_info.nocopyreloc = TRUE; |
| 808 | else if (strcmp (optarg, "relro") == 0) |
| 809 | link_info.relro = TRUE; |
| 810 | else if (strcmp (optarg, "norelro") == 0) |
| 811 | link_info.relro = FALSE; |
| 812 | else if (strcmp (optarg, "separate-code") == 0) |
| 813 | link_info.separate_code = TRUE; |
| 814 | else if (strcmp (optarg, "noseparate-code") == 0) |
| 815 | link_info.separate_code = FALSE; |
| 816 | else if (strcmp (optarg, "common") == 0) |
| 817 | link_info.elf_stt_common = elf_stt_common; |
| 818 | else if (strcmp (optarg, "nocommon") == 0) |
| 819 | link_info.elf_stt_common = no_elf_stt_common; |
| 820 | else if (strcmp (optarg, "text") == 0) |
| 821 | link_info.textrel_check = textrel_check_error; |
| 822 | else if (strcmp (optarg, "notext") == 0) |
| 823 | link_info.textrel_check = textrel_check_none; |
| 824 | else if (strcmp (optarg, "textoff") == 0) |
| 825 | link_info.textrel_check = textrel_check_none; |
| 826 | EOF |
| 827 | fi |
| 828 | |
| 829 | if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then |
| 830 | fragment <<EOF |
| 831 | $PARSE_AND_LIST_ARGS_CASE_Z |
| 832 | EOF |
| 833 | fi |
| 834 | |
| 835 | fragment <<EOF |
| 836 | else |
| 837 | einfo (_("%P: warning: -z %s ignored\n"), optarg); |
| 838 | break; |
| 839 | EOF |
| 840 | |
| 841 | if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then |
| 842 | fragment <<EOF |
| 843 | $PARSE_AND_LIST_ARGS_CASES |
| 844 | EOF |
| 845 | fi |
| 846 | |
| 847 | fragment <<EOF |
| 848 | } |
| 849 | |
| 850 | return TRUE; |
| 851 | } |
| 852 | |
| 853 | EOF |
| 854 | |
| 855 | if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then |
| 856 | gld_list_options="gld${EMULATION_NAME}_list_options" |
| 857 | if test -n "$PARSE_AND_LIST_OPTIONS"; then |
| 858 | fragment <<EOF |
| 859 | |
| 860 | static void |
| 861 | gld${EMULATION_NAME}_list_options (FILE * file) |
| 862 | { |
| 863 | EOF |
| 864 | |
| 865 | if test -n "$PARSE_AND_LIST_OPTIONS" ; then |
| 866 | fragment <<EOF |
| 867 | $PARSE_AND_LIST_OPTIONS |
| 868 | EOF |
| 869 | fi |
| 870 | |
| 871 | fragment <<EOF |
| 872 | } |
| 873 | EOF |
| 874 | else |
| 875 | gld_list_options="NULL" |
| 876 | fi |
| 877 | |
| 878 | if test -n "$PARSE_AND_LIST_EPILOGUE" ; then |
| 879 | fragment <<EOF |
| 880 | $PARSE_AND_LIST_EPILOGUE |
| 881 | EOF |
| 882 | fi |
| 883 | fi |
| 884 | |
| 885 | fragment <<EOF |
| 886 | |
| 887 | struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = |
| 888 | { |
| 889 | ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse}, |
| 890 | ${LDEMUL_SYSLIB-syslib_default}, |
| 891 | ${LDEMUL_HLL-hll_default}, |
| 892 | ${LDEMUL_AFTER_PARSE-ldelf_after_parse}, |
| 893 | ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open}, |
| 894 | ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default}, |
| 895 | ${LDEMUL_BEFORE_PLACE_ORPHANS-ldelf_before_place_orphans}, |
| 896 | ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation}, |
| 897 | ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default}, |
| 898 | ${LDEMUL_CHOOSE_TARGET-ldemul_default_target}, |
| 899 | ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation}, |
| 900 | ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script}, |
| 901 | "${EMULATION_NAME}", |
| 902 | "${OUTPUT_FORMAT}", |
| 903 | ${LDEMUL_FINISH-finish_default}, |
| 904 | ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL}, |
| 905 | ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive}, |
| 906 | ${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan}, |
| 907 | ${LDEMUL_SET_SYMBOLS-NULL}, |
| 908 | ${LDEMUL_PARSE_ARGS-NULL}, |
| 909 | gld${EMULATION_NAME}_add_options, |
| 910 | gld${EMULATION_NAME}_handle_option, |
| 911 | ${LDEMUL_UNRECOGNIZED_FILE-NULL}, |
| 912 | ${LDEMUL_LIST_OPTIONS-${gld_list_options}}, |
| 913 | ${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols}, |
| 914 | ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL}, |
| 915 | ${LDEMUL_NEW_VERS_PATTERN-NULL}, |
| 916 | ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}, |
| 917 | ${LDEMUL_EMIT_CTF_EARLY-NULL}, |
| 918 | ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, |
| 919 | ${LDEMUL_PRINT_SYMBOL-NULL} |
| 920 | }; |
| 921 | EOF |