summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--labels.c29
-rw-r--r--labels.h11
-rw-r--r--nasm.c24
-rw-r--r--nasm.h6
-rw-r--r--output/outaout.c15
-rw-r--r--output/outbin.c6
-rw-r--r--output/outcoff.c3
-rw-r--r--output/outelf32.c18
-rw-r--r--output/outelf64.c18
-rw-r--r--output/outieee.c5
-rw-r--r--output/outmacho64.c14
-rw-r--r--output/outobj.c13
-rw-r--r--parser.c6
-rw-r--r--parser.h2
14 files changed, 66 insertions, 104 deletions
diff --git a/labels.c b/labels.c
index 7e7b7f3..8c850c3 100644
--- a/labels.c
+++ b/labels.c
@@ -206,8 +206,7 @@ bool is_extern(char *label)
}
void redefine_label(char *label, int32_t segment, int64_t offset, char *special,
- bool is_norm, bool isextrn, struct ofmt *ofmt,
- efunc error)
+ bool is_norm, bool isextrn)
{
union label *lptr;
int exi;
@@ -220,19 +219,18 @@ void redefine_label(char *label, int32_t segment, int64_t offset, char *special,
(void)special; /* Don't warn that this parameter is unused */
(void)is_norm; /* Don't warn that this parameter is unused */
(void)isextrn; /* Don't warn that this parameter is unused */
- (void)ofmt; /* Don't warn that this parameter is unused */
#ifdef DEBUG
#if DEBUG<3
if (!strncmp(label, "debugdump", 9))
#endif
- error(ERR_DEBUG, "redefine_label (%s, %ld, %08lx, %s, %d, %d)",
+ nasm_error(ERR_DEBUG, "redefine_label (%s, %ld, %08lx, %s, %d, %d)",
label, segment, offset, special, is_norm, isextrn);
#endif
lptr = find_label(label, 1);
if (!lptr)
- error(ERR_PANIC, "can't find label `%s' on pass two", label);
+ nasm_error(ERR_PANIC, "can't find label `%s' on pass two", label);
if (!islocal(label)) {
if (!islocalchar(*label) && lptr->defn.is_norm)
@@ -281,7 +279,7 @@ void redefine_label(char *label, int32_t segment, int64_t offset, char *special,
}
void define_label(char *label, int32_t segment, int64_t offset, char *special,
- bool is_norm, bool isextrn, struct ofmt *ofmt, efunc error)
+ bool is_norm, bool isextrn)
{
union label *lptr;
int exi;
@@ -290,12 +288,12 @@ void define_label(char *label, int32_t segment, int64_t offset, char *special,
#if DEBUG<3
if (!strncmp(label, "debugdump", 9))
#endif
- error(ERR_DEBUG, "define_label (%s, %ld, %08lx, %s, %d, %d)",
+ nasm_error(ERR_DEBUG, "define_label (%s, %ld, %08lx, %s, %d, %d)",
label, segment, offset, special, is_norm, isextrn);
#endif
lptr = find_label(label, 1);
if (lptr->defn.is_global & DEFINED_BIT) {
- error(ERR_NONFATAL, "symbol `%s' redefined", label);
+ nasm_error(ERR_NONFATAL, "symbol `%s' redefined", label);
return;
}
lptr->defn.is_global |= DEFINED_BIT;
@@ -306,7 +304,7 @@ void define_label(char *label, int32_t segment, int64_t offset, char *special,
/* not local, but not special either */
prevlabel = lptr->defn.label;
} else if (islocal(label) && !*prevlabel) {
- error(ERR_NONFATAL, "attempt to define a local label before any"
+ nasm_error(ERR_NONFATAL, "attempt to define a local label before any"
" non-local labels");
}
@@ -348,15 +346,14 @@ void define_label(char *label, int32_t segment, int64_t offset, char *special,
} /* if (pass0 == 1) */
}
-void define_common(char *label, int32_t segment, int32_t size, char *special,
- struct ofmt *ofmt, efunc error)
+void define_common(char *label, int32_t segment, int32_t size, char *special)
{
union label *lptr;
lptr = find_label(label, 1);
if ((lptr->defn.is_global & DEFINED_BIT) &&
(passn == 1 || !(lptr->defn.is_global & COMMON_BIT))) {
- error(ERR_NONFATAL, "symbol `%s' redefined", label);
+ nasm_error(ERR_NONFATAL, "symbol `%s' redefined", label);
return;
}
lptr->defn.is_global |= DEFINED_BIT|COMMON_BIT;
@@ -364,7 +361,7 @@ void define_common(char *label, int32_t segment, int32_t size, char *special,
if (!islocalchar(label[0])) {
prevlabel = lptr->defn.label;
} else {
- error(ERR_NONFATAL, "attempt to define a local label as a "
+ nasm_error(ERR_NONFATAL, "attempt to define a local label as a "
"common variable");
return;
}
@@ -382,12 +379,12 @@ void define_common(char *label, int32_t segment, int32_t size, char *special,
special);
}
-void declare_as_global(char *label, char *special, efunc error)
+void declare_as_global(char *label, char *special)
{
union label *lptr;
if (islocal(label)) {
- error(ERR_NONFATAL, "attempt to declare local symbol `%s' as"
+ nasm_error(ERR_NONFATAL, "attempt to declare local symbol `%s' as"
" global", label);
return;
}
@@ -402,7 +399,7 @@ void declare_as_global(char *label, char *special, efunc error)
break;
case LOCAL_SYMBOL:
if (!(lptr->defn.is_global & EXTERN_BIT)) {
- error(ERR_WARNING, "symbol `%s': GLOBAL directive "
+ nasm_error(ERR_WARNING, "symbol `%s': GLOBAL directive "
"after symbol definition is an experimental feature", label);
lptr->defn.is_global = GLOBAL_SYMBOL;
}
diff --git a/labels.h b/labels.h
index 59e83ba..865a557 100644
--- a/labels.h
+++ b/labels.h
@@ -44,14 +44,11 @@ extern char lpostfix[PREFIX_MAX];
bool lookup_label(char *label, int32_t *segment, int64_t *offset);
bool is_extern(char *label);
void define_label(char *label, int32_t segment, int64_t offset, char *special,
- bool is_norm, bool isextrn, struct ofmt *ofmt,
- efunc error);
+ bool is_norm, bool isextrn);
void redefine_label(char *label, int32_t segment, int64_t offset, char *special,
- bool is_norm, bool isextrn, struct ofmt *ofmt,
- efunc error);
-void define_common(char *label, int32_t segment, int32_t size, char *special,
- struct ofmt *ofmt, efunc error);
-void declare_as_global(char *label, char *special, efunc error);
+ bool is_norm, bool isextrn);
+void define_common(char *label, int32_t segment, int32_t size, char *special);
+void declare_as_global(char *label, char *special);
int init_labels(void);
void cleanup_labels(void);
char *local_scope(char *label);
diff --git a/nasm.c b/nasm.c
index 7bcdc5a..d6db557 100644
--- a/nasm.c
+++ b/nasm.c
@@ -348,7 +348,7 @@ int main(int argc, char **argv)
if (ofmt->stdmac)
pp_extra_stdmac(ofmt->stdmac);
- parser_global_info(ofmt, &location);
+ parser_global_info(&location);
eval_global_info(ofmt, lookup_label, &location);
/* define some macros dependent of command-line */
@@ -1265,10 +1265,9 @@ static void assemble_file(char *fname, StrList **depend_ptr)
if (!is_extern(value)) { /* allow re-EXTERN to be ignored */
int temp = pass0;
pass0 = 1; /* fake pass 1 in labels.c */
- declare_as_global(value, special,
- nasm_error);
+ declare_as_global(value, special);
define_label(value, seg_alloc(), 0L, NULL,
- false, true, ofmt, nasm_error);
+ false, true);
pass0 = temp;
}
} /* else pass0 == 1 */
@@ -1307,7 +1306,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
special = q;
} else
special = NULL;
- declare_as_global(value, special, nasm_error);
+ declare_as_global(value, special);
} /* pass == 1 */
break;
case D_COMMON: /* [COMMON symbol size:special] */
@@ -1357,8 +1356,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
}
if (pass0 < 2) {
- define_common(value, seg_alloc(), size,
- special, ofmt, nasm_error);
+ define_common(value, seg_alloc(), size, special);
} else if (pass0 == 2) {
if (special)
ofmt->symdef(value, 0L, 0L, 3, special);
@@ -1554,8 +1552,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
def_label(output_ins.label,
output_ins.oprs[0].segment,
output_ins.oprs[0].offset, NULL,
- false, isext, ofmt,
- nasm_error);
+ false, isext);
} else if (output_ins.operands == 2
&& (output_ins.oprs[0].type & IMMEDIATE)
&& (output_ins.oprs[0].type & COLON)
@@ -1567,8 +1564,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
def_label(output_ins.label,
output_ins.oprs[0].offset | SEG_ABS,
output_ins.oprs[1].offset,
- NULL, false, false, ofmt,
- nasm_error);
+ NULL, false, false);
} else
nasm_error(ERR_NONFATAL,
"bad syntax for EQU");
@@ -1586,8 +1582,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
define_label(output_ins.label,
output_ins.oprs[0].segment,
output_ins.oprs[0].offset,
- NULL, false, false, ofmt,
- nasm_error);
+ NULL, false, false);
} else if (output_ins.operands == 2
&& (output_ins.oprs[0].
type & IMMEDIATE)
@@ -1602,8 +1597,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
output_ins.oprs[0].
offset | SEG_ABS,
output_ins.oprs[1].offset,
- NULL, false, false, ofmt,
- nasm_error);
+ NULL, false, false);
} else
nasm_error(ERR_NONFATAL,
"bad syntax for EQU");
diff --git a/nasm.h b/nasm.h
index 341983a..a94cb0a 100644
--- a/nasm.h
+++ b/nasm.h
@@ -123,11 +123,9 @@ typedef bool (*lfunc) (char *label, int32_t *segment, int64_t *offset);
* an EQU or a segment-base symbol, which shouldn't.
*/
typedef void (*ldfunc)(char *label, int32_t segment, int64_t offset,
- char *special, bool is_norm, bool isextrn,
- struct ofmt * ofmt, efunc error);
+ char *special, bool is_norm, bool isextrn);
void define_label(char *label, int32_t segment, int64_t offset,
- char *special, bool is_norm, bool isextrn,
- struct ofmt * ofmt, efunc error);
+ char *special, bool is_norm, bool isextrn);
/*
* List-file generators should look like this:
diff --git a/output/outaout.c b/output/outaout.c
index 0b3c7ca..8bff63e 100644
--- a/output/outaout.c
+++ b/output/outaout.c
@@ -198,20 +198,15 @@ static void aoutb_init(void)
is_pic = 0x00; /* may become 0x40 */
aout_gotpc_sect = seg_alloc();
- define_label("..gotpc", aout_gotpc_sect + 1, 0L, NULL, false, false, &of_aoutb,
- nasm_error);
+ define_label("..gotpc", aout_gotpc_sect + 1, 0L, NULL, false, false);
aout_gotoff_sect = seg_alloc();
- define_label("..gotoff", aout_gotoff_sect + 1, 0L, NULL, false, false,
- &of_aoutb, nasm_error);
+ define_label("..gotoff", aout_gotoff_sect + 1, 0L, NULL, false, false);
aout_got_sect = seg_alloc();
- define_label("..got", aout_got_sect + 1, 0L, NULL, false, false, &of_aoutb,
- nasm_error);
+ define_label("..got", aout_got_sect + 1, 0L, NULL, false, false);
aout_plt_sect = seg_alloc();
- define_label("..plt", aout_plt_sect + 1, 0L, NULL, false, false, &of_aoutb,
- nasm_error);
+ define_label("..plt", aout_plt_sect + 1, 0L, NULL, false, false);
aout_sym_sect = seg_alloc();
- define_label("..sym", aout_sym_sect + 1, 0L, NULL, false, false, &of_aoutb,
- nasm_error);
+ define_label("..sym", aout_sym_sect + 1, 0L, NULL, false, false);
}
#endif
diff --git a/output/outbin.c b/output/outbin.c
index 79f5d20..6f08e87 100644
--- a/output/outbin.c
+++ b/output/outbin.c
@@ -1205,13 +1205,11 @@ static void bin_define_section_labels(void)
/* section.<name>.start */
strcpy(label_name + base_len, ".start");
- define_label(label_name, sec->start_index, 0L,
- NULL, 0, 0, ofmt, nasm_error);
+ define_label(label_name, sec->start_index, 0L, NULL, 0, 0);
/* section.<name>.vstart */
strcpy(label_name + base_len, ".vstart");
- define_label(label_name, sec->vstart_index, 0L,
- NULL, 0, 0, ofmt, nasm_error);
+ define_label(label_name, sec->vstart_index, 0L, NULL, 0, 0);
nasm_free(label_name);
}
diff --git a/output/outcoff.c b/output/outcoff.c
index f147ea9..4277744 100644
--- a/output/outcoff.c
+++ b/output/outcoff.c
@@ -193,8 +193,7 @@ static void coff_win64_init(void)
win64 = true;
coff_gen_init();
imagebase_sect = seg_alloc()+1;
- define_label(WRT_IMAGEBASE, imagebase_sect, 0, NULL, false, false,
- ofmt, nasm_error);
+ define_label(WRT_IMAGEBASE, imagebase_sect, 0, NULL, false, false);
}
static void coff_std_init(void)
diff --git a/output/outelf32.c b/output/outelf32.c
index cec3feb..7dce165 100644
--- a/output/outelf32.c
+++ b/output/outelf32.c
@@ -253,23 +253,17 @@ static void elf_init(void)
fwds = NULL;
elf_gotpc_sect = seg_alloc();
- define_label("..gotpc", elf_gotpc_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..gotpc", elf_gotpc_sect + 1, 0L, NULL, false, false);
elf_gotoff_sect = seg_alloc();
- define_label("..gotoff", elf_gotoff_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..gotoff", elf_gotoff_sect + 1, 0L, NULL, false, false);
elf_got_sect = seg_alloc();
- define_label("..got", elf_got_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..got", elf_got_sect + 1, 0L, NULL, false, false);
elf_plt_sect = seg_alloc();
- define_label("..plt", elf_plt_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..plt", elf_plt_sect + 1, 0L, NULL, false, false);
elf_sym_sect = seg_alloc();
- define_label("..sym", elf_sym_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..sym", elf_sym_sect + 1, 0L, NULL, false, false);
elf_tlsie_sect = seg_alloc();
- define_label("..tlsie", elf_tlsie_sect + 1, 0L, NULL, false, false, &of_elf32,
- nasm_error);
+ define_label("..tlsie", elf_tlsie_sect + 1, 0L, NULL, false, false);
def_seg = seg_alloc();
}
diff --git a/output/outelf64.c b/output/outelf64.c
index 1e73fcc..5ccdf51 100644
--- a/output/outelf64.c
+++ b/output/outelf64.c
@@ -263,23 +263,17 @@ static void elf_init(void)
fwds = NULL;
elf_gotpc_sect = seg_alloc();
- define_label("..gotpc", elf_gotpc_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..gotpc", elf_gotpc_sect + 1, 0L, NULL, false, false);
elf_gotoff_sect = seg_alloc();
- define_label("..gotoff", elf_gotoff_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..gotoff", elf_gotoff_sect + 1, 0L, NULL, false, false);
elf_got_sect = seg_alloc();
- define_label("..got", elf_got_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..got", elf_got_sect + 1, 0L, NULL, false, false);
elf_plt_sect = seg_alloc();
- define_label("..plt", elf_plt_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..plt", elf_plt_sect + 1, 0L, NULL, false, false);
elf_sym_sect = seg_alloc();
- define_label("..sym", elf_sym_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..sym", elf_sym_sect + 1, 0L, NULL, false, false);
elf_gottpoff_sect = seg_alloc();
- define_label("..gottpoff", elf_gottpoff_sect + 1, 0L, NULL, false, false, &of_elf64,
- nasm_error);
+ define_label("..gottpoff", elf_gottpoff_sect + 1, 0L, NULL, false, false);
def_seg = seg_alloc();
diff --git a/output/outieee.c b/output/outieee.c
index 0fc3c40..900d1e3 100644
--- a/output/outieee.c
+++ b/output/outieee.c
@@ -811,10 +811,9 @@ static int32_t ieee_segment(char *name, int pass, int *bits)
ieee_seg_needs_update = seg;
if (seg->align >= SEG_ABS)
define_label(name, NO_SEG, seg->align - SEG_ABS,
- NULL, false, false, &of_ieee, nasm_error);
+ NULL, false, false);
else
- define_label(name, seg->index + 1, 0L,
- NULL, false, false, &of_ieee, nasm_error);
+ define_label(name, seg->index + 1, 0L, NULL, false, false);
ieee_seg_needs_update = NULL;
if (seg->use32)
diff --git a/output/outmacho64.c b/output/outmacho64.c
index 3c38ddb..a0da134 100644
--- a/output/outmacho64.c
+++ b/output/outmacho64.c
@@ -373,11 +373,11 @@ static void macho_init(void)
/* string table starts with a zero byte - don't ask why */
saa_wbytes(strs, &zero, sizeof(char));
strslen = 1;
-
- /* add special symbol for ..gotpcrel */
- macho_gotpcrel_sect = seg_alloc();
- macho_gotpcrel_sect ++;
- define_label("..gotpcrel", macho_gotpcrel_sect, 0L, NULL, false, false, &of_macho64, nasm_error);
+
+ /* add special symbol for ..gotpcrel */
+ macho_gotpcrel_sect = seg_alloc();
+ macho_gotpcrel_sect++;
+ define_label("..gotpcrel", macho_gotpcrel_sect, 0L, NULL, false, false);
}
static void sect_write(struct section *sect,
@@ -391,9 +391,9 @@ static int32_t add_reloc(struct section *sect, int32_t section,
int pcrel, int bytes, int64_t reloff)
{
struct reloc *r;
- struct symbol *sym;
+ struct symbol *sym;
int32_t fi;
- int32_t adjustment = 0;
+ int32_t adjustment = 0;
/* NeXT as puts relocs in reversed order (address-wise) into the
** files, so we do the same, doesn't seem to make much of a
diff --git a/output/outobj.c b/output/outobj.c
index 2011a87..89156b2 100644
--- a/output/outobj.c
+++ b/output/outobj.c
@@ -1478,10 +1478,10 @@ static int32_t obj_segment(char *name, int pass, int *bits)
obj_seg_needs_update = seg;
if (seg->align >= SEG_ABS)
define_label(name, NO_SEG, seg->align - SEG_ABS,
- NULL, false, false, &of_obj, nasm_error);
+ NULL, false, false);
else
define_label(name, seg->index + 1, 0L,
- NULL, false, false, &of_obj, nasm_error);
+ NULL, false, false);
obj_seg_needs_update = NULL;
/*
@@ -1495,9 +1495,9 @@ static int32_t obj_segment(char *name, int pass, int *bits)
grp->segs[grp->nindices++].index = seg->obj_index;
if (seg->grp)
nasm_error(ERR_WARNING,
- "segment `%s' is already part of"
- " a group: first one takes precedence",
- seg->name);
+ "segment `%s' is already part of"
+ " a group: first one takes precedence",
+ seg->name);
else
seg->grp = grp;
}
@@ -1583,8 +1583,7 @@ static int obj_directive(enum directives directive, char *value, int pass)
grp->name = NULL;
obj_grp_needs_update = grp;
- define_label(v, grp->index + 1, 0L,
- NULL, false, false, &of_obj, nasm_error);
+ define_label(v, grp->index + 1, 0L, NULL, false, false);
obj_grp_needs_update = NULL;
while (*q) {
diff --git a/parser.c b/parser.c
index 79da372..9b9e89a 100644
--- a/parser.c
+++ b/parser.c
@@ -61,12 +61,10 @@ static int is_comma_next(void);
static int i;
static struct tokenval tokval;
static efunc error;
-static struct ofmt *outfmt; /* Structure of addresses of output routines */
static struct location *location; /* Pointer to current line's segment,offset */
-void parser_global_info(struct ofmt *output, struct location * locp)
+void parser_global_info(struct location * locp)
{
- outfmt = output;
location = locp;
}
@@ -248,7 +246,7 @@ restart_parse:
* am still not certain.
*/
ldef(result->label, in_abs_seg ? abs_seg : location->segment,
- location->offset, NULL, true, false, outfmt, errfunc);
+ location->offset, NULL, true, false);
}
}
diff --git a/parser.h b/parser.h
index 7e5a9f9..eb882ed 100644
--- a/parser.h
+++ b/parser.h
@@ -39,7 +39,7 @@
#ifndef NASM_PARSER_H
#define NASM_PARSER_H
-void parser_global_info(struct ofmt *output, struct location * locp);
+void parser_global_info(struct location * locp);
insn *parse_line(int pass, char *buffer, insn * result,
efunc error, evalfunc evaluate, ldfunc ldef);
void cleanup_insn(insn * instruction);