Starting to include debug info
This commit is contained in:
parent
477b517f26
commit
5644a0c456
21
cc.c
21
cc.c
|
@ -48,7 +48,10 @@ int main(int argc, char** argv, char** envp)
|
||||||
char* name;
|
char* name;
|
||||||
char* hold;
|
char* hold;
|
||||||
int DUMP_MODE = FALSE;
|
int DUMP_MODE = FALSE;
|
||||||
int DIRTY_MODE = FALSE;
|
DIRTY_MODE = FALSE;
|
||||||
|
|
||||||
|
/* Assume no debugging by default */
|
||||||
|
DEBUG_LEVEL = 0;
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
while(i <= argc)
|
while(i <= argc)
|
||||||
|
@ -72,6 +75,15 @@ int main(int argc, char** argv, char** envp)
|
||||||
DIRTY_MODE = TRUE;
|
DIRTY_MODE = TRUE;
|
||||||
i+= 1;
|
i+= 1;
|
||||||
}
|
}
|
||||||
|
else if(match(argv[i], "--debug-mode"))
|
||||||
|
{
|
||||||
|
hold = argv[i+1];
|
||||||
|
DEBUG_LEVEL = strtoint(hold);
|
||||||
|
fputs("DEBUG_LEVEL set to: ", stderr);
|
||||||
|
fputs(hold, stderr);
|
||||||
|
fputc('\n', stderr);
|
||||||
|
i+= 2;
|
||||||
|
}
|
||||||
else if(match(argv[i], "-f") || match(argv[i], "--file"))
|
else if(match(argv[i], "-f") || match(argv[i], "--file"))
|
||||||
{
|
{
|
||||||
if(NULL == hold_string)
|
if(NULL == hold_string)
|
||||||
|
@ -153,6 +165,8 @@ int main(int argc, char** argv, char** envp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(1 <= DEBUG_LEVEL) fputs("READ all files\n", stderr);
|
||||||
|
|
||||||
/* Deal with special case of wanting to read from standard input */
|
/* Deal with special case of wanting to read from standard input */
|
||||||
if(stdin == in)
|
if(stdin == in)
|
||||||
{
|
{
|
||||||
|
@ -166,13 +180,18 @@ int main(int argc, char** argv, char** envp)
|
||||||
fputs("Either no input files were given or they were empty\n", stderr);
|
fputs("Either no input files were given or they were empty\n", stderr);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(1 <= DEBUG_LEVEL) fputs("Start to reverse list\n", stderr);
|
||||||
global_token = reverse_list(global_token);
|
global_token = reverse_list(global_token);
|
||||||
|
if(1 <= DEBUG_LEVEL) fputs("List reversed\n", stderr);
|
||||||
|
|
||||||
/* Get the environmental bits */
|
/* Get the environmental bits */
|
||||||
|
if(1 <= DEBUG_LEVEL) fputs("Starting to setup Environment\n", stderr);
|
||||||
populate_env(envp);
|
populate_env(envp);
|
||||||
setup_env(envp);
|
setup_env(envp);
|
||||||
M2LIBC_PATH = env_lookup("M2LIBC_PATH");
|
M2LIBC_PATH = env_lookup("M2LIBC_PATH");
|
||||||
if(NULL == M2LIBC_PATH) M2LIBC_PATH = "./M2libc";
|
if(NULL == M2LIBC_PATH) M2LIBC_PATH = "./M2libc";
|
||||||
|
if(1 <= DEBUG_LEVEL) fputs("Environment setup\n", stderr);
|
||||||
|
|
||||||
if(DUMP_MODE)
|
if(DUMP_MODE)
|
||||||
{
|
{
|
||||||
|
|
26
cc_env.c
26
cc_env.c
|
@ -24,9 +24,19 @@ char* env_lookup(char* variable);
|
||||||
|
|
||||||
void setup_env()
|
void setup_env()
|
||||||
{
|
{
|
||||||
|
if(2 <= DEBUG_LEVEL) fputs("Starting setup_env\n", stderr);
|
||||||
char* ARCH = NULL;
|
char* ARCH = NULL;
|
||||||
struct utsname* unameData = calloc(1, sizeof(struct utsname));
|
struct utsname* unameData = calloc(1, sizeof(struct utsname));
|
||||||
|
require(NULL != unameData, "unameData calloc failed\n");
|
||||||
uname(unameData);
|
uname(unameData);
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("obtained architecture details\n", stderr);
|
||||||
|
if(4 <= DEBUG_LEVEL)
|
||||||
|
{
|
||||||
|
fputs("utsname details: ", stderr);
|
||||||
|
fputs(unameData->machine, stderr);
|
||||||
|
fputc('\n', stderr);
|
||||||
|
}
|
||||||
|
|
||||||
if(match("i386", unameData->machine) ||
|
if(match("i386", unameData->machine) ||
|
||||||
match("i486", unameData->machine) ||
|
match("i486", unameData->machine) ||
|
||||||
match("i586", unameData->machine) ||
|
match("i586", unameData->machine) ||
|
||||||
|
@ -34,11 +44,18 @@ void setup_env()
|
||||||
match("i686-pae", unameData->machine)) ARCH = "x86";
|
match("i686-pae", unameData->machine)) ARCH = "x86";
|
||||||
else if(match("x86_64", unameData->machine)) ARCH = "amd64";
|
else if(match("x86_64", unameData->machine)) ARCH = "amd64";
|
||||||
else ARCH = unameData->machine;
|
else ARCH = unameData->machine;
|
||||||
|
if(3 <= DEBUG_LEVEL)
|
||||||
|
{
|
||||||
|
fputs("Architecture selected: ", stderr);
|
||||||
|
fputs(ARCH, stderr);
|
||||||
|
fputc('\n', stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Check for override */
|
/* Check for override */
|
||||||
char* hold = env_lookup("ARCHITECTURE_OVERRIDE");
|
char* hold = env_lookup("ARCHITECTURE_OVERRIDE");
|
||||||
if(NULL != hold) ARCH = hold;
|
if(NULL != hold) ARCH = hold;
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("override?\n", stderr);
|
||||||
|
|
||||||
/* Set desired architecture */
|
/* Set desired architecture */
|
||||||
WORDSIZE = 32;
|
WORDSIZE = 32;
|
||||||
|
@ -95,6 +112,7 @@ void setup_env()
|
||||||
fputs(" know values are: knight-native, knight-posix, x86, amd64, armv7l, aarch64 and riscv64\n", stderr);
|
fputs(" know values are: knight-native, knight-posix, x86, amd64, armv7l, aarch64 and riscv64\n", stderr);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
if(2 <= DEBUG_LEVEL) fputs("setup_env successful\n", stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Token
|
struct Token
|
||||||
|
@ -161,9 +179,11 @@ char* env_lookup(char* variable)
|
||||||
|
|
||||||
void populate_env(char** envp)
|
void populate_env(char** envp)
|
||||||
{
|
{
|
||||||
|
if(2 <= DEBUG_LEVEL) fputs("populate_env started\n", stderr);
|
||||||
/* You can't populate a NULL environment */
|
/* You can't populate a NULL environment */
|
||||||
if(NULL == envp)
|
if(NULL == envp)
|
||||||
{
|
{
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("NULL envp\n", stderr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +192,7 @@ void populate_env(char** envp)
|
||||||
|
|
||||||
if(0 == max)
|
if(0 == max)
|
||||||
{
|
{
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("Empty envp\n", stderr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,6 +206,7 @@ void populate_env(char** envp)
|
||||||
int k;
|
int k;
|
||||||
char* envp_line;
|
char* envp_line;
|
||||||
|
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("starting env loop\n", stderr);
|
||||||
for(i = 0; i < max; i = i + 1)
|
for(i = 0; i < max; i = i + 1)
|
||||||
{
|
{
|
||||||
n->var = calloc(MAX_STRING, sizeof(char));
|
n->var = calloc(MAX_STRING, sizeof(char));
|
||||||
|
@ -237,16 +259,20 @@ void populate_env(char** envp)
|
||||||
require(n->next != NULL, "Memory initialization of n->next in population of env failed\n");
|
require(n->next != NULL, "Memory initialization of n->next in population of env failed\n");
|
||||||
n = n->next;
|
n = n->next;
|
||||||
}
|
}
|
||||||
|
if(3 <= DEBUG_LEVEL) fputs("env loop successful\n", stderr);
|
||||||
|
|
||||||
/* Get rid of node on the end */
|
/* Get rid of node on the end */
|
||||||
n = NULL;
|
n = NULL;
|
||||||
/* Also destroy the n->next reference */
|
/* Also destroy the n->next reference */
|
||||||
n = env;
|
n = env;
|
||||||
|
|
||||||
|
require(NULL != n, "can't have an empty environment from the creation of a non-null environment\n");
|
||||||
|
require(NULL != n->next, "should have an extra node at the end of the env\n");
|
||||||
while(n->next->var != NULL)
|
while(n->next->var != NULL)
|
||||||
{
|
{
|
||||||
n = n->next;
|
n = n->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
n->next = NULL;
|
n->next = NULL;
|
||||||
|
if(2 <= DEBUG_LEVEL) fputs("populate_env successful\n", stderr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,3 +47,5 @@ int STDIO_USED;
|
||||||
|
|
||||||
/* So we don't shoot ourself in the face */
|
/* So we don't shoot ourself in the face */
|
||||||
int FUZZING;
|
int FUZZING;
|
||||||
|
int DIRTY_MODE;
|
||||||
|
int DEBUG_LEVEL;
|
||||||
|
|
|
@ -48,3 +48,5 @@ extern int STDIO_USED;
|
||||||
|
|
||||||
/* So we don't shoot ourself in the face */
|
/* So we don't shoot ourself in the face */
|
||||||
extern int FUZZING;
|
extern int FUZZING;
|
||||||
|
extern int DIRTY_MODE;
|
||||||
|
extern int DEBUG_LEVEL;
|
||||||
|
|
|
@ -396,14 +396,17 @@ void spawn_processes(int debug_flag, char* preprocessed_file, char* destination,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We no longer need the M2-Planet tempfile output */
|
/* We no longer need the M2-Planet tempfile output */
|
||||||
remove(M2_output);
|
if(!DIRTY_MODE) remove(M2_output);
|
||||||
/* Nor the blood-elf output anymore if it exists */
|
/* Nor the blood-elf output anymore if it exists */
|
||||||
if(!match("", blood_output)) remove(blood_output);
|
if(!match("", blood_output))
|
||||||
|
{
|
||||||
|
if(!DIRTY_MODE) remove(blood_output);
|
||||||
|
}
|
||||||
|
|
||||||
/* Build the final binary */
|
/* Build the final binary */
|
||||||
i = spawn_hex2(M1_output, destination, Architecture, envp, debug_flag);
|
i = spawn_hex2(M1_output, destination, Architecture, envp, debug_flag);
|
||||||
if(0 != i) exit(EXIT_FAILURE);
|
if(0 != i) exit(EXIT_FAILURE);
|
||||||
|
|
||||||
/* clean up after ourselves*/
|
/* clean up after ourselves*/
|
||||||
remove(M1_output);
|
if(!DIRTY_MODE) remove(M1_output);
|
||||||
}
|
}
|
||||||
|
|
52
makefile
52
makefile
|
@ -22,6 +22,10 @@ PACKAGE = m2-mesoplanet
|
||||||
# C compiler settings
|
# C compiler settings
|
||||||
CC?=gcc
|
CC?=gcc
|
||||||
CFLAGS:=$(CFLAGS) -D_GNU_SOURCE -O0 -std=c99 -ggdb
|
CFLAGS:=$(CFLAGS) -D_GNU_SOURCE -O0 -std=c99 -ggdb
|
||||||
|
ARCH:=$(shell get_machine)
|
||||||
|
BLOOD_FLAG:=$(shell get_machine --blood)
|
||||||
|
ENDIAN_FLAG:=$(shell get_machine --endian)
|
||||||
|
BASE_ADDRESS:=$(shell get_machine --hex2)
|
||||||
|
|
||||||
all: M2-Mesoplanet
|
all: M2-Mesoplanet
|
||||||
|
|
||||||
|
@ -39,12 +43,60 @@ M2-Mesoplanet: bin results cc.h cc_reader.c cc_core.c cc_macro.c cc_env.c cc_spa
|
||||||
gcc_req.h \
|
gcc_req.h \
|
||||||
-o bin/M2-Mesoplanet
|
-o bin/M2-Mesoplanet
|
||||||
|
|
||||||
|
M2-boot: bin results cc.h cc_reader.c cc_core.c cc_macro.c cc_env.c cc_spawn.c cc.c cc_globals.c cc_globals.h
|
||||||
|
echo $(ARCH)
|
||||||
|
echo $(BLOOD_FLAG)
|
||||||
|
echo $(ENDIAN_FLAG)
|
||||||
|
echo $(BASE_ADDRESS)
|
||||||
|
M2-Planet --architecture ${ARCH} \
|
||||||
|
-f M2libc/sys/types.h \
|
||||||
|
-f M2libc/stddef.h \
|
||||||
|
-f M2libc/${ARCH}/linux/fcntl.c \
|
||||||
|
-f M2libc/${ARCH}/linux/unistd.c \
|
||||||
|
-f M2libc/${ARCH}/linux/sys/stat.c \
|
||||||
|
-f M2libc/stdlib.c \
|
||||||
|
-f M2libc/stdio.c \
|
||||||
|
-f M2libc/string.c \
|
||||||
|
-f M2libc/bootstrappable.c \
|
||||||
|
-f cc.h \
|
||||||
|
-f cc_globals.c \
|
||||||
|
-f cc_env.c \
|
||||||
|
-f cc_reader.c \
|
||||||
|
-f cc_spawn.c \
|
||||||
|
-f cc_core.c \
|
||||||
|
-f cc_macro.c \
|
||||||
|
-f cc.c \
|
||||||
|
--debug \
|
||||||
|
-o ./bin/M2-Mesoplanet-1.M1
|
||||||
|
blood-elf ${ENDIAN_FLAG} ${BLOOD_FLAG} -f ./bin/M2-Mesoplanet-1.M1 -o ./bin/M2-Mesoplanet-1-footer.M1
|
||||||
|
M1 --architecture ${ARCH} \
|
||||||
|
${ENDIAN_FLAG} \
|
||||||
|
-f M2libc/${ARCH}/${ARCH}_defs.M1 \
|
||||||
|
-f M2libc/${ARCH}/libc-full.M1 \
|
||||||
|
-f ./bin/M2-Mesoplanet-1.M1 \
|
||||||
|
-f ./bin/M2-Mesoplanet-1-footer.M1 \
|
||||||
|
-o ./bin/M2-Mesoplanet-1.hex2
|
||||||
|
hex2 --architecture ${ARCH} \
|
||||||
|
${ENDIAN_FLAG} \
|
||||||
|
--base-address ${BASE_ADDRESS} \
|
||||||
|
-f ../M2libc/${ARCH}/ELF-${ARCH}-debug.hex2 \
|
||||||
|
-f ./bin/M2-Mesoplanet-1.hex2 \
|
||||||
|
-o ./bin/M2-Mesoplanet
|
||||||
|
|
||||||
|
|
||||||
# Clean up after ourselves
|
# Clean up after ourselves
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -rf bin/
|
rm -rf bin/
|
||||||
# ./test/test0000/cleanup.sh
|
# ./test/test0000/cleanup.sh
|
||||||
|
|
||||||
|
.PHONY: clean-temp
|
||||||
|
clean-tmp:
|
||||||
|
rm -vf /tmp/M2-Mesoplanet-*
|
||||||
|
rm -vf /tmp/M2-Planet-*
|
||||||
|
rm -vf /tmp/M1-macro-*
|
||||||
|
rm -vf /tmp/blood-elf-*
|
||||||
|
|
||||||
# Directories
|
# Directories
|
||||||
bin:
|
bin:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
|
|
Loading…
Reference in New Issue