scc

simple C compiler
git clone git://git.2f30.org/scc
Log | Files | Refs | README | LICENSE

commit 1f77007724382f0824b79f3990a61337ae499242
parent c937f394cf20a8d3d5d29539c077e74e4ecd17ab
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Mon, 27 Nov 2017 23:11:22 +0100

[as] Add section flags to myro object file

This is a first version and not all the flags can be written
to the output.

Diffstat:
as/myro.c | 16+++++++++++++++-
inc/myro.h | 10++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/as/myro.c b/as/myro.c @@ -46,6 +46,20 @@ writestrings(FILE *fp) return off; } +static unsigned +getsecflags(Section *sp) +{ + unsigned flags = MYROSEC_LOAD; + + if (sp->flags & SREAD) + flags |= MYROSEC_READ; + if (sp->flags & SWRITE) + flags |= MYROSEC_WRITE; + if (sp->flags & SFILE) + flags |= MYROSEC_FILE; + return flags; +} + static size_t writesections(FILE *fp) { @@ -55,7 +69,7 @@ writesections(FILE *fp) for (sp = seclist; sp; sp = sp->next) { sect.name = sp->name.offset; - sect.flags = 0; + sect.flags = getsecflags(sp); sect.fill = sp->fill; sect.aligment = sp->aligment; sect.offset = off; diff --git a/inc/myro.h b/inc/myro.h @@ -44,6 +44,16 @@ struct myrorel { unsigned long long offset; }; +enum myrosecflg { + MYROSEC_READ = 1 << 0, + MYROSEC_WRITE = 1 << 1, + MYROSEC_EXEC = 1 << 2, + MYROSEC_LOAD = 1 << 3, + MYROSEC_FILE = 1 << 4, + MYROSEC_ABS = 1 << 5, + MYROSEC_BLOB = 1 << 6, +}; + extern int wrmyrohdr(FILE *fp, struct myrohdr *hdr); extern int wrmyrosec(FILE *fp, struct myrosect *sect); extern int wrmyrosym(FILE *fp, struct myrosym *sym);