mirror of https://github.com/yasm/yasm.git
work properly. Changed Makefile.am, src/Makefile.am, and configure.in to match directory changes. svn path=/trunk/yasm/; revision=1200.3
parent
fa5c9d5ea9
commit
06cce4e4cd
13 changed files with 16 additions and 502 deletions
@ -1 +1,2 @@ |
||||
SUBDIRS = include src
|
||||
SUBDIRS = src
|
||||
EXTRA_DIST = config/install-sh config/missing config/mkinstalldirs
|
||||
|
@ -1,5 +0,0 @@ |
||||
.*.sw? |
||||
*.in |
||||
Makefile |
||||
stamp-h |
||||
config.h |
@ -1,8 +0,0 @@ |
||||
EXTRA_DIST = \
|
||||
bytecode.h \
|
||||
errwarn.h \
|
||||
expr.h \
|
||||
globals.h \
|
||||
section.h \
|
||||
symrec.h \
|
||||
util.h
|
@ -1,162 +0,0 @@ |
||||
/* $Id: bytecode.h,v 1.13 2001/07/11 04:07:10 peter Exp $
|
||||
* Bytecode utility functions header file |
||||
* |
||||
* Copyright (C) 2001 Peter Johnson |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_BYTECODE_H |
||||
#define YASM_BYTECODE_H |
||||
|
||||
typedef struct effaddr_s { |
||||
struct expr_s *disp; /* address displacement */ |
||||
unsigned char len; /* length of disp (in bytes), 0 if none */ |
||||
|
||||
unsigned char segment; /* segment override, 0 if none */ |
||||
|
||||
unsigned char modrm; |
||||
unsigned char valid_modrm; /* 1 if Mod/RM byte currently valid, 0 if not */ |
||||
unsigned char need_modrm; /* 1 if Mod/RM byte needed, 0 if not */ |
||||
|
||||
unsigned char sib; |
||||
unsigned char valid_sib; /* 1 if SIB byte currently valid, 0 if not */ |
||||
unsigned char need_sib; /* 1 if SIB byte needed, 0 if not */ |
||||
} effaddr; |
||||
|
||||
typedef struct immval_s { |
||||
struct expr_s *val; |
||||
|
||||
unsigned char len; /* length of val (in bytes), 0 if none */ |
||||
unsigned char isneg; /* the value has been explicitly negated */ |
||||
|
||||
unsigned char f_len; /* final imm length */ |
||||
unsigned char f_sign; /* 1 if final imm should be signed */ |
||||
} immval; |
||||
|
||||
typedef enum jmprel_opcode_sel_e { |
||||
JR_NONE, |
||||
JR_SHORT, |
||||
JR_NEAR, |
||||
JR_SHORT_FORCED, |
||||
JR_NEAR_FORCED |
||||
} jmprel_opcode_sel; |
||||
|
||||
typedef struct targetval_s { |
||||
struct expr_s *val; |
||||
|
||||
jmprel_opcode_sel op_sel; |
||||
} targetval; |
||||
|
||||
typedef struct bytecode_s { |
||||
struct bytecode_s *next; |
||||
|
||||
enum { BC_INSN, BC_JMPREL, BC_DATA, BC_RESERVE } type; |
||||
|
||||
union { |
||||
struct { |
||||
effaddr ea; /* effective address */ |
||||
|
||||
immval imm; /* immediate or relative value */ |
||||
|
||||
unsigned char opcode[3]; /* opcode */ |
||||
unsigned char opcode_len; |
||||
|
||||
unsigned char addrsize; /* 0 indicates no override */ |
||||
unsigned char opersize; /* 0 indicates no override */ |
||||
unsigned char lockrep_pre; /* 0 indicates no prefix */ |
||||
} insn; |
||||
struct { |
||||
struct expr_s *target; /* target location */ |
||||
|
||||
struct { |
||||
unsigned char opcode[3]; |
||||
unsigned char opcode_len; |
||||
unsigned char valid; /* does the opcode exist? */ |
||||
} shortop, nearop; |
||||
|
||||
/* which opcode are we using? */ |
||||
/* The *FORCED forms are specified in the source as such */ |
||||
jmprel_opcode_sel op_sel; |
||||
|
||||
unsigned char addrsize; /* 0 indicates no override */ |
||||
unsigned char opersize; /* 0 indicates no override */ |
||||
unsigned char lockrep_pre; /* 0 indicates no prefix */ |
||||
} jmprel; |
||||
struct { |
||||
unsigned char *data; |
||||
} data; |
||||
} data; |
||||
|
||||
unsigned long len; /* total length of entire bytecode */ |
||||
|
||||
/* where it came from */ |
||||
char *filename; |
||||
unsigned int lineno; |
||||
|
||||
/* other assembler state info */ |
||||
unsigned long offset; |
||||
unsigned int mode_bits; |
||||
} bytecode; |
||||
|
||||
effaddr *ConvertIntToEA(effaddr *ptr, unsigned long int_val); |
||||
effaddr *ConvertRegToEA(effaddr *ptr, unsigned long reg); |
||||
effaddr *ConvertImmToEA(effaddr *ptr, immval *im_ptr, unsigned char im_len); |
||||
effaddr *ConvertExprToEA(effaddr *ptr, struct expr_s *expr_ptr); |
||||
|
||||
immval *ConvertIntToImm(immval *ptr, unsigned long int_val); |
||||
immval *ConvertExprToImm(immval *ptr, struct expr_s *expr_ptr); |
||||
|
||||
void SetEASegment(effaddr *ptr, unsigned char segment); |
||||
void SetEALen(effaddr *ptr, unsigned char len); |
||||
|
||||
void SetInsnOperSizeOverride(bytecode *bc, unsigned char opersize); |
||||
void SetInsnAddrSizeOverride(bytecode *bc, unsigned char addrsize); |
||||
void SetInsnLockRepPrefix(bytecode *bc, unsigned char prefix); |
||||
|
||||
void SetOpcodeSel(jmprel_opcode_sel *old_sel, jmprel_opcode_sel new_sel); |
||||
|
||||
void BuildBC_Insn(bytecode *bc, |
||||
unsigned char opersize, |
||||
unsigned char opcode_len, |
||||
unsigned char op0, |
||||
unsigned char op1, |
||||
unsigned char op2, |
||||
effaddr *ea_ptr, |
||||
unsigned char spare, |
||||
immval *im_ptr, |
||||
unsigned char im_len, |
||||
unsigned char im_sign); |
||||
|
||||
void BuildBC_JmpRel(bytecode *bc, |
||||
targetval *target, |
||||
unsigned char short_valid, |
||||
unsigned char short_opcode_len, |
||||
unsigned char short_op0, |
||||
unsigned char short_op1, |
||||
unsigned char short_op2, |
||||
unsigned char near_valid, |
||||
unsigned char near_opcode_len, |
||||
unsigned char near_op0, |
||||
unsigned char near_op1, |
||||
unsigned char near_op2, |
||||
unsigned char addrsize); |
||||
|
||||
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len); |
||||
|
||||
void DebugPrintBC(bytecode *bc); |
||||
|
||||
#endif |
@ -1,66 +0,0 @@ |
||||
/* $Id: errwarn.h,v 1.9 2001/07/11 04:07:10 peter Exp $
|
||||
* Error and warning reporting and related functions header file. |
||||
* |
||||
* Copyright (C) 2001 Peter Johnson |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_ERRWARN_H |
||||
#define YASM_ERRWARN_H |
||||
|
||||
char *conv_unprint(char ch); |
||||
|
||||
typedef enum { |
||||
FATAL_UNKNOWN = 0, |
||||
FATAL_NOMEM |
||||
} fatal_num; |
||||
|
||||
void InternalError(unsigned int line, char *file, char *message); |
||||
void Fatal(fatal_num); |
||||
|
||||
typedef enum { |
||||
ERR_NONE = 0, |
||||
ERR_PARSER, |
||||
ERR_MISSING, |
||||
ERR_MISSING_ARG, |
||||
ERR_INVALID_ARG, |
||||
ERR_INVALID_EA, |
||||
ERR_INVALID_LINE, |
||||
ERR_EXP_SYNTAX, |
||||
ERR_DUPLICATE_DEF, |
||||
ERR_OP_SIZE_MISMATCH, |
||||
ERR_NO_JMPREL_FORM |
||||
} err_num; |
||||
|
||||
void Error(err_num, char *, ...); |
||||
|
||||
typedef enum { |
||||
WARN_NONE = 0, |
||||
WARN_UNREC_CHAR, |
||||
WARN_VALUE_EXCEEDS_BOUNDS, |
||||
WARN_MULT_SEG_OVERRIDE, |
||||
WARN_MULT_LOCKREP_PREFIX, |
||||
WARN_NO_BASE_LABEL, |
||||
WARN_MULT_SHORTNEAR |
||||
} warn_num; |
||||
|
||||
void Warning(warn_num, char *, ...); |
||||
|
||||
void OutputError(void); |
||||
void OutputWarning(void); |
||||
|
||||
#endif |
@ -1,89 +0,0 @@ |
||||
/* $Id: expr.h,v 1.3 2001/07/05 09:32:58 mu Exp $
|
||||
* Expression handling header file |
||||
* |
||||
* Copyright (C) 2001 Michael Urman |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef _EXPR_H_ |
||||
#define _EXPR_H_ |
||||
|
||||
typedef enum { |
||||
EXPR_ADD, |
||||
EXPR_SUB, |
||||
EXPR_MUL, |
||||
EXPR_DIV, |
||||
EXPR_MOD, |
||||
EXPR_NEG, |
||||
EXPR_NOT, |
||||
EXPR_OR, |
||||
EXPR_AND, |
||||
EXPR_XOR, |
||||
EXPR_SHL, |
||||
EXPR_SHR, |
||||
EXPR_LOR, |
||||
EXPR_LAND, |
||||
EXPR_LNOT, |
||||
EXPR_LT, |
||||
EXPR_GT, |
||||
EXPR_EQ, |
||||
EXPR_LE, |
||||
EXPR_GE, |
||||
EXPR_NE, |
||||
EXPR_IDENT /* if right is IDENT, then the entire expr is just a num */ |
||||
} ExprOp; |
||||
|
||||
typedef enum { |
||||
EXPR_NONE, /* for left side of a NOT, NEG, etc. */ |
||||
EXPR_NUM, |
||||
EXPR_EXPR, |
||||
EXPR_SYM |
||||
} ExprType; |
||||
|
||||
typedef union expritem_u { |
||||
struct symrec_s *sym; |
||||
struct expr_s *expr; |
||||
unsigned long num; |
||||
} ExprItem; |
||||
|
||||
typedef struct expr_s { |
||||
ExprType ltype, rtype; |
||||
ExprItem left, right; |
||||
ExprOp op; |
||||
} expr; |
||||
|
||||
expr *expr_new (ExprType, ExprItem, ExprOp, ExprType, ExprItem); |
||||
|
||||
ExprItem ExprSym (struct symrec_s *); |
||||
ExprItem ExprExpr (expr *); |
||||
ExprItem ExprNum (unsigned long); |
||||
ExprItem ExprNone (); |
||||
|
||||
#define expr_new_tree(l,o,r) \ |
||||
expr_new (EXPR_EXPR, ExprExpr(l), (o), EXPR_EXPR, ExprExpr(r)) |
||||
#define expr_new_branch(o,r) \ |
||||
expr_new (EXPR_NONE, ExprNone(), (o), EXPR_EXPR, ExprExpr(r)) |
||||
#define expr_new_ident(t,r) \ |
||||
expr_new (EXPR_NONE, ExprNone(), EXPR_IDENT, (ExprType)(t), (r)) |
||||
|
||||
int expr_simplify (expr *); |
||||
void expr_print (expr *); |
||||
|
||||
/* get the value if possible. return value is IF POSSIBLE, not the val */ |
||||
int expr_get_value (expr *, unsigned long *); |
||||
|
||||
#endif |
@ -1,29 +0,0 @@ |
||||
/* $Id: globals.h,v 1.3 2001/06/28 21:22:01 peter Exp $
|
||||
* Globals header file |
||||
* |
||||
* Copyright (C) 2001 Peter Johnson |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_GLOBALS_H |
||||
#define YASM_GLOBALS_H |
||||
|
||||
extern unsigned int line_number; |
||||
extern unsigned int mode_bits; |
||||
extern struct symrec_s *locallabel_base; |
||||
|
||||
#endif |
@ -1,40 +0,0 @@ |
||||
/* $Id: section.h,v 1.2 2001/06/28 21:22:01 peter Exp $
|
||||
* Section header file |
||||
* |
||||
* Copyright (C) 2001 Peter Johnson |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_SECTION_H |
||||
#define YASM_SECTION_H |
||||
|
||||
typedef struct section_s { |
||||
struct section_s *next; |
||||
|
||||
enum type { SECTION, ABSOLUTE }; |
||||
|
||||
union { |
||||
/* SECTION data */ |
||||
char *name; |
||||
/* ABSOLUTE data */ |
||||
unsigned long start; |
||||
} data; |
||||
|
||||
bytecode *bc; /* the bytecodes for the section's contents */ |
||||
} section; |
||||
|
||||
#endif |
@ -1,60 +0,0 @@ |
||||
/* $Id: symrec.h,v 1.4 2001/06/28 21:22:01 peter Exp $
|
||||
* Symbol table handling header file |
||||
* |
||||
* Copyright (C) 2001 Michael Urman |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_SYMREC_H |
||||
#define YASM_SYMREC_H |
||||
|
||||
typedef enum { |
||||
SYM_NOSTATUS = 0, |
||||
SYM_USED = 1 << 0, /* for using variables before declared */ |
||||
SYM_DECLARED = 1 << 1, /* once it's been declared */ |
||||
SYM_VALUED = 1 << 2 /* once its value has been determined */ |
||||
} SymStatus; |
||||
|
||||
typedef enum { |
||||
SYM_CONSTANT, /* for EQU defined symbols */ |
||||
SYM_LABEL, /* for labels */ |
||||
SYM_DATA /* for variables */ |
||||
} SymType; |
||||
|
||||
typedef struct symrec_s { |
||||
char *name; |
||||
SymType type; |
||||
SymStatus status; |
||||
int line; |
||||
double value; |
||||
} symrec; |
||||
|
||||
typedef struct symtab_s { |
||||
symrec rec; |
||||
struct symtab_s *next; |
||||
} symtab; |
||||
|
||||
extern symtab *sym_table; |
||||
|
||||
/*symrec *putsym(char *, SymType);*/ |
||||
/*symrec *getsym(char *);*/ |
||||
|
||||
symrec *sym_use_get (char *, SymType); |
||||
symrec *sym_def_get (char *, SymType); |
||||
void sym_foreach (int(*)(symrec *)); |
||||
|
||||
#endif |
@ -1,37 +0,0 @@ |
||||
/* $Id: util.h,v 1.4 2001/06/29 02:11:36 peter Exp $
|
||||
* Defines prototypes for replacement functions if needed. |
||||
* |
||||
* Copyright (C) 2001 Peter Johnson |
||||
* |
||||
* This file is part of YASM. |
||||
* |
||||
* YASM 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 2 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* YASM 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
*/ |
||||
#ifndef YASM_UTIL_H |
||||
#define YASM_UTIL_H |
||||
|
||||
#ifndef HAVE_STRDUP |
||||
char *strdup(const char *str); |
||||
#endif |
||||
|
||||
#ifndef HAVE_STRTOUL |
||||
unsigned long strtoul(const char *nptr, char **endptr, int base); |
||||
#endif |
||||
|
||||
#ifndef HAVE_TOASCII |
||||
# define toascii(c) ((c) & 0x7F) |
||||
#endif |
||||
|
||||
#endif |
Loading…
Reference in new issue