link.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 192 行

H
192
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/



typedef unsigned long linkflag;

#define DWARF_DBI_FLAG  0x00000001UL    // set if making DWARF debug info
#define STK_SIZE_FLAG   0x00000002UL
#define GOT_CHGD_FILES  0x00000004UL
#define TRACE_FLAG      0x00000008UL
#define __UNUSED_FLAG_0 0x00000010UL
#define CV_DBI_FLAG     0x00000020UL
#define UNDEFS_ARE_OK   0x00000040UL
#define REDEFS_OK       0x00000080UL
#define QUIET_FLAG      0x00000100UL
#define PACKCODE_FLAG   0x00000200UL    // set if packcode specified
#define VF_REMOVAL      0x00000400UL
#define NOVELL_DBI_FLAG 0x00000800UL    // set if generating novell debug info
#define PACKDATA_FLAG   0x00001000UL
#define CASE_FLAG       0x00002000UL    // set for case sensitive operation
#define OLD_DBI_FLAG    0x00004000UL    // set if making WATCOM debug info
#define SHOW_DEAD       0x00008000UL
#define STRIP_CODE      0x00010000UL    // strip dead code.
#define CVPACK_FLAG     0x00020000UL
#define MAX_ERRORS_FLAG 0x00040000UL    // there is a max. number of errors.
#define DONT_UNMANGLE   0x00080000UL    // don't unmangle the names
#define INC_LINK_FLAG   0x00100000UL
#define NOCACHE_FLAG    0x00200000UL
#define CACHE_FLAG      0x00400000UL
#define FAR_CALLS_FLAG  0x00800000UL    // optimize far calls
#define __UNUSED_FLAG_8 0x01000000UL
#define __UNUSED_FLAG_7 0x02000000UL
#define __UNUSED_FLAG_6 0x04000000UL
#define __UNUSED_FLAG_5 0x08000000UL
#define __UNUSED_FLAG_4 0x10000000UL
#define __UNUSED_FLAG_3 0x20000000UL
#define __UNUSED_FLAG_2 0x40000000UL
#define __UNUSED_FLAG_1 0x80000000UL

// Novell treated differently, as it can be generated at the same time as the
// others.

#define ANY_DBI_FLAG    (DWARF_DBI_FLAG | CV_DBI_FLAG | OLD_DBI_FLAG)

typedef enum mapflag {
    MAP_FLAG            = 0x0001,
    MAP_STATICS         = 0x0002,       // put statics in the map file
    MAP_ARTIFICIAL      = 0x0004,       // put artificial syms in the map file
    MAP_SORT            = 0x0008,       // sort symbols in the map file
    MAP_ALPHA           = 0x0010,       // sort symbols in alphabetical order
    MAP_GLOBAL          = 0x0020,       // sort symbols globally.
    MAP_VERBOSE         = 0x0040
} mapflag;

typedef unsigned long stateflag;

#define MAKE_RELOCS             0x00000001
#define SEARCHING_LIBRARIES     0x00000002
#define LIBRARIES_ADDED         0x00000004
#define LINK_ERROR              0x00000008
//#define RUNNING_OS2_FLAG        0x00000010       // set if running under OS/2
#define FMT_SPECIFIED           0x00000020
#define FMT_DECIDED             0x00000040
#define FMT_SEEN_32_BIT         0x00000080
#define FMT_SEEN_IMPORT_CMT     0x00000100
#define PROC_LIBS_ADDED         0x00000200
#define FMT_INITIALIZED         0x00000400
#define SEEN_32BIT_DBI          0x00000800
#define UNDEFED_SYM_ERROR       0x00001000
#define HAVE_16BIT_CODE         0x00002000      // TRUE if we have 16 bit code.
#define SEEN_16BIT_DBI          0x00004000
#define GENERATE_LIB_LIST       0x00008000
#define HAVE_ALPHA_CODE         0x00010000
#define HAVE_PPC_CODE           0x00020000
#define HAVE_I86_CODE           0x00040000
#define CAN_REMOVE_SEGMENTS     0x00080000
#define STOP_WORKING            0x00100000      // IDE wants us to stop now
#define INTERNAL_DEBUG          0x00200000
#define GOT_PREV_STRUCTS        0x00400000
#define DOSSEG_FLAG             0x00800000
#define HAVE_MIPS_CODE          0x01000000

#define HAVE_MACHTYPE_MASK      (HAVE_I86_CODE | HAVE_ALPHA_CODE | HAVE_PPC_CODE | HAVE_MIPS_CODE)
//#define CLEAR_ON_INC    (STOP_WORKING | INTERNAL_DEBUG | GOT_PREV_STRUCTS | MAKE_RELOCS | RUNNING_OS2_FLAG | FMT_SPECIFIED | FMT_DECIDED | FMT_INITIALIZED)
#define CLEAR_ON_INC    (STOP_WORKING | INTERNAL_DEBUG | GOT_PREV_STRUCTS | MAKE_RELOCS | FMT_SPECIFIED | FMT_DECIDED | FMT_INITIALIZED)

// this used for ID splits.

#define CODE_SEGMENT    1
#define DATA_SEGMENT    2

/*  Object file formats & flags */
typedef enum obj_format {
    FMT_EASY_OMF        = 0x0001,
    FMT_MS_386          = 0x0002,
    FMT_UNUSED_3        = 0x0004,
    FMT_IS_LIDATA       = 0x0008,   // true if last data was lidata
    FMT_TOLD_XXBIT      = 0x0010,   // already said object was xx-bit
    FMT_IGNORE_FIXUPP   = 0x0020,   // don't process a fixup record
    FMT_UNSAFE_FIXUPP   = 0x0040,   // don't optimize calls in current fixupp
    FMT_UNUSED_1        = 0x0080,
    FMT_PE_XFER         = 0x0000,   // .obj is PE xfer code segment(see note)
    FMT_OMF             = 0x0100,   // .obj is an OMF object file (see note)
    FMT_COFF            = 0x0200,   // .obj is a COFF object file (see note)
    FMT_ELF             = 0x0300,   // .obj is an ELF object file (see note)
    FMT_INCREMENTAL     = 0x0400,   // .obj is saved inc. linking info
    FMT_OBJ_FMT_MASK    = 0x0700,
    FMT_UNUSED_2        = 0x0800,
    FMT_DEBUG_COMENT    = 0x1000,   // saw an object debug coment.
} obj_format;

/* NOTE:  these are also stored into the
 * mod_entry->modinfo field, so if new object file formats are added, make
 * sure there isn't a conflict there!
*/

#define FMT_32BIT_REC           (FMT_EASY_OMF | FMT_MS_386)
#define FMT_IDX_SHIFT           8
#define FMT_IDX_BITS            (FMT_OBJ_FMT_MASK >> FMT_IDX_SHIFT)
#define GET_FMT_IDX(x)          (((x) >> FMT_IDX_SHIFT) & FMT_IDX_BITS)
#define IS_FMT_ORL(x)           (((x) & FMT_OBJ_FMT_MASK) >= FMT_COFF)
#define IS_FMT_OMF(x)           (((x) & FMT_OBJ_FMT_MASK) == FMT_OMF)
#define IS_FMT_ELF(x)           (((x) & FMT_OBJ_FMT_MASK) == FMT_ELF)
#define IS_FMT_COFF(x)          (((x) & FMT_OBJ_FMT_MASK) == FMT_COFF)
#define IS_FMT_INCREMENTAL(x)   (((x) & FMT_OBJ_FMT_MASK) == FMT_INCREMENTAL)
#define SET_FMT_TYPE(x,type)    (((x) = (x) & ~FMT_OBJ_FMT_MASK) | (type))

/*  File Extension formats */
// this corresponds to a table of strings in CMDUTILS.
enum {
    E_COMMAND,
    E_MAP,
    E_LIBRARY,
    E_OBJECT,
    E_LOAD,
    E_OVL,
    E_DLL,
    E_PROTECT,
    E_NLM,
    E_LAN,
    E_DSK,
    E_NAM,
    E_NOV_MSL,
    E_NOV_HAM,
    E_NOV_CDM,
    E_COM,
    E_REX,
    E_QNX,
    E_SYM,
    E_LBC,
    E_ELF,
    E_ILK,
    E_HEX,
    E_BIN
};


/*  Generic constants */
enum {
    MAX_REC             = 1024,
    UNDEFINED           = 0xffff,   /* undefined segment */
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?