46 if (!file->decode(addr, buf, buflen, offset)) {
47 return false;
48 }
49 if (demangle_name && (buf[0] != '\0')) {
50 demangle(buf, buf, buflen);
51 }
52 return true;
53 }
54
55 ElfFile* ElfDecoder::get_elf_file(const char* filepath) {
56 ElfFile* file;
57
58 file = _opened_elf_files;
59 while (file != NULL) {
60 if (file->same_elf_file(filepath)) {
61 return file;
62 }
63 file = file->next();
64 }
65
66 file = new (std::nothrow)ElfFile(filepath);
67 if (file != NULL) {
68 if (_opened_elf_files != NULL) {
69 file->set_next(_opened_elf_files);
70 }
71 _opened_elf_files = file;
72 }
73
74 return file;
75 }
76 #endif // !_WINDOWS && !__APPLE__
|
46 if (!file->decode(addr, buf, buflen, offset)) {
47 return false;
48 }
49 if (demangle_name && (buf[0] != '\0')) {
50 demangle(buf, buf, buflen);
51 }
52 return true;
53 }
54
55 ElfFile* ElfDecoder::get_elf_file(const char* filepath) {
56 ElfFile* file;
57
58 file = _opened_elf_files;
59 while (file != NULL) {
60 if (file->same_elf_file(filepath)) {
61 return file;
62 }
63 file = file->next();
64 }
65
66 file = new (std::nothrow)ElfFile(filepath, true /* load_tables */);
67 if (file != NULL) {
68 if (_opened_elf_files != NULL) {
69 file->set_next(_opened_elf_files);
70 }
71 _opened_elf_files = file;
72 }
73
74 return file;
75 }
76 #endif // !_WINDOWS && !__APPLE__
|