https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88831
Bug ID: 88831
Summary: the layout of .data section of a binary is slightly
changed when -g option is enabled.
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wangchang15 at huawei dot com
Target Milestone: ---
Dear all,
I use a little-endian cross compiler ( gcc7.3-based
build=host=x86_64-suse-linux target=aarch64-linux-gnu) to compile a C
application temp.c which is randomly generated by a CSmith tool.
To check whether the binaries are the same when compiling temp.c with and
without -g option, the following command is used.
/some/path/to/my/cross/compiler/aarch64-linux-gnu-gcc temp.c -static -O2 -I
./csmith/runtime -fcompare-debug=-g -lm -w -o ./temp_O2.exe
The result is an error message " error: temp.c: -fcompare-debug failure
(length)".
I checked the .data section in both binaries (with/without -g option), the
reason is that the position of an array variable (g_32) is changed. Because the
alignment requirement, different number of 0s are supplemented to this array
variable and another array variable g_1161 which leads to the length of .data
section in both binaries are different.
The disassembly fragment of .data section of both binaries are listed below.
The position of array variable g_32 is different in the two binaries.
I do not know whether this situation is normal or this could be some deeper
error.
Definitions of relative variables are listed as follows. All these variables
have initialized to non-zero values at the beginning of the C example.
static int8_t g_32[3][5][7];
static uint16_t g_1161;
static uint64_t g_97[5];
static int32_t g_132;
static int32_t g_562[4][3][6];
static int32_t ** volatile g_997;
static union U0 g_198[5];
.data section fragment 1st (without -g, with -O2):
++++++++++++++++++++++++++++++++++++++++++++++++++
temp_O2.exe: file format elf64-littleaarch64
Disassembly of section .data:
...
0000000000480070 <g_97>:
480070: ff ff ff ff ff ff ff ff f6 ff ff ff ff ff ff ff
................
480080: ff ff ff ff ff ff ff ff f6 ff ff ff ff ff ff ff
................
480090: ff ff ff ff ff ff ff ff ........
0000000000480098 <g_1161>:
480098: b1 bf 00 00 ....
000000000048009c <g_132>:
48009c: 01 00 00 00 ....
00000000004800a0 <g_562>:
4800a0: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
4800b0: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
4800c0: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
4800d0: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
4800e0: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
4800f0: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480100: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480110: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480120: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480130: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480140: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480150: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480160: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480170: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480180: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480190: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
4801a0: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
4801b0: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
00000000004801c0 <g_997>:
4801c0: 88 0d 48 00 00 00 00 00 ..H.....
00000000004801c8 <g_32>:
4801c8: cc 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06
...@......@.....
4801d8: 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40
.@......@......@
4801e8: 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40 01 06
......@......@..
4801f8: cc cc 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc
....@......@....
480208: 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01
..@......@......
480218: 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40 01
@......@......@.
480228: 06 cc cc 06 01 40 01 06 cc 00 00 00 00 00 00 00
.....@..........
0000000000480238 <g_198>:
480238: 9e b0 49 35 07 f7 e4 57 01 00 00 00 00 00 00 00
..I5...W........
480248: 9e b0 49 35 07 f7 e4 57 01 00 00 00 00 00 00 00
..I5...W........
480258: 9e b0 49 35 07 f7 e4 57 ..I5...W
...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.data section fragment 2nd (with -g and -O2):
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
temp_O2_g.exe: file format elf64-littleaarch64
Disassembly of section .data:
...
0000000000480070 <g_97>:
480070: ff ff ff ff ff ff ff ff f6 ff ff ff ff ff ff ff
................
480080: ff ff ff ff ff ff ff ff f6 ff ff ff ff ff ff ff
................
480090: ff ff ff ff ff ff ff ff ........
0000000000480098 <g_32>:
480098: cc 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06
...@......@.....
4800a8: 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40
.@......@......@
4800b8: 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40 01 06
......@......@..
4800c8: cc cc 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc
....@......@....
4800d8: 06 01 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01
..@......@......
4800e8: 40 01 06 cc cc 06 01 40 01 06 cc cc 06 01 40 01
@......@......@.
4800f8: 06 cc cc 06 01 40 01 06 cc 00 .....@....
0000000000480102 <g_1161>:
480102: b1 bf ..
0000000000480104 <g_132>:
480104: 01 00 00 00 ....
0000000000480108 <g_562>:
480108: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480118: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480128: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480138: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480148: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480158: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480168: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480178: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480188: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
480198: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
4801a8: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
4801b8: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
4801c8: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
4801d8: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
4801e8: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
4801f8: 01 00 00 00 a8 63 4b 59 cc 4f 0a a8 38 29 ad 89
.....cKY.O..8)..
480208: cc 4f 0a a8 a8 63 4b 59 01 00 00 00 a8 63 4b 59
.O...cKY.....cKY
480218: cc 4f 0a a8 38 29 ad 89 cc 4f 0a a8 a8 63 4b 59
.O..8)...O...cKY
0000000000480228 <g_997>:
480228: 80 0d 48 00 00 00 00 00 ..H.....
0000000000480230 <g_198>:
480230: 9e b0 49 35 07 f7 e4 57 01 00 00 00 00 00 00 00
..I5...W........
480240: 9e b0 49 35 07 f7 e4 57 01 00 00 00 00 00 00 00
..I5...W........
480250: 9e b0 49 35 07 f7 e4 57 ..I5...W
...
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++