scc

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

commit 5ee2e8b13124750a58dc720afbc16d4d0a6f71f4
parent e60e6dc4ded6d0ff578610e39d7a8c8a6f62f3ed
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Sat, 30 Oct 2021 11:16:41 +0200

libmach: Add elf64del()

This function free all the memory used by an elf64 object file.

Diffstat:
Msrc/libmach/deps.mk | 3+++
Msrc/libmach/elf64/elf64.c | 2+-
Asrc/libmach/elf64/elf64del.c | 23+++++++++++++++++++++++
Msrc/libmach/elf64/rules.mk | 1+
4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/libmach/deps.mk b/src/libmach/deps.mk @@ -53,6 +53,9 @@ delobj.o: libmach.h elf64/elf64.o: $(INCDIR)/scc/scc/mach.h elf64/elf64.o: elf64/../libmach.h elf64/elf64.o: elf64/elf64.h +elf64/elf64del.o: $(INCDIR)/scc/scc/mach.h +elf64/elf64del.o: elf64/../libmach.h +elf64/elf64del.o: elf64/elf64.h elf64/elf64new.o: $(INCDIR)/scc/scc/mach.h elf64/elf64new.o: elf64/../libmach.h elf64/elf64new.o: elf64/elf64.h diff --git a/src/libmach/elf64/elf64.c b/src/libmach/elf64/elf64.c @@ -13,7 +13,7 @@ struct objops elf64 = { .setidx = NULL, .pc2line = NULL, .strip = NULL, - .del = NULL, + .del = elf64del, .write = NULL, .getsym = NULL, .getsec = NULL, diff --git a/src/libmach/elf64/elf64del.c b/src/libmach/elf64/elf64del.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <stdlib.h> + +#include <scc/mach.h> + +#include "../libmach.h" +#include "elf64.h" + +void +elf64del(Obj *obj) +{ + struct elf64 *elf = obj->data; + + if (elf) { + free(elf->phdr); + free(elf->shdr); + free(elf->syms); + free(elf->strtbl[0]); + free(elf->strtbl[1]); + } + free(obj->data); + obj->data = NULL; +} diff --git a/src/libmach/elf64/rules.mk b/src/libmach/elf64/rules.mk @@ -3,3 +3,4 @@ ELF64_OBJS =\ elf64/elf64new.o\ elf64/elf64probe.o\ elf64/elf64read.o\ + elf64/elf64del.o\