Starting to include debug info

This commit is contained in:
Jeremiah Orians 2022-01-20 21:35:14 -05:00
parent 477b517f26
commit 5644a0c456
No known key found for this signature in database
GPG Key ID: 6B3A3F198708F894
6 changed files with 108 additions and 4 deletions

21
cc.c
View File

@ -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)
{ {

View File

@ -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);
} }

View File

@ -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;

View File

@ -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;

View File

@ -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);
} }

View File

@ -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