Changeset 6e716a59 in mainline for generic/src/debug/symtab.c


Ignore:
Timestamp:
2005-12-10T15:05:46Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
72f5866d
Parents:
a3ac9a7
Message:

Added calling of generic functions to kconsole.

File:
1 edited

Legend:

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

    ra3ac9a7 r6e716a59  
    3131#include <typedefs.h>
    3232#include <arch/byteorder.h>
     33#include <func.h>
     34#include <print.h>
    3335
    3436/** Return entry that seems most likely to correspond to address
     
    5355        return NULL;
    5456}
     57
     58/** Return address that corresponds to the entry
     59 *
     60 * Search symbol table, and if the address ENDS with
     61 * the parameter, return value
     62 *
     63 * @param name Name of the symbol
     64 * @return 0 - Not found, -1 - Duplicate symbol, other - address of symbol
     65 */
     66__address get_symbol_addr(const char *name)
     67{
     68        count_t i;
     69        count_t found = 0;
     70        count_t found_pos;
     71
     72        count_t nmlen = strlen(name);
     73        count_t slen;
     74
     75        for (i=0;symbol_table[i].address_le;++i) {
     76                slen = strlen(symbol_table[i].symbol_name);
     77                if (slen < nmlen)
     78                        continue;
     79                if (strncmp(name, symbol_table[i].symbol_name + (slen-nmlen),
     80                            nmlen) == 0) {
     81                        found++;
     82                        found_pos = i;
     83                }
     84        }
     85        if (found == 0)
     86                return NULL;
     87        if (found == 1)
     88                return __u64_le2host(symbol_table[found_pos].address_le);
     89        return ((__address) -1);
     90}
     91
     92void symtab_print_search(const char *name)
     93{
     94        int i;
     95        count_t nmlen = strlen(name);
     96        count_t slen;
     97        __address addr;
     98        char *realname;
     99
     100        for (i=0;symbol_table[i].address_le;++i) {
     101                slen = strlen(symbol_table[i].symbol_name);
     102                if (slen < nmlen)
     103                        continue;
     104                if (strncmp(name, symbol_table[i].symbol_name + (slen-nmlen),
     105                            nmlen) == 0) {
     106                        addr =  __u64_le2host(symbol_table[i].address_le);
     107                        realname = symbol_table[i].symbol_name;
     108                        printf("0x%p: %s\n", addr, realname);
     109                }
     110        }
     111}
Note: See TracChangeset for help on using the changeset viewer.