objrec.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 417 行 · 第 1/2 页
H
417 行
/****************************************************************************
*
* 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: OMF record definitions.
*
****************************************************************************/
#ifndef OBJREC_H
#define OBJREC_H 1
typedef struct obj_rec obj_rec;
typedef struct linnum_data linnum_data;
typedef struct pubdef_data pubdef_data;
#include "watcom.h"
#include "pcobj.h"
#if _WOMP_OPT & _WOMP_WOMP
#include "cansymb.h"
#endif
#if ( _WOMP_OPT & _WOMP_WATFOR ) == 0
#include "fixup.h"
#include "namemgr.h"
#endif
#pragma pack( push, 1 )
struct coment_info {
uint_8 attr; /* attribute field from coment record */
uint_8 class; /* class field from coment record */
};
/*
A COMENT record is created by filling in the above fields, and attaching
any appropriate data with the Obj...() functions below.
*/
struct modend_info {
uint_8 main_module :1; /* module is a main module */
#if ( _WOMP_OPT & _WOMP_WATFOR ) == 0
uint_8 start_addrs :1; /* module has start address */
uint_8 is_logical :1; /* is logical or physical reference */
logphys ref; /* a logical or physical reference */
#endif
};
/*
A MODEND is described completely by the above information; no data
should be attached to a MODEND.
*/
struct lnames_info {
uint_16 first_idx; /* index of first name in this record */
uint_16 num_names; /* number of names in this record */
};
/*
LNAMES, EXTDEFs, and COMDEFs all use this structure. The actual
LNAMES/etc are in the data attached to the record.
*/
struct grpdef_info {
uint_16 idx; /* index of this grpdef record */
};
/*
The data that defines the GRPDEF should be attached to this record.
*/
enum segdef_align_values {
SEGDEF_ALIGN_ABS = 0,/* absolute segment - no alignment */
SEGDEF_ALIGN_BYTE = 1,/* relocatable seg - byte aligned */
SEGDEF_ALIGN_WORD = 2,/* - word aligned */
SEGDEF_ALIGN_PARA = 3,/* - para aligned */
SEGDEF_ALIGN_PAGE = 4,/* - page aligned */
SEGDEF_ALIGN_DWORD = 5,/* - dword aligned */
SEGDEF_ALIGN_4KPAGE = 6 /* - 4k page aligned */
/* if more than 16 types then adjust bitfield width in segdef_info */
};
struct segdef_info {
uint_16 idx; /* index for this segment */
uint_8 align :4; /* align field (enum segdef_align_values) */
uint_8 combine :4; /* combine field (values in pcobj.h) */
#if ( _WOMP_OPT & _WOMP_WATFOR ) == 0
uint_8 use_32 :1; /* use_32 for this segment */
uint_8 access_valid:1; /* does next field have valid value */
uint_8 access_attr :2; /* easy omf access attributes (see pcobj.h) */
physref abs; /* (conditional) absolute physical reference*/
#endif
uint_32 seg_length; /* length of this segment */
uint_16 seg_name_idx; /* name index of this segment */
uint_16 class_name_idx; /* class name index of this segment */
#if ( _WOMP_OPT & _WOMP_WATFOR ) == 0
uint_16 ovl_name_idx; /* overlay name index of this segment */
#endif
};
/*
All data necessary for a SEGDEF is defined in the above structure. No
data should be attached to the record.
*/
struct ledata_info {
uint_16 idx; /* index of segment the data belongs to */
uint_32 offset; /* offset into segment of start of data */
#if _WOMP_OPT & _WOMP_WATFOR
void *fixup; /* ptr to linked list of fixups */
unsigned_8 num; /* number of fixups */
#endif
};
/*
LEDATAs and LIDATAs both use this structure. The data that comprises the
record should be attached.
*/
struct base_info {
uint_16 grp_idx; /* index of the group base */
uint_16 seg_idx; /* index of the segment */
uint_16 frame; /* valid if grp_idx == 0 && seg_idx == 0 */
}; /* appears at beginning of appropriate recs */
/*
This appears at the beginning of LINNUMs and PUBDEFs. (see the
appropriate structures.
*/
#if ( _WOMP_OPT & _WOMP_WATFOR ) == 0
struct comdat_info {
struct base_info base;
uint_8 flags;
uint_8 attributes;
uint_8 align;
uint_32 offset;
uint_16 type_idx;
uint_16 public_name_idx;
};
/*
The data the comprises the record should be attached.
*/
struct fixup_info {
obj_rec *data_rec; /* ptr to the data record this belongs to */
fixup *fixup; /* linked list of processed fixups */
};
/*
No data should be attached to these records; all information is in
the linked list of fixup records.
*/
struct linnum_info {
union {
struct base_info base;/* base information */
struct {
uint_8 flags; /* for LINSYM records */
uint_16 public_name_idx; /* for LINSYM records */
} linsym;
} d;
uint_16 num_lines; /* number of elements in following array */
struct linnum_data {
uint_16 number; /* line number in source file */
uint_32 offset; /* offset into segment */
} *lines; /* array of size num_lines */
};
/*
No data should be attached to these records. All necessary information
is in the lines array.
*/
struct pubdef_info {
struct base_info base; /* base information */
uint_16 num_pubs; /* number of publics in following array */
struct pubdef_data {
name_handle name; /* name of this public */
uint_32 offset; /* public offset */
union { /* see PUBDEF.h for more information */
uint_16 idx;/* Intel OMF type index */
#if _WOMP_OPT & _WOMP_WOMP
symb_handle hdl;/* internal symbol handle... */
#endif
} type;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?