Hayakawa Yutaro via llvm-dev
2018-Aug-31 13:46 UTC
[llvm-dev] BPF backend doesn't generate some of the symtab informations
Hello,
I'm now trying to extract some .symtab information such as source C file
name (STT_FILE) from BPF ELF
object which is compiled from following C code by clang, but it seems the
generated information is different depends
on the target.
=== test.c ===#include <stdint.h>
uint64_t test(uint64_t a) {
return a + 1;
}
===========
For example, when I specify amd64 as a backend, the clang generates the symtab
like below
$ clang -target amd64 -c test.c
$ readelf -s test.o
Symbol table '.symtab' contains 4 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS test.c
2: 0000000000000000 0 SECTION LOCAL DEFAULT 2
3: 0000000000000000 21 FUNC GLOBAL DEFAULT 2 test
We can see the source file name or type of the symbol “test”. However, when I
specify BPF as
a backend, I see output like below.
$ clang -target bpf -c test.c
$ readelf -s test.o
Symbol table '.symtab' contains 2 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 test
Some of the information which was generated on amd64 platform like file name or
size or type of the symbol
are missing in this case.
Working environment is Ubuntu18.04-LTS and clang version is 6.0.0-1ubuntu2
(tags/RELEASE_600/final)
which is installed via apt.
I am just a beginner for LLVM, so this question might be silly, but could you
give me an idea for solving
this problem or tell me what makes difference?
Regards,
Yutaro