From 2ca6fb25a238842418019a3f9ee8d1beb1327f7e Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Mon, 31 Jan 2022 22:03:18 +0100 Subject: shared linkage logic for func/data --- all.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'all.h') diff --git a/all.h b/all.h index 98b77dd..942c52d 100644 --- a/all.h +++ b/all.h @@ -28,6 +28,7 @@ typedef struct Fn Fn; typedef struct Typ Typ; typedef struct Field Field; typedef struct Dat Dat; +typedef struct Lnk Lnk; typedef struct Target Target; enum { @@ -327,6 +328,13 @@ struct Addr { /* amd64 addressing */ int scale; }; +struct Lnk { + char export; + char align; + char *sec; + char *secf; +}; + struct Fn { Blk *start; Tmp *tmp; @@ -341,10 +349,10 @@ struct Fn { Blk **rpo; bits reg; int slot; - char export; char vararg; char dynalloc; char name[NString]; + Lnk lnk; }; struct Typ { @@ -373,8 +381,6 @@ struct Dat { enum { DStart, DEnd, - DName, - DAlign, DB, DH, DW, @@ -387,13 +393,16 @@ struct Dat { float flts; char *str; struct { - char *nam; + char *name; int64_t off; } ref; + struct { + char *name; + Lnk *lnk; + } start; } u; char isref; char isstr; - char export; }; /* main.c */ @@ -516,6 +525,7 @@ void rega(Fn *); /* gas.c */ extern char *gasloc; extern char *gassym; +void gasemitlnk(char *, Lnk *, char *, FILE *); void gasemitdat(Dat *, FILE *); int gasstash(void *, int); void gasemitfin(FILE *); -- cgit 1.4.1