[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug libctf/32161] New: CTF array dimensions dumped backwards
From: |
bruce.mcculloch at oracle dot com |
Subject: |
[Bug libctf/32161] New: CTF array dimensions dumped backwards |
Date: |
Tue, 10 Sep 2024 17:25:59 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=32161
Bug ID: 32161
Summary: CTF array dimensions dumped backwards
Product: binutils
Version: unspecified
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: libctf
Assignee: unassigned at sourceware dot org
Reporter: bruce.mcculloch at oracle dot com
Target Milestone: ---
Created attachment 15698
--> https://sourceware.org/bugzilla/attachment.cgi?id=15698&action=edit
Patch that fixes backwards multidimensional array dumping, plus tests
$ cat array.c
int a[1][2][3]
$ gcc -gctf -o array.o -c array.c
$ objdump --ctf array.o
array.o: file format elf64-x86-64
Contents of CTF section .ctf:
Header:
Magic number: 0xdff2
Version: 4 (CTF_VERSION_3)
Flags: 0x2 (CTF_F_NEWFUNCINFO)
Compilation unit name: //array.c
Data object section: 0x0 -- 0x3 (0x4 bytes)
Object index section: 0x4 -- 0x7 (0x4 bytes)
Variable section: 0x8 -- 0xf (0x8 bytes)
Type section: 0x10 -- 0x77 (0x68 bytes)
String section: 0x78 -- 0x9b (0x24 bytes)
Labels:
Data objects:
a -> 0x5: (kind 4) int [3][2][1] (size 0x18) (aligned at 0x4) -> 0x4: (kind
4) int [3][2] (size 0x18) (aligned at 0x4) -> 0x3: (kind 4) int [3] (size 0xc)
(aligned at 0x4) -> 0x1: (kind 1) int (format 0x1) (size 0x4) (aligned at 0x4)
Function objects:
Variables:
a -> 0x5: (kind 4) int [3][2][1] (size 0x18) (aligned at 0x4) -> 0x4: (kind
4) int [3][2] (size 0x18) (aligned at 0x4) -> 0x3: (kind 4) int [3] (size 0xc)
(aligned at 0x4) -> 0x1: (kind 1) int (format 0x1) (size 0x4) (aligned at 0x4)
Types:
0x1: (kind 1) int (format 0x1) (size 0x4) (aligned at 0x4)
0x2: (kind 1) long unsigned int (format 0x0) (size 0x8) (aligned at 0x8)
0x3: (kind 4) int [3] (size 0xc) (aligned at 0x4) -> 0x1: (kind 1) int
(format 0x1) (size 0x4) (aligned at 0x4)
0x4: (kind 4) int [3][2] (size 0x18) (aligned at 0x4) -> 0x3: (kind 4) int
[3] (size 0xc) (aligned at 0x4) -> 0x1: (kind 1) int (format 0x1) (size 0x4)
(aligned at 0x4)
0x5: (kind 4) int [3][2][1] (size 0x18) (aligned at 0x4) -> 0x4: (kind 4)
int [3][2] (size 0x18) (aligned at 0x4) -> 0x3: (kind 4) int [3] (size 0xc)
(aligned at 0x4) -> 0x1: (kind 1) int (format 0x1) (size 0x4) (aligned at 0x4)
Strings:
0x0:
0x1: int
0x5: long unsigned int
0x17: a
0x19: //array.c
This behavior occurs as a result of the following patch, which was applied in
gcc 14.2.0:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114186
This patch solves the issue of reversed multidimensional array nelems in the
BTF dumper and in the assembler output, but causes the multidimensional arrays
in CTF to be dumped backwards.
This behavior can also be observed in ctf_get_aname() as well as some other
functions.
The problem lies in ctf_decl_push, and I have a solution as well as some tests.
The issue with this is that if this patch is applied while compiling with a
version of gcc older than 14.2.0, this patch will make the dumper output
backwards.
The solution to this is either to backport the gcc-14.2.0 patch, or to add a
flag to objdump and libctf.
Patch is attached.
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug libctf/32161] New: CTF array dimensions dumped backwards,
bruce.mcculloch at oracle dot com <=