phdr_ptr->p_memsz; /* Note sections */
 
        for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) {
+               u64 paddr, start, end, size;
+
                if (phdr_ptr->p_type != PT_LOAD)
                        continue;
 
+               paddr = phdr_ptr->p_offset;
+               start = rounddown(paddr, PAGE_SIZE);
+               end = roundup(paddr + phdr_ptr->p_memsz, PAGE_SIZE);
+               size = end - start;
+
                /* Add this contiguous chunk of memory to vmcore list.*/
                new = get_new_element();
                if (!new)
                        return -ENOMEM;
-               new->paddr = phdr_ptr->p_offset;
-               new->size = phdr_ptr->p_memsz;
+               new->paddr = start;
+               new->size = size;
                list_add_tail(&new->list, vc_list);
 
                /* Update the program header offset. */
-               phdr_ptr->p_offset = vmcore_off;
-               vmcore_off = vmcore_off + phdr_ptr->p_memsz;
+               phdr_ptr->p_offset = vmcore_off + (paddr - start);
+               vmcore_off = vmcore_off + size;
        }
        return 0;
 }
                        phdr_ptr->p_memsz; /* Note sections */
 
        for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) {
+               u64 paddr, start, end, size;
+
                if (phdr_ptr->p_type != PT_LOAD)
                        continue;
 
+               paddr = phdr_ptr->p_offset;
+               start = rounddown(paddr, PAGE_SIZE);
+               end = roundup(paddr + phdr_ptr->p_memsz, PAGE_SIZE);
+               size = end - start;
+
                /* Add this contiguous chunk of memory to vmcore list.*/
                new = get_new_element();
                if (!new)
                        return -ENOMEM;
-               new->paddr = phdr_ptr->p_offset;
-               new->size = phdr_ptr->p_memsz;
+               new->paddr = start;
+               new->size = size;
                list_add_tail(&new->list, vc_list);
 
                /* Update the program header offset */
-               phdr_ptr->p_offset = vmcore_off;
-               vmcore_off = vmcore_off + phdr_ptr->p_memsz;
+               phdr_ptr->p_offset = vmcore_off + (paddr - start);
+               vmcore_off = vmcore_off + size;
        }
        return 0;
 }