Skip to content

Commit a517d3a

Browse files
committed
* Added more debug information
1 parent 3ecaeff commit a517d3a

File tree

6 files changed

+50
-34
lines changed

6 files changed

+50
-34
lines changed

.github/workflows/makefile.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ jobs:
3434
- name: Create hdfile
3535
run: make sorhd
3636

37-
- name: Upload compiled toolchain
38-
uses: actions/upload-artifact@v2
39-
with:
40-
name: sectoros_toolchain
41-
path: ~/toolchain.tar.xz
37+
# - name: Upload compiled toolchain
38+
# uses: actions/upload-artifact@v2
39+
# with:
40+
# name: sectoros_toolchain
41+
# path: ~/toolchain.tar.xz
4242

4343
- name: Upload kernel
4444
uses: actions/upload-artifact@v2

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@ $(IMAGEFILE): sorfs_compile create_test_program
194194
run: $(ISOFILE)
195195
$(QEMU) $(QEMUFLAGS) -enable-kvm -cpu host -serial stdio | tee k.log
196196

197+
runnkvm: $(ISOFILE)
198+
$(QEMU) $(QEMUFLAGS) -serial stdio | tee k.log
199+
197200
rund: $(ISOFILE)
198201
$(QEMU) $(QEMUFLAGS) $(QEMUDFLAGS)
199202

src/common/libs/debug.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ void load_kernel_symbols(multiboot_info_t* info)
128128

129129
char* strtab = NULL;
130130

131+
elf_section_header_t* sym_shdr = NULL;
132+
elf_section_header_t* str_shdr = NULL;
133+
131134
for(uint32_t i = 0; i < num; i++)
132135
{
133136
if(shdr[i].sh_type == SHT_SYMTAB)
@@ -137,20 +140,16 @@ void load_kernel_symbols(multiboot_info_t* info)
137140
sym_num = (shdr[i].sh_size / sizeof(elf_sym_t));
138141
strtab = shdr[shdr[i].sh_link].sh_addr;
139142
alloc_region(kernel_page_dir, strtab, strtab + shdr[shdr[i].sh_link].sh_size, 1, 1, 1);
143+
sym_shdr = &shdr[i];
144+
str_shdr = &(shdr[shdr[i].sh_link]);
145+
140146
}
141147
}
142148

143149
// ASSERT(symtab == NULL && "Kernel symbols not loaded");
144150

145-
uint32_t func_num = 0;
146-
147-
for(uint32_t i = 0; i < sym_num; i++)
148-
{
149-
if(symtab[i].st_info & STT_FUNC)
150-
{
151-
func_num++;
152-
}
153-
}
151+
uint32_t func_num = (sym_shdr->sh_size/sym_shdr->sh_entsize);
152+
ldprintf("KERNEL", LOG_INFO, "Found %d symbols", func_num);
154153

155154
kernel_symbols = zalloc(sizeof(symbol_t) * func_num);
156155

@@ -162,8 +161,8 @@ void load_kernel_symbols(multiboot_info_t* info)
162161
{
163162
kernel_symbols[j].addr = symtab[i].st_value;
164163
kernel_symbols[j].size = symtab[i].st_size;
165-
kernel_symbols[j].name = strdup(&strtab[symtab[i].st_name]);
166-
//serialprintf("%s: 0x%x %dB\n", kernel_symbols[j].name, kernel_symbols[j].addr, kernel_symbols[j].size);
164+
kernel_symbols[j].name = strdup(&(strtab[symtab[i].st_name]));
165+
serialprintf("%s: 0x%x %dB\n", kernel_symbols[j].name, kernel_symbols[j].addr, kernel_symbols[j].size);
167166
j++;
168167
}
169168
// else if(symtab[i].st_info & STT_OBJECT)

src/drivers/storage/logdisk.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void logdisk_printType(char* issuer, char* msg, int type)
138138
serialprintf("[ %s ] %s: %s\n", logdisk_type_to_str(type), issuer, msg);
139139
break;
140140
case LOG_DEBUG:
141-
printf(TERM_DEBUG_COLOR"[ %s ] %s: %s\n"TERM_RESET_COLOR, logdisk_type_to_str(type), issuer, msg);
141+
//printf(TERM_DEBUG_COLOR"[ %s ] %s: %s\n"TERM_RESET_COLOR, logdisk_type_to_str(type), issuer, msg);
142142
serialprintf("[ %s ] %s: %s\n", logdisk_type_to_str(type), issuer, msg);
143143
break;
144144
default:

src/kernel/kernel.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ void kernelmain(const multiboot_info_t* info, uint32_t multiboot_magic)
303303

304304
printtime();
305305

306-
compositor_load_wallpaper("/wallpaper.bmp", 2);
306+
//compositor_load_wallpaper("/wallpaper.bmp", 2);
307307
init_vbox();
308308
init_shell();
309309

@@ -375,6 +375,12 @@ void kernelmain(const multiboot_info_t* info, uint32_t multiboot_magic)
375375
serialprintf("%s: 0x%x, %dB\n", s->name, s->addr, s->size);
376376
}
377377

378+
s = get_kernel_symbol_by_name("serialprintf");
379+
if(s != NULL)
380+
{
381+
serialprintf("%s: 0x%x, %dB\n", s->name, s->addr, s->size);
382+
}
383+
378384
printf("\nSectorOS shell v2.0.0\nRun help to get the list of commands.\n#/> ");
379385

380386
if((list_contain_str(mboot_cmd, "--load_modules")) != -1)

src/kernel/modules.c

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ int load_module(char** argv)
102102
modules = list_create();
103103

104104
FILE* f = file_open(argv[0], OPEN_RDONLY);
105+
106+
if(f == NULL)
107+
kernel_panic("Given module does not exist!");
108+
109+
105110
uint32_t mod_sz = vfs_getFileSize(f);
106111

107112
uint8_t* buf = zalloc(mod_sz);
@@ -147,7 +152,7 @@ int load_module(char** argv)
147152
else
148153
{
149154
shdr->sh_addr = (buf + shdr->sh_offset);
150-
serialprintf("SHDR %d: 0x%x\n", i, shdr->sh_addr);
155+
ldprintf("Module loader", LOG_DEBUG, "SHDR %d: 0x%x", i, shdr->sh_addr);
151156
}
152157
}
153158

@@ -179,21 +184,28 @@ int load_module(char** argv)
179184
{
180185
elf_section_header_t* sym_shdr = (buf + (head->e_shoff + (head->e_shentsize * symtab[s].st_shndx)));
181186
symtab[s].st_value = symtab[s].st_value + sym_shdr->sh_addr;
182-
serialprintf("SYM: %s : 0x%x\n", &(strtab[symtab[s].st_name]), symtab[s].st_value);
187+
ldprintf("Module loader", LOG_DEBUG, "LOCAL %s: 0x%x %dB", &(strtab[symtab[s].st_name]), symtab[s].st_value, symtab[s].st_size);
183188
}
184189
else if(symtab[s].st_shndx == SHN_UNDEF) // Kernel symbol
185190
{
186-
serialprintf("STRTAB: 0x%x\n", strtab);
187-
serialprintf("SYMTAB: 0x%x\n", symtab);
188-
serialprintf("SYM: %s\n", &(strtab[symtab[s].st_name]));
189-
symtab[s].st_value = (uintptr_t)get_kernel_symbol_by_name(&(strtab[symtab[s].st_name]));
191+
if(strcmp(&(strtab[symtab[s].st_name]), "") == 0)
192+
continue;
193+
194+
symbol_t* sym = get_kernel_symbol_by_name(&(strtab[symtab[s].st_name]));
195+
if(sym == NULL)
196+
{
197+
ldprintf("Module loader", LOG_ERR, "Cannot resolve symbol named %s from the list of kernel symbols", &(strtab[symtab[s].st_name]));
198+
kernel_panic("Cannot resolve kernel symbols present in module");
199+
}
200+
symtab[s].st_value = (uintptr_t)sym->addr;
201+
symtab[s].st_size = sym->size;
202+
ldprintf("Module loader", LOG_DEBUG, "%s: 0x%x %dB", &(strtab[symtab[s].st_name]), symtab[s].st_value, symtab[s].st_size);
190203
}
191204
add_sym_to_modentry(strdup(&(strtab[symtab[s].st_name])), symtab[s].st_value, symtab[s].st_size, mod_entry);
192205
if(symtab[s].st_name && (strcmp(&(strtab[symtab[s].st_name]), "metadata") == 0))
193206
{
194207
mod_info = (void*)symtab[s].st_value;
195208
mod_entry->info = mod_info;
196-
serialprintf("MOD_INFO: 0x%x\n", mod_info);
197209
}
198210
sym_num++;
199211
}
@@ -238,7 +250,7 @@ int load_module(char** argv)
238250
ptr = (rel_table->r_offset + r_section->sh_addr);
239251
A = *ptr;
240252
P = (uintptr_t)ptr;
241-
ldprintf("Module loader", LOG_INFO, "Using symbol %s", name);
253+
ldprintf("Module loader", LOG_DEBUG, "Using symbol %s", name);
242254
if(!get_module_symbol_by_name(name, symtab, strtab, sym_num))
243255
{
244256
if(get_kernel_symbol_by_name(name))
@@ -260,11 +272,12 @@ int load_module(char** argv)
260272
{
261273
case R_386_32:
262274
*ptr = A + S;
263-
serialprintf("0x%x = 0x%x + 0x%x\n", *ptr, A, S);
275+
ldprintf("Module loader", LOG_DEBUG, "'R_386_32' 0x%x = 0x%x + 0x%x", *ptr, A, S);
264276
break;
265277
case R_386_PC32:
266278
*ptr = A + S - P;
267279
serialprintf("0x%x = 0x%x + 0x%x - 0x%x\n", *ptr, A, S, P);
280+
ldprintf("Module loader", LOG_DEBUG, "'R_386_PC32' 0x%x = 0x%x + 0x%x - 0x%x", *ptr, A, S, P);
268281
break;
269282
default:
270283
ldprintf("Module loader", LOG_ERR, "Unsupported reallocation %d found", ELF32_R_TYPE(rel_table[rel].r_info));
@@ -281,19 +294,14 @@ int load_module(char** argv)
281294
int argc = 0;
282295
for (char ** aa = argv; *aa; ++aa) ++argc;
283296

284-
serialprintf("Got symbols:\n");
285297
module_init* init = NULL;
286298
foreach(g, mod_entry->symbols)
287299
{
288300
symbol_t* s = g->val;
289-
serialprintf("\t-%s: 0x%x 0x%x\n", s->name, s->addr, s->size);
290-
if (strcmp(s->name, "init") == 0)
291-
{
292-
init = 0xc1893310;
293-
}
301+
ldprintf("Module loader", LOG_DEBUG, "%s: 0x%x 0x%x", s->name, s->addr, s->size);
294302
}
295303

296304
xxd(mod_info, sizeof(module_info_t));
297305
ldprintf("Module loader", LOG_INFO, "Initializing module: %s", mod_info->name);
298-
return (*((module_init*)0x8312663d))(argc, argv);
306+
return mod_info->init(argc, argv);
299307
}

0 commit comments

Comments
 (0)