git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
A Total Overhaul on the Lunaix's Virtual Memory Model (#26)
[lunaix-os.git]
/
lunaix-os
/
kernel
/
exe
/
elf32
/
ldelf32.c
diff --git
a/lunaix-os/kernel/exe/elf32/ldelf32.c
b/lunaix-os/kernel/exe/elf32/ldelf32.c
index a72a14d15c4448b68fe0fb193b30bc9f39d902db..64e0eba3d2d9073521009fb45da866af0f263658 100644
(file)
--- a/
lunaix-os/kernel/exe/elf32/ldelf32.c
+++ b/
lunaix-os/kernel/exe/elf32/ldelf32.c
@@
-1,7
+1,6
@@
#include <lunaix/exebi/elf32.h>
#include <lunaix/load.h>
#include <lunaix/mm/mmap.h>
#include <lunaix/exebi/elf32.h>
#include <lunaix/load.h>
#include <lunaix/mm/mmap.h>
-#include <lunaix/mm/page.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/spike.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/spike.h>
@@
-15,7
+14,7
@@
elf32_smap(struct load_context* ldctx,
{
struct v_file* elfile = (struct v_file*)elf->elf_file;
{
struct v_file* elfile = (struct v_file*)elf->elf_file;
- assert(
PG_ALIGNED
(phdre->p_offset));
+ assert(
!va_offset
(phdre->p_offset));
int proct = 0;
if ((phdre->p_flags & PF_R)) {
int proct = 0;
if ((phdre->p_flags & PF_R)) {
@@
-33,17
+32,17
@@
elf32_smap(struct load_context* ldctx,
struct mmap_param param = { .vms_mnt = container->vms_mnt,
.pvms = vmspace(container->proc),
.proct = proct,
struct mmap_param param = { .vms_mnt = container->vms_mnt,
.pvms = vmspace(container->proc),
.proct = proct,
- .offset =
PG_ALIGN
(phdre->p_offset),
- .mlen =
ROUNDUP(phdre->p_memsz, PG_SIZE
),
+ .offset =
va_align
(phdre->p_offset),
+ .mlen =
va_alignup(phdre->p_memsz
),
.flags = MAP_FIXED | MAP_PRIVATE,
.type = REGION_TYPE_CODE };
struct mm_region* seg_reg;
.flags = MAP_FIXED | MAP_PRIVATE,
.type = REGION_TYPE_CODE };
struct mm_region* seg_reg;
- int status = mmap_user(NULL, &seg_reg,
PG_ALIGN
(va), elfile, ¶m);
+ int status = mmap_user(NULL, &seg_reg,
va_align
(va), elfile, ¶m);
if (!status) {
size_t next_addr = phdre->p_memsz + va;
if (!status) {
size_t next_addr = phdre->p_memsz + va;
- ldctx->end = MAX(ldctx->end,
ROUNDUP(next_addr, PG_SIZE
));
+ ldctx->end = MAX(ldctx->end,
va_alignup(next_addr
));
ldctx->mem_sz += phdre->p_memsz;
} else {
// we probably fucked up our process
ldctx->mem_sz += phdre->p_memsz;
} else {
// we probably fucked up our process
@@
-117,7
+116,7
@@
load_executable(struct load_context* context, const struct v_file* exefile)
continue;
}
continue;
}
- if (phdr->p_align != P
G
_SIZE) {
+ if (phdr->p_align != P
AGE
_SIZE) {
// surprising alignment!
errno = ENOEXEC;
break;
// surprising alignment!
errno = ENOEXEC;
break;