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 ... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++