Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/debug/symtab.c

    r98000fb r7e752b2  
    3838#include <symtab.h>
    3939#include <byteorder.h>
    40 #include <string.h>
     40#include <str.h>
    4141#include <print.h>
    42 #include <arch/types.h>
     42#include <typedefs.h>
    4343#include <typedefs.h>
    4444#include <errno.h>
     
    4646/** Get name of a symbol that seems most likely to correspond to address.
    4747 *
    48  * @param addr Address.
    49  * @param name Place to store pointer to the symbol name.
     48 * @param addr   Address.
     49 * @param name   Place to store pointer to the symbol name.
     50 * @param offset Place to store offset from the symbol address.
    5051 *
    5152 * @return Zero on success or negative error code, ENOENT if not found,
     
    5354 *
    5455 */
    55 int symtab_name_lookup(unative_t addr, char **name)
     56int symtab_name_lookup(uintptr_t addr, const char **name, uintptr_t *offset)
    5657{
    5758#ifdef CONFIG_SYMTAB
     
    6566        if (addr >= uint64_t_le2host(symbol_table[i - 1].address_le)) {
    6667                *name = symbol_table[i - 1].symbol_name;
     68                if (offset)
     69                        *offset = addr -
     70                            uint64_t_le2host(symbol_table[i - 1].address_le);
    6771                return EOK;
    6872        }
     
    7983/** Lookup symbol by address and format for display.
    8084 *
    81  * Returns name of closest corresponding symbol, "Not found" if none exists
    82  * or "N/A" if no symbol information is available.
     85 * Returns name of closest corresponding symbol,
     86 * "unknown" if none exists and "N/A" if no symbol
     87 * information is available.
    8388 *
    8489 * @param addr Address.
     
    8893 *
    8994 */
    90 char *symtab_fmt_name_lookup(unative_t addr)
    91 {
    92         char *name;
    93         int rc = symtab_name_lookup(addr, &name);
     95const char *symtab_fmt_name_lookup(uintptr_t addr)
     96{
     97        const char *name;
     98        int rc = symtab_name_lookup(addr, &name, NULL);
    9499       
    95100        switch (rc) {
     
    97102                return name;
    98103        case ENOENT:
    99                 return "Not found";
     104                return "unknown";
    100105        default:
    101106                return "N/A";
     
    187192                uintptr_t addr = uint64_t_le2host(symbol_table[pos].address_le);
    188193                char *realname = symbol_table[pos].symbol_name;
    189                 printf("%p: %s\n", addr, realname);
     194                printf("%p: %s\n", (void *) addr, realname);
    190195                pos++;
    191196        }
     
    235240                printf("\n");
    236241                pos = 0;
    237                 while ((hint = symtab_search_one(name, &pos))) {
     242                while (symtab_search_one(name, &pos)) {
    238243                        printf("%s\n", symbol_table[pos].symbol_name);
    239244                        pos++;
Note: See TracChangeset for help on using the changeset viewer.