dwarf_loader: Encode char type as signed
Currently, the pahole treats 'char' or 'signed char' type as unsigned in
BTF generation. The following is an example,
$ cat t.c
signed char a;
char b;
$ clang -O2 -g -c t.c
$ pahole -JV t.o
...
[1] INT signed char size=1 nr_bits=8 encoding=(none)
[2] INT char size=1 nr_bits=8 encoding=(none)
In the above encoding '(none)' implies unsigned type.
But if the same program is compiled with bpf target,
$ clang -target bpf -O2 -g -c t.c
$ bpftool btf dump file t.o
[1] INT 'signed char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED
[2] VAR 'a' type_id=1, linkage=global
[3] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED
[4] VAR 'b' type_id=3, linkage=global
[5] DATASEC '.bss' size=0 vlen=2
type_id=2 offset=0 size=1 (VAR 'a')
type_id=4 offset=0 size=1 (VAR 'b')
the 'char' and 'signed char' are encoded as SIGNED integers.
Encode 'char' and 'signed char' as SIGNED should be a right to
do and it will be consistent with bpf implementation.
With this patch,
$ pahole -JV t.o
...
[1] INT signed char size=1 nr_bits=8 encoding=SIGNED
[2] INT char size=1 nr_bits=8 encoding=SIGNED
Signed-off-by: Yonghong Song <yhs@fb.com>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Cc: kernel-team@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 file changed