From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9428 invoked by alias); 21 Aug 2017 19:27:52 -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 9415 invoked by uid 89); 21 Aug 2017 19:27:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=wraps, disguised 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; Mon, 21 Aug 2017 19:27:50 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2849F61469 for ; Mon, 21 Aug 2017 19:27:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2849F61469 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=palves@redhat.com Received: from cascais.lan (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8A34B781F2 for ; Mon, 21 Aug 2017 19:27:48 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 0/3] Introduce gdb::array_view, symtabs_and_lines -> std::vector Date: Mon, 21 Aug 2017 19:27:00 -0000 Message-Id: <1503343667-6790-1-git-send-email-palves@redhat.com> X-SW-Source: 2017-08/txt/msg00409.txt.bz2 Looking at the "list and multiple locations" patch [1], I thought that it's a bit annoying/frustrating to have do remember to free the sals array that a symtabs_and_lines object wraps, with 'xfree (sals.sals)' or the equivalent make_cleanup(xfree, ...), not to mention how error-prone manual memory management is. We can do better in C++. So I wrote a patch to replace 'struct symtabs_and_lines' with 'typedef std::vector symtabs_and_lines'. That works nicelly, except that I wasn't entirely happy that that would introduce heap allocations in a few cases where there is none nowadays. I then addressed that by adding an array_view abstraction, which is something that I've wanted at other times before. After that, we'd end up with some places using a std::vector disguised behind the symtabs_and_lines typedef, while in other places we'd be spelling out gdb::array_view. With that, I no longer see any value in keeping the symtabs_and_lines typedef, kind of giving preference to std::vector, so I removed the typedef, choosing to spell out std::vector explicitly. (I'm aware that there are several proposals for adding something like array_view to the standard C++ library. In this implementation, which was written from scratch and developed in parallel with the unit tests, I chose to keep it as simple and safe as possible. For example, there is no support for ranks != 1, simply because the main use case this aims at addressing is abstracting out std::vector vs stack arrays in APIs.) [1] https://sourceware.org/ml/gdb-patches/2017-07/msg00280.html Note that the net increase shown below is mostly caused by the new unit tests. If we only count patches 2 and 3, then we get instead: 33 files changed, 537 insertions(+), 820 deletions(-) Pedro Alves (3): Introduce gdb::array_view struct symtabs_and_lines -> std::vector Kill init_sal gdb/Makefile.in | 2 + gdb/ada-lang.c | 3 +- gdb/ax-gdb.c | 12 +- gdb/break-catch-throw.c | 12 +- gdb/breakpoint.c | 359 +++++++++++-------------- gdb/breakpoint.h | 20 +- gdb/cli/cli-cmds.c | 158 +++++------ gdb/common/array-view.h | 179 +++++++++++++ gdb/elfread.c | 14 +- gdb/frame.c | 25 +- gdb/frame.h | 3 +- gdb/guile/scm-frame.c | 2 +- gdb/guile/scm-symtab.c | 6 +- gdb/infcall.c | 11 +- gdb/infcmd.c | 35 +-- gdb/infrun.c | 52 ++-- gdb/linespec.c | 264 ++++++++----------- gdb/linespec.h | 32 +-- gdb/macrocmd.c | 8 +- gdb/mi/mi-main.c | 17 +- gdb/probe.c | 33 +-- gdb/probe.h | 14 +- gdb/python/py-frame.c | 3 +- gdb/python/python.c | 47 ++-- gdb/reverse.c | 8 +- gdb/source.c | 54 ++-- gdb/source.h | 3 +- gdb/stack.c | 56 ++-- gdb/stack.h | 2 +- gdb/symtab.c | 26 +- gdb/symtab.h | 27 +- gdb/tracepoint.c | 39 +-- gdb/tui/tui-disasm.c | 2 +- gdb/tui/tui-stack.c | 3 +- gdb/tui/tui-winsource.c | 7 +- gdb/unittests/array-view-selftests.c | 489 +++++++++++++++++++++++++++++++++++ 36 files changed, 1207 insertions(+), 820 deletions(-) create mode 100644 gdb/common/array-view.h create mode 100644 gdb/unittests/array-view-selftests.c -- 2.5.5