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