Deleted Added
full compact
26c26
< * $Id: imgact_aout.c,v 1.36 1997/09/02 20:05:33 bde Exp $
---
> * $Id: imgact_aout.c,v 1.37 1998/01/06 05:15:25 dyson Exp $
38a39
> #include <sys/systm.h>
45a47
> #include <vm/vm_object.h>
56c58,60
< vm_offset_t vmaddr;
---
> struct vnode *vp;
> vm_object_t object;
> vm_offset_t text_end, data_end;
148,160c152,161
< /*
< * Map text/data read/execute
< */
< vmaddr = virtual_offset;
< error =
< vm_mmap(&vmspace->vm_map, /* map */
< &vmaddr, /* address */
< a_out->a_text + a_out->a_data, /* size */
< VM_PROT_READ | VM_PROT_EXECUTE, /* protection */
< VM_PROT_ALL, /* max protection */
< MAP_PRIVATE | MAP_FIXED, /* flags */
< (caddr_t)imgp->vp, /* vnode */
< file_offset); /* offset */
---
> vp = imgp->vp;
> object = vp->v_object;
> vm_object_reference(object);
>
> text_end = virtual_offset + a_out->a_text;
> error = vm_map_insert(&vmspace->vm_map, object,
> file_offset,
> virtual_offset, text_end,
> VM_PROT_READ | VM_PROT_EXECUTE, VM_PROT_ALL,
> MAP_COPY_NEEDED | MAP_COPY_ON_WRITE);
164,181c165,172
< /*
< * allow writing of data
< */
< vm_map_protect(&vmspace->vm_map,
< vmaddr + a_out->a_text,
< vmaddr + a_out->a_text + a_out->a_data,
< VM_PROT_ALL,
< FALSE);
<
< if (bss_size != 0) {
< /*
< * Allocate demand-zeroed area for uninitialized data
< * "bss" = 'block started by symbol' - named after the IBM 7090
< * instruction of the same name.
< */
< vmaddr = virtual_offset + a_out->a_text + a_out->a_data;
< error = vm_map_find(&vmspace->vm_map, NULL, 0,
< &vmaddr, bss_size, FALSE, VM_PROT_ALL, VM_PROT_ALL, 0);
---
> data_end = text_end + a_out->a_data;
> if (a_out->a_data) {
> vm_object_reference(object);
> error = vm_map_insert(&vmspace->vm_map, object,
> file_offset + a_out->a_text,
> text_end, data_end,
> VM_PROT_ALL, VM_PROT_ALL,
> MAP_COPY_NEEDED | MAP_COPY_ON_WRITE);
185a177,188
> pmap_object_init_pt(&vmspace->vm_pmap, virtual_offset,
> object, (vm_pindex_t) OFF_TO_IDX(file_offset),
> a_out->a_text + a_out->a_data, 0);
>
> if (bss_size) {
> error = vm_map_insert(&vmspace->vm_map, NULL, 0,
> data_end, data_end + bss_size,
> VM_PROT_ALL, VM_PROT_ALL, 0);
> if (error)
> return (error);
> }
>