rtld-elf: Fix VDSO Obj_Entry mapsize and report in utrace(2)
Subtracing addr is only appropriate for position-dependent objects, where vaddrbase would also be the same value. For position-independent objects, like the VDSO (which we already assume due to setting vaddrbase to 0), the segments start at 0, not addr. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D51924
This commit is contained in:
@@ -3031,7 +3031,7 @@ load_kpreload(const void *addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
obj->mapbase = __DECONST(caddr_t, addr);
|
obj->mapbase = __DECONST(caddr_t, addr);
|
||||||
obj->mapsize = segn->p_vaddr + segn->p_memsz - (Elf_Addr)addr;
|
obj->mapsize = segn->p_vaddr + segn->p_memsz;
|
||||||
obj->vaddrbase = 0;
|
obj->vaddrbase = 0;
|
||||||
obj->relocbase = obj->mapbase;
|
obj->relocbase = obj->mapbase;
|
||||||
|
|
||||||
@@ -3060,7 +3060,8 @@ load_kpreload(const void *addr)
|
|||||||
linkmap_add(obj); /* for GDB & dlinfo() */
|
linkmap_add(obj); /* for GDB & dlinfo() */
|
||||||
max_stack_flags |= obj->stack_flags;
|
max_stack_flags |= obj->stack_flags;
|
||||||
|
|
||||||
LD_UTRACE(UTRACE_LOAD_OBJECT, obj, obj->mapbase, 0, 0, obj->path);
|
LD_UTRACE(UTRACE_LOAD_OBJECT, obj, obj->mapbase, obj->mapsize, 0,
|
||||||
|
obj->path);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user