perf symbols: Look at .dynsym again if .symtab not found
[deliverable/linux.git] / tools / perf / util / symbol.c
index 651dbfe7f4f32b744f828e0ae3ea6ada59b35dec..17df793c89243a44324c5c0deafa45807d0b7f6b 100644 (file)
@@ -1486,7 +1486,9 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
         * On the first pass, only load images if they have a full symtab.
         * Failing that, do a second pass where we accept .dynsym also
         */
-       for (self->symtab_type = SYMTAB__BUILD_ID_CACHE, want_symtab = 1;
+       want_symtab = 1;
+restart:
+       for (self->symtab_type = SYMTAB__BUILD_ID_CACHE;
             self->symtab_type != SYMTAB__NOT_FOUND;
             self->symtab_type++) {
                switch (self->symtab_type) {
@@ -1536,17 +1538,7 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
                        snprintf(name, size, "%s%s", symbol_conf.symfs,
                                 self->long_name);
                        break;
-
-               default:
-                       /*
-                        * If we wanted a full symtab but no image had one,
-                        * relax our requirements and repeat the search.
-                        */
-                       if (want_symtab) {
-                               want_symtab = 0;
-                               self->symtab_type = SYMTAB__BUILD_ID_CACHE;
-                       } else
-                               continue;
+               default:;
                }
 
                /* Name is now the name of the next image to try */
@@ -1573,6 +1565,15 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
                }
        }
 
+       /*
+        * If we wanted a full symtab but no image had one,
+        * relax our requirements and repeat the search.
+        */
+       if (ret <= 0 && want_symtab) {
+               want_symtab = 0;
+               goto restart;
+       }
+
        free(name);
        if (ret < 0 && strstr(self->name, " (deleted)") != NULL)
                return 0;
This page took 0.038558 seconds and 5 git commands to generate.