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:
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\