+/*
+ Copyright 2009 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* This was compiled from a trivial program just to test the
+ DW_OP_stack_value and DW_OP_implicit_value operators:
+
+ unsigned int func (unsigned int arg) __attribute__ ((__noinline__));
+
+ unsigned int func (unsigned int arg)
+ {
+ unsigned int uses_stack_op = 23;
+ unsigned int uses_lit_op = 0x7fffffff;
+ unsigned int result = arg;
+
+ if (arg % 2)
+ result += uses_lit_op + uses_stack_op;
+ else
+ {
+ ++uses_stack_op;
+ ++uses_lit_op;
+
+ result -= uses_stack_op + uses_lit_op;
+ }
+
+ return result * uses_stack_op; // line 19, see the .exp file
+ }
+
+ int main (int argc, char *argv[])
+ {
+ return func (1024);
+ }
+
+ Then it was compiled with:
+
+ gcc -fvar-tracking{,-assignments} -gdwarf-3
+ -fno-inline{,-functions,-small-functions,-functions-called-once}
+ -O2
+
+*/
+
+ .file "valop.c"
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .p2align 4,,15
+.globl func
+ .type func, @function
+func:
+.LFB0:
+ .file 1 "valop.c"
+ .loc 1 4 0
+ .cfi_startproc
+.LVL0:
+ pushl %ebp
+ .cfi_def_cfa_offset 8
+ movl %esp, %ebp
+ .cfi_offset 5, -8
+ .cfi_def_cfa_register 5
+ .loc 1 4 0
+ movl 8(%ebp), %eax
+.LVL1:
+ .loc 1 9 0
+ testb $1, %al
+ jne .L5
+.LVL2:
+ .loc 1 16 0
+ addl $2147483624, %eax
+.LVL3:
+ .loc 1 13 0
+ movl $24, %edx
+.LVL4:
+ .loc 1 16 0
+ imull %edx, %eax
+.LVL5:
+ .loc 1 20 0
+ popl %ebp
+ .cfi_remember_state
+ .cfi_restore 5
+ .cfi_def_cfa 4, 4
+ ret
+.LVL6:
+ .p2align 4,,7
+ .p2align 3
+.L5:
+ .cfi_restore_state
+ .loc 1 10 0
+ subl $2147483626, %eax
+.LVL7:
+ .loc 1 5 0
+ movl $23, %edx
+.LVL8:
+ .loc 1 16 0
+ imull %edx, %eax
+.LVL9:
+ .loc 1 20 0
+ popl %ebp
+ .cfi_def_cfa 4, 4
+ .cfi_restore 5
+ ret
+ .cfi_endproc
+.LFE0:
+ .size func, .-func
+ .p2align 4,,15
+.globl _start
+ .type _start, @function
+_start:
+.LFB1:
+ .loc 1 23 0
+ .cfi_startproc
+.LVL10:
+ pushl %ebp
+ .cfi_def_cfa_offset 8
+ movl %esp, %ebp
+ .cfi_offset 5, -8
+ .cfi_def_cfa_register 5
+ subl $4, %esp
+ .loc 1 24 0
+ movl $1024, (%esp)
+ call func
+.LVL11:
+ .loc 1 25 0
+ leave
+ .cfi_restore 5
+ .cfi_def_cfa 4, 4
+ ret
+ .cfi_endproc
+.LFE1:
+ .size _start, .-_start
+.Letext0:
+ .section .debug_loc,"",@progbits
+.Ldebug_loc0:
+.LLST0:
+ .long .LVL0-.Ltext0
+ .long .LVL2-.Ltext0
+ .value 0x4
+ .byte 0x47
+ .byte 0x9f
+ .byte 0x93
+ .uleb128 0x4
+ .long .LVL2-.Ltext0
+ .long .LVL4-.Ltext0
+ .value 0x4
+ .byte 0x48
+ .byte 0x9f
+ .byte 0x93
+ .uleb128 0x4
+ .long .LVL4-.Ltext0
+ .long .LVL6-.Ltext0
+ .value 0x1
+ .byte 0x52
+ .long .LVL6-.Ltext0
+ .long .LVL8-.Ltext0
+ .value 0x4
+ .byte 0x47
+ .byte 0x9f
+ .byte 0x93
+ .uleb128 0x4
+ .long .LVL8-.Ltext0
+ .long .LFE0-.Ltext0
+ .value 0x1
+ .byte 0x52
+ .long 0x0
+ .long 0x0
+.LLST1:
+ .long .LVL0-.Ltext0
+ .long .LVL2-.Ltext0
+ .value 0x6
+ .byte 0x9e
+ .uleb128 0x4
+ .long 0x7fffffff
+ .long .LVL2-.Ltext0
+ .long .LVL6-.Ltext0
+ .value 0x6
+ .byte 0x9e
+ .uleb128 0x4
+ .long 0x80000000
+ .long .LVL6-.Ltext0
+ .long .LFE0-.Ltext0
+ .value 0x6
+ .byte 0x9e
+ .uleb128 0x4
+ .long 0x7fffffff
+ .long 0x0
+ .long 0x0
+.LLST2:
+ .long .LVL1-.Ltext0
+ .long .LVL3-.Ltext0
+ .value 0x1
+ .byte 0x50
+ .long .LVL3-.Ltext0
+ .long .LVL5-.Ltext0
+ .value 0x1
+ .byte 0x50
+ .long .LVL6-.Ltext0
+ .long .LVL7-.Ltext0
+ .value 0x1
+ .byte 0x50
+ .long .LVL7-.Ltext0
+ .long .LVL9-.Ltext0
+ .value 0x1
+ .byte 0x50
+ .long 0x0
+ .long 0x0
+.LLST3:
+ .long .LVL10-.Ltext0
+ .long .LVL11-1-.Ltext0
+ .value 0x2
+ .byte 0x91
+ .sleb128 0
+ .long 0x0
+ .long 0x0
+.LLST4:
+ .long .LVL10-.Ltext0
+ .long .LVL11-1-.Ltext0
+ .value 0x2
+ .byte 0x91
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+ .section .debug_info
+ .long 0xd4
+ .value 0x3
+ .long .Ldebug_abbrev0
+ .byte 0x4
+ .uleb128 0x1
+ .long .LASF9
+ .byte 0x1
+ .long .LASF10
+ .long .LASF11
+ .long .Ltext0
+ .long .Letext0
+ .long .Ldebug_line0
+ .uleb128 0x2
+ .byte 0x1
+ .long .LASF3
+ .byte 0x1
+ .byte 0x3
+ .byte 0x1
+ .long 0x7c
+ .long .LFB0
+ .long .LFE0
+ .byte 0x1
+ .byte 0x9c
+ .long 0x7c
+ .uleb128 0x3
+ .string "arg"
+ .byte 0x1
+ .byte 0x3
+ .long 0x7c
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x4
+ .long .LASF0
+ .byte 0x1
+ .byte 0x5
+ .long 0x7c
+ .long .LLST0
+ .uleb128 0x4
+ .long .LASF1
+ .byte 0x1
+ .byte 0x6
+ .long 0x7c
+ .long .LLST1
+ .uleb128 0x4
+ .long .LASF2
+ .byte 0x1
+ .byte 0x7
+ .long 0x7c
+ .long .LLST2
+ .byte 0x0
+ .uleb128 0x5
+ .byte 0x4
+ .byte 0x7
+ .long .LASF7
+ .uleb128 0x2
+ .byte 0x1
+ .long .LASF4
+ .byte 0x1
+ .byte 0x16
+ .byte 0x1
+ .long 0xbd
+ .long .LFB1
+ .long .LFE1
+ .byte 0x1
+ .byte 0x9c
+ .long 0xbd
+ .uleb128 0x6
+ .long .LASF5
+ .byte 0x1
+ .byte 0x16
+ .long 0xbd
+ .long .LLST3
+ .uleb128 0x6
+ .long .LASF6
+ .byte 0x1
+ .byte 0x16
+ .long 0xc4
+ .long .LLST4
+ .byte 0x0
+ .uleb128 0x7
+ .byte 0x4
+ .byte 0x5
+ .string "int"
+ .uleb128 0x8
+ .byte 0x4
+ .long 0xca
+ .uleb128 0x8
+ .byte 0x4
+ .long 0xd0
+ .uleb128 0x5
+ .byte 0x1
+ .byte 0x6
+ .long .LASF8
+ .byte 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1b
+ .uleb128 0xe
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x27
+ .uleb128 0xc
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x5
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x6
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x7
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x8
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"",@progbits
+ .long 0x20
+ .value 0x2
+ .long .Ldebug_info0
+ .long 0xd8
+ .long 0x25
+ .string "func"
+ .long 0x83
+ .string "main"
+ .long 0x0
+ .section .debug_aranges,"",@progbits
+ .long 0x1c
+ .value 0x2
+ .long .Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .value 0x0
+ .value 0x0
+ .long .Ltext0
+ .long .Letext0-.Ltext0
+ .long 0x0
+ .long 0x0
+ .section .debug_str,"MS",@progbits,1
+.LASF7:
+ .string "unsigned int"
+.LASF3:
+ .string "func"
+.LASF0:
+ .string "uses_stack_op"
+.LASF5:
+ .string "argc"
+.LASF10:
+ .string "valop.c"
+.LASF2:
+ .string "result"
+.LASF8:
+ .string "char"
+.LASF9:
+ .string "GNU C 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]"
+.LASF4:
+ .string "main"
+.LASF11:
+ .string "/tmp"
+.LASF1:
+ .string "uses_lit_op"
+.LASF6:
+ .string "argv"
+ .ident "GCC: (GNU) 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]"
+ .section .note.GNU-stack,"",@progbits