From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic302-21.consmr.mail.ir2.yahoo.com (sonic302-21.consmr.mail.ir2.yahoo.com [87.248.110.84]) by sourceware.org (Postfix) with ESMTPS id 589D239858BD for ; Sat, 16 May 2020 17:28:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 589D239858BD X-YMail-OSG: hRzU1WYVM1lyT8hFXu3J65XHDGBHhod44n_oqWBZTARcc8peFkoqWPN4PXPyJ9P htPMGNGVbr8gBrc1HvLaGi9_7DJNoJFxd18mbN42A1x1nCXyOYMX_44Cs4DHmnTFEwV4h6KbEvww jA4_4qZJslmyfW1Uaeu8ZMKmF8JUjg_5WtY4KZ4Vyne2sXHRZFZK3C0Zhep2GKRPYU0816nOMQVY cNU1J9VLh7StfVKIEwq6oQ5kChBh_b6Cf1_VicwVY_YhznR6HfqO42i8yk9d6NIU6OqHExRA_oin bprZhN24tg4e9CILT2noZf6Ju0gc1MUrka_bDKEncrGRGKaTc6fq4b.w4P5_H043oAgSeCwYjvJe SsFytphkHJn.94ykwE.4kl0_T8P4lknkMgRYEY8RJYnsqcginnk6P5KXcJGMXMjZviMxZ9Nzdzy5 RFlNEfgbFs4fwPaCZxQsokxYi3T23n4RxY6LdKaylFyKatkD2kTHUPOZ6fyQkuVovkDDz3kGt5cE lbQDGN3jLjVc6jC7EPpFxiT9Nqh2Nbn96PtWQnIt3liHpLE01YIiJ42Iu4dhcXC_sUQxSpqB9aFX hYq2fpST9e6.ofokulwRMq6JihnbEAS7QLL0o_9AoKqs96pmvN0rhkJREFCfeII6lLoae1JZj_Yl yQsBPrYlvzB5PLTsmdoaA.ot.0I6rPN6evxtzIcxxeSrA72QLz.gqQpK2CzF7Kc8nAGV5L8pzlxB wo7qGneMOpI4hQtQdjmpItuTBM9X6t.y6WIiXmbxiYDeoQFlNfjVX7JModJThsruW8_R6VZbJ.U. dP2SQcDUNNDe600OArvgoatM7LAabtC_nO3whM3LarZB9AU9i05M3MunRyEeCLThha3GSipBbbJ5 spcaQfDVOgTTqXqf23kGo.lEtktsw7iDVoz0YscnN4UPKlotlzWURjgfIlofpO.hnNylH7xMtAtV t_9y5KUUKMjodCqYSUICGXj_mdBdBZcgAA17Q6DqP5QrcaatOGDRm9idpttk5wTKpGW7_OoQKRDB ZsqsvYiJMjbIvbsmCPiHli7C8C_dUpBHJl1iE1MB5_Hux_5nNXVhRtn6hGSffYnN0GNs6LRkYST_ dyYVrnof8aIs.fTUPzV0Ujxx.Uz26wFe9V47e9U0hOycZPDauP0ZCQ9DWH5FKnLMlvyBejm8_rJj 3K._lp.eyBJVZc.1Pl.S3yH.qw4NJccN4h2ZGvfSKqopbPAorsQsWhLIzBmKl0gy58uc4u5dJjAq YukRGO8UTvM2jFSKJ0zHxNZgqjcJxZwUE_4l2R4cm8qokrANtNi6cgHGCxBNeQKbk.1.yiK37MIC JEmSA2HVS3vbXkjSBvvMTK98GX96lzk8pVYUDfOOfPpRadhX1YGm.ZmuB.8Te_5t7Wlzv6j5ME6t kJZwDz7TSClksbuE7aiHgoo4tisY10h46 Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.ir2.yahoo.com with HTTP; Sat, 16 May 2020 17:28:20 +0000 Received: by smtp418.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 8142922a7a13f425a55b77cec3219a55; Sat, 16 May 2020 17:28:16 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH 4/6] Add LineTableEntry.column to python line table interface Date: Sat, 16 May 2020 19:26:31 +0200 Message-Id: <20200516172632.4803-5-ssbssa@yahoo.de> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200516172632.4803-1-ssbssa@yahoo.de> References: <20200516172632.4803-1-ssbssa@yahoo.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 200515-0, 05/15/2020), Outbound message X-Antivirus-Status: Clean X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, UNWANTED_LANGUAGE_BODY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2020 17:28:22 -0000 --- gdb/python/py-linetable.c | 30 ++++++++++++++++++++++++------ gdb/symtab.c | 5 ++++- gdb/symtab.h | 3 ++- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/gdb/python/py-linetable.c b/gdb/python/py-linetable.c index 858313bb22..f0aa736ac7 100644 --- a/gdb/python/py-linetable.c +++ b/gdb/python/py-linetable.c @@ -24,6 +24,8 @@ typedef struct { PyObject_HEAD /* The line table source line. */ int line; + /* The line table source column. */ + int column; /* The pc associated with the source line. */ CORE_ADDR pc; } linetable_entry_object; @@ -99,7 +101,7 @@ symtab_to_linetable_object (PyObject *symtab) and an address. */ static PyObject * -build_linetable_entry (int line, CORE_ADDR address) +build_linetable_entry (int line, int column, CORE_ADDR address) { linetable_entry_object *obj; @@ -108,6 +110,7 @@ build_linetable_entry (int line, CORE_ADDR address) if (obj != NULL) { obj->line = line; + obj->column = column; obj->pc = address; } @@ -121,7 +124,8 @@ build_linetable_entry (int line, CORE_ADDR address) address. */ static PyObject * -build_line_table_tuple_from_pcs (int line, const std::vector &pcs) +build_line_table_tuple_from_pcs (int line, const std::vector &pcs, + const std::vector &columns) { int i; @@ -136,7 +140,7 @@ build_line_table_tuple_from_pcs (int line, const std::vector &pcs) for (i = 0; i < pcs.size (); ++i) { CORE_ADDR pc = pcs[i]; - gdbpy_ref<> obj (build_linetable_entry (line, pc)); + gdbpy_ref<> obj (build_linetable_entry (line, columns[i], pc)); if (obj == NULL) return NULL; @@ -158,6 +162,7 @@ ltpy_get_pcs_for_line (PyObject *self, PyObject *args) gdb_py_longest py_line; struct linetable_entry *best_entry = NULL; std::vector pcs; + std::vector columns; LTPY_REQUIRE_VALID (self, symtab); @@ -166,14 +171,14 @@ ltpy_get_pcs_for_line (PyObject *self, PyObject *args) try { - pcs = find_pcs_for_symtab_line (symtab, py_line, &best_entry); + pcs = find_pcs_for_symtab_line (symtab, py_line, &best_entry, &columns); } catch (const gdb_exception &except) { GDB_PY_HANDLE_EXCEPTION (except); } - return build_line_table_tuple_from_pcs (py_line, pcs); + return build_line_table_tuple_from_pcs (py_line, pcs, columns); } /* Implementation of gdb.LineTable.has_line (self, line) -> Boolean. @@ -339,6 +344,17 @@ ltpy_entry_get_pc (PyObject *self, void *closure) return gdb_py_object_from_longest (obj->pc).release (); } +/* Implementation of gdb.LineTableEntry.column (self) -> Long. Returns + a long integer associated with the line table entry. */ + +static PyObject * +ltpy_entry_get_column (PyObject *self, void *closure) +{ + linetable_entry_object *obj = (linetable_entry_object *) self; + + return gdb_py_object_from_longest (obj->column).release (); +} + /* LineTable iterator functions. */ /* Return a new line table iterator. */ @@ -422,7 +438,7 @@ ltpy_iternext (PyObject *self) item = &(SYMTAB_LINETABLE (symtab)->item[iter_obj->current_index]); } - obj = build_linetable_entry (item->line, item->pc); + obj = build_linetable_entry (item->line, item->column, item->pc); iter_obj->current_index++; return obj; @@ -548,6 +564,8 @@ static gdb_PyGetSetDef linetable_entry_object_getset[] = { "The line number in the source file.", NULL }, { "pc", ltpy_entry_get_pc, NULL, "The memory address for this line number.", NULL }, + { "column", ltpy_entry_get_column, NULL, + "The column number in the source file.", NULL }, { NULL } /* Sentinel */ }; diff --git a/gdb/symtab.c b/gdb/symtab.c index 999c0af8dc..19a3d86f24 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -3472,7 +3472,8 @@ find_line_symtab (struct symtab *sym_tab, int line, std::vector find_pcs_for_symtab_line (struct symtab *symtab, int line, - struct linetable_entry **best_item) + struct linetable_entry **best_item, + std::vector *columns) { int start = 0; std::vector result; @@ -3500,6 +3501,8 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line, } result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc); + if (columns != nullptr) + columns->push_back (SYMTAB_LINETABLE (symtab)->item[idx].column); start = idx + 1; } diff --git a/gdb/symtab.h b/gdb/symtab.h index c936c858e6..fb1b8c9393 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -2274,7 +2274,8 @@ void iterate_over_symtabs (const char *name, std::vector find_pcs_for_symtab_line - (struct symtab *symtab, int line, struct linetable_entry **best_entry); + (struct symtab *symtab, int line, struct linetable_entry **best_entry, + std::vector *columns = nullptr); /* Prototype for callbacks for LA_ITERATE_OVER_SYMBOLS. The callback is called once per matching symbol SYM. The callback should return -- 2.26.2