[llvm-bugs] [Bug 51110] New: Emitted binary code changes when -g is enabled at -O3 with -flto

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Jul 15 14:42:55 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51110

            Bug ID: 51110
           Summary: Emitted binary code changes when -g is enabled at -O3
                    with -flto
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Loop Optimizer
          Assignee: unassignedbugs at nondot.org
          Reporter: tlwang at uwaterloo.ca
                CC: llvm-bugs at lists.llvm.org

The .text section for the following program (transformed_program.c) changes
after toggling the -g flag.

$ cat transformed_program0.c
int printf(const char *, ...);
long a[8];
long *b;
long c[7];
int(d)(int l) { return 0; }
int main() {
  long *e = &c[6], *f = &a[2];
  b = e;
  int g = f != e, h = d(g);
  *b = 7;
i:;
  int k = h < 8;
  if (!k)
    goto j;
  printf("%d\n", (int)a[h]);
  h = h + 1;
  goto i;
j:;
}
$ 
$ clang-trunk -v
clang version 13.0.0 (https://github.com/llvm/llvm-project.git
9cfec72ffeec242783b70e792c50bd163dcf9dbb)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/cnsun/usr/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
$
$ clang-trunk -flto -O3 -w transformed_program0.c ; objdump --disassemble a.out
> "no-g.txt"
$ clang-trunk -g -flto -O3 -w transformed_program0.c ; objdump --disassemble
a.out > "g.txt"
$ diff no-g.txt g.txt
40,41c40,41
<   401053:     49 c7 c0 20 12 40 00    mov    $0x401220,%r8
<   40105a:     48 c7 c1 b0 11 40 00    mov    $0x4011b0,%rcx
---
>   401053:	49 c7 c0 40 12 40 00 	mov    $0x401240,%r8
>   40105a:	48 c7 c1 d0 11 40 00 	mov    $0x4011d0,%rcx
113,144c113,136
<   401131:     bf 04 20 40 00          mov    $0x402004,%edi
<   401136:     31 f6                   xor    %esi,%esi
<   401138:     31 c0                   xor    %eax,%eax
<   40113a:     e8 f1 fe ff ff          callq  401030 <printf at plt>
<   40113f:     bf 04 20 40 00          mov    $0x402004,%edi
<   401144:     31 f6                   xor    %esi,%esi
<   401146:     31 c0                   xor    %eax,%eax
<   401148:     e8 e3 fe ff ff          callq  401030 <printf at plt>
<   40114d:     bf 04 20 40 00          mov    $0x402004,%edi
<   401152:     31 f6                   xor    %esi,%esi
<   401154:     31 c0                   xor    %eax,%eax
<   401156:     e8 d5 fe ff ff          callq  401030 <printf at plt>
<   40115b:     bf 04 20 40 00          mov    $0x402004,%edi
<   401160:     31 f6                   xor    %esi,%esi
<   401162:     31 c0                   xor    %eax,%eax
<   401164:     e8 c7 fe ff ff          callq  401030 <printf at plt>
<   401169:     bf 04 20 40 00          mov    $0x402004,%edi
<   40116e:     31 f6                   xor    %esi,%esi
<   401170:     31 c0                   xor    %eax,%eax
<   401172:     e8 b9 fe ff ff          callq  401030 <printf at plt>
<   401177:     bf 04 20 40 00          mov    $0x402004,%edi
<   40117c:     31 f6                   xor    %esi,%esi
<   40117e:     31 c0                   xor    %eax,%eax
<   401180:     e8 ab fe ff ff          callq  401030 <printf at plt>
<   401185:     bf 04 20 40 00          mov    $0x402004,%edi
<   40118a:     31 f6                   xor    %esi,%esi
<   40118c:     31 c0                   xor    %eax,%eax
<   40118e:     e8 9d fe ff ff          callq  401030 <printf at plt>
<   401193:     bf 04 20 40 00          mov    $0x402004,%edi
<   401198:     31 f6                   xor    %esi,%esi
<   40119a:     31 c0                   xor    %eax,%eax
<   40119c:     e8 8f fe ff ff          callq  401030 <printf at plt>
---
>   401131:	48 c7 05 34 2f 00 00 	movq   $0x7,0x2f34(%rip)        # 404070 <c+0x30>
>   401138:	07 00 00 00
>   40113c:	8b 35 3e 2f 00 00    	mov    0x2f3e(%rip),%esi        # 404080 <a>
>   401142:	bf 04 20 40 00       	mov    $0x402004,%edi
>   401147:	31 c0                	xor    %eax,%eax
>   401149:	e8 e2 fe ff ff       	callq  401030 <printf at plt>
>   40114e:	8b 35 34 2f 00 00    	mov    0x2f34(%rip),%esi        # 404088 <a+0x8>
>   401154:	bf 04 20 40 00       	mov    $0x402004,%edi
>   401159:	31 c0                	xor    %eax,%eax
>   40115b:	e8 d0 fe ff ff       	callq  401030 <printf at plt>
>   401160:	8b 35 2a 2f 00 00    	mov    0x2f2a(%rip),%esi        # 404090 <a+0x10>
>   401166:	bf 04 20 40 00       	mov    $0x402004,%edi
>   40116b:	31 c0                	xor    %eax,%eax
>   40116d:	e8 be fe ff ff       	callq  401030 <printf at plt>
>   401172:	8b 35 20 2f 00 00    	mov    0x2f20(%rip),%esi        # 404098 <a+0x18>
>   401178:	bf 04 20 40 00       	mov    $0x402004,%edi
>   40117d:	31 c0                	xor    %eax,%eax
>   40117f:	e8 ac fe ff ff       	callq  401030 <printf at plt>
>   401184:	8b 35 16 2f 00 00    	mov    0x2f16(%rip),%esi        # 4040a0 <a+0x20>
>   40118a:	bf 04 20 40 00       	mov    $0x402004,%edi
>   40118f:	31 c0                	xor    %eax,%eax
>   401191:	e8 9a fe ff ff       	callq  401030 <printf at plt>
>   401196:	8b 35 0c 2f 00 00    	mov    0x2f0c(%rip),%esi        # 4040a8 <a+0x28>
>   40119c:	bf 04 20 40 00       	mov    $0x402004,%edi
146,192c138,191
<   4011a3:     59                      pop    %rcx
<   4011a4:     c3                      retq
<   4011a5:     66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
<   4011ac:     00 00 00
<   4011af:     90                      nop
<
< 00000000004011b0 <__libc_csu_init>:
<   4011b0:     f3 0f 1e fa             endbr64
<   4011b4:     41 57                   push   %r15
<   4011b6:     4c 8d 3d 53 2c 00 00    lea    0x2c53(%rip),%r15        #
403e10 <__frame_dummy_init_array_entry>
<   4011bd:     41 56                   push   %r14
<   4011bf:     49 89 d6                mov    %rdx,%r14
<   4011c2:     41 55                   push   %r13
<   4011c4:     49 89 f5                mov    %rsi,%r13
<   4011c7:     41 54                   push   %r12
<   4011c9:     41 89 fc                mov    %edi,%r12d
<   4011cc:     55                      push   %rbp
<   4011cd:     48 8d 2d 44 2c 00 00    lea    0x2c44(%rip),%rbp        #
403e18 <__do_global_dtors_aux_fini_array_entry>
<   4011d4:     53                      push   %rbx
<   4011d5:     4c 29 fd                sub    %r15,%rbp
<   4011d8:     48 83 ec 08             sub    $0x8,%rsp
<   4011dc:     e8 1f fe ff ff          callq  401000 <_init>
<   4011e1:     48 c1 fd 03             sar    $0x3,%rbp
<   4011e5:     74 1f                   je     401206 <__libc_csu_init+0x56>
<   4011e7:     31 db                   xor    %ebx,%ebx
<   4011e9:     0f 1f 80 00 00 00 00    nopl   0x0(%rax)
<   4011f0:     4c 89 f2                mov    %r14,%rdx
<   4011f3:     4c 89 ee                mov    %r13,%rsi
<   4011f6:     44 89 e7                mov    %r12d,%edi
<   4011f9:     41 ff 14 df             callq  *(%r15,%rbx,8)
<   4011fd:     48 83 c3 01             add    $0x1,%rbx
<   401201:     48 39 dd                cmp    %rbx,%rbp
<   401204:     75 ea                   jne    4011f0 <__libc_csu_init+0x40>
<   401206:     48 83 c4 08             add    $0x8,%rsp
<   40120a:     5b                      pop    %rbx
<   40120b:     5d                      pop    %rbp
<   40120c:     41 5c                   pop    %r12
<   40120e:     41 5d                   pop    %r13
<   401210:     41 5e                   pop    %r14
<   401212:     41 5f                   pop    %r15
<   401214:     c3                      retq
<   401215:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
<   40121c:     00 00 00 00
<
< 0000000000401220 <__libc_csu_fini>:
<   401220:     f3 0f 1e fa             endbr64
<   401224:     c3                      retq
---
>   4011a3:	e8 88 fe ff ff       	callq  401030 <printf at plt>
>   4011a8:	8b 35 02 2f 00 00    	mov    0x2f02(%rip),%esi        # 4040b0 <a+0x30>
>   4011ae:	bf 04 20 40 00       	mov    $0x402004,%edi
>   4011b3:	31 c0                	xor    %eax,%eax
>   4011b5:	e8 76 fe ff ff       	callq  401030 <printf at plt>
>   4011ba:	8b 35 f8 2e 00 00    	mov    0x2ef8(%rip),%esi        # 4040b8 <a+0x38>
>   4011c0:	bf 04 20 40 00       	mov    $0x402004,%edi
>   4011c5:	31 c0                	xor    %eax,%eax
>   4011c7:	e8 64 fe ff ff       	callq  401030 <printf at plt>
>   4011cc:	31 c0                	xor    %eax,%eax
>   4011ce:	59                   	pop    %rcx
>   4011cf:	c3                   	retq
>
> 00000000004011d0 <__libc_csu_init>:
>   4011d0:	f3 0f 1e fa          	endbr64
>   4011d4:	41 57                	push   %r15
>   4011d6:	4c 8d 3d 33 2c 00 00 	lea    0x2c33(%rip),%r15        # 403e10 <__frame_dummy_init_array_entry>
>   4011dd:	41 56                	push   %r14
>   4011df:	49 89 d6             	mov    %rdx,%r14
>   4011e2:	41 55                	push   %r13
>   4011e4:	49 89 f5             	mov    %rsi,%r13
>   4011e7:	41 54                	push   %r12
>   4011e9:	41 89 fc             	mov    %edi,%r12d
>   4011ec:	55                   	push   %rbp
>   4011ed:	48 8d 2d 24 2c 00 00 	lea    0x2c24(%rip),%rbp        # 403e18 <__do_global_dtors_aux_fini_array_entry>
>   4011f4:	53                   	push   %rbx
>   4011f5:	4c 29 fd             	sub    %r15,%rbp
>   4011f8:	48 83 ec 08          	sub    $0x8,%rsp
>   4011fc:	e8 ff fd ff ff       	callq  401000 <_init>
>   401201:	48 c1 fd 03          	sar    $0x3,%rbp
>   401205:	74 1f                	je     401226 <__libc_csu_init+0x56>
>   401207:	31 db                	xor    %ebx,%ebx
>   401209:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)
>   401210:	4c 89 f2             	mov    %r14,%rdx
>   401213:	4c 89 ee             	mov    %r13,%rsi
>   401216:	44 89 e7             	mov    %r12d,%edi
>   401219:	41 ff 14 df          	callq  *(%r15,%rbx,8)
>   40121d:	48 83 c3 01          	add    $0x1,%rbx
>   401221:	48 39 dd             	cmp    %rbx,%rbp
>   401224:	75 ea                	jne    401210 <__libc_csu_init+0x40>
>   401226:	48 83 c4 08          	add    $0x8,%rsp
>   40122a:	5b                   	pop    %rbx
>   40122b:	5d                   	pop    %rbp
>   40122c:	41 5c                	pop    %r12
>   40122e:	41 5d                	pop    %r13
>   401230:	41 5e                	pop    %r14
>   401232:	41 5f                	pop    %r15
>   401234:	c3                   	retq
>   401235:	66 66 2e 0f 1f 84 00 	data16 nopw %cs:0x0(%rax,%rax,1)
>   40123c:	00 00 00 00
>
> 0000000000401240 <__libc_csu_fini>:
>   401240:	f3 0f 1e fa          	endbr64
>   401244:	c3                   	retq
196,200c195,199
< 0000000000401228 <_fini>:
<   401228:     f3 0f 1e fa             endbr64
<   40122c:     48 83 ec 08             sub    $0x8,%rsp
<   401230:     48 83 c4 08             add    $0x8,%rsp
<   401234:     c3                      retq
---
> 0000000000401248 <_fini>:
>   401248:	f3 0f 1e fa          	endbr64
>   40124c:	48 83 ec 08          	sub    $0x8,%rsp
>   401250:	48 83 c4 08          	add    $0x8,%rsp
>   401254:	c3                   	retq

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210715/4d3b48fb/attachment.html>


More information about the llvm-bugs mailing list