Revision e80cfcfc disas.c

b/disas.c
9 9
#include "disas.h"
10 10

  
11 11
/* Filled in by elfload.c.  Simplistic, but will do for now. */
12
unsigned int disas_num_syms;
13
void *disas_symtab;
14
const char *disas_strtab;
12
struct syminfo *syminfos = NULL;
15 13

  
16 14
/* Get LENGTH bytes from info's buffer, at target address memaddr.
17 15
   Transfer them to myaddr.  */
......
203 201
{
204 202
    unsigned int i;
205 203
    /* Hack, because we know this is x86. */
206
    Elf32_Sym *sym = disas_symtab;
207

  
208
    for (i = 0; i < disas_num_syms; i++) {
209
	if (sym[i].st_shndx == SHN_UNDEF
210
	    || sym[i].st_shndx >= SHN_LORESERVE)
211
	    continue;
212

  
213
	if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC)
214
	    continue;
215

  
216
	if ((long)orig_addr >= sym[i].st_value
217
	    && (long)orig_addr < sym[i].st_value + sym[i].st_size)
218
	    return disas_strtab + sym[i].st_name;
204
    Elf32_Sym *sym;
205
    struct syminfo *s;
206
    
207
    for (s = syminfos; s; s = s->next) {
208
	sym = s->disas_symtab;
209
	for (i = 0; i < s->disas_num_syms; i++) {
210
	    if (sym[i].st_shndx == SHN_UNDEF
211
		|| sym[i].st_shndx >= SHN_LORESERVE)
212
		continue;
213

  
214
	    if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC)
215
		continue;
216

  
217
	    if ((long)orig_addr >= sym[i].st_value
218
		&& (long)orig_addr < sym[i].st_value + sym[i].st_size)
219
		return s->disas_strtab + sym[i].st_name;
220
	}
219 221
    }
220 222
    return "";
221 223
}

Also available in: Unified diff