aboutsummaryrefslogtreecommitdiff
path: root/amd64/emit.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2022-11-22 21:44:44 +0100
committerQuentin Carbonneaux <[email protected]>2022-11-22 21:56:21 +0100
commitcbee74bdb4f85d6d8d4f192f0018ea023418e216 (patch)
tree4ea3eb41265e44336d81fecf719193c67540f3d3 /amd64/emit.c
parent04e26409011389f7b5759114905195a4fb0b0286 (diff)
use a new struct for symbols
Symbols are a useful abstraction that occurs in both Con and Alias. In this patch they get their own struct. This new struct packages a symbol name and a type; the type tells us where the symbol name must be interpreted (currently, in gobal memory or in thread-local storage). The refactor fixed a bug in addcon(), proving the value of packaging symbol names with their type.
Diffstat (limited to 'amd64/emit.c')
-rw-r--r--amd64/emit.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/amd64/emit.c b/amd64/emit.c
index 37dd1e9..a034a66 100644
--- a/amd64/emit.c
+++ b/amd64/emit.c
@@ -165,9 +165,9 @@ emitcon(Con *con, FILE *f)
switch (con->type) {
case CAddr:
- l = str(con->label);
+ l = str(con->sym.id);
p = l[0] == '"' ? "" : T.assym;
- if (con->reloc == RelThr) {
+ if (con->sym.type == SThr) {
if (T.apple)
fprintf(f, "%s%s@TLVP", p, l);
else
@@ -344,7 +344,7 @@ Next:
off = fn->con[ref.val];
emitcon(&off, f);
if (off.type == CAddr)
- if (off.reloc != RelThr || T.apple)
+ if (off.sym.type != SThr || T.apple)
fprintf(f, "(%%rip)");
break;
case RTmp: