summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: cb16265)
raw | patch | inline | side by side (parent: cb16265)
author | Ivan Denisov <d.ivan.krsk@gmail.com> | |
Sat, 3 Oct 2015 18:26:32 +0000 (01:26 +0700) | ||
committer | Ivan Denisov <d.ivan.krsk@gmail.com> | |
Sat, 3 Oct 2015 18:26:32 +0000 (01:26 +0700) |
BlackBox/_Linux_/Lin/Rsrc/blackbox.c | patch | blob | history |
index 50dab7321053814bd9b0aada642cf4cec58c964c..4637982a894c559e4b9713b97b84f7a86f4b872e 100644 (file)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <malloc.h>
+/* #include <malloc.h> */
+#include <errno.h>
+#include <fcntl.h>
/* the exact size (in bytes) of the executable part of the file. */
/* this constant needs to be updated everytime a change is made to this file */
-#define exeSize 16860
+#define exeSize 17028
#define pageSize 4096
int newRecAdr, newArrAdr;
int newRecFP, newArrFP;
+int zerofd;
+
int donothing(char* fmt, ...)
{
}
return 1;
}
+void * MEMALLOC (size_t len)
+{
+ void * res;
+
+ res = mmap(0, len, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, zerofd, 0);
+ if (res == MAP_FAILED) {
+ res = NULL;
+ } else {
+ bzero(res, len);
+ }
+ return res;
+}
+
int ReadHeader ()
{
int ofTag, i, nofImps, processor;
mod.imp = NULL;
for (i = 0; i < nofImps; i++)
{
- imp = (ImpList*)calloc(1, sizeof(ImpList));
+ imp = (ImpList*)MEMALLOC(sizeof(ImpList));
ReadName(imp->name);
if (mod.imp == NULL)
mod.imp = imp;
int isLib;
char* im;
- mod.dad = (int) calloc(1, mod.ds);
- mod.mad = (int) calloc(1, mod.ms + mod.cs + mod.vs);
+ mod.dad = (int) MEMALLOC(mod.ds);
+ mod.mad = (int) MEMALLOC(mod.ms + mod.cs + mod.vs);
if ((mod.dad == 0) || (mod.mad == 0))
{
printf("BootLoader: Couldn't initalize heap\n");
int callBackAdr;
Module *k, *m;
+ zerofd = open("/dev/zero", O_RDWR);
+ if (zerofd == -1) {
+ printf("open /dev/zero failed: %s\n", strerror(errno));
+ return 101;
+ }
+
modlist = NULL;
dprintf("initializing BlackBox for Linux...\n");
+
/*f = fopen(bbfile, "rb");*/
f = fopen(argv[0], "r");
if (f != NULL)
else
{
/* assign the boot info to first variable in Kernel */
- bootInfo = calloc(1, sizeof(BootInfo));
+ bootInfo = MEMALLOC(sizeof(BootInfo));
bootInfo->modList = modlist;
bootInfo->argc = argc;
bootInfo->argv = argv;
dprintf("before body\n");
body = (BodyProc)(m->code);
k->opts = k->opts | init; /* include init in opts */
+ /*
ok = mprotect(
- (void *)(((m->code) / pageSize) * pageSize),
- (((m->csize) + MOD(m->code, pageSize) - 1) / pageSize) * pageSize + pageSize,
- PROT_READ|PROT_WRITE|PROT_EXEC);
+ (void *)(((m->code) / pageSize) * pageSize),
+ (((m->csize) + MOD(m->code, pageSize) - 1) / pageSize) * pageSize + pageSize,
+ PROT_READ|PROT_WRITE|PROT_EXEC);
if (ok != 0){
- printf("mprotect failed!\n");
- return 100;
+ printf("mprotect failed: %s\n", strerror(errno));
+ return 100;
}
+ */
body();
dprintf("after body\n");
}