1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2013-2019 Free Software Foundation, Inc. 4 5 Contributed by Intel Corp. <markus.t.metzger@intel.com> 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. 19 20 21 This file has been generated using: 22 gcc -S -O2 -dA -g tailcall.c -o i686-tailcall.S */ 23 24 .file "tailcall.c" 25 .text 26.Ltext0: 27 .p2align 4,,15 28 .type bar, @function 29bar: 30.LFB0: 31 .file 1 "tailcall.c" 32 # tailcall.c:22 33 .loc 1 22 0 34 .cfi_startproc 35# BLOCK 2 freq:10000 seq:0 36# PRED: ENTRY [100.0%] (FALLTHRU) 37 # tailcall.c:24 38 .loc 1 24 0 39 movl $42, %eax 40# SUCC: EXIT [100.0%] 41 ret 42 .cfi_endproc 43.LFE0: 44 .size bar, .-bar 45 .p2align 4,,15 46 .type foo, @function 47foo: 48.LFB1: 49 # tailcall.c:28 50 .loc 1 28 0 51 .cfi_startproc 52# BLOCK 2 freq:10000 seq:0 53# PRED: ENTRY [100.0%] (FALLTHRU) 54 # tailcall.c:29 55 .loc 1 29 0 56 jmp bar 57# SUCC: EXIT [100.0%] (ABNORMAL,SIBCALL) 58.LVL0: 59 .cfi_endproc 60.LFE1: 61 .size foo, .-foo 62 .section .text.startup,"ax",@progbits 63 .p2align 4,,15 64 .globl main 65 .type main, @function 66main: 67.LFB2: 68 # tailcall.c:34 69 .loc 1 34 0 70 .cfi_startproc 71# BLOCK 2 freq:10000 seq:0 72# PRED: ENTRY [100.0%] (FALLTHRU) 73 # tailcall.c:37 74 .loc 1 37 0 75 call foo 76.LVL1: 77 # tailcall.c:38 78 .loc 1 38 0 79 addl $1, %eax 80.LVL2: 81# SUCC: EXIT [100.0%] 82 # tailcall.c:41 83 .loc 1 41 0 84 ret 85 .cfi_endproc 86.LFE2: 87 .size main, .-main 88 .text 89.Letext0: 90 .section .debug_info,"",@progbits 91.Ldebug_info0: 92 .long 0x8f # Length of Compilation Unit Info 93 .value 0x4 # DWARF version number 94 .long .Ldebug_abbrev0 # Offset Into Abbrev. Section 95 .byte 0x4 # Pointer Size (in bytes) 96 .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) 97 .long .LASF0 # DW_AT_producer: "GNU C 4.8.3 20140911 (Red Hat 4.8.3-7) -mtune=generic -march=i686 -g -O2" 98 .byte 0x1 # DW_AT_language 99 .long .LASF1 # DW_AT_name: "tailcall.c" 100 .long .LASF2 # DW_AT_comp_dir: "" 101 .long .Ldebug_ranges0+0 # DW_AT_ranges 102 .long 0 # DW_AT_low_pc 103 .long .Ldebug_line0 # DW_AT_stmt_list 104 .uleb128 0x2 # (DIE (0x25) DW_TAG_subprogram) 105 .ascii "bar\0" # DW_AT_name 106 .byte 0x1 # DW_AT_decl_file (tailcall.c) 107 .byte 0x15 # DW_AT_decl_line 108 # DW_AT_prototyped 109 .long 0x3a # DW_AT_type 110 .long .LFB0 # DW_AT_low_pc 111 .long .LFE0-.LFB0 # DW_AT_high_pc 112 .uleb128 0x1 # DW_AT_frame_base 113 .byte 0x9c # DW_OP_call_frame_cfa 114 # DW_AT_GNU_all_call_sites 115 .uleb128 0x3 # (DIE (0x3a) DW_TAG_base_type) 116 .byte 0x4 # DW_AT_byte_size 117 .byte 0x5 # DW_AT_encoding 118 .ascii "int\0" # DW_AT_name 119 .uleb128 0x4 # (DIE (0x41) DW_TAG_subprogram) 120 .ascii "foo\0" # DW_AT_name 121 .byte 0x1 # DW_AT_decl_file (tailcall.c) 122 .byte 0x1b # DW_AT_decl_line 123 # DW_AT_prototyped 124 .long 0x3a # DW_AT_type 125 .long .LFB1 # DW_AT_low_pc 126 .long .LFE1-.LFB1 # DW_AT_high_pc 127 .uleb128 0x1 # DW_AT_frame_base 128 .byte 0x9c # DW_OP_call_frame_cfa 129 # DW_AT_GNU_all_call_sites 130 .long 0x64 # DW_AT_sibling 131 .uleb128 0x5 # (DIE (0x5a) DW_TAG_GNU_call_site) 132 .long .LVL0 # DW_AT_low_pc 133 # DW_AT_GNU_tail_call 134 .long 0x25 # DW_AT_abstract_origin 135 .byte 0 # end of children of DIE 0x41 136 .uleb128 0x6 # (DIE (0x64) DW_TAG_subprogram) 137 # DW_AT_external 138 .long .LASF3 # DW_AT_name: "main" 139 .byte 0x1 # DW_AT_decl_file (tailcall.c) 140 .byte 0x21 # DW_AT_decl_line 141 # DW_AT_prototyped 142 .long 0x3a # DW_AT_type 143 .long .LFB2 # DW_AT_low_pc 144 .long .LFE2-.LFB2 # DW_AT_high_pc 145 .uleb128 0x1 # DW_AT_frame_base 146 .byte 0x9c # DW_OP_call_frame_cfa 147 # DW_AT_GNU_all_call_sites 148 .uleb128 0x7 # (DIE (0x79) DW_TAG_variable) 149 .long .LASF4 # DW_AT_name: "answer" 150 .byte 0x1 # DW_AT_decl_file (tailcall.c) 151 .byte 0x23 # DW_AT_decl_line 152 .long 0x3a # DW_AT_type 153 .long .LLST0 # DW_AT_location 154 .uleb128 0x8 # (DIE (0x88) DW_TAG_GNU_call_site) 155 .long .LVL1 # DW_AT_low_pc 156 .long 0x41 # DW_AT_abstract_origin 157 .byte 0 # end of children of DIE 0x64 158 .byte 0 # end of children of DIE 0xb 159 .section .debug_abbrev,"",@progbits 160.Ldebug_abbrev0: 161 .uleb128 0x1 # (abbrev code) 162 .uleb128 0x11 # (TAG: DW_TAG_compile_unit) 163 .byte 0x1 # DW_children_yes 164 .uleb128 0x25 # (DW_AT_producer) 165 .uleb128 0xe # (DW_FORM_strp) 166 .uleb128 0x13 # (DW_AT_language) 167 .uleb128 0xb # (DW_FORM_data1) 168 .uleb128 0x3 # (DW_AT_name) 169 .uleb128 0xe # (DW_FORM_strp) 170 .uleb128 0x1b # (DW_AT_comp_dir) 171 .uleb128 0xe # (DW_FORM_strp) 172 .uleb128 0x55 # (DW_AT_ranges) 173 .uleb128 0x17 # (DW_FORM_sec_offset) 174 .uleb128 0x11 # (DW_AT_low_pc) 175 .uleb128 0x1 # (DW_FORM_addr) 176 .uleb128 0x10 # (DW_AT_stmt_list) 177 .uleb128 0x17 # (DW_FORM_sec_offset) 178 .byte 0 179 .byte 0 180 .uleb128 0x2 # (abbrev code) 181 .uleb128 0x2e # (TAG: DW_TAG_subprogram) 182 .byte 0 # DW_children_no 183 .uleb128 0x3 # (DW_AT_name) 184 .uleb128 0x8 # (DW_FORM_string) 185 .uleb128 0x3a # (DW_AT_decl_file) 186 .uleb128 0xb # (DW_FORM_data1) 187 .uleb128 0x3b # (DW_AT_decl_line) 188 .uleb128 0xb # (DW_FORM_data1) 189 .uleb128 0x27 # (DW_AT_prototyped) 190 .uleb128 0x19 # (DW_FORM_flag_present) 191 .uleb128 0x49 # (DW_AT_type) 192 .uleb128 0x13 # (DW_FORM_ref4) 193 .uleb128 0x11 # (DW_AT_low_pc) 194 .uleb128 0x1 # (DW_FORM_addr) 195 .uleb128 0x12 # (DW_AT_high_pc) 196 .uleb128 0x6 # (DW_FORM_data4) 197 .uleb128 0x40 # (DW_AT_frame_base) 198 .uleb128 0x18 # (DW_FORM_exprloc) 199 .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) 200 .uleb128 0x19 # (DW_FORM_flag_present) 201 .byte 0 202 .byte 0 203 .uleb128 0x3 # (abbrev code) 204 .uleb128 0x24 # (TAG: DW_TAG_base_type) 205 .byte 0 # DW_children_no 206 .uleb128 0xb # (DW_AT_byte_size) 207 .uleb128 0xb # (DW_FORM_data1) 208 .uleb128 0x3e # (DW_AT_encoding) 209 .uleb128 0xb # (DW_FORM_data1) 210 .uleb128 0x3 # (DW_AT_name) 211 .uleb128 0x8 # (DW_FORM_string) 212 .byte 0 213 .byte 0 214 .uleb128 0x4 # (abbrev code) 215 .uleb128 0x2e # (TAG: DW_TAG_subprogram) 216 .byte 0x1 # DW_children_yes 217 .uleb128 0x3 # (DW_AT_name) 218 .uleb128 0x8 # (DW_FORM_string) 219 .uleb128 0x3a # (DW_AT_decl_file) 220 .uleb128 0xb # (DW_FORM_data1) 221 .uleb128 0x3b # (DW_AT_decl_line) 222 .uleb128 0xb # (DW_FORM_data1) 223 .uleb128 0x27 # (DW_AT_prototyped) 224 .uleb128 0x19 # (DW_FORM_flag_present) 225 .uleb128 0x49 # (DW_AT_type) 226 .uleb128 0x13 # (DW_FORM_ref4) 227 .uleb128 0x11 # (DW_AT_low_pc) 228 .uleb128 0x1 # (DW_FORM_addr) 229 .uleb128 0x12 # (DW_AT_high_pc) 230 .uleb128 0x6 # (DW_FORM_data4) 231 .uleb128 0x40 # (DW_AT_frame_base) 232 .uleb128 0x18 # (DW_FORM_exprloc) 233 .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) 234 .uleb128 0x19 # (DW_FORM_flag_present) 235 .uleb128 0x1 # (DW_AT_sibling) 236 .uleb128 0x13 # (DW_FORM_ref4) 237 .byte 0 238 .byte 0 239 .uleb128 0x5 # (abbrev code) 240 .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site) 241 .byte 0 # DW_children_no 242 .uleb128 0x11 # (DW_AT_low_pc) 243 .uleb128 0x1 # (DW_FORM_addr) 244 .uleb128 0x2115 # (DW_AT_GNU_tail_call) 245 .uleb128 0x19 # (DW_FORM_flag_present) 246 .uleb128 0x31 # (DW_AT_abstract_origin) 247 .uleb128 0x13 # (DW_FORM_ref4) 248 .byte 0 249 .byte 0 250 .uleb128 0x6 # (abbrev code) 251 .uleb128 0x2e # (TAG: DW_TAG_subprogram) 252 .byte 0x1 # DW_children_yes 253 .uleb128 0x3f # (DW_AT_external) 254 .uleb128 0x19 # (DW_FORM_flag_present) 255 .uleb128 0x3 # (DW_AT_name) 256 .uleb128 0xe # (DW_FORM_strp) 257 .uleb128 0x3a # (DW_AT_decl_file) 258 .uleb128 0xb # (DW_FORM_data1) 259 .uleb128 0x3b # (DW_AT_decl_line) 260 .uleb128 0xb # (DW_FORM_data1) 261 .uleb128 0x27 # (DW_AT_prototyped) 262 .uleb128 0x19 # (DW_FORM_flag_present) 263 .uleb128 0x49 # (DW_AT_type) 264 .uleb128 0x13 # (DW_FORM_ref4) 265 .uleb128 0x11 # (DW_AT_low_pc) 266 .uleb128 0x1 # (DW_FORM_addr) 267 .uleb128 0x12 # (DW_AT_high_pc) 268 .uleb128 0x6 # (DW_FORM_data4) 269 .uleb128 0x40 # (DW_AT_frame_base) 270 .uleb128 0x18 # (DW_FORM_exprloc) 271 .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) 272 .uleb128 0x19 # (DW_FORM_flag_present) 273 .byte 0 274 .byte 0 275 .uleb128 0x7 # (abbrev code) 276 .uleb128 0x34 # (TAG: DW_TAG_variable) 277 .byte 0 # DW_children_no 278 .uleb128 0x3 # (DW_AT_name) 279 .uleb128 0xe # (DW_FORM_strp) 280 .uleb128 0x3a # (DW_AT_decl_file) 281 .uleb128 0xb # (DW_FORM_data1) 282 .uleb128 0x3b # (DW_AT_decl_line) 283 .uleb128 0xb # (DW_FORM_data1) 284 .uleb128 0x49 # (DW_AT_type) 285 .uleb128 0x13 # (DW_FORM_ref4) 286 .uleb128 0x2 # (DW_AT_location) 287 .uleb128 0x17 # (DW_FORM_sec_offset) 288 .byte 0 289 .byte 0 290 .uleb128 0x8 # (abbrev code) 291 .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site) 292 .byte 0 # DW_children_no 293 .uleb128 0x11 # (DW_AT_low_pc) 294 .uleb128 0x1 # (DW_FORM_addr) 295 .uleb128 0x31 # (DW_AT_abstract_origin) 296 .uleb128 0x13 # (DW_FORM_ref4) 297 .byte 0 298 .byte 0 299 .byte 0 300 .section .debug_loc,"",@progbits 301.Ldebug_loc0: 302.LLST0: 303 .long .LVL1 # Location list begin address (*.LLST0) 304 .long .LVL2 # Location list end address (*.LLST0) 305 .value 0x3 # Location expression size 306 .byte 0x70 # DW_OP_breg0 307 .sleb128 1 308 .byte 0x9f # DW_OP_stack_value 309 .long .LVL2 # Location list begin address (*.LLST0) 310 .long .LFE2 # Location list end address (*.LLST0) 311 .value 0x1 # Location expression size 312 .byte 0x50 # DW_OP_reg0 313 .long 0 # Location list terminator begin (*.LLST0) 314 .long 0 # Location list terminator end (*.LLST0) 315 .section .debug_aranges,"",@progbits 316 .long 0x24 # Length of Address Ranges Info 317 .value 0x2 # DWARF Version 318 .long .Ldebug_info0 # Offset of Compilation Unit Info 319 .byte 0x4 # Size of Address 320 .byte 0 # Size of Segment Descriptor 321 .value 0 # Pad to 8 byte boundary 322 .value 0 323 .long .Ltext0 # Address 324 .long .Letext0-.Ltext0 # Length 325 .long .LFB2 # Address 326 .long .LFE2-.LFB2 # Length 327 .long 0 328 .long 0 329 .section .debug_ranges,"",@progbits 330.Ldebug_ranges0: 331 .long .Ltext0 # Offset 0 332 .long .Letext0 333 .long .LFB2 # Offset 0x8 334 .long .LFE2 335 .long 0 336 .long 0 337 .section .debug_line,"",@progbits 338.Ldebug_line0: 339 .section .debug_str,"MS",@progbits,1 340.LASF1: 341 .string "tailcall.c" 342.LASF3: 343 .string "main" 344.LASF0: 345 .string "GNU C 4.8.3 20140911 (Red Hat 4.8.3-7) -mtune=generic -march=i686 -g -O2" 346.LASF4: 347 .string "answer" 348.LASF2: 349 .string "" 350 .ident "GCC: (GNU) 4.8.3 20140911 (Red Hat 4.8.3-7)" 351 .section .note.GNU-stack,"",@progbits 352