Changeset View
Changeset View
Standalone View
Standalone View
head/libexec/rtld-elf/map_object.c
Show First 20 Lines • Show All 222 Lines • ▼ Show 20 Lines | goto error1; | ||||
for (i = 0; i <= nsegs; i++) { | for (i = 0; i <= nsegs; i++) { | ||||
/* Overlay the segment onto the proper region. */ | /* Overlay the segment onto the proper region. */ | ||||
data_offset = trunc_page(segs[i]->p_offset); | data_offset = trunc_page(segs[i]->p_offset); | ||||
data_vaddr = trunc_page(segs[i]->p_vaddr); | data_vaddr = trunc_page(segs[i]->p_vaddr); | ||||
data_vlimit = round_page(segs[i]->p_vaddr + segs[i]->p_filesz); | data_vlimit = round_page(segs[i]->p_vaddr + segs[i]->p_filesz); | ||||
data_addr = mapbase + (data_vaddr - base_vaddr); | data_addr = mapbase + (data_vaddr - base_vaddr); | ||||
data_prot = convert_prot(segs[i]->p_flags); | data_prot = convert_prot(segs[i]->p_flags); | ||||
data_flags = convert_flags(segs[i]->p_flags) | MAP_FIXED; | data_flags = convert_flags(segs[i]->p_flags) | MAP_FIXED; | ||||
if (mmap(data_addr, data_vlimit - data_vaddr, data_prot, | if (data_vlimit != data_vaddr && | ||||
data_flags | MAP_PREFAULT_READ, fd, data_offset) == (caddr_t) -1) { | mmap(data_addr, data_vlimit - data_vaddr, data_prot, | ||||
data_flags | MAP_PREFAULT_READ, fd, data_offset) == MAP_FAILED) { | |||||
_rtld_error("%s: mmap of data failed: %s", path, | _rtld_error("%s: mmap of data failed: %s", path, | ||||
rtld_strerror(errno)); | rtld_strerror(errno)); | ||||
goto error1; | goto error1; | ||||
} | } | ||||
/* Do BSS setup */ | /* Do BSS setup */ | ||||
if (segs[i]->p_filesz != segs[i]->p_memsz) { | if (segs[i]->p_filesz != segs[i]->p_memsz) { | ||||
/* Clear any BSS in the last page of the segment. */ | /* Clear any BSS in the last page of the segment. */ | ||||
clear_vaddr = segs[i]->p_vaddr + segs[i]->p_filesz; | clear_vaddr = segs[i]->p_vaddr + segs[i]->p_filesz; | ||||
clear_addr = mapbase + (clear_vaddr - base_vaddr); | clear_addr = mapbase + (clear_vaddr - base_vaddr); | ||||
▲ Show 20 Lines • Show All 241 Lines • Show Last 20 Lines |