scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 3286dd2e262682b7ad6620643065935916238acd
parent 011cf97b797f2eae7ba60831b8d21aca6139e3ee
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Tue, 26 Oct 2021 18:08:08 +0200

libmach: Add skeleton for elf64

Diffstat:
Msrc/libmach/Makefile | 3++-
Asrc/libmach/elf64/Makefile | 11+++++++++++
Asrc/libmach/elf64/deps.mk | 4++++
Asrc/libmach/elf64/elf64.c | 21+++++++++++++++++++++
Asrc/libmach/elf64/elf64.h | 16++++++++++++++++
Msrc/libmach/libmach.h | 2++
Msrc/libmach/mach.c | 1+
7 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/src/libmach/Makefile b/src/libmach/Makefile @@ -1,7 +1,8 @@ .POSIX: DIRS =\ - coff32 + coff32\ + elf64\ PROJECTDIR =../.. include $(PROJECTDIR)/scripts/rules.mk diff --git a/src/libmach/elf64/Makefile b/src/libmach/elf64/Makefile @@ -0,0 +1,11 @@ +.POSIX: + +PROJECTDIR =../../.. +include $(PROJECTDIR)/scripts/rules.mk + +OBJS =\ + elf64.o \ + +all: $(OBJS) + +include deps.mk diff --git a/src/libmach/elf64/deps.mk b/src/libmach/elf64/deps.mk @@ -0,0 +1,4 @@ +#deps +elf64.o: $(INCDIR)/scc/scc/mach.h +elf64.o: ../libmach.h +elf64.o: elf64.h diff --git a/src/libmach/elf64/elf64.c b/src/libmach/elf64/elf64.c @@ -0,0 +1,21 @@ +#include <stdio.h> + +#include <scc/mach.h> + +#include "../libmach.h" +#include "elf64.h" + +struct objops coff32 = { + .probe = NULL, + .new = NULL, + .read = NULL, + .getidx = NULL, + .setidx = NULL, + .pc2line = NULL, + .strip = NULL, + .del = NULL, + .write = NULL, + .getsym = NULL, + .getsec = NULL, + .loadmap = NULL, +}; diff --git a/src/libmach/elf64/elf64.h b/src/libmach/elf64/elf64.h @@ -0,0 +1,16 @@ +extern int elf64new(Obj *); +extern int elf64read(Obj *, FILE *); +extern int elf64setidx(long, char **, long *, FILE *); +extern int elf64getidx(long *, char ***, long **, FILE *); +extern int elf64pc2line(Obj *, unsigned long long , char *, int *); +extern int elf64strip(Obj *); +extern void elf64del(Obj *); +extern int elf64write(Obj *, Map *, FILE *); +extern int elf64probe(unsigned char *, char **); + +extern int elf64xsetidx(int long , char *[], long [], FILE *); +extern int elf64xgetidx(int, long *, char ***, long **, FILE *); + +extern Symbol *elf64getsym(Obj *, int *, Symbol *); +extern Section *elf64getsec(Obj *, int *, Section *); +extern Map *elf64loadmap(Obj *, FILE *); diff --git a/src/libmach/libmach.h b/src/libmach/libmach.h @@ -7,6 +7,7 @@ enum objformat { COFF32, + ELF64, NFORMATS, }; @@ -65,3 +66,4 @@ extern int objpos(Obj *obj, FILE *fp, long pos); /* globals */ extern Objops *objops[]; extern Objops coff32; +extern Objops elf64; diff --git a/src/libmach/mach.c b/src/libmach/mach.c @@ -6,5 +6,6 @@ Objops *objops[] = { [COFF32] = &coff32, + [ELF64] = &elf64, [NFORMATS] = NULL, };