Peng Yu via llvm-dev
2019-Jan-10 05:04 UTC
[llvm-dev] How to distinguish two static functions with the same name?
llvm-nm does show the difference between two static functions (e.g.,
_print n the following example) with the same name. Is there a way of
allowing it to show their differences (for example, the file where
they are from)? Thanks.
$ gcc -Wall -pedantic -g -c -o print1.o print1.c
$ ar cr ./libprint1.a print1.o
$ gcc -Wall -pedantic -g -fPIC -shared -o ./libprint3.so print3.c
$ gcc -Wall -pedantic -g -c -o main.o main.c
$ gcc -Wall -pedantic -g -c -o print2.o print2.c
$ gcc -L. -lprint1 -lprint3 -o ./main.exe main.o print2.o
$ nm ./main.exe
0000000100000000 T __mh_execute_header
0000000100000ef0 T _main
0000000100000f10 t _print
0000000100000f40 t _print
0000000100000ec0 T _print1
0000000100000f20 T _print2
U _print3
U _puts
U dyld_stub_binder
==> main.c <=/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>
void print1();
static void print() {
print1();
}
int main() {
print();
return 0;
}
==> print1.c <=/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>
void print2();
void print1() {
puts("Hello World1!");
print2();
}
==> print2.c <=/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>
void print3();
static void print() {
puts("Hello World2!");
}
void print2() {
print();
print3();
}
==> print3.c <=/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>
void print3() {
puts("Hello World3!");
}
--
Regards,
Peng
via llvm-dev
2019-Jan-10 15:05 UTC
[llvm-dev] How to distinguish two static functions with the same name?
> -----Original Message----- > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Peng > Yu via llvm-dev > Sent: Thursday, January 10, 2019 12:04 AM > To: llvm-dev at lists.llvm.org > Subject: [llvm-dev] How to distinguish two static functions with the same > name? > > llvm-nm does show the difference between two static functions (e.g., > _print n the following example) with the same name. Is there a way of > allowing it to show their differences (for example, the file where > they are from)? Thanks.You are building with -g so I would expect running addr2line on each function's address would give you its source location. --paulr> > $ gcc -Wall -pedantic -g -c -o print1.o print1.c > $ ar cr ./libprint1.a print1.o > $ gcc -Wall -pedantic -g -fPIC -shared -o ./libprint3.so print3.c > $ gcc -Wall -pedantic -g -c -o main.o main.c > $ gcc -Wall -pedantic -g -c -o print2.o print2.c > $ gcc -L. -lprint1 -lprint3 -o ./main.exe main.o print2.o > $ nm ./main.exe > 0000000100000000 T __mh_execute_header > 0000000100000ef0 T _main > 0000000100000f10 t _print > 0000000100000f40 t _print > 0000000100000ec0 T _print1 > 0000000100000f20 T _print2 > U _print3 > U _puts > U dyld_stub_binder > > > > > ==> main.c <=> /* vim: set noexpandtab tabstop=2: */ > #include <stdio.h> > void print1(); > static void print() { > print1(); > } > > int main() { > print(); > return 0; > } > > ==> print1.c <=> /* vim: set noexpandtab tabstop=2: */ > #include <stdio.h> > void print2(); > > void print1() { > puts("Hello World1!"); > print2(); > } > > ==> print2.c <=> /* vim: set noexpandtab tabstop=2: */ > #include <stdio.h> > void print3(); > > static void print() { > puts("Hello World2!"); > } > > void print2() { > print(); > print3(); > } > > ==> print3.c <=> /* vim: set noexpandtab tabstop=2: */ > #include <stdio.h> > > void print3() { > puts("Hello World3!"); > } > > > -- > Regards, > Peng > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev