From d2becffe42156fb5cf5b0888329c56531c8639a0 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Mon, 28 Oct 2013 15:17:53 +0330 Subject: [PATCH] gen: move the management of ds[] to gen.c --- gen.c | 16 ++++++++++------ gen.h | 7 ++++--- ncc.c | 12 +++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/gen.c b/gen.c index ee33c36..dcbda91 100644 --- a/gen.c +++ b/gen.c @@ -855,7 +855,7 @@ void o_call(int argc, int rets) stat_calls++; } -void o_mkbss(char *name, int size, int global) +void o_bsnew(char *name, int size, int global) { if (pass1) return; @@ -867,12 +867,11 @@ static char dat_names[NDATS][NAMELEN]; static int dat_offs[NDATS]; static int ndats; -void *o_mkdat(char *name, int size, int global) +long o_dsnew(char *name, int size, int global) { - void *addr = ds + dslen; int idx; if (pass1) - return addr; + return dslen; idx = ndats++; if (idx >= NDATS) err("nomem: NDATS reached!\n"); @@ -880,7 +879,12 @@ void *o_mkdat(char *name, int size, int global) dat_offs[idx] = dslen; out_sym(name, OUT_DS | (global ? OUT_GLOB : 0), dslen, size); dslen += ALIGN(size, OUT_ALIGNMENT); - return addr; + return dat_offs[idx]; +} + +void o_dscpy(long addr, void *buf, int len) +{ + memcpy(ds + addr, buf, len); } static int dat_off(char *name) @@ -892,7 +896,7 @@ static int dat_off(char *name) return 0; } -void o_datset(char *name, int off, unsigned bt) +void o_dsset(char *name, int off, unsigned bt) { struct tmp *t = TMP(0); int sym_off = dat_off(name) + off; diff --git a/gen.h b/gen.h index 4b14201..07009ad 100644 --- a/gen.h +++ b/gen.h @@ -59,9 +59,10 @@ void o_fork(void); void o_forkpush(void); void o_forkjoin(void); /* data/bss sections */ -void o_mkbss(char *name, int size, int global); -void *o_mkdat(char *name, int size, int global); -void o_datset(char *name, int off, unsigned bt); +long o_dsnew(char *name, int size, int global); +void o_dscpy(long addr, void *buf, int len); +void o_dsset(char *name, int off, unsigned bt); +void o_bsnew(char *name, int size, int global); /* functions */ void o_func_beg(char *name, int argc, int global, int vararg); void o_func_end(void); diff --git a/ncc.c b/ncc.c index f52b74a..1c1799e 100644 --- a/ncc.c +++ b/ncc.c @@ -463,10 +463,8 @@ static char *tmp_str(char *buf, int len) { static char name[NAMELEN]; static int id; - void *dat; sprintf(name, "__neatcc.s%d", id++); - dat = o_mkdat(name, len, 0); - memcpy(dat, buf, len); + o_dscpy(o_dsnew(name, len, 0), buf, len); return name; } @@ -1155,12 +1153,12 @@ static void globalinit(void *obj, int off, struct type *t) int len; tok_expect(TOK_STR); len = tok_str(buf); - memcpy((void *) name->addr + off, buf, len); + o_dscpy(name->addr + off, buf, len); return; } } readexpr(); - o_datset(elfname, off, TYPE_BT(t)); + o_dsset(elfname, off, TYPE_BT(t)); ts_pop(NULL); } @@ -1177,9 +1175,9 @@ static void globaldef(void *data, struct name *name, unsigned flags) sz = type_totsz(t); if (!(flags & F_EXTERN) && (!(t->flags & T_FUNC) || t->ptr)) { if (tok_see() == '=') - name->addr = (long) o_mkdat(elfname, sz, F_GLOBAL(flags)); + name->addr = o_dsnew(elfname, sz, F_GLOBAL(flags)); else - o_mkbss(elfname, sz, F_GLOBAL(flags)); + o_bsnew(elfname, sz, F_GLOBAL(flags)); } global_add(name); if (!tok_jmp('=')) -- 2.11.4.GIT