Subversion Repositories HelenOS

Rev

Rev 3007 | Rev 3141 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3007 Rev 3104
Line 160... Line 160...
160
         * It is not physically present in the ELF image.
160
         * It is not physically present in the ELF image.
161
         * To resolve the situation, a frame must be allocated
161
         * To resolve the situation, a frame must be allocated
162
         * and cleared.
162
         * and cleared.
163
         */
163
         */
164
        frame = (uintptr_t)frame_alloc(ONE_FRAME, 0);
164
        frame = (uintptr_t)frame_alloc(ONE_FRAME, 0);
165
        memsetb(PA2KA(frame), FRAME_SIZE, 0);
165
        memsetb((void *) PA2KA(frame), FRAME_SIZE, 0);
166
        dirty = true;
166
        dirty = true;
167
    } else {
167
    } else {
168
        size_t pad_lo, pad_hi;
168
        size_t pad_lo, pad_hi;
169
        /*
169
        /*
170
         * The mixed case.
170
         * The mixed case.
Line 185... Line 185...
185
 
185
 
186
        frame = (uintptr_t)frame_alloc(ONE_FRAME, 0);
186
        frame = (uintptr_t)frame_alloc(ONE_FRAME, 0);
187
        memcpy((void *) (PA2KA(frame) + pad_lo),
187
        memcpy((void *) (PA2KA(frame) + pad_lo),
188
            (void *) (base + i * FRAME_SIZE + pad_lo),
188
            (void *) (base + i * FRAME_SIZE + pad_lo),
189
            FRAME_SIZE - pad_lo - pad_hi);
189
            FRAME_SIZE - pad_lo - pad_hi);
190
        memsetb(PA2KA(frame), pad_lo, 0);
190
        memsetb((void *) PA2KA(frame), pad_lo, 0);
191
        memsetb(PA2KA(frame) + FRAME_SIZE - pad_hi, pad_hi, 0);
191
        memsetb((void *) (PA2KA(frame) + FRAME_SIZE - pad_hi), pad_hi, 0);
192
        dirty = true;
192
        dirty = true;
193
    }
193
    }
194
 
194
 
195
    if (dirty && area->sh_info) {
195
    if (dirty && area->sh_info) {
196
        frame_reference_add(ADDR2PFN(frame));
196
        frame_reference_add(ADDR2PFN(frame));