From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9262 invoked by alias); 8 Oct 2013 12:04:50 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 9249 invoked by uid 89); 8 Oct 2013 12:04:49 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-4.2 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 08 Oct 2013 12:04:48 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r98C4lcI001544 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 8 Oct 2013 08:04:47 -0400 Received: from localhost.localdomain (ovpn-112-21.ams2.redhat.com [10.36.112.21]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r98C4jjD015841 for ; Tue, 8 Oct 2013 08:04:46 -0400 Message-ID: <5253F4DD.4000104@redhat.com> Date: Tue, 08 Oct 2013 12:04:00 -0000 From: Phil Muldoon MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: [patch][python] 2/3 Python representation of GDB line tables (Testsuite) Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2013-10/txt/msg00217.txt.bz2 This patch in the series contains the testsuite code for Python linetables. Cheers, Phil 2013-10-08 Phil Muldoon * gdb.python/py-linetable.S: New file. * gdb.python/py-linetable.c: New file. * gdb.python/py-linetable.exp: New file. --- diff --git a/gdb/testsuite/gdb.python/py-linetable.S b/gdb/testsuite/gdb.python/py-linetable.S new file mode 100644 index 0000000..5957222 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-linetable.S @@ -0,0 +1,345 @@ + .file "py-linetable.c" + .text +.Ltext0: + .globl foo + .type foo, @function +foo: +.LFB0: + .file 1 "./py-linetable.c" + .loc 1 20 0 + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movl %edi, -4(%rbp) + movl %esi, -8(%rbp) + .loc 1 21 0 + movl -4(%rbp), %eax + cmpl -8(%rbp), %eax + jne .L2 + .loc 1 22 0 + movl $1, %eax + jmp .L3 +.L2: + .loc 1 24 0 + movl $0, %eax +.L3: + .loc 1 25 0 + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size foo, .-foo + .globl bar + .type bar, @function +bar: +.LFB1: + .loc 1 28 0 + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movl %edi, -4(%rbp) + movl %esi, -8(%rbp) + .loc 1 29 0 + cmpl $0, -8(%rbp) + jne .L5 + .loc 1 30 0 + movl $1, %eax + jmp .L6 +.L5: + .loc 1 32 0 + movl $0, %eax +.L6: + .loc 1 33 0 + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE1: + .size bar, .-bar + .globl main + .type main, @function +main: +.LFB2: + .loc 1 37 0 + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + subq $16, %rsp + .loc 1 39 0 + movl $5, %esi + movl $5, %edi + call foo + testl %eax, %eax + je .L8 + .loc 1 39 0 is_stmt 0 discriminator 1 + movl $0, %esi + movl $5, %edi + call bar + testl %eax, %eax + je .L8 + .loc 1 40 0 is_stmt 1 + movl $0, %eax + jmp .L9 +.L8: + .loc 1 42 0 + movl $0, -4(%rbp) + jmp .L10 +.L11: + .loc 1 44 0 + addl $1, -4(%rbp) +.L10: + .loc 1 42 0 discriminator 1 + cmpl $499, -4(%rbp) + jle .L11 + .loc 1 45 0 + movl $0, %eax +.L9: + .loc 1 46 0 + leave + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE2: + .size main, .-main +.Letext0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .long 0xcf + .value 0x4 + .long .Ldebug_abbrev0 + .byte 0x8 + .uleb128 0x1 + .long .LASF0 + .byte 0x1 + .long .LASF1 + .long .LASF2 + .quad .Ltext0 + .quad .Letext0 + .long .Ldebug_line0 + .uleb128 0x2 + .string "foo" + .byte 0x1 + .byte 0x13 + .long 0x67 + .quad .LFB0 + .quad .LFE0 + .uleb128 0x1 + .byte 0x9c + .long 0x67 + .uleb128 0x3 + .string "a" + .byte 0x1 + .byte 0x13 + .long 0x67 + .uleb128 0x2 + .byte 0x91 + .sleb128 -20 + .uleb128 0x3 + .string "b" + .byte 0x1 + .byte 0x13 + .long 0x67 + .uleb128 0x2 + .byte 0x91 + .sleb128 -24 + .byte 0 + .uleb128 0x4 + .byte 0x4 + .byte 0x5 + .string "int" + .uleb128 0x2 + .string "bar" + .byte 0x1 + .byte 0x1b + .long 0x67 + .quad .LFB1 + .quad .LFE1 + .uleb128 0x1 + .byte 0x9c + .long 0xa8 + .uleb128 0x3 + .string "a" + .byte 0x1 + .byte 0x1b + .long 0x67 + .uleb128 0x2 + .byte 0x91 + .sleb128 -20 + .uleb128 0x3 + .string "b" + .byte 0x1 + .byte 0x1b + .long 0x67 + .uleb128 0x2 + .byte 0x91 + .sleb128 -24 + .byte 0 + .uleb128 0x5 + .long .LASF3 + .byte 0x1 + .byte 0x24 + .long 0x67 + .quad .LFB2 + .quad .LFE2 + .uleb128 0x1 + .byte 0x9c + .uleb128 0x6 + .string "i" + .byte 0x1 + .byte 0x26 + .long 0x67 + .uleb128 0x2 + .byte 0x91 + .sleb128 -20 + .byte 0 + .byte 0 + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .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 0x17 + .byte 0 + .byte 0 + .uleb128 0x2 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x3f + .uleb128 0x19 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0x19 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x18 + .uleb128 0x2117 + .uleb128 0x19 + .uleb128 0x1 + .uleb128 0x13 + .byte 0 + .byte 0 + .uleb128 0x3 + .uleb128 0x5 + .byte 0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x18 + .byte 0 + .byte 0 + .uleb128 0x4 + .uleb128 0x24 + .byte 0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .byte 0 + .byte 0 + .uleb128 0x5 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x3f + .uleb128 0x19 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0x19 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x18 + .uleb128 0x2116 + .uleb128 0x19 + .byte 0 + .byte 0 + .uleb128 0x6 + .uleb128 0x34 + .byte 0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x18 + .byte 0 + .byte 0 + .byte 0 + .section .debug_aranges,"",@progbits + .long 0x2c + .value 0x2 + .long .Ldebug_info0 + .byte 0x8 + .byte 0 + .value 0 + .value 0 + .quad .Ltext0 + .quad .Letext0-.Ltext0 + .quad 0 + .quad 0 + .section .debug_line,"",@progbits +.Ldebug_line0: + .section .debug_str,"MS",@progbits,1 +.LASF0: + .string "GNU C 4.7.2 20121109 (Red Hat 4.7.2-8) -mtune=generic -march=x86-64 -g -O0" +.LASF1: + .string "./py-linetable.c" +.LASF3: + .string "main" +.LASF2: + .string "/home/pmuldoon/bugs/linetable/gdb/gdb/testsuite/gdb.python" + .ident "GCC: (GNU) 4.7.2 20121109 (Red Hat 4.7.2-8)" + .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.python/py-linetable.c b/gdb/testsuite/gdb.python/py-linetable.c new file mode 100644 index 0000000..b358fff --- /dev/null +++ b/gdb/testsuite/gdb.python/py-linetable.c @@ -0,0 +1,46 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 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 . */ + +int +foo (int a, int b) +{ + if (a == b) + return 1; + + return 0; +} + +bar (int a, int b) +{ + if (a + b == a) + return 1; + + return 0; +} + +int +main (void) +{ + int i; + if (foo (5,5) && bar (5,0)) + return 0; + + for (i = 0; + i<500; + i++); + return 0; +} diff --git a/gdb/testsuite/gdb.python/py-linetable.exp b/gdb/testsuite/gdb.python/py-linetable.exp new file mode 100644 index 0000000..767ad2c --- /dev/null +++ b/gdb/testsuite/gdb.python/py-linetable.exp @@ -0,0 +1,75 @@ +# Copyright 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 . +load_lib gdb-python.exp +set opts {} +standard_testfile .S + +if [info exists COMPILE] { + # make check RUNTESTFLAGS="gdb.python/py-linetable.exp COMPILE=1" + standard_testfile + lappend opts debug optimize=-O2 +} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } { + verbose "Skipping ${testfile}." + return +} + +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +gdb_py_test_silent_cmd "python lt = gdb.selected_frame().find_sal().symtab.linetable()" \ + "get instruction" 0 + +gdb_py_test_multiple "input simple command" \ + "python" "" \ + "def list_lines():" "" \ + " for l in lt:" "" \ + " print 'L' +str(l.line)+' A '+hex(l.pc)" "" \ + "end" "" + +gdb_test "python list_lines()" \ + "L20 A $hex.*L21 A $hex.*L22 A $hex.*L24 A $hex.*L25 A $hex.*L40 A $hex.*L42 A $hex.*L44 A $hex.*L42 A $hex.*L46 A $hex.*" \ + "test linetable iterator addr" +gdb_test "python print len(lt.line(42))" "2" \ + "Test length of a multiple pc line" +gdb_test "python print len(lt.line(20))" "1" \ + "Test length of a single pc line" +gdb_test "python print lt.line(1)" "None" \ + "Test None returned for line with no pc" + +# Test gdb.Linetable.sourcelines () +gdb_py_test_silent_cmd "python fset = lt.source_lines()" \ + "Get all source lines into a frozen set" 0 +gdb_test "python print sorted(fset)" \ + "\[20L, 21L, 22L, 24L, 25L, 28L, 29L, 30L, 32L, 33L, 37L, 39L, 40L, 42L, 44L, 45L, 46L\].*" \ + "Test frozen set contains line numbers" + +# Test gdb.Linetable.has_pcs () +gdb_test "python print lt.has_pcs(20)" \ + "True.*" \ + "Test has_pcs at line 20" +gdb_test "python print lt.has_pcs(44)" \ + "True.*" \ + "Test has_pcs at line 40" +gdb_test "python print lt.has_pcs(10)" \ + "False.*" \ + "Test has_pcs at line 10" -- 1.8.1.4