diff options
Diffstat (limited to 'ir')
| -rw-r--r-- | ir/ir.c | 8 | ||||
| -rw-r--r-- | ir/ir.h | 3 |
2 files changed, 7 insertions, 4 deletions
@@ -159,10 +159,12 @@ mksymref(internstr s, enum symflags symflags) } union ref -mkdatref(internstr name, union type ctype, uint siz, uint align, const void *bytes, uint n, bool deref) +mkdatref(internstr name, union type ctype, uint siz, uint align, + const void *bytes, uint n, bool deref, bool funclocal) { - struct irdat dat = { .ctype = ctype, .align = align, .siz = siz, .name = name }; - dat.section = objout.code && align >= 4 && align <= targ_primsizes[TYPTR] && siz <= 16 ? Stext : Srodata; + struct irdat dat = { .ctype = ctype, .align = align, .siz = siz, .name = name, .section = Srodata }; + if (funclocal && objout.code && align >= 4 && align <= targ_primsizes[TYPTR] && siz <= 16) + dat.section = Stext; assert(n <= siz && siz && align); if (!name) { @@ -265,7 +265,8 @@ union ref mkfltcon(enum irclass, double); #define intconval(r) ((r).t == RICON ? (r).i : contab.p[(r).i].i) #define fltconval(r) ((r).t == RICON ? (r).i : contab.p[(r).i].f) union ref mksymref(internstr, enum symflags); -union ref mkdatref(internstr name, union type ctype, uint siz, uint align, const void *, uint n, bool deref); +union ref mkdatref(internstr sym, union type ctype, uint siz, uint align, + const void *, uint n, bool deref, bool funclocal); internstr xcon2sym(int ref); struct instr mkalloca(uint siz, uint align); union ref mkcallarg(union irtype ret, uint narg, int vararg); |