From: Erik M. <er...@us...> - 2001-11-04 23:15:43
|
Update of /cvsroot/blob/blob/src/blob In directory usw-pr-cvs1:/tmp/cvs-serv15217 Modified Files: main.c Log Message: Print layout of ELF section in debug mode. Minor cleanups. Index: main.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/main.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- main.c 2001/10/31 16:44:18 1.8 +++ main.c 2001/11/04 23:15:41 1.9 @@ -59,6 +59,7 @@ static int do_reload(char *what); static void PrintSerialSpeed(eBauds speed); +static void print_elf_sections(void); @@ -83,11 +84,8 @@ init_subsystems(); /* initialise status */ - blob_status.paramSize = 0; blob_status.paramType = fromFlash; - blob_status.kernelSize = 0; blob_status.kernelType = fromFlash; - blob_status.ramdiskSize = 0; blob_status.ramdiskType = fromFlash; blob_status.downloadSpeed = baud115k2; blob_status.terminalSpeed = baud9k6; @@ -122,6 +120,18 @@ /* get the amount of memory */ get_memory_map(); + print_elf_sections(); + +#ifdef BLOB_DEBUG + { + register u32 stackptr; + SerialOutputString("Current stack pointer: 0x"); + asm("mov %0, sp": "=r" (stackptr)); + SerialOutputHex(stackptr); + SerialOutputByte('\n'); + } +#endif + /* Parse all the tags in the paramater block */ #ifdef PARAM_START parse_ptags((void *) PARAM_START, &conf); @@ -561,4 +571,44 @@ SerialOutputString("(unknown)"); break; } +} + + + + +static void print_elf_sections(void) +{ +#ifdef BLOB_DEBUG + extern u32 __text_start, __text_end; + extern u32 __rodata_start, __rodata_end; + extern u32 __data_start, __data_end; + extern u32 __got_start, __got_end; + extern u32 __commandlist_start, __commandlist_end; + extern u32 __initlist_start, __initlist_end; + extern u32 __exitlist_start, __exitlist_end; + extern u32 __ptagtable_begin, __ptagtable_end; + extern u32 __bss_start, __bss_end; + extern u32 __stack_start, __stack_end; + + SerialOutputString("ELF sections layout:\n"); + +#define PRINT_ELF_SECTION(from, to, name) \ + SerialOutputString(" 0x"); \ + SerialOutputHex((u32)&(from)); \ + SerialOutputString(" - 0x"); \ + SerialOutputHex((u32)&(to)); \ + SerialOutputString(" " name "\n"); + + + PRINT_ELF_SECTION(__text_start, __text_end, ".text"); + PRINT_ELF_SECTION(__rodata_start, __rodata_end, ".rodata"); + PRINT_ELF_SECTION(__data_start, __data_end, ".data"); + PRINT_ELF_SECTION(__got_start, __got_end, ".got"); + PRINT_ELF_SECTION(__commandlist_start, __commandlist_end, ".commandlist"); + PRINT_ELF_SECTION(__initlist_start, __initlist_end, ".initlist"); + PRINT_ELF_SECTION(__exitlist_start, __exitlist_end, ".exitlist"); + PRINT_ELF_SECTION(__ptagtable_begin, __ptagtable_end, ".ptaglist"); + PRINT_ELF_SECTION(__bss_start, __bss_end, ".bss"); + PRINT_ELF_SECTION(__stack_start, __stack_end, ".stack (in .bss)"); +#endif } |