sbrk() returns a pointer, so it should be 64 bits
This commit is contained in:
parent
9b99f00743
commit
18e76a6c47
|
@ -116,29 +116,29 @@ argstr(int n, char *buf, int max)
|
||||||
return fetchstr(addr, buf, max);
|
return fetchstr(addr, buf, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int sys_chdir(void);
|
extern uint64 sys_chdir(void);
|
||||||
extern int sys_close(void);
|
extern uint64 sys_close(void);
|
||||||
extern int sys_dup(void);
|
extern uint64 sys_dup(void);
|
||||||
extern int sys_exec(void);
|
extern uint64 sys_exec(void);
|
||||||
extern int sys_exit(void);
|
extern uint64 sys_exit(void);
|
||||||
extern int sys_fork(void);
|
extern uint64 sys_fork(void);
|
||||||
extern int sys_fstat(void);
|
extern uint64 sys_fstat(void);
|
||||||
extern int sys_getpid(void);
|
extern uint64 sys_getpid(void);
|
||||||
extern int sys_kill(void);
|
extern uint64 sys_kill(void);
|
||||||
extern int sys_link(void);
|
extern uint64 sys_link(void);
|
||||||
extern int sys_mkdir(void);
|
extern uint64 sys_mkdir(void);
|
||||||
extern int sys_mknod(void);
|
extern uint64 sys_mknod(void);
|
||||||
extern int sys_open(void);
|
extern uint64 sys_open(void);
|
||||||
extern int sys_pipe(void);
|
extern uint64 sys_pipe(void);
|
||||||
extern int sys_read(void);
|
extern uint64 sys_read(void);
|
||||||
extern int sys_sbrk(void);
|
extern uint64 sys_sbrk(void);
|
||||||
extern int sys_sleep(void);
|
extern uint64 sys_sleep(void);
|
||||||
extern int sys_unlink(void);
|
extern uint64 sys_unlink(void);
|
||||||
extern int sys_wait(void);
|
extern uint64 sys_wait(void);
|
||||||
extern int sys_write(void);
|
extern uint64 sys_write(void);
|
||||||
extern int sys_uptime(void);
|
extern uint64 sys_uptime(void);
|
||||||
|
|
||||||
static int (*syscalls[])(void) = {
|
static uint64 (*syscalls[])(void) = {
|
||||||
[SYS_fork] sys_fork,
|
[SYS_fork] sys_fork,
|
||||||
[SYS_exit] sys_exit,
|
[SYS_exit] sys_exit,
|
||||||
[SYS_wait] sys_wait,
|
[SYS_wait] sys_wait,
|
||||||
|
|
|
@ -52,7 +52,7 @@ fdalloc(struct file *f)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_dup(void)
|
sys_dup(void)
|
||||||
{
|
{
|
||||||
struct file *f;
|
struct file *f;
|
||||||
|
@ -66,7 +66,7 @@ sys_dup(void)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_read(void)
|
sys_read(void)
|
||||||
{
|
{
|
||||||
struct file *f;
|
struct file *f;
|
||||||
|
@ -78,7 +78,7 @@ sys_read(void)
|
||||||
return fileread(f, p, n);
|
return fileread(f, p, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_write(void)
|
sys_write(void)
|
||||||
{
|
{
|
||||||
struct file *f;
|
struct file *f;
|
||||||
|
@ -91,7 +91,7 @@ sys_write(void)
|
||||||
return filewrite(f, p, n);
|
return filewrite(f, p, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_close(void)
|
sys_close(void)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -104,7 +104,7 @@ sys_close(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_fstat(void)
|
sys_fstat(void)
|
||||||
{
|
{
|
||||||
struct file *f;
|
struct file *f;
|
||||||
|
@ -116,7 +116,7 @@ sys_fstat(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the path new as a link to the same inode as old.
|
// Create the path new as a link to the same inode as old.
|
||||||
int
|
uint64
|
||||||
sys_link(void)
|
sys_link(void)
|
||||||
{
|
{
|
||||||
char name[DIRSIZ], new[MAXPATH], old[MAXPATH];
|
char name[DIRSIZ], new[MAXPATH], old[MAXPATH];
|
||||||
|
@ -182,7 +182,7 @@ isdirempty(struct inode *dp)
|
||||||
}
|
}
|
||||||
|
|
||||||
//PAGEBREAK!
|
//PAGEBREAK!
|
||||||
int
|
uint64
|
||||||
sys_unlink(void)
|
sys_unlink(void)
|
||||||
{
|
{
|
||||||
struct inode *ip, *dp;
|
struct inode *ip, *dp;
|
||||||
|
@ -284,7 +284,7 @@ create(char *path, short type, short major, short minor)
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_open(void)
|
sys_open(void)
|
||||||
{
|
{
|
||||||
char path[MAXPATH];
|
char path[MAXPATH];
|
||||||
|
@ -347,7 +347,7 @@ sys_open(void)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_mkdir(void)
|
sys_mkdir(void)
|
||||||
{
|
{
|
||||||
char path[MAXPATH];
|
char path[MAXPATH];
|
||||||
|
@ -363,7 +363,7 @@ sys_mkdir(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_mknod(void)
|
sys_mknod(void)
|
||||||
{
|
{
|
||||||
struct inode *ip;
|
struct inode *ip;
|
||||||
|
@ -383,7 +383,7 @@ sys_mknod(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_chdir(void)
|
sys_chdir(void)
|
||||||
{
|
{
|
||||||
char path[MAXPATH];
|
char path[MAXPATH];
|
||||||
|
@ -408,7 +408,7 @@ sys_chdir(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_exec(void)
|
sys_exec(void)
|
||||||
{
|
{
|
||||||
char path[MAXPATH], *argv[MAXARG];
|
char path[MAXPATH], *argv[MAXARG];
|
||||||
|
@ -446,7 +446,7 @@ sys_exec(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_pipe(void)
|
sys_pipe(void)
|
||||||
{
|
{
|
||||||
uint64 fdarray; // user pointer to array of two integers
|
uint64 fdarray; // user pointer to array of two integers
|
||||||
|
|
|
@ -6,32 +6,32 @@
|
||||||
#include "memlayout.h"
|
#include "memlayout.h"
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_exit(void)
|
sys_exit(void)
|
||||||
{
|
{
|
||||||
exit();
|
exit();
|
||||||
return 0; // not reached
|
return 0; // not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_getpid(void)
|
sys_getpid(void)
|
||||||
{
|
{
|
||||||
return myproc()->pid;
|
return myproc()->pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_fork(void)
|
sys_fork(void)
|
||||||
{
|
{
|
||||||
return fork();
|
return fork();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_wait(void)
|
sys_wait(void)
|
||||||
{
|
{
|
||||||
return wait();
|
return wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_sbrk(void)
|
sys_sbrk(void)
|
||||||
{
|
{
|
||||||
int addr;
|
int addr;
|
||||||
|
@ -45,7 +45,7 @@ sys_sbrk(void)
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_sleep(void)
|
sys_sleep(void)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
@ -66,7 +66,7 @@ sys_sleep(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint64
|
||||||
sys_kill(void)
|
sys_kill(void)
|
||||||
{
|
{
|
||||||
int pid;
|
int pid;
|
||||||
|
@ -78,7 +78,7 @@ sys_kill(void)
|
||||||
|
|
||||||
// return how many clock tick interrupts have occurred
|
// return how many clock tick interrupts have occurred
|
||||||
// since start.
|
// since start.
|
||||||
int
|
uint64
|
||||||
sys_uptime(void)
|
sys_uptime(void)
|
||||||
{
|
{
|
||||||
uint xticks;
|
uint xticks;
|
||||||
|
|
|
@ -1438,6 +1438,13 @@ sbrktest(void)
|
||||||
printf(stdout, "sbrk test\n");
|
printf(stdout, "sbrk test\n");
|
||||||
oldbrk = sbrk(0);
|
oldbrk = sbrk(0);
|
||||||
|
|
||||||
|
// does sbrk() return the expected failure value?
|
||||||
|
a = sbrk(1024*1024*1024);
|
||||||
|
if(a != (char*)0xffffffffffffffffL){
|
||||||
|
printf(stdout, "sbrk(<toomuch>) returned %p\n", a);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// can one sbrk() less than a page?
|
// can one sbrk() less than a page?
|
||||||
a = sbrk(0);
|
a = sbrk(0);
|
||||||
for(i = 0; i < 5000; i++){
|
for(i = 0; i < 5000; i++){
|
||||||
|
@ -1478,7 +1485,7 @@ sbrktest(void)
|
||||||
// can one de-allocate?
|
// can one de-allocate?
|
||||||
a = sbrk(0);
|
a = sbrk(0);
|
||||||
c = sbrk(-4096);
|
c = sbrk(-4096);
|
||||||
if(c == (char*)0xffffffff){
|
if(c == (char*)0xffffffffffffffffL){
|
||||||
printf(stdout, "sbrk could not deallocate\n");
|
printf(stdout, "sbrk could not deallocate\n");
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
@ -1551,7 +1558,7 @@ sbrktest(void)
|
||||||
kill(pids[i]);
|
kill(pids[i]);
|
||||||
wait();
|
wait();
|
||||||
}
|
}
|
||||||
if(c == (char*)0xffffffff){
|
if(c == (char*)0xffffffffffffffffL){
|
||||||
printf(stdout, "failed sbrk leaked memory\n");
|
printf(stdout, "failed sbrk leaked memory\n");
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue