----- "Bernhard Walle" <bwalle(a)suse.de> wrote:
* Dave Anderson [2008-08-25 09:27]:
>
>
> Unfortunately on an unstripped version, it drops all ~3000 ' t '
symbols and
> only dumps type 'T' symbols. Probably it should run -Bn first, or
recognize
> otherwise that it's been stripped, and if it dumps no symbols,
[re]try it
> with -DBn?
Ah, ok, I just checked with running crash that the output still
works,
but did not compare nm and nm -D.
What about the new patch?
Hmmm, seems to be a of a lot of work for something that could be
done in just a few lines? Since the first -Bn attempt with fd 2
redirected to /dev/null returns nothing to fgets(), how about just
recognizing that, rewriting the command string, and continue?
Something like:
- sprintf(buf, "/usr/bin/nm -Bn %s, thisfile);
+ sprintf(buf, "/usr/bin/nm -Bn %s 2> /dev/null", thisfile);
if (!(pipe = popen(buf, "r"))) {
perror("pipe");
break;
}
+ if (!(fgets(buf, 80, pipe)))
+ pclose(pipe);
+ sprintf(buf, "/usr/bin/nm -DBn %s", thisfile);
+ if (!(pipe = popen(buf, "r"))) {
+ perror("pipe");
+ break;
+ }
+ }
last_vaddr = 0;
BZERO(symbol, BUFSIZE);
It probably could be made even simpler than that if a quick-and-dirty
pre-examination of thisfile could be done to determine whether it's
stripped or not?
Dave