Subversion Repositories HelenOS-historic

Rev

Rev 1705 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1705 Rev 1780
Line 48... Line 48...
48
 *
48
 *
49
 * @param addr Address.
49
 * @param addr Address.
50
 *
50
 *
51
 * @return Pointer to respective symbol string on success, NULL otherwise.
51
 * @return Pointer to respective symbol string on success, NULL otherwise.
52
 */
52
 */
53
char * get_symtab_entry(__native addr)
53
char * get_symtab_entry(unative_t addr)
54
{
54
{
55
    count_t i;
55
    count_t i;
56
 
56
 
57
    for (i=1;symbol_table[i].address_le;++i) {
57
    for (i=1;symbol_table[i].address_le;++i) {
58
        if (addr < __u64_le2host(symbol_table[i].address_le))
58
        if (addr < uint64_t_le2host(symbol_table[i].address_le))
59
            break;
59
            break;
60
    }
60
    }
61
    if (addr >= __u64_le2host(symbol_table[i-1].address_le))
61
    if (addr >= uint64_t_le2host(symbol_table[i-1].address_le))
62
        return symbol_table[i-1].symbol_name;
62
        return symbol_table[i-1].symbol_name;
63
    return NULL;
63
    return NULL;
64
}
64
}
65
 
65
 
66
/** Find symbols that match the parameter forward and print them.
66
/** Find symbols that match the parameter forward and print them.
Line 106... Line 106...
106
 * Search symbol table, and if there is one match, return it
106
 * Search symbol table, and if there is one match, return it
107
 *
107
 *
108
 * @param name Name of the symbol
108
 * @param name Name of the symbol
109
 * @return 0 - Not found, -1 - Duplicate symbol, other - address of symbol
109
 * @return 0 - Not found, -1 - Duplicate symbol, other - address of symbol
110
 */
110
 */
111
__address get_symbol_addr(const char *name)
111
uintptr_t get_symbol_addr(const char *name)
112
{
112
{
113
    count_t found = 0;
113
    count_t found = 0;
114
    __address addr = NULL;
114
    uintptr_t addr = NULL;
115
    char *hint;
115
    char *hint;
116
    int i;
116
    int i;
117
 
117
 
118
    i = 0;
118
    i = 0;
119
    while ((hint=symtab_search_one(name, &i))) {
119
    while ((hint=symtab_search_one(name, &i))) {
120
        if (!strlen(hint)) {
120
        if (!strlen(hint)) {
121
            addr =  __u64_le2host(symbol_table[i].address_le);
121
            addr =  uint64_t_le2host(symbol_table[i].address_le);
122
            found++;
122
            found++;
123
        }
123
        }
124
        i++;
124
        i++;
125
    }
125
    }
126
    if (found > 1)
126
    if (found > 1)
127
        return ((__address) -1);
127
        return ((uintptr_t) -1);
128
    return addr;
128
    return addr;
129
}
129
}
130
 
130
 
131
/** Find symbols that match parameter and prints them */
131
/** Find symbols that match parameter and prints them */
132
void symtab_print_search(const char *name)
132
void symtab_print_search(const char *name)
133
{
133
{
134
    int i;
134
    int i;
135
    __address addr;
135
    uintptr_t addr;
136
    char *realname;
136
    char *realname;
137
 
137
 
138
 
138
 
139
    i = 0;
139
    i = 0;
140
    while (symtab_search_one(name, &i)) {
140
    while (symtab_search_one(name, &i)) {
141
        addr =  __u64_le2host(symbol_table[i].address_le);
141
        addr =  uint64_t_le2host(symbol_table[i].address_le);
142
        realname = symbol_table[i].symbol_name;
142
        realname = symbol_table[i].symbol_name;
143
        printf("%.*p: %s\n", sizeof(__address) * 2, addr, realname);
143
        printf("%.*p: %s\n", sizeof(uintptr_t) * 2, addr, realname);
144
        i++;
144
        i++;
145
    }
145
    }
146
}
146
}
147
 
147
 
148
/** Symtab completion
148
/** Symtab completion