diff options
Diffstat (limited to 'mld/obj.c')
-rw-r--r-- | mld/obj.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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"); |