+
+ * subsegs.h (segment_info_type): Use fix_tail field even if
+ BFD_ASSEMBLER.
+ * subsegs.c (subseg_change): Initialize fix_tail field.
+ (subseg_get): Likewise.
+ * write.c (frags_chained): New static variable.
+ (fix_new_internal): If frags_chained is set, use fix_root and
+ fix_tail from seg_info (now_seg), rather than frchain_now.
+ (chain_frchains_together_1): Set fix_tail field.
+ (chain_frchains_together): Set frags_chained.
+
+
+ * config/tc-mips.c (s_option): Only refer to g_switch_* variables
+ if GPOPT is defined.
+ (s_abicalls): Ditto.
+ (md_apply_fix): Cast char* to unsigned char* to avoid pointer
+ mismatch.
+
+
+ * configure.in (i386-*-go32): Uses coff now.
+ * gasp.c (main): Now takes -D on command line.
+ (show_usage): Describe new options.
+
+
+ * listing.c (list_symbol_table): Print "NO DEFINED SYMBOLS" and
+ "NO UNDEFINED SYMBOLS" if there aren't any, instead of displaying
+ the header with an empty list.
+
+ * config/obj-coffbfd.c (fill_section): Check COFF_NOLOAD_PROBLEM
+ also before setting STYP_NOLOAD for .bss section.
+
+ * config/tc-m68k.c (flag_reg_prefix_optional): New variable.
+ Initialized to value of REGISTER_PREFIX_OPTIONAL, if defined, or
+ zero.
+ (m68k_reg_parse): If flag_reg_prefix_optional is set, permit
+ register prefix to be absent.
+ (m68k_ip_op): Accept `&' also for immediate constants.
+ (insert_reg): Don't bother with (two!?) sanity checks of the
+ symbol table when inserting each register.
+ (m68k_parse_long_option): New function. Set
+ flag_reg_prefix_optional if "register-prefix-optional" is passed.
+ * config/tc-m68k.h (REGISTER_PREFIX): Always define if not already
+ defined.
+ (OPTIONAL_REGISTER_PREFIX): Don't define.
+ (REGISTER_PREFIX_OPTIONAL): If not already defined, define as zero
+ or one depending on M68KCOFF.
+
+ * config/tc-m68k.c (DATA, ADDR, SP, FPREG, COPNUM, BAD, BAC):
+ Define as macros instead of enumerators, since the Apollo compiler
+ can't handle "enumVal1, enumVal2 = enumVal1" when defining an enum
+ type.
+ (make_pcrel_absolute) [NO_PCREL_RELOCS]: New function.
+ (tc_coff_fix2rtype) [NO_PCREL_RELOCS]: Generate only R_RELBYTE,
+ R_DIR16, and R_DIR32 relocs.
+ * config/tc-m68k.h [TE_APOLLO] (COFF_MAGIC, COFF_AOUTHDR_MAGIC):
+ Use Apollo versions.
+ [TE_APOLLO] (OBJ_COFF_OMIT_OPTIONAL_HEADER): Undefine. That is,
+ do include the optional header for Apollo target.
+ (COFF_MAGIC): Don't define as MC68MAGIC if it's already defined.
+
+ * config/tc-m68k.h [TE_DELTA] (LEX_PCT): Define as 1, so that `%'
+ can be used within a label name.
+
+ * config/tc-m68k.h (m68k_init_after_args): Declare.
+ (tc_init_after_args): Define as m68k_init_after_args.
+ * config/tc-m68k.c (m68k_init_after_args): New function,
+ containing one-shot code from md_assemble. Added warning for
+ combination of 68040 and 68851.
+ (md_assemble): Startup-time code deleted.
+
+
+ * doc/Makefile.in (clean, distclean): Remove asconfig.texi.
+
+
+ * config/tc-hppa.c (pa_ip): 13 bit immediate constant (for break
+ instruction) is unsigned.
+
+
+ * config/obj-ecoff.c (ecoff_frob_file): Use bfd_ecoff_set_gp_value
+ and bfd_ecoff_set_regmasks to set the GP value and the register
+ masks, rather than using the now obsolete fake .reginfo section.
+
+
+ * listing.c (list_symbol_table): Don't print register symbols as
+ undefined.
+
+ * config/obj-coff.c (obj_symbol_new_hook): Don't need to strip
+ underscores, since symbol_new will already have done it.
+ * config/obj-coffbfd.c (obj_symbol_new_hook): Ditto.
+
+ * as.c (main): If tc_init_after_args is defined, invoke it after
+ all arguments have been processed.
+
+ * as.c (perform_an_assembly_pass) [TE_APOLLO]: Create .wtext
+ section instead of .text. Call create_target_segments.
+ * read.c (demand_copy_string): No longer static.
+
+
+ * config/tc-mips.c (append_insn): Permit branches to be switched
+ with the preceding instruction even if .set nobopt has been seen.
+ .set nobopt actually controls whether to bring up an instruction
+ from the branch target, which gas does not currently support.
+
+
+ * config/obj-coff.h, config/obj-coff.c: Deleted all code used only
+ when BFD_ASSEMBLER is not defined, and all conditionals relating
+ to such code. No such targets remain.
+
+ Fixes for stabs-in-coff:
+ * config/obj-coff.c: Include subsegs.h.
+ (coff_frob_section): New function.
+ (obj_coff_init_stab_section): New function.
+ * config/obj-coff.h (obj_coff_init_stab_section,
+ coff_frob_section): Declare.
+ (obj_frob_section): New macro; uses coff_frob_section.
+ (INIT_STAB_SECTION): New macro; uses obj_coff_init_stab_section.
+
+ * config/tc-sparc.c (md_section_align): Always round up to
+ multiple of alignment power specified in bfd target vector.
+
+ * gasp.c: Include ctype.h.
+
+
+ * doc/Makefile.in, doc/as.texinfo: Renamed asdoc-config.texi to
+ asconfig.texi.
+
+ * doc/Makefile.in (install-info-as, install-info-gasp): Get file
+ names from source directory without pathname.
+
+ * config/obj-vms.c (VMS_write_object_file): While looking for
+ register mask, skip empty fill frags caused by enabling listing
+ output.
+
+ * config/ho-sysv.h: Include string.h.
+
+ * doc/internals.texi: New (well, recently added) file. Just added
+ info on as_warn and friends.
+
+
+ * config/tc-hppa.c (pa_parse_space_stmt): Use the built-in
+ defaults for defined, private, and spnum fields for the
+ $TEXT$ and $PRIVATE$ spaces. Do not clobber spnum. Do
+ not reset the segment if just updating a space.
+ (pa_spaces_begin): Set BFD section flags for all built-in
+ subspaces.
+
+
+ * ecoff.c (first_proc_ptr): New static variable.
+ (add_procedure): Set first_proc_ptr if it hasn't been set.
+ (ecoff_build_lineno): If the first procedure does not start at
+ address zero, insert a dummy line to compensate.
+
+ * Makefile.in (bootstrap, bootstrap2, bootstrap3): Make gasp.new
+ as well as as.new.
+
+
+ * expr.c (operand): Try to parse "0f" and "0b" sequences as
+ floating point and binary numbers respectively; if it doesn't
+ work, treat them as local labels.
+
+ * Makefile.in: Make $(OBJS) depend on $(ALL_OBJ_DEPS).
+ * configure.in: Set ALL_OBJ_DEPS in output Makefile.
+
+ (Charles Bailey):
+ * vmsconf.sh: In generated file, get ".obj" suffix right, build
+ source files from other directories into objects in the current
+ directory, and specify PSECT attributes explicitly to linker.
+ Also added missing label.
+ * Makefile.in (stamp-mk.com): Reference new variable
+ VMS_OTHER_OBJS for list of non-local object files, instead of
+ listing them here.
+ (VMS_OTHER_OBJS): New variable, added more libiberty files.
+ * make-gas.com: Regenerated.
+
+ * config/ho-vms.h (unlink): Define as delete.
+
+ * config-gas.com: Fix quoting on TARGET_CANONICAL definition.
+ Delete files before creating them.
+
+
+ * Makefile.in (de-stage1, de-stage2, de-stage3): Use rm -f.
+
+ * config/tc-mips.h (DIFF_EXPR_OK): Define.
+ * config/tc-mips.c (macro_build): Permit BFD_RELOC_PCREL_LO16 for
+ certain cases of 'i', 'j' and 'o'. Change 'u' to take an
+ argument, the reloc type.
+ (load_register): Pass reloc type to macro_build for 'u'.
+ (macro): Likewise. For M_LA_AB permit a difference expression
+ when generating embedded PIC code between an arbitrary symbol and
+ a symbol in the .text section.
+ (mips_force_relocation): Force BFD_RELOC_PCREL_HI16_S and
+ BFD_RELOC_PCREL_LO16 to be emitted.
+ (md_apply_fix): Check that most relocs are not PC relative.
+ Handle BFD_RELOC_PCREL_HI16_S and BFD_RELOC_PCREL_LO16.
+ (tc_gen_reloc): Change #error to as_fatal. Handle
+ BFD_RELOC_PCREL_LO16 and BFD_RELOC_PCREL_HI16_S.
+
+
+ * subsegs.c (subsegs_begin): Call memset with args in the correct
+ order.
+ (subseg_get): Clear newly allocated seginfo, set its pointer slots
+ to NULL instead of 0.
+
+
+ * config/tc-hppa.c (pa_procend): Handle case where label was
+ defined after the .proc directive.
+
+ * config/tc-hppa.c (pa_procend): Give an error if we encounter a
+ procend for a procedure without a name.
+
+
+ * config/tc-mips.c (macro): Pass NULL for expression argument to
+ macro_build for nori case.
+ (SWITCH_TABLE): Define.
+ (mips_force_relocation): Force a relocation for a switch table
+ entry.
+ (md_apply_fix): Write switch table entry value into file.
+ (tc_gen_reloc): Use BFD_RELOC_GPREL32 for a switch table entry,
+ and set the addend to the difference between the reloc address and
+ the subtrahend.
+
+
+ * config/tc-hppa.h (elf_tc_symbol): Delete. No longer used.
+ (elf_tc_make_sections): Likewise.
+ (hppa_tc_make_sections, hppa_tc_symbol): Delete extern decls.
+
+ * config/tc-hppa.c (hppa_tc_make_sections): Delete function.
+ (hppa_tc_symbol): Likewise.
+
+ * config/obj-elf.c (elf_frob_file): Delete elf_tc_symbol and
+ elf_tc_make_sections stuff. It was there to support PA braindamage
+ which has been fixed, and in the case of elf_tc_make_sections is
+ redundant with elf_tc_final_processing.
+
+
+ * configure.in (hppa*-*-*elf*): Don't require "-hp-" for the
+ manufacturer.
+
+
+ * config/tc-mips.c (mips_ip): For case 'o', when generating
+ embedded PIC code, accept the difference between two local symbols
+ as being constant.
+ (mips_force_relocation): Only force a reloc to be generated for a
+ PC relative fixup.
+ (md_apply_fix): For BFD_RELOC_32 and BFD_RELOC_LO16, put the fixup
+ value into the file if the fixup will not generate a reloc.
+
+
+ * config/tc-sparc.c (s_reserve): If section passed isn't bss,
+ don't spew remainder of input file in error message.
+ (tc_gen_reloc): If bfd_reloc_type_lookup returns null, print error
+ message with reloc type and try to process remainder of file.
+
+ * doc/Makefile.in (install-info-as, install-info-gasp): New
+ targets, now explicitly checking $(srcdir) for info files.
+ (install-info): Depend on both of them; do nothing more.
+
+
+ * config/tc-hppa.c (tc_gen_reloc): Fix thinko in ELF version.
+
+
+ * config/tc-ppc.c (ppc_insert_operand): Check PPC_OPERAND_SIGNED
+ flag rather than signedp field. Only permit extended range if
+ PPC_OPERAND_SIGNOPT flag is set and assembling in 32 bit mode.
+
+ * config/tc-ppc.c (ppc_size): New static variable.
+ (ppc_arch): Check for PPC_OPCODE_PPC before PPC_OPCODE_POWER.
+ (md_begin): If an instruction has a size specific flag set, only
+ add it if we are assembling that size.
+
+
+ * config/tc-sparc.c (tc_gen_reloc): Add a gruesome hack to get
+ cross section PC relative relocs right for COFF and ELF.
+
+
+ * config/obj-coff.h (SEPARATE_STAB_SECTIONS): Always define.
+ (OBJ_PROCESS_STAB): Don't define.
+
+
+ * config/obj-aout.c (obj_aout_frob_symbols): Don't let BFD clobber
+ the type of symbol set symbols which happen to be in the absolute
+ or undefined section.
+
+
+ * config/tc-ppc.c (md_parse_option): Add -mpwrx (POWER/2 aka
+ RIOS2), -mpwr (POWER aka RIOS1), -mppc (PowerPC aka MPC603/604),
+ and -many (all architectures).
+
+
+ * config/tc-hppa.c (tc_gen_reloc): Set addend for relocation
+ involving a function symbol which is not a plabel to zero.
+ (md_apply_fix): Never pass a function symbol to field_adjust.
+
+
+ * config/obj-aout.c (obj_aout_frob_symbol): If N_EXT is set for an
+ N_INDR symbol, set BSF_EXPORT and clear BSF_LOCAL.
+
+ * config/tc-mips.c (append_insn): If EMBEDDED_PIC, don't swap a
+ branch with an instruction that uses $at, in case the branch is
+ later expanded.
+ (macro): If EMBEDDED_PIC, case M_JAL_A may use $at.
+ (md_pcrel_from): If not OBJ_AOUT, return 4 for an undefined symbol
+ to make it pcrel_offset.
+ (tc_gen_reloc): If not OBJ_AOUT, set the reloc addend to
+ reloc->address; another gruesome hack to get gas reloc handling to
+ do the right thing.
+
+
+ * config/tc-alpha.c (alpha_ip): Only set GP prolog size if using
+ PV register.
+ (T12): New macro.
+ (emit_insn): New function.
+ (md_assemble): Call it.
+ (alpha_force_relocation): Handle BFD_RELOC_26, for call_pal
+ instructions.
+ (lituse_pending): New variable. Set by anything that generates a
+ LITERAL reloc, cleared by anything that generates a LITUSE reloc,
+ tested by code that might want to emit a LITUSE reloc.
+ (emit_unaligned_io): New function. Currently calls md_assemble,
+ but it should eventually be converted to generate the insn itself
+ and call emit_insn directly.
+ (emit_load_unal, emit_store_unal, emit_byte_manip_r,
+ emit_extract_r, emit_insert_r, emit_mask_r, emit_sign_extend,
+ emit_bis_r): Likewise.
+ (alpha_ip, case 'I'): Handle with BFD_RELOC_23.
+ (alpha_ip, label get_macro): Don't emit the final instruction if
+ the opcode is zero.
+ (alpha_ip, case 'B', subcase 'd'): New case, for subword and
+ unaligned memory access macros.
+ (md_apply_fix): Handle BFD_RELOC_26. Generate an error message if
+ the value can't be resolved.
+
+
+ * config/tc-mips.c (md_parse_option): For -membedded-pic, force
+ the -G value to 0x7fffffff. For SVR4 PIC options, don't call
+ bfd_set_gp_size here, it's done in md_begin. Don't permit -G with
+ -membedded-pic.
+ (mips_force_relocation): New function.
+ (md_apply_fix): Set fixP->fx_done appropriately.
+ (s_change_sec): For EMBEDDED_PIC, change .data and .rdata to
+ .sdata.
+ * config/tc-mips.h (TC_FORCE_RELOCATION): Define.
+ (mips_force_relocation): Declare.
+ (TC_HANDLE_FX_DONE): Define.
+
+
+ * config/tc-mips.c (enum mips_pic_level): New enum.
+ (mips_pic): Change from int to enum mips_pic_level. Change all
+ uses (0 becomes NO_PIC, 2 becomes SVR4_PIC).
+ (load_address): Handle EMBEDDED_PIC.
+ (macro): Handle EMBEDDED_PIC in all PIC cases.
+ (md_parse_option): Accept -membedded-pic to use EMBEDDED_PIC. If
+ OBJ_ELF, accept -KPIC and -call_shared to use SVR4_PIC and accept
+ -non_shared to use NO_PIC (this is how the Irix 5 assembler
+ works). Do not permit -G with SVR4_PIC.
+ (s_abicalls): Warn if -G was used, and force -G 0.
+ (tc_gen_reloc): Set reloc->addend to 0 for a PC relative reloc for
+ anything but a.out, not just for ELF. For ECOFF, don't generate a
+ BFD_RELOC_16_PCREL_S2 reloc unless using EMBEDDED_PIC.
+
+ * config/obj-ecoff.h (obj_sec_sym_ok_for_reloc): Define to be 1.
+
+
+ * config/tc-hppa.c (create_new_space): Use ints, not chars as
+ parameters to avoid losing when compiling with HP CC.
+ (create_new_subspace, update_subspace, fix_new_hppa): Likewise.
+
+
+ * Makefile.in (config-stamp): If `defs' is defined, emit a
+ preprocessor directive to create a macro named by this value into
+ config.new; don't explicitly go for BFD_ASSEMBLER.
+ * configure.in: Define `defs', not `BFDDEF'. Set it to
+ MANY_SEGMENTS for any obj-coffbfd target.
+ * config/obj-coffbfd.h (BFD_HEADERS, BFD): Define.
+ * config/i386coff.mt (TDEFINES): Don't define BFD, MANY_SEGMENTS,
+ or BFD_HEADERS.
+ (LOCAL_LOADLIBES): Deleted.
+ * config/m68kcoff.mt (TDEFINES): Don't define those macros.
+ * config/m88kcoff.mt (TDEFINES): Ditto.
+ * config/ebmon29k.mt: Deleted.
+ * config/h8300hds.mt: Deleted.
+ * config/ic960coff.mt: Deleted.
+ * config/sparc.mt: Deleted.
+ * config/h8300.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
+ * config/h8500.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
+ * config/sh.mt (LOCAL_LOADLIBES, TDEFINES): Deleted.
+ * config/z8k.mt (LOCAL_LOADLIBES): Deleted.
+ (TDEFINES): Don't define the coffbfd macros.
+
+ * Makefile.in: Insert makefile fragments before OBJS definition.
+ (OBJS): Add $(TE_OBJS).
+
+ * config/obj-coff.c (obj_pseudo_table): Supply "section"
+ unconditionally.
+
+ * write.c (set_symtab): Define only if BFD_ASSEMBLER.
+
+
+ * Makefile.in (STAGESTUFF): Add gasp.new.
+
+
+ * write.c (symbol_table_frozen): New variable, to be set after
+ bfd_set_symtab is called.
+ (dump_section_relocs): Note whether a symbol is a section symbol
+ or not.
+ (adjust_reloc_syms): For now, always supply an absolute symbol for
+ fixups without symbols but not yet `done'. Use section_symbol to
+ get the symbol, instead of going directly for abs_symbol.
+ (write_relocs) [DEBUG4]: Abort if any symbol referred to by a
+ reloc is not a section symbol and is not in the symbol table.
+ (set_symtab): New function, broken out from write_object_file.
+ Counts symbol table instead of relying on an earlier count.
+ (write_object_file): Call set_symtab, but do it after potentially
+ invoking the *_frob_file macros. Don't bother counting symbols.
+ Call symbol_remove, instead of expanding it in place. Moved the
+ conditionalized `object_file_size' declaration down to
+ conditionalized block where it's used. When using the absolute
+ symbol for a fixup without a symbol, set sy_used_in_reloc.
+ (write_object_file) [BFD_ASSEMBLER]: Call section_symbol to get
+ the correct symbol for the absolute section.
+
+ * subsegs.c (section_symbol): Use symbol_new instead of
+ symbol_make, since we may want it to go into the symbol table.
+ Make the new symbol have internal linkage. If
+ obj_sec_sym_ok_for_reloc says it's okay, use the BFD section
+ symbol with the newly created GAS symbol.
+ (obj_sec_sym_ok_for_reloc): Default to always returning 0.
+ * config/obj-aout.h (obj_sec_sym_ok_for_reloc) [BFD_ASSEMBLER]:
+ New macro.
+ * config/obj-elf.h (obj_sec_sym_ok_for_reloc): New macro.
+
+ * config/tc-sparc.c: Include subsegs.h.
+ (in_signed_range): New function.
+ (sparc_ip): Use it.
+ (sparc_ip, case 'i'): Use BFD_RELOC_SPARC13, not _BASE13.
+ (sparc_ip, label "immediate"): Reject constants for pcrel
+ instructions only if the relocation type indicates a "call"
+ instruction and the offset is within range of a "jmpl %g0". If
+ it's not in range, use the absolute section symbol plus an offset.
+ (md_apply_fix): Use in_signed_range. Combined _SPARC13 and
+ _BASE13 cases.
+ (tc_gen_reloc): Permit BFD_RELOC_SPARC13.
+
+ * config/ic960coff.mt (TDEFINES): Fixed typo (MANY_SECTIONS, not
+ MANY_SEGMENTS).
+
+ * configure.in: Eliminated all targets using obj-coff but not
+ defining BFD_ASSEMBLER; I think all such targets that are
+ supported will be matched by real CPU-OS combinations earlier in
+ the case statement.
+ (targets *-*-coff*, *-sysv*, *-*-sco*, *-*-sysv32): Deleted. Made
+ some comments about the dpx2 configuration, but left it disabled,
+ since it couldn't be reached before.
+ (target a29k-amd-ebmonold): Deleted.
+
+
+ * config/tc-hppa.c (pa_import): Correctly handle importing of an
+ already defined symbol.
+
+
+ * config/tc-mips.c (mips_ip): Only accept overly large values for
+ the 'j' operand if there are no further alternatives for this
+ instruction.
+
+ * config/obj-coffbfd.c (adjust_stab_section): Initialize
+ stabstrseg to SEG_UNKNOWN, not -1. After loop, check whether it
+ is not SEG_UNKNOWN rather than checking whether it is >= 0.
+
+ * config/tc-mips.c (mips_align): Take new argument, label, and use
+ it instead of global insn_label.
+ (s_align, s_cons, s_float_cons, s_gpword): Save insn_label before
+ call to mips_emit_delay and pass it to mips_align.
+
+
+ * config/tc-hppa.c (pa_equ): Handle both .reg and .equ correctly.
+
+ * config/tc-hppa.c (pa_callinfo): Accept "millicode" as an
+ argument to a .callinfo directive. Don't loop forever on errors.
+
+ * config/tc-hppa.c (pa_equ): Use pa_parse_number so that we can
+ use pre-defined registers as arguments.
+
+
+ * write.c (write_object_file): Check both S_IS_LOCAL and
+ S_IS_EXTERNAL when deciding whether to discard a symbol.
+
+ * config-gas.com: Scan Makefile.in, not version.c, for current
+ version number. Delete all versions of temp files when finished
+ with them. Create config.h.
+
+ * config/obj-vms.c (VMS_Initialized_Data_Size): Cache symbol
+ values to reduce number of lookups with S_GET_VALUE. Skip debug
+ symbols to avoid "a really nasty bug". (From Holger Teutsch,
+ (VMS_write_object_file): For "__vt.*" symbols, set S_GET_OTHER
+ field. (Also from Holger Teutsch.) Watch for a would-be register
+ mask that spans frags.
+
+ * config/obj-coffbfd.c (obj_coff_line): Set symbol lnno field with
+ this_base, not line_base. (Patch from Andreas Arens,
+
+ * config/obj-aout.c (obj_crawl_symbol_chain): Retain symbols that
+ look local if they're exported or undefined. Used to be done for
+ i960 only.
+
+ * read.c (s_lcomm, s_comm): Print symbol name being redefined.
+ Get it from the looked-up symbol, instead of using the string from
+ the input stream, which is no longer null-terminated.
+ (LEX_PCT): New macro, defaults to 0.
+ (lex_type): Use it for `%'.
+
+ * config/tc-vax.c (md_parse_option): Handle `-h#' option for VMS.
+ (vip_op): Now static, and returns void. Callers changed. Added
+ forward decl.
+ (vip): Ditto. Call as_fatal directly if a program bug is
+ detected.
+ (op_hash): Let default initialization suffice.
+
+ * Makefile.in (literal.o): Provide dependencies.
+
+ * configure.in: Set new makefile variable OPCODES_LIB.
+ * Makefile.in (LIBS): Use it.
+
+ * Makefile.in (make-gas.com, stamp-mk.com): New targets.
+ * vmsconf.sh: New file.
+ * make-gas.com: Regenerated from new script.
+
+ * configure.in (sparc*-*-lynxos*): Handle any version number
+ suffix after "lynxos". Set emulation to lynx.
+
+
+ * config/obj-coff.c (obj_coff_section): Delete declaration.
+
* config/tc-ppc.c (md_pcrel_from): Return 0 for undefined ELF