TCCBOOT/user.c

51 lines
1.1 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <inttypes.h>
#include <linux/unistd.h>
#define __NR_linux_open __NR_open
#define __NR_linux_lseek __NR_lseek
#define __NR_linux_read __NR_read
#define __NR_linux_write __NR_write
#define __NR_linux_close __NR_close
#define __NR_linux_exit __NR_exit
_syscall3(int,linux_open,const char *,filename,int,access,int,mode)
_syscall3(int,linux_lseek,int,fd,int,offset,int,whence)
_syscall3(int,linux_read,int,fd,void *,buf,int,size)
_syscall3(int,linux_write,int,fd,const void *,buf,int,size)
_syscall1(int,linux_close,int,fd)
_syscall1(int,linux_exit,int,val)
void exit(int val)
{
linux_exit(val);
}
void putstr(const char *s)
{
linux_write(1, s, strlen(s));
}
uint8_t *load_image(const char *filename)
{
int fd, size;
uint8_t *p;
fd = linux_open(filename, O_RDONLY, 0);
if (fd < 0) {
return NULL;
}
size = linux_lseek(fd, 0, SEEK_END);
linux_lseek(fd, 0, SEEK_SET);
p = malloc(size + 15);
p = (void *)((unsigned long)p & ~15);
linux_read(fd, p, size);
linux_close(fd);
return p;
}