/* ldlex.h -
   Copyright (C) 1991-2024 Free Software Foundation, Inc.

   This file is part of the GNU Binutils.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#ifndef LDLEX_H
#define LDLEX_H

#include <stdio.h>

/* Codes used for the long options with no short synonyms.  150 isn't
   special; it's just an arbitrary non-ASCII char value.  */
enum option_values
{
  OPTION_ASSERT = 150,
  OPTION_CALL_SHARED,
  OPTION_CREF,
  OPTION_DEFSYM,
  OPTION_DEMANGLE,
  OPTION_DYNAMIC_LINKER,
  OPTION_NO_DYNAMIC_LINKER,
  OPTION_SYSROOT,
  OPTION_OUT_IMPLIB,
  OPTION_EB,
  OPTION_EL,
  OPTION_EMBEDDED_RELOCS,
  OPTION_EXPORT_DYNAMIC,
  OPTION_NO_EXPORT_DYNAMIC,
  OPTION_HELP,
  OPTION_IGNORE,
  OPTION_MAP,
  OPTION_NO_DEMANGLE,
  OPTION_NO_KEEP_MEMORY,
  OPTION_NO_WARN_MISMATCH,
  OPTION_NO_WARN_SEARCH_MISMATCH,
  OPTION_NOINHIBIT_EXEC,
  OPTION_NON_SHARED,
  OPTION_NO_WHOLE_ARCHIVE,
  OPTION_OFORMAT,
  OPTION_RELAX,
  OPTION_NO_RELAX,
  OPTION_NO_SYMBOLIC,
  OPTION_RETAIN_SYMBOLS_FILE,
  OPTION_RPATH,
  OPTION_RPATH_LINK,
  OPTION_SHARED,
  OPTION_SONAME,
  OPTION_SORT_COMMON,
  OPTION_SORT_SECTION,
  OPTION_SECTION_ORDERING_FILE,
  OPTION_STATS,
  OPTION_SYMBOLIC,
  OPTION_SYMBOLIC_FUNCTIONS,
  OPTION_TASK_LINK,
  OPTION_TBSS,
  OPTION_TDATA,
  OPTION_TTEXT,
  OPTION_TTEXT_SEGMENT,
  OPTION_TRODATA_SEGMENT,
  OPTION_TLDATA_SEGMENT,
  OPTION_TRADITIONAL_FORMAT,
  OPTION_UR,
  OPTION_VERBOSE,
  OPTION_VERSION,
  OPTION_VERSION_SCRIPT,
  OPTION_VERSION_EXPORTS_SECTION,
  OPTION_DYNAMIC_LIST,
  OPTION_DYNAMIC_LIST_CPP_NEW,
  OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
  OPTION_DYNAMIC_LIST_DATA,
  OPTION_EXPORT_DYNAMIC_SYMBOL,
  OPTION_EXPORT_DYNAMIC_SYMBOL_LIST,
  OPTION_WARN_COMMON,
  OPTION_WARN_CONSTRUCTORS,
  OPTION_WARN_FATAL,
  OPTION_NO_WARN_FATAL,
  OPTION_NO_WARNINGS,
  OPTION_WARN_MULTIPLE_GP,
  OPTION_WARN_ONCE,
  OPTION_WARN_SECTION_ALIGN,
  OPTION_SPLIT_BY_RELOC,
  OPTION_SPLIT_BY_FILE ,
  OPTION_WHOLE_ARCHIVE,
  OPTION_ADD_DT_NEEDED_FOR_DYNAMIC,
  OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC,
  OPTION_ADD_DT_NEEDED_FOR_REGULAR,
  OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR,
  OPTION_WRAP,
  OPTION_FORCE_EXE_SUFFIX,
  OPTION_GC_SECTIONS,
  OPTION_NO_GC_SECTIONS,
  OPTION_PRINT_GC_SECTIONS,
  OPTION_NO_PRINT_GC_SECTIONS,
  OPTION_GC_KEEP_EXPORTED,
  OPTION_HASH_SIZE,
  OPTION_CHECK_SECTIONS,
  OPTION_NO_CHECK_SECTIONS,
  OPTION_NO_UNDEFINED,
  OPTION_INIT,
  OPTION_FINI,
  OPTION_SECTION_START,
  OPTION_UNIQUE,
  OPTION_TARGET_HELP,
  OPTION_ALLOW_SHLIB_UNDEFINED,
  OPTION_NO_ALLOW_SHLIB_UNDEFINED,
  OPTION_ALLOW_MULTIPLE_DEFINITION,
#if SUPPORT_ERROR_HANDLING_SCRIPT
  OPTION_ERROR_HANDLING_SCRIPT,
#endif
  OPTION_UNDEFINED_VERSION,
  OPTION_NO_UNDEFINED_VERSION,
  OPTION_DEFAULT_SYMVER,
  OPTION_DEFAULT_IMPORTED_SYMVER,
  OPTION_DISCARD_NONE,
  OPTION_SPARE_DYNAMIC_TAGS,
  OPTION_NO_DEFINE_COMMON,
  OPTION_NOSTDLIB,
  OPTION_NO_OMAGIC,
  OPTION_STRIP_DISCARDED,
  OPTION_NO_STRIP_DISCARDED,
  OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
  OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
  OPTION_PIE,
  OPTION_NO_PIE,
  OPTION_UNRESOLVED_SYMBOLS,
  OPTION_WARN_UNRESOLVED_SYMBOLS,
  OPTION_ERROR_UNRESOLVED_SYMBOLS,
  OPTION_WARN_TEXTREL,
  OPTION_WARN_ALTERNATE_EM,
  OPTION_REDUCE_MEMORY_OVERHEADS,
  OPTION_MAX_CACHE_SIZE,
#if BFD_SUPPORTS_PLUGINS
  OPTION_PLUGIN,
  OPTION_PLUGIN_OPT,
  OPTION_PLUGIN_SAVE_TEMPS,
#endif /* BFD_SUPPORTS_PLUGINS */
  OPTION_DEFAULT_SCRIPT,
  OPTION_PRINT_OUTPUT_FORMAT,
  OPTION_PRINT_SYSROOT,
  OPTION_IGNORE_UNRESOLVED_SYMBOL,
  OPTION_PUSH_STATE,
  OPTION_POP_STATE,
  OPTION_DISABLE_MULTIPLE_DEFS_ABS,
  OPTION_PRINT_MEMORY_USAGE,
  OPTION_REQUIRE_DEFINED_SYMBOL,
  OPTION_ORPHAN_HANDLING,
  OPTION_FORCE_GROUP_ALLOCATION,
  OPTION_PRINT_MAP_DISCARDED,
  OPTION_NO_PRINT_MAP_DISCARDED,
  OPTION_PRINT_MAP_LOCALS,
  OPTION_NO_PRINT_MAP_LOCALS,
  OPTION_NON_CONTIGUOUS_REGIONS,
  OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS,
  OPTION_DEPENDENCY_FILE,
  OPTION_CTF_VARIABLES,
  OPTION_NO_CTF_VARIABLES,
  OPTION_CTF_SHARE_TYPES,
  OPTION_ERROR_EXECSTACK,
  OPTION_NO_ERROR_EXECSTACK,
  OPTION_WARN_EXECSTACK_OBJECTS,
  OPTION_WARN_EXECSTACK,
  OPTION_NO_WARN_EXECSTACK,
  OPTION_WARN_RWX_SEGMENTS,
  OPTION_NO_WARN_RWX_SEGMENTS,
  OPTION_ERROR_RWX_SEGMENTS,
  OPTION_NO_ERROR_RWX_SEGMENTS,
  OPTION_ENABLE_LINKER_VERSION,
  OPTION_DISABLE_LINKER_VERSION,
  OPTION_REMAP_INPUTS,
  OPTION_REMAP_INPUTS_FILE,
  /* Used by emultempl/elf.em, emultempl/pe.em and emultempl/pep.em.  */
  OPTION_BUILD_ID,
  OPTION_EXCLUDE_LIBS,
  /* Used by emulparams/elf32mcore.sh, emultempl/beos.em, emultempl/pe.em
     and emultempl/pep.em.  */
  OPTION_BASE_FILE,
  /* Used by emultempl/ppc32elf.em and emultempl/ppc64elf.em.  */
  OPTION_NO_INLINE_OPT,
  OPTION_NO_PLT_ALIGN,
  OPTION_NO_STUBSYMS,
  OPTION_NO_TLS_GET_ADDR_OPT,
  OPTION_NO_TLS_OPT,
  OPTION_PLT_ALIGN,
  OPTION_STUBSYMS,
  /* Used by emultempl/armelf.em and emultempl/tic6xdsbt.em.  */
  OPTION_NO_MERGE_EXIDX_ENTRIES,
  /* Used by emultempl/aarch64elf.em and emultempl/armelf.em.  */
  OPTION_PIC_VENEER,
  OPTION_NO_ENUM_SIZE_WARNING,
  OPTION_NO_WCHAR_SIZE_WARNING,
  /* Used by emultempl/armelf.em and emultempl/pe.em.  */
  OPTION_THUMB_ENTRY,
  /* Used by emultempl/beos.em, emultempl/nto.em, emultempl/pe.em and
     emultempl/pep.em.  */
  OPTION_STACK,
  /* Used by emultempl/aarch64elf.em, emultempl/armelf.em,
     emultempl/cskyelf.em, emultempl/hppaelf.em, emultempl/metagelf.em
     and emultempl/ppc64elf.em.  */
  OPTION_STUBGROUP_SIZE,
  /* Used by emulparams/plt_unwind.sh.  */
  OPTION_LD_GENERATED_UNWIND_INFO,
  OPTION_NO_LD_GENERATED_UNWIND_INFO,
  /* Used by emultempl/aarch64elf.em.  */
  OPTION_FIX_ERRATUM_835769,
  OPTION_FIX_ERRATUM_843419,
  OPTION_NO_APPLY_DYNAMIC_RELOCS,
  /* Used by emultempl/aix.em.  */
  OPTION_AUTOIMP,
  OPTION_ERNOTOK,
  OPTION_EROK,
  OPTION_EXPALL,
  OPTION_EXPFULL,
  OPTION_EXPORT,
  OPTION_IMPORT,
  OPTION_INITFINI,
  OPTION_LOADMAP,
  OPTION_MAXDATA,
  OPTION_MAXSTACK,
  OPTION_MODTYPE,
  OPTION_NOAUTOIMP,
  OPTION_NOEXPALL,
  OPTION_NOEXPFULL,
  OPTION_NOSTRCMPCT,
  OPTION_PD,
  OPTION_PT,
  OPTION_STRCMPCT,
  OPTION_UNIX,
  OPTION_32,
  OPTION_64,
  OPTION_LIBPATH,
  OPTION_NOLIBPATH,
  /* Used by emultempl/alphaelf.em.  */
  OPTION_TASO,
  OPTION_SECUREPLT,
  OPTION_NO_SECUREPLT,
  /* Used by emultempl/armelf.em.  */
  OPTION_BE8,
  OPTION_TARGET1_REL,
  OPTION_TARGET1_ABS,
  OPTION_TARGET2,
  OPTION_FIX_V4BX,
  OPTION_USE_BLX,
  OPTION_VFP11_DENORM_FIX,
  OPTION_FIX_V4BX_INTERWORKING,
  OPTION_FIX_CORTEX_A8,
  OPTION_NO_FIX_CORTEX_A8,
  OPTION_FIX_ARM1176,
  OPTION_NO_FIX_ARM1176,
  OPTION_LONG_PLT,
  OPTION_STM32L4XX_FIX,
  OPTION_CMSE_IMPLIB,
  OPTION_IN_IMPLIB,
  /* Used by emultempl/avrelf.em.  */
  OPTION_NO_CALL_RET_REPLACEMENT,
  OPTION_PMEM_WRAP_AROUND,
  OPTION_NO_STUBS,
  OPTION_DEBUG_STUBS,
  OPTION_DEBUG_RELAX,
  /* Used by emultempl/bfin.em.  */
  OPTION_CODE_IN_L1,
  OPTION_DATA_IN_L1,
  /* Used by emultempl/cskyelf.em.  */
  OPTION_BRANCH_STUB,
  OPTION_NO_BRANCH_STUB,
  /* Used by emultempl/elf.em.  */
  OPTION_DISABLE_NEW_DTAGS,
  OPTION_ENABLE_NEW_DTAGS,
  OPTION_GROUP,
  OPTION_EH_FRAME_HDR,
  OPTION_NO_EH_FRAME_HDR,
  OPTION_HASH_STYLE,
  OPTION_PACKAGE_METADATA,
  OPTION_AUDIT,
  OPTION_COMPRESS_DEBUG,
  OPTION_ROSEGMENT,
  OPTION_NO_ROSEGMENT,
  /* Used by emultempl/hppaelf.em.  */
  OPTION_MULTI_SUBSPACE,
  /* Used by emultempl/ia64elf.em.  */
  OPTION_ITANIUM,
  /* Used by emultempl/m68hc1xelf.em.  */
  OPTION_NO_TRAMPOLINE,
  OPTION_BANK_WINDOW,
  /* Used by emultempl/m68kelf.em.  */
  OPTION_GOT,
  /* Used by emultempl/mipself.em.  */
  OPTION_INSN32,
  OPTION_NO_INSN32,
  OPTION_IGNORE_BRANCH_ISA,
  OPTION_NO_IGNORE_BRANCH_ISA,
  OPTION_COMPACT_BRANCHES,
  OPTION_NO_COMPACT_BRANCHES,
  /* Used by emultempl/msp430.em.  */
  OPTION_CODE_REGION,
  OPTION_DATA_REGION,
  OPTION_DISABLE_TRANS,
  /* Used by emultempl/nds32elf.em.  */
  OPTION_BASELINE,
  OPTION_ELIM_GC_RELOCS,
  OPTION_FP_AS_GP,
  OPTION_NO_FP_AS_GP,
  OPTION_REDUCE_FP_UPDATE,
  OPTION_NO_REDUCE_FP_UPDATE,
  OPTION_EXPORT_SYMBOLS,
  OPTION_HYPER_RELAX,
  OPTION_TLSDESC_TRAMPOLINE,
  OPTION_NO_TLSDESC_TRAMPOLINE,
  /* Used by emultempl/nto.em.  */
  OPTION_LAZY_STACK,
  /* Used by emultempl/pe.em, emultempl/pep.em and emultempl/beos.em.  */
  OPTION_DLL,
  OPTION_FILE_ALIGNMENT,
  OPTION_IMAGE_BASE,
  OPTION_MAJOR_IMAGE_VERSION,
  OPTION_MAJOR_OS_VERSION,
  OPTION_MAJOR_SUBSYSTEM_VERSION,
  OPTION_MINOR_IMAGE_VERSION,
  OPTION_MINOR_OS_VERSION,
  OPTION_MINOR_SUBSYSTEM_VERSION,
  OPTION_SECTION_ALIGNMENT,
  OPTION_SUBSYSTEM,
  OPTION_HEAP,
  OPTION_SUPPORT_OLD_CODE,
  OPTION_OUT_DEF,
  OPTION_EXPORT_ALL,
  OPTION_EXCLUDE_SYMBOLS,
  OPTION_EXCLUDE_ALL_SYMBOLS,
  OPTION_KILL_ATS,
  OPTION_STDCALL_ALIASES,
  OPTION_ENABLE_STDCALL_FIXUP,
  OPTION_DISABLE_STDCALL_FIXUP,
  OPTION_WARN_DUPLICATE_EXPORTS,
  OPTION_IMP_COMPAT,
  OPTION_ENABLE_AUTO_IMAGE_BASE,
  OPTION_DISABLE_AUTO_IMAGE_BASE,
  OPTION_DLL_SEARCH_PREFIX,
  OPTION_NO_DEFAULT_EXCLUDES,
  OPTION_DLL_ENABLE_AUTO_IMPORT,
  OPTION_DLL_DISABLE_AUTO_IMPORT,
  OPTION_ENABLE_EXTRA_PE_DEBUG,
  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC,
  OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC,
  OPTION_LARGE_ADDRESS_AWARE,
  OPTION_DISABLE_LARGE_ADDRESS_AWARE,
  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1,
  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2,
  OPTION_EXCLUDE_MODULES_FOR_IMPLIB,
  OPTION_USE_NUL_PREFIXED_IMPORT_TABLES,
  OPTION_NO_LEADING_UNDERSCORE,
  OPTION_LEADING_UNDERSCORE,
  OPTION_ENABLE_LONG_SECTION_NAMES,
  OPTION_DISABLE_LONG_SECTION_NAMES,
  /* DLLCharacteristics flags.  */
  OPTION_DYNAMIC_BASE,
  OPTION_FORCE_INTEGRITY,
  OPTION_NX_COMPAT,
  OPTION_NO_ISOLATION,
  OPTION_NO_SEH,
  OPTION_NO_BIND,
  OPTION_WDM_DRIVER,
  OPTION_TERMINAL_SERVER_AWARE,
  /* Determinism.  */
  OPTION_INSERT_TIMESTAMP,
  OPTION_NO_INSERT_TIMESTAMP,
  OPTION_PDB,
  OPTION_ENABLE_RELOC_SECTION,
  OPTION_DISABLE_RELOC_SECTION,
  /* DLL Characteristics flags.  */
  OPTION_DISABLE_DYNAMIC_BASE,
  OPTION_DISABLE_FORCE_INTEGRITY,
  OPTION_DISABLE_NX_COMPAT,
  OPTION_DISABLE_NO_ISOLATION,
  OPTION_DISABLE_NO_SEH,
  OPTION_DISABLE_NO_BIND,
  OPTION_DISABLE_WDM_DRIVER,
  OPTION_DISABLE_TERMINAL_SERVER_AWARE,
  /* Used by emultempl/pep.em.  */
  OPTION_DISABLE_HIGH_ENTROPY_VA,
  OPTION_HIGH_ENTROPY_VA,
  /* Used by emultempl/ppc32elf.em.  */
  OPTION_NEW_PLT,
  OPTION_OLD_PLT,
  OPTION_OLD_GOT,
  OPTION_PPC476_WORKAROUND,
  OPTION_NO_PPC476_WORKAROUND,
  OPTION_NO_PICFIXUP,
  OPTION_VLE_RELOC_FIXUP,
  /* Used by emultempl/ppc64elf.em.  */
  OPTION_PLT_STATIC_CHAIN,
  OPTION_NO_PLT_STATIC_CHAIN,
  OPTION_PLT_THREAD_SAFE,
  OPTION_NO_PLT_THREAD_SAFE,
  OPTION_PLT_LOCALENTRY,
  OPTION_NO_PLT_LOCALENTRY,
  OPTION_POWER10_STUBS,
  OPTION_NO_POWER10_STUBS,
  OPTION_NO_PCREL_OPT,
  OPTION_SAVRES,
  OPTION_NO_SAVRES,
  OPTION_DOTSYMS,
  OPTION_NO_DOTSYMS,
  OPTION_TLS_GET_ADDR_OPT,
  OPTION_TLS_GET_ADDR_REGSAVE,
  OPTION_NO_TLS_GET_ADDR_REGSAVE,
  OPTION_NO_OPD_OPT,
  OPTION_NO_TOC_OPT,
  OPTION_NO_MULTI_TOC,
  OPTION_NO_TOC_SORT,
  OPTION_NON_OVERLAPPING_OPD,
  /* Used by emultempl/riscvelf.em.  */
  OPTION_RELAX_GP,
  OPTION_NO_RELAX_GP,
  OPTION_CHECK_ULEB128,
  OPTION_NO_CHECK_ULEB128,
  /* Used by emultempl/rxelf.em.  */
  OPTION_NO_FLAG_MISMATCH_WARNINGS,
  OPTION_IGNORE_LMA,
  OPTION_NO_IGNORE_LMA,
  OPTION_FLAG_MISMATCH_WARNINGS,
  /* Used by emultempl/s390.em.  */
  OPTION_PGSTE,
  /* Used by emultempl/spuelf.em.  */
  OPTION_SPU_PLUGIN,
  OPTION_SPU_NO_OVERLAYS,
  OPTION_SPU_COMPACT_STUBS,
  OPTION_SPU_STUB_SYMS,
  OPTION_SPU_NON_OVERLAY_STUBS,
  OPTION_SPU_LOCAL_STORE,
  OPTION_SPU_STACK_ANALYSIS,
  OPTION_SPU_STACK_SYMS,
  OPTION_SPU_AUTO_OVERLAY,
  OPTION_SPU_AUTO_RELINK,
  OPTION_SPU_OVERLAY_RODATA,
  OPTION_SPU_SOFT_ICACHE,
  OPTION_SPU_LINE_SIZE,
  OPTION_SPU_NUM_LINES,
  OPTION_SPU_LRLIVE,
  OPTION_SPU_NON_IA_TEXT,
  OPTION_SPU_FIXED_SPACE,
  OPTION_SPU_RESERVED_SPACE,
  OPTION_SPU_EXTRA_STACK,
  OPTION_SPU_NO_AUTO_OVERLAY,
  OPTION_SPU_EMIT_FIXUPS,
  /* Used by emultempl/tic6xdsbt.em.  */
  OPTION_DSBT_INDEX,
  OPTION_DSBT_SIZE,
  /* Used by emultempl/ticoff.em.  */
  OPTION_COFF_FORMAT,
  /* Used by emultempl/vms.em.  */
  OPTION_IDENTIFICATION,
  /* Used by emultempl/vxworks.em.  */
  OPTION_FORCE_DYNAMIC,
  /* Used by emultempl/xtensaelf.em.  */
  OPTION_OPT_SIZEOPT,
  OPTION_LITERAL_MOVEMENT,
  OPTION_NO_LITERAL_MOVEMENT,
  OPTION_ABI_WINDOWED,
  OPTION_ABI_CALL0,
};

/* The initial parser states.  */
typedef enum input_enum
{
  input_selected,		/* We've set the initial state.  */
  input_script,
  input_mri_script,
  input_version_script,
  input_section_ordering_script,
  input_dynamic_list,
  input_defsym
} input_type;

extern input_type parser_input;

extern unsigned int lineno;
extern const char *lex_string;

/* In ldlex.l.  */
extern int yylex (void);
extern void lex_push_file (FILE *, const char *, unsigned int);
extern void lex_redirect (const char *, const char *, unsigned int);
extern void ldlex_script (void);
extern void ldlex_inputlist (void);
extern void ldlex_mri_script (void);
extern void ldlex_version_script (void);
extern void ldlex_version_file (void);
extern void ldlex_expression (void);
extern void ldlex_wild (void);
extern void ldlex_popstate (void);
extern void ldlex_backup (void);
extern const char* ldlex_filename (void);

/* In lexsup.c.  */
extern int lex_input (void);
extern void lex_unput (int);
extern void parse_args (unsigned, char **);

#endif
