Lab2 merges, compiles now
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 24 Jan 2009 18:28:03 +0000 (10:28 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 24 Jan 2009 18:28:03 +0000 (10:28 -0800)
inc/elf.h
inc/stab.h
kern/init.c
kern/kernel.ld
kern/monitor.c

index 5cdf3fe..7fbe294 100644 (file)
--- a/inc/elf.h
+++ b/inc/elf.h
@@ -53,26 +53,6 @@ struct Secthdr {
        uint32_t sh_entsize;
 };
 
-typedef struct {
-  unsigned long n_strx;         /* index into string table of name */
-  unsigned char n_type;         /* type of symbol */
-  unsigned char n_other;        /* misc info (usually empty) */
-  unsigned short n_desc;        /* description field */
-  unsigned long n_value;              /* value of symbol */
-} stab_t;
-
-/*
-typedef struct {
-        Elf32_Word      st_name;
-        Elf32_Addr      st_value;
-        Elf32_Word      st_size;
-        unsigned char   st_info;
-        unsigned char   st_other;
-        Elf32_Half      st_shndx;
-} Elf32_Sym;
-*/
-
-
 // Values for Proghdr::p_type
 #define ELF_PROG_LOAD          1
 
index 9b022bb..a76dff5 100644 (file)
 #define        N_LENG          0xfe    // length of preceding entry
 
 // Entries in the STABS table are formatted as follows.
-struct Stab {
+typedef struct Stab {
        uint32_t n_strx;        // index into string table of name
        uint8_t n_type;         // type of symbol
        uint8_t n_other;        // misc info (usually empty)
        uint16_t n_desc;        // description field
        uintptr_t n_value;      // value of symbol
-};
+} stab_t;
 
 #endif /* !JOS_STAB_H */
index 465dd4f..9846556 100644 (file)
@@ -4,7 +4,7 @@
 #include <inc/string.h>
 #include <inc/assert.h>
 #include <inc/multiboot.h>
-#include <inc/elf.h>
+#include <inc/stab.h>
 
 #include <kern/monitor.h>
 #include <kern/console.h>
index f0b514a..1d95c35 100644 (file)
@@ -22,16 +22,20 @@ SECTIONS
        /* Include debugging information in kernel memory */
        .stab : {
                PROVIDE(stab = .);
+               PROVIDE(__STAB_BEGIN__ = .);
                *(.stab);
                PROVIDE(estab = .);
+               PROVIDE(__STAB_END__ = .);
                BYTE(0)         /* Force the linker to allocate space
                                   for this section */
        }
 
        .stabstr : {
                PROVIDE(stabstr = .);
+               PROVIDE(__STABSTR_BEGIN__ = .);
                *(.stabstr);
                PROVIDE(estabstr = .);
+               PROVIDE(__STABSTR_END__ = .);
                BYTE(0)         /* Force the linker to allocate space
                                   for this section */
        }
index ec50f11..213f9b0 100644 (file)
@@ -6,7 +6,7 @@
 #include <inc/memlayout.h>
 #include <inc/assert.h>
 #include <inc/x86.h>
-#include <inc/elf.h>
+#include <inc/stab.h>
 
 #include <kern/console.h>
 #include <kern/monitor.h>
@@ -59,7 +59,7 @@ mon_kerninfo(int argc, char **argv, struct Trapframe *tf)
        return 0;
 }
 
-char* function_of(uint32_t address) 
+static char* function_of(uint32_t address) 
 {
        extern stab_t stab[], estab[];
        extern char stabstr[];
@@ -69,8 +69,8 @@ char* function_of(uint32_t address)
        
        // ugly and unsorted
        for (symtab = stab; symtab < estab; symtab++) {
-               // only consider functions, type = 36
-               if ((symtab->n_type == 36) && 
+               // only consider functions, type = N_FUN
+               if ((symtab->n_type == N_FUN) && 
                    (symtab->n_value <= address) && 
                        (symtab->n_value > best_func)) {
                        best_func = symtab->n_value;
@@ -185,38 +185,3 @@ monitor(struct Trapframe *tf)
                                break;
        }
 }
-
-/*
-// return EIP of caller.
-// does not work if inlined.
-// putting at the end of the file seems to prevent inlining.
-unsigned
-read_eip()
-{
-       uint32_t callerpc;
-       __asm __volatile("movl 4(%%ebp), %0" : "=r" (callerpc));
-       return callerpc;
-}
-
-char* function_at(uint32_t address) 
-{
-       extern stab_t stab[], estab[];
-       extern char stabstr[];
-       stab_t* symtab;
-       
-       for (symtab = stab; symtab < estab; symtab++) {
-               if (symtab->n_value == address)
-                       return stabstr + symtab->n_strx;
-       }
-       return "Function not found!";
-}
-
-uint32_t called_address(uint32_t retaddr)
-{
-       // retaddr - 4 is the offset to the previous call, which
-       // gets added to the next inst after call when calling
-       return (uint32_t)(retaddr + *(uint32_t*)(retaddr - 4));
-       //used like this:
-       //function_at(called_address(*(ebp + 1))),
-}
-*/