/* Definition of objfile flags.

   Copyright (C) 1992-2022 Free Software Foundation, Inc.

   This file is part of GDB.

   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, see <http://www.gnu.org/licenses/>.  */

#if !defined (OBJFILE_FLAGS_H)
#define OBJFILE_FLAGS_H

#include "gdbsupport/enum-flags.h"

/* Defines for the objfile flags field.  Defined in a separate file to
   break circular header dependencies.  */

enum objfile_flag : unsigned
  {
    /* When an object file has its functions reordered (currently
       Irix-5.2 shared libraries exhibit this behaviour), we will need
       an expensive algorithm to locate a partial symtab or symtab via
       an address.  To avoid this penalty for normal object files, we
       use this flag, whose setting is determined upon symbol table
       read in.  */
    OBJF_REORDERED = 1 << 0,	/* Functions are reordered */

    /* Distinguish between an objfile for a shared library and a
       "vanilla" objfile.  This may come from a target's
       implementation of the solib interface, from add-symbol-file, or
       any other mechanism that loads dynamic objects.  */
    OBJF_SHARED = 1 << 1,	/* From a shared library */

    /* User requested that this objfile be read in it's entirety.  */
    OBJF_READNOW = 1 << 2,	/* Immediate full read */

    /* This objfile was created because the user explicitly caused it
       (e.g., used the add-symbol-file command).  This bit offers a
       way for run_command to remove old objfile entries which are no
       longer valid (i.e., are associated with an old inferior), but
       to preserve ones that the user explicitly loaded via the
       add-symbol-file command.  */
    OBJF_USERLOADED = 1 << 3,	/* User loaded */

    /* Set if we have tried to read partial symtabs for this objfile.
       This is used to allow lazy reading of partial symtabs.  */
    OBJF_PSYMTABS_READ = 1 << 4,

    /* Set if this is the main symbol file (as opposed to symbol file
       for dynamically loaded code).  */
    OBJF_MAINLINE = 1 << 5,

    /* ORIGINAL_NAME and OBFD->FILENAME correspond to text description
       unrelated to filesystem names.  It can be for example
       "<image in memory>".  */
    OBJF_NOT_FILENAME = 1 << 6,

    /* User requested that we do not read this objfile's symbolic
       information.  */
    OBJF_READNEVER = 1 << 7,
  };

DEF_ENUM_FLAGS_TYPE (enum objfile_flag, objfile_flags);

#endif /* !defined (OBJFILE_FLAGS_H) */
