Bug 199987 - sys-devel/gdb - DUEL support
Bug#: 199987 Product:  Gentoo Linux Version: unspecified Platform: All
OS/Version: All Status: RESOLVED Severity: enhancement Priority: P5
Resolution: FIXED Assigned To: toolchain@gentoo.org Reported By: sergii@pisem.net
Component: Development
URL: 
Summary: sys-devel/gdb - DUEL support
Keywords:  
Status Whiteboard: 
Opened: 2007-11-22 15:19 0000
Description:   Opened: 2007-11-22 15:19 0000
enhancement request: add DUEL patch to gentoo-patches for gdb.

DUEL is a high-level data exploring language, originally written as a
gdb patch in 1993, for a PhD project.

Apparently, forgotten and abandoned since then, although it made into
dbx on irix.

I ported it to gdb-6.6, fixed a few bugs (added support for bool,
long long, typedefs, references, fixed type parsing, etc). Looks
like working.  I didn't spend too much time on it though,
the patch needs polishing.

(gdb) dl
Supported DUEL commands:
duel help      - give basic help (shortcut: dl ?)
duel longhelp  - give a longer help (dl ??)
duel examples  - show useful usage examples (dl ex)
duel operators - operators summary (dl ops)
duel aliases   - show current aliases (dl alias)
duel clear     - clear all aliases
duel debug     - toggle duel debug mode
(gdb) dl ex
x[10..20,22,24,40..60]    display x[i] for the selected indexes
x[9..0]                   display x[i] backwards
x[..100] >? 5 <? 10       display x[i] if 5<x[i]<10
x[0..99]=>if(_>5 && _<10) _   same
val[..50].if(is_dx) x else y   val[i].x or val[i].y depending on val[i].is_dx
emp[..50].if(is_m) _      return emp[i] if emp[i].is_m
x[i:=..100]=y[i] ;        assign y[i] to x[i]
x[i:=..100] >? x[i+1]     check if x[i] is not sorted
(x[..100] >? 0)[[2]]      return the 3rd positive x[i]
argv[0..]@0               argv[0] argv[1] .. until first null
emp[0..]@(code==0)        emp[0]..emp[n-1] where emp[n].code==0
head-->next->val          val of each element in a linked list
*head-->next[[20]]        element 20 of list, '*' display struct
w/fields
#/head-->next             count elements on a linked list
#/(head-->next-val>?5)    count those over 5
head-->(next!=?head)      expand cyclic linked list (tail->head)
T mytype x ;              declare var for user defined type (need 'T')
int i ; for(i=0 ;i<5 ..   declare variable, use C construct.
(gdb)


Reproducible: Always




Cannot be applied upstread, the patch is public domain which is not good enough
for FSF, they want the author to sign over the copyright, and he didn't want to
do it.

see http://sourceware.org/ml/gdb/2007-11/msg00170.html

------- Comment #1 From SpanKY 2007-12-01 18:48:08 0000 -------
i cant add a patch if there is no patch posted

------- Comment #2 From Sergei Golubchik 2007-12-01 22:24:06 0000 -------
Created an attachment (id=137510) [details]
gdb-6.6 duel patch

------- Comment #3 From Sergei Golubchik 2007-12-01 22:27:00 0000 -------
I've added a patch.

------- Comment #4 From SpanKY 2007-12-29 21:07:26 0000 -------
thanks, ive added it to 6.7.1-r1

------- Comment #5 From Sergei Golubchik 2007-12-30 17:37:21 0000 -------
Thank you!

But, if you ask me, I'd suggest to make it at least optional, with "duel" in
USE.

And if you're interested I could polish this patch a bit - remove unused files,
add a patch for gdb.info, etc.

------- Comment #6 From SpanKY 2007-12-30 17:45:14 0000 -------
if you like, you can post updated patches

i dont see the point in making it optional:
 - it doesnt impair any existing functionality
 - does not require any external dependencies
 - is small in and of itself