| Index: gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S
 | 
| diff --git a/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S b/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..32fe49db3e115b8edc3398b62dff3ddce13feb51
 | 
| --- /dev/null
 | 
| +++ b/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S
 | 
| @@ -0,0 +1,677 @@
 | 
| +/* This testcase is part of GDB, the GNU debugger.
 | 
| +
 | 
| +   Copyright 2012-2013 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/>.  */
 | 
| +
 | 
| +
 | 
| +/* Test the behaviour of gdb in the following situation, the dwarf debug
 | 
| +   information describes a parameter as being in a register but a more
 | 
| +   recent (inner) frame marks the register as being undefined.
 | 
| +
 | 
| +   This can arrise if the dwarf producer has the location of a parameter in
 | 
| +   a callee clobbered register at the time of a call.  Older versions of
 | 
| +   gcc used to do this, newer versions seem to avoid this issue.
 | 
| +
 | 
| +   Though it could be argued that such dwarf is incorrect, we would still
 | 
| +   like gdb to behave in a user friendly, and helpful way when presented
 | 
| +   with such dwarf.  */
 | 
| +
 | 
| +/* There are 4 test cases in this assembler file.  In each case funcion
 | 
| +   main calls each test function in turn, each test case then calls the
 | 
| +   breakpt function.
 | 
| +
 | 
| +   We don't actually pass any parameters around, we don't need to, instead
 | 
| +   the dwarf for each test function declares that the function has some
 | 
| +   parameters, and tells us which registers these parameters are in.  The
 | 
| +   breakpt function marks some of these registers as undefined.  The main
 | 
| +   function helpfully places some marker values into all the registers that
 | 
| +   are used as parameters so we can see if they ever get printed.
 | 
| +
 | 
| +   We use gdb to break in the breakpt function for each of the 4 test
 | 
| +   cases, and then backtrace through the test function back to main.  In
 | 
| +   each case some or all of the parameters to the test function should be
 | 
| +   marked as optimized out, due to the breakpt function effectively
 | 
| +   clobbering them.
 | 
| +
 | 
| +   The dwarf register numbering is different to the gdb register number.
 | 
| +   In some of the tests we rely on gdb behaviour of being able to specify a
 | 
| +   struct using a single register location, the structure will then "flow"
 | 
| +   into the next gdb register.  The initial register is specified using a
 | 
| +   dwarf register number, but the "next" register will depend on gdb
 | 
| +   register ordering.
 | 
| +
 | 
| +   Exposing this internal gdb register numbering is really a gdb bug, the
 | 
| +   functionality for selecting the "next" register should be moved into
 | 
| +   target dependent code (such as AVR).  Right now we work around this
 | 
| +   bug in this test; if the bug is ever fixed this test is going to need
 | 
| +   some tweaking.
 | 
| +
 | 
| +   The breakpt function always marks rcx, rsi, and rdi as undefined.
 | 
| +
 | 
| +      register | dwarf | gdb   |         |
 | 
| +      name     | reg # | reg # | breakpt |
 | 
| +     ----------|-------|-------|---------|
 | 
| +        rdx    | 1     | 3     |         |
 | 
| +        rcx    | 2     | 2     | undef   |
 | 
| +        rbx    | 3     | 1     |         |
 | 
| +        rsi    | 4     | 4     | undef   |
 | 
| +        rdi    | 5     | 5     | undef   |
 | 
| +
 | 
| +   We declare the test parameters to be in the register rdx, rcx, rbx, rsi,
 | 
| +   and rdi.  Of these, rdx and rbx are not traditionally used for parameter
 | 
| +   passing, but that really doesn't matter for this test.
 | 
| +
 | 
| +   int_param_single_reg_loc: Passes 8-byte integer parameters in 8-byte
 | 
| +                             registers using DW_OP_regn style location
 | 
| +                             information.  The parameters are placed as
 | 
| +                             follows, operand0 (rcx), operand1 (rbx),
 | 
| +                             operand2 (rsi).  We expect operand0 and
 | 
| +                             operand2 to be marked as optimised out, but
 | 
| +                             operand1 to be valid.
 | 
| +
 | 
| +   struct_param_single_reg_loc: Passes 16-byte structures in two 8-byte
 | 
| +                                registers using dwarf DW_OP_regn location
 | 
| +                                information to describe a single register,
 | 
| +                                gdb will assume that the structure flows
 | 
| +                                into the next sequential register.  The
 | 
| +                                parameters are placed as follows, operand0
 | 
| +                                (rbx/rcx), operand1 (rcx/rdx), and operand2
 | 
| +                                (rsi/rdi).  The reuse of rcx between
 | 
| +                                operand0 and operand1 is intentional.
 | 
| +
 | 
| +   struct_param_two_reg_pieces: Passes 16-byte structure in two 8-byte
 | 
| +                                registers using dwarf DW_OP_piece based
 | 
| +                                location information to describe both
 | 
| +                                registers.  The parameters are placed as
 | 
| +                                follows, operand0 (rdx/rcx), operand1
 | 
| +                                (rcx/rbx), and operand2 (rsi/rdi).  The
 | 
| +                                reuse of rcx between operand0 and operand1
 | 
| +                                is intentional.
 | 
| +
 | 
| +   int_param_two_reg_pieces: Passes 8-byte integer values in two 8-byte
 | 
| +                             registers with 4-bytes being placed in each
 | 
| +                             register, using dwarf DW_OP_piece based
 | 
| +                             location information to describe how the
 | 
| +                             parameters are split up.The parameters are
 | 
| +                             placed as follows, operand0 (rdx/rcx),
 | 
| +                             operand1 (rcx/rbx), and operand2 (rsi/rdi).
 | 
| +                             The reuse of rcx between operand0 and operand1
 | 
| +                             is intentional.
 | 
| +*/
 | 
| +
 | 
| +        .text
 | 
| +
 | 
| +.Ltext0:
 | 
| +
 | 
| +        /* main */
 | 
| +.globl main
 | 
| +        .type   main, @function
 | 
| +main:
 | 
| +.Ltext1:
 | 
| +        sub    $0x8,%rsp
 | 
| +.Ltext2:
 | 
| +        movq    $0xdeadbe00deadbe01, %rbx
 | 
| +        movq    $0xdeadbe02deadbe03, %rcx
 | 
| +        movq    $0xdeadbe04deadbe05, %rdx
 | 
| +        movq    $0xdeadbe06deadbe07, %rsi
 | 
| +        movq    $0xdeadbe08deadbe09, %rdi
 | 
| +
 | 
| +        callq    int_param_single_reg_loc
 | 
| +        nop
 | 
| +
 | 
| +        callq    struct_param_single_reg_loc
 | 
| +        nop
 | 
| +
 | 
| +        callq    struct_param_two_reg_pieces
 | 
| +        nop
 | 
| +
 | 
| +        callq    int_param_two_reg_pieces
 | 
| +        nop
 | 
| +
 | 
| +        add    $0x8,%rsp
 | 
| +        retq
 | 
| +.Ltext3:
 | 
| +        .size   main, .-main
 | 
| +
 | 
| +        /* breakpt */
 | 
| +.globl breakpt
 | 
| +        .type   breakpt, @function
 | 
| +breakpt:
 | 
| +.Ltext4:
 | 
| +        sub    $0x8,%rsp
 | 
| +        add    $0x8, %rsp
 | 
| +        retq
 | 
| +.Ltext5:
 | 
| +        .size   breakpt, .-breakpt
 | 
| +
 | 
| +        /* int_param_single_reg_loc */
 | 
| +.globl int_param_single_reg_loc
 | 
| +        .type   int_param_single_reg_loc, @function
 | 
| +int_param_single_reg_loc:
 | 
| +.Ltext5:
 | 
| +        sub    $0x8,%rsp
 | 
| +.Ltext6:
 | 
| +        nop
 | 
| +        callq    breakpt
 | 
| +        nop
 | 
| +        add    $0x8,%rsp
 | 
| +        retq
 | 
| +.Ltext7:
 | 
| +        .size   int_param_single_reg_loc, .-int_param_single_reg_loc
 | 
| +
 | 
| +        /* struct_param_single_reg_loc */
 | 
| +.globl struct_param_single_reg_loc
 | 
| +        .type   struct_param_single_reg_loc, @function
 | 
| +struct_param_single_reg_loc:
 | 
| +.Ltext8:
 | 
| +        sub    $0x8,%rsp
 | 
| +.Ltext9:
 | 
| +        nop
 | 
| +        callq    breakpt
 | 
| +        nop
 | 
| +        add    $0x8,%rsp
 | 
| +        retq
 | 
| +.Ltext10:
 | 
| +        .size   struct_param_single_reg_loc, .-struct_param_single_reg_loc
 | 
| +
 | 
| +        /* struct_param_two_reg_pieces */
 | 
| +.globl struct_param_two_reg_pieces
 | 
| +        .type   struct_param_two_reg_pieces, @function
 | 
| +struct_param_two_reg_pieces:
 | 
| +.Ltext11:
 | 
| +        sub    $0x8,%rsp
 | 
| +.Ltext12:
 | 
| +        nop
 | 
| +        callq    breakpt
 | 
| +        nop
 | 
| +        add    $0x8,%rsp
 | 
| +        retq
 | 
| +.Ltext13:
 | 
| +        .size   struct_param_two_reg_pieces, .-struct_param_two_reg_pieces
 | 
| +
 | 
| +        /* int_param_two_reg_pieces */
 | 
| +.globl int_param_two_reg_pieces
 | 
| +        .type   int_param_two_reg_pieces, @function
 | 
| +int_param_two_reg_pieces:
 | 
| +.Ltext14:
 | 
| +        sub    $0x8,%rsp
 | 
| +.Ltext15:
 | 
| +        nop
 | 
| +        callq    breakpt
 | 
| +        nop
 | 
| +        add    $0x8,%rsp
 | 
| +        retq
 | 
| +.Ltext16:
 | 
| +        .size   int_param_two_reg_pieces, .-int_param_two_reg_pieces
 | 
| +
 | 
| +
 | 
| +.Letext0:
 | 
| +
 | 
| +        /*******************************************************/
 | 
| +
 | 
| +        .section	.debug_frame,"",@progbits
 | 
| +
 | 
| +        /* CIE */
 | 
| +.Lframe0:
 | 
| +	.long	.LECIE0-.LSCIE0 /* length */
 | 
| +.LSCIE0:
 | 
| +	.long	0xffffffff      /* CIE_id */
 | 
| +	.byte	0x1             /* version */
 | 
| +	.string	""              /* augmentation */
 | 
| +	.uleb128 0x1            /* code alignment */
 | 
| +	.sleb128 -8             /* data alignment */
 | 
| +	.byte	0x10            /* R/A column */
 | 
| +        /* Initial instructions */
 | 
| +	.byte	0xc             /* DW_CFA_def_cfa */
 | 
| +	.uleb128 0x7            /* reg# */
 | 
| +	.uleb128 0x8            /* offset */
 | 
| +	.byte	0x90            /* DW_CFA_offset (r16) */
 | 
| +	.uleb128 0x1            /* offset */
 | 
| +	.align 8
 | 
| +.LECIE0:
 | 
| +
 | 
| +        /* FDE : breakpt */
 | 
| +.LSFDE0:
 | 
| +	.long	.LEFDE0-.LASFDE0        /* length */
 | 
| +.LASFDE0:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext4                 /* start */
 | 
| +	.quad	.Ltext5-.Ltext4         /* length */
 | 
| +        /* Instructions */
 | 
| +        .byte   0x7                     /* DW_CFA_undefined */
 | 
| +        .uleb128 0x2                    /* reg# */
 | 
| +        .byte   0x7                     /* DW_CFA_undefined */
 | 
| +        .uleb128 0x4                    /* reg# */
 | 
| +        .byte   0x7                     /* DW_CFA_undefined */
 | 
| +        .uleb128 0x5                    /* reg# */
 | 
| +	.align 8
 | 
| +.LEFDE0:
 | 
| +
 | 
| +        /* FDE : int_param_single_reg_loc */
 | 
| +.LSFDE2:
 | 
| +	.long	.LEFDE2-.LASFDE2        /* length */
 | 
| +.LASFDE2:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext5                 /* start */
 | 
| +	.quad	.Ltext7-.Ltext5         /* length */
 | 
| +        /* Instructions */
 | 
| + 	.byte	0x4
 | 
| +	.long	.Ltext6-.Ltext5
 | 
| +	.byte	0xe
 | 
| +	.uleb128 0x10
 | 
| +	.align 8
 | 
| +.LEFDE2:
 | 
| +
 | 
| +        /* FDE : struct_param_single_reg_loc */
 | 
| +.LSFDE3:
 | 
| +	.long	.LEFDE3-.LASFDE3        /* length */
 | 
| +.LASFDE3:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext8                 /* start */
 | 
| +	.quad	.Ltext10-.Ltext8        /* length */
 | 
| +        /* Instructions */
 | 
| + 	.byte	0x4
 | 
| +	.long	.Ltext9-.Ltext8
 | 
| +	.byte	0xe
 | 
| +	.uleb128 0x10
 | 
| +	.align 8
 | 
| +.LEFDE3:
 | 
| +
 | 
| +        /* FDE : struct_param_two_reg_pieces */
 | 
| +.LSFDE4:
 | 
| +	.long	.LEFDE4-.LASFDE4        /* length */
 | 
| +.LASFDE4:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext11                /* start */
 | 
| +	.quad	.Ltext13-.Ltext11       /* length */
 | 
| +        /* Instructions */
 | 
| + 	.byte	0x4
 | 
| +	.long	.Ltext12-.Ltext11
 | 
| +	.byte	0xe
 | 
| +	.uleb128 0x10
 | 
| +	.align 8
 | 
| +.LEFDE4:
 | 
| +
 | 
| +        /* FDE : int_param_two_reg_pieces */
 | 
| +.LSFDE5:
 | 
| +	.long	.LEFDE5-.LASFDE5        /* length */
 | 
| +.LASFDE5:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext14                /* start */
 | 
| +	.quad	.Ltext16-.Ltext14       /* length */
 | 
| +        /* Instructions */
 | 
| + 	.byte	0x4
 | 
| +	.long	.Ltext15-.Ltext14
 | 
| +	.byte	0xe
 | 
| +	.uleb128 0x10
 | 
| +	.align 8
 | 
| +.LEFDE5:
 | 
| +
 | 
| +        /* FDE : main */
 | 
| +.LSFDE9:
 | 
| +	.long	.LEFDE9-.LASFDE9        /* length */
 | 
| +.LASFDE9:
 | 
| +	.long	.Lframe0                /* CIE reference */
 | 
| +	.quad	.Ltext1                 /* start */
 | 
| +	.quad	.Ltext3-.Ltext1         /* length */
 | 
| +        /* Instructions */
 | 
| + 	.byte	0x4
 | 
| +	.long	.Ltext2-.Ltext1
 | 
| +	.byte	0xe
 | 
| +	.uleb128 0x10
 | 
| +	.align 8
 | 
| +.LEFDE9:
 | 
| +
 | 
| +        /*******************************************************/
 | 
| +
 | 
| +	.section	.debug_info,"",@progbits
 | 
| +.Ldebug_info0:
 | 
| +        .long  .Ldebug_info_end - .Ldebug_info_start   /* Length */
 | 
| +.Ldebug_info_start:
 | 
| +	.value	0x2                     /* DWARF version number. */
 | 
| +	.long	.Ldebug_abbrev0         /* Offset into .debug_abbrev */
 | 
| +	.byte	0x8                     /* Pointer size */
 | 
| +
 | 
| +.LDI0:
 | 
| +	.uleb128 0x1                    /* DW_TAG_compile_unit */
 | 
| +	.string	"GNU C 4.2.1"           /* DW_AT_producer */
 | 
| +	.byte	0x1                     /* DW_AT_language */
 | 
| +	.quad	.Ltext0                 /* DW_AT_low_pc */
 | 
| +	.quad	.Letext0                /* DW_AT_high_pc */
 | 
| +
 | 
| +.LDI1:
 | 
| +	.uleb128 0x2                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"breakpt"               /* DW_AT_name */
 | 
| +	.byte	0x1                     /* DW_AT_prototyped */
 | 
| +	.quad	.Ltext4                 /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext5                 /* DW_AT_high_pc */
 | 
| +
 | 
| +.LDI2:
 | 
| +	.uleb128 0x5                    /* DW_TAG_base_type */
 | 
| +	.byte	0x8                     /* DW_AT_byte_size */
 | 
| +	.byte	0x5                     /* DW_AT_encoding (DW_ATE_signed) */
 | 
| +	.string	"long int"              /* DW_AT_name */
 | 
| +
 | 
| +.LDI3:
 | 
| +        .uleb128 0x7                    /* DW_TAG_structure_type */
 | 
| +        .string "big"                   /* DW_AT_name */
 | 
| +        .byte   0x10                    /* DW_AT_byte_size */
 | 
| +        .long   .LDI6                   /* DW_AT_sibling */
 | 
| +
 | 
| +.LDI4:
 | 
| +        .uleb128 0x8                    /* DW_TAG_member */
 | 
| +        .string "a"                     /* DW_AT_name */
 | 
| +        .long   .LDI2                   /* DW_AT_type */
 | 
| +        .byte   0x2                     /* DW_AT_data_member_location : length */
 | 
| +        .byte   0x23                    /* DW_OP_plus_uconst */
 | 
| +        .uleb128 0x0                    /*   + 0 */
 | 
| +
 | 
| +.LDI5:
 | 
| +        .uleb128 0x8                    /* DW_TAG_structure_type */
 | 
| +        .string "b"                     /* DW_AT_name */
 | 
| +        .long   .LDI2                   /* DW_AT_type */
 | 
| +        .byte   0x2                     /* DW_AT_data_member_location : length */
 | 
| +        .byte   0x23                    /* DW_OP_plus_uconst */
 | 
| +        .uleb128 0x8                    /*   + 8 */
 | 
| +        .byte   0x0
 | 
| +
 | 
| +.LDI6:
 | 
| +	.uleb128 0x6                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"main"                  /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.quad	.Ltext1                 /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext3                 /* DW_AT_high_pc */
 | 
| +
 | 
| +.LDI7:
 | 
| +	.uleb128 0x3                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"int_param_single_reg_loc"                 /* DW_AT_name */
 | 
| +	.byte	0x1                     /* DW_AT_prototyped */
 | 
| +	.quad	.Ltext5                 /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext7                 /* DW_AT_high_pc */
 | 
| +	.long	.LDI11                  /* DW_AT_sibling */
 | 
| +
 | 
| +.LDI8:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand0"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +
 | 
| +.LDI9:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand1"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x53                    /* DW_OP_reg3 */
 | 
| +
 | 
| +.LDI10:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand2"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x54                    /* DW_OP_reg4 */
 | 
| +
 | 
| +	.byte	0x0
 | 
| +
 | 
| +.LDI11:
 | 
| +	.uleb128 0x3                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"struct_param_single_reg_loc"                 /* DW_AT_name */
 | 
| +	.byte	0x1                     /* DW_AT_prototyped */
 | 
| +	.quad	.Ltext8                 /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext10                /* DW_AT_high_pc */
 | 
| +	.long	.LDI15                   /* DW_AT_sibling */
 | 
| +
 | 
| +.LDI12:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand0"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x53                    /* DW_OP_reg3 */
 | 
| +
 | 
| +.LDI13:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand1"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +
 | 
| +.LDI14:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand2"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	1                       /* DW_AT_location : length */
 | 
| +	.byte	0x54                    /* DW_OP_reg4 */
 | 
| +
 | 
| +	.byte	0x0
 | 
| +
 | 
| +.LDI15:
 | 
| +	.uleb128 0x3                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"struct_param_two_reg_pieces"                 /* DW_AT_name */
 | 
| +	.byte	0x1                     /* DW_AT_prototyped */
 | 
| +	.quad	.Ltext11                /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext13                /* DW_AT_high_pc */
 | 
| +	.long	.LDI19                  /* DW_AT_sibling */
 | 
| +
 | 
| +.LDI16:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand0"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x51                    /* DW_OP_reg1 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +
 | 
| +.LDI17:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand1"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +	.byte	0x53                    /* DW_OP_reg3 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +
 | 
| +.LDI18:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand2"              /* DW_AT_name */
 | 
| +	.long	.LDI3                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x54                    /* DW_OP_reg4 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +	.byte	0x55                    /* DW_OP_reg5 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x8                    /*    8 bytes */
 | 
| +
 | 
| +	.byte	0x0
 | 
| +
 | 
| +.LDI19:
 | 
| +	.uleb128 0x3                    /* DW_TAG_subprogram */
 | 
| +	.byte	0x1                     /* DW_AT_external */
 | 
| +	.string	"int_param_two_reg_pieces"                 /* DW_AT_name */
 | 
| +	.byte	0x1                     /* DW_AT_prototyped */
 | 
| +	.quad	.Ltext14                /* DW_AT_low_pc */
 | 
| +	.quad	.Ltext16                /* DW_AT_high_pc */
 | 
| +	.long	.LDIE0                  /* DW_AT_sibling */
 | 
| +
 | 
| +.LDI20:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand0"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x51                    /* DW_OP_reg1 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +
 | 
| +.LDI21:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand1"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x52                    /* DW_OP_reg2 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +	.byte	0x53                    /* DW_OP_reg3 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +
 | 
| +.LDI22:
 | 
| +	.uleb128 0x4                    /* DW_TAG_formal_parameter */
 | 
| +	.string	"operand2"              /* DW_AT_name */
 | 
| +	.long	.LDI2                   /* DW_AT_type */
 | 
| +	.byte	6                       /* DW_AT_location : length */
 | 
| +	.byte	0x54                    /* DW_OP_reg4 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +	.byte	0x55                    /* DW_OP_reg5 */
 | 
| +        .byte   0x93                    /* DW_OP_piece */
 | 
| +        .uleb128 0x4                    /*    4 bytes */
 | 
| +
 | 
| +	.byte	0x0
 | 
| +
 | 
| +.LDIE0:
 | 
| +	.byte	0x0
 | 
| +.Ldebug_info_end:
 | 
| +
 | 
| +        /*******************************************************/
 | 
| +
 | 
| +	.section	.debug_abbrev,"",@progbits
 | 
| +.Ldebug_abbrev0:
 | 
| +	.uleb128 0x1    /* abbrev code */
 | 
| +	.uleb128 0x11   /* TAG: DW_TAG_compile_unit */
 | 
| +	.byte	0x1     /* DW_CHILDREN_yes */
 | 
| +	.uleb128 0x25   /* DW_AT_producer */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.uleb128 0x13   /* DW_AT_language */
 | 
| +	.uleb128 0xb    /*   DW_FORM_data1 */
 | 
| +        .uleb128 0x11   /* DW_AT_low_pc */
 | 
| +        .uleb128 0x1    /*   DW_FORM_addr */
 | 
| +        .uleb128 0x12   /* DW_AT_high_pc */
 | 
| +        .uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +	.uleb128 0x2    /* abbrev code */
 | 
| +	.uleb128 0x2e   /* TAG: DW_TAG_subprogram */
 | 
| +	.byte	0x0     /* DW_CHILDREN_no */
 | 
| +	.uleb128 0x3f   /* DW_AT_external */
 | 
| +	.uleb128 0xc    /*   DW_FORM_flag */
 | 
| +	.uleb128 0x3    /* DW_AT_name */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.uleb128 0x27   /* DW_AT_prototyped */
 | 
| +	.uleb128 0xc    /*    DW_FORM_flag*/
 | 
| +	.uleb128 0x11   /* DW_AT_low_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.uleb128 0x12   /* DW_AT_high_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +	.uleb128 0x3    /* abbrev code */
 | 
| +	.uleb128 0x2e   /* TAG: DW_TAG_subprogram */
 | 
| +	.byte	0x1     /* DW_CHILDREN_yes */
 | 
| +	.uleb128 0x3f   /* DW_AT_external */
 | 
| +	.uleb128 0xc    /*   DW_FORM_flag */
 | 
| +	.uleb128 0x3    /* DW_AT_name */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.uleb128 0x27   /* DW_AT_prototyped */
 | 
| +	.uleb128 0xc    /*    DW_FORM_flag*/
 | 
| +	.uleb128 0x11   /* DW_AT_low_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.uleb128 0x12   /* DW_AT_high_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.uleb128 0x1    /* DW_AT_sibling */
 | 
| +	.uleb128 0x13   /*   DW_FORM_ref4 */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +	.uleb128 0x4    /* abbrev code */
 | 
| +	.uleb128 0x5    /* TAG: DW_TAG_formal_parameter */
 | 
| +	.byte	0x0     /* DW_CHILDREN_no */
 | 
| +	.uleb128 0x3    /* DW_AT_name */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.uleb128 0x49   /* DW_AT_type */
 | 
| +	.uleb128 0x13   /*   DW_FORM_ref4 */
 | 
| +	.uleb128 0x2    /* DW_AT_location */
 | 
| +	.uleb128 0xa    /*   DW_FORM_block1 */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +	.uleb128 0x5    /* abbrev code */
 | 
| +	.uleb128 0x24   /* TAG: DW_TAG_base_type */
 | 
| +	.byte	0x0     /* DW_CHILDREN_no */
 | 
| +	.uleb128 0xb    /* DW_AT_byte_size */
 | 
| +	.uleb128 0xb    /*   DW_FORM_data1 */
 | 
| +	.uleb128 0x3e   /* DW_AT_encoding */
 | 
| +	.uleb128 0xb    /*   DW_FORM_data1 */
 | 
| +	.uleb128 0x3    /* DW_AT_name */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +	.uleb128 0x6    /* abbrev code */
 | 
| +	.uleb128 0x2e   /* TAG: DW_TAG_subprogram */
 | 
| +	.byte	0x0     /* DW_CHILDREN_no */
 | 
| +	.uleb128 0x3f   /* DW_AT_external */
 | 
| +	.uleb128 0xc    /*   DW_FORM_flag */
 | 
| +	.uleb128 0x3    /* DW_AT_name */
 | 
| +	.uleb128 0x8    /*   DW_FORM_string */
 | 
| +	.uleb128 0x49   /* DW_AT_type */
 | 
| +	.uleb128 0x13   /*   DW_FORM_ref4 */
 | 
| +	.uleb128 0x11   /* DW_AT_low_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.uleb128 0x12   /* DW_AT_high_pc */
 | 
| +	.uleb128 0x1    /*   DW_FORM_addr */
 | 
| +	.byte	0x0
 | 
| +	.byte	0x0
 | 
| +
 | 
| +        .uleb128 0x7    /* abbrev code */
 | 
| +        .uleb128 0x13   /* DW_TAG_structure_type */
 | 
| +        .byte   0x1     /* DW_CHILDREN_yes */
 | 
| +        .uleb128 0x3    /* DW_AT_name */
 | 
| +        .uleb128 0x8    /*   DW_FORM_string */
 | 
| +        .uleb128 0xb    /* DW_AT_byte_size */
 | 
| +        .uleb128 0xb    /*    DW_FORM_data1 */
 | 
| +        .uleb128 0x1    /* DW_AT_sibling */
 | 
| +        .uleb128 0x13   /*   DW_FORM_ref4 */
 | 
| +        .byte   0x0
 | 
| +        .byte   0x0
 | 
| +
 | 
| +        .uleb128 0x8    /* abbrev code */
 | 
| +        .uleb128 0xd    /* DW_TAG_member */
 | 
| +        .byte   0x0     /* DW_children_no */
 | 
| +        .uleb128 0x3    /* DW_AT_name */
 | 
| +        .uleb128 0x8    /*   DW_FORM_string */
 | 
| +        .uleb128 0x49   /* DW_AT_type */
 | 
| +        .uleb128 0x13   /*   DW_FORM_ref4 */
 | 
| +        .uleb128 0x38   /* DW_AT_data_member_location */
 | 
| +        .uleb128 0xa    /*   DW_FORM_block1 */
 | 
| +        .byte   0x0
 | 
| +        .byte   0x0
 | 
| +
 | 
| +        .byte	0x0
 | 
| 
 |