summaryrefslogtreecommitdiff
path: root/mld/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'mld/obj.c')
-rw-r--r--mld/obj.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/mld/obj.c b/mld/obj.c
index 9a83d31..9706371 100644
--- a/mld/obj.c
+++ b/mld/obj.c
@@ -171,6 +171,7 @@ static int load_symtabs(struct object *object)
if (B32(hdr->sh_type) != SHT_SYMTAB) {
symtab->len = 0;
+ symtab->size = 0;
continue;
}
@@ -190,7 +191,8 @@ static int load_symtabs(struct object *object)
}
symtab->strtab = strtab;
- symtab->len = len;
+ symtab->len = len / sizeof(Elf32_Sym);
+ symtab->size = len / sizeof(Elf32_Sym);
symtab->syms = (Elf32_Sym *) (object->mapped + off);
if (BOUND_CHK(object, len, off)) {
@@ -263,8 +265,8 @@ static int map_file(struct object *obj, char *path)
}
obj->mapped_size = st.st_size;
- obj->mapped = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED,
- obj->fd, 0);
+ obj->mapped = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE, obj->fd, 0);
if (obj->mapped == MAP_FAILED) {
PERROR("cannot map");