OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [gdbtcl/] [targetselection.itb] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
# Target selection dialog for GDBtk.
2
# Copyright 1997, 1998, 1999 Cygnus Solutions
3
#
4
# This program is free software; you can redistribute it and/or modify it
5
# under the terms of the GNU General Public License (GPL) as published by
6
# the Free Software Foundation; either version 2 of the License, or (at
7
# your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
 
14
 
15
# ----------------------------------------------------------------------
16
# Implements GDB TargetSelection dialog
17
# ----------------------------------------------------------------------
18
 
19
# ------------------------------------------------------------------
20
#  CONSTRUCTOR - create new target selection window
21
# ------------------------------------------------------------------
22
body TargetSelection::constructor {args} {
23
  eval itk_initialize $args
24
  set top [winfo toplevel $itk_interior]
25
  _init
26
  build_win
27
}
28
 
29
body TargetSelection::getname {target name} {
30
 
31
  # Init target database if we haven't already done so
32
  init_target_db
33
 
34
  if {[info exists gdb_target($target,$name)]} {
35
    return $gdb_target($target,$name)
36
  } else {
37
    return ""
38
  }
39
}
40
 
41
body TargetSelection::init_target_db {} {
42
  # check to see if we already initialized this database
43
  if {$db_inited} {
44
    return
45
  }
46
  set db_inited 1
47
 
48
  # Target Database
49
  # Set the following members:
50
  # TARGET,pretty-name: Name to display to user
51
  # TARGET,debaud: Default baudrate
52
  # TARGET,baud-rates: Permissible baudrates
53
  # TARGET,cmd: Abstracted command to run for this target (tcpX and com1 are
54
  #          replaced with the real port and host/port in set_target)
55
  # TARGET,runlist: List of preferences for the target: {attach download run cont}
56
  # TARGET,after_attaching: a command to run after attaching to the target
57
 
58
  # Default target
59
  set gdb_target(default,pretty-name) "Default"
60
  set gdb_target(default,defbaud) ""
61
  set gdb_target(default,baud-rates) {}
62
  set gdb_target(default,cmd) ""
63
  set gdb_target(default,runlist) {0 0 1 0}
64
  set gdb_target(default,options) ""
65
  set gdb_target(default,after_attaching) {}
66
 
67
  # Exec target
68
  set gdb_target(exec,pretty-name) "Exec"
69
  set gdb_target(exec,defbaud) ""
70
  set gdb_target(exec,baud-rates) {}
71
  set gdb_target(exec,cmd) ""
72
  set gdb_target(exec,runlist) {0 0 1 0}
73
  set gdb_target(exec,options) ""
74
  set gdb_target(exec,after_attaching) {}
75
 
76
  # ADS board w/SDS protocol
77
  set gdb_target(sds,pretty-name) "SDS"
78
  set gdb_target(sds,defbaud) "38400"
79
  set gdb_target(sds,baud-rates) {9600 38400}
80
  set gdb_target(sds,cmd) "sds com1"
81
  set gdb_target(sds,runlist) {1 1 0 1}
82
  set gdb_target(sds,after_attaching) {}
83
 
84
  # Simulator
85
  set gdb_target(sim,pretty-name) "Simulator"
86
  set gdb_target(sim,defbaud) ""
87
  set gdb_target(sim,baud-rates) {}
88
  set gdb_target(sim,cmd) "sim"
89
  set gdb_target(sim,runlist) {1 1 1 0}
90
  set gdb_target(sim,options) ""
91
  set gdb_target(sim,after_attaching) {}
92
 
93
  # Remote
94
  set gdb_target(remote,pretty-name) "Remote/Serial"
95
  set gdb_target(remote,defbaud) "9600"
96
  set gdb_target(remote,baud-rates) {9600 19200 38400 57600 115200}
97
  set gdb_target(remote,cmd) "remote com1"
98
  set gdb_target(remote,runlist) {1 1 0 1}
99
  set gdb_target(remote,after_attaching) {}
100
  set gdb_target(remotetcp,pretty-name) "Remote/TCP"
101
  set gdb_target(remotetcp,defbaud) "TCP"
102
  set gdb_target(remotetcp,baud-rates) {}
103
  set gdb_target(remotetcp,cmd) "remote tcpX"
104
  set gdb_target(remotetcp,runlist) {1 1 0 1}
105
  set gdb_target(remotetcp,after_attaching) {}
106
 
107
  # ARM Angel
108
  set gdb_target(rdi,pretty-name) "ARM Angel/Serial"
109
  set gdb_target(rdi,defbaud) "9600"
110
  set gdb_target(rdi,baud-rates) {9600 19200 38400 57600 115200}
111
  set gdb_target(rdi,cmd) "rdi com1"
112
  set gdb_target(rdi,runlist) {1 1 0 1}
113
  set gdb_target(rdi,after_attaching) {}
114
 
115
  # ARM Angel/Ethernet
116
  set gdb_target(rditcp,pretty-name) "ARM Angel/Ethernet"
117
  set gdb_target(rditcp,defbaud) "ETH"
118
  set gdb_target(rditcp,baud-rates) {}
119
  set gdb_target(rditcp,cmd) "rdi ethX"
120
  set gdb_target(rditcp,runlist) {1 1 0 1}
121
  set gdb_target(rditcp,after_attaching) {}
122
 
123
  # ARM Remote
124
  set gdb_target(rdp,pretty-name) "ARM Remote/Serial"
125
  set gdb_target(rdp,defbaud) "9600"
126
  set gdb_target(rdp,baud-rates) {9600}
127
  set gdb_target(rdp,cmd) "rdp com1"
128
  set gdb_target(rdp,runlist) {1 1 0 1}
129
  set gdb_target(rdp,after_attaching) {}
130
  set gdb_target(rdptcp,pretty-name) "ARM Remote/TCP"
131
  set gdb_target(rdptcp,defbaud) "TCP"
132
  set gdb_target(rdptcp,baud-rates) {}
133
  set gdb_target(rdptcp,cmd) "rdp tcpX"
134
  set gdb_target(rdptcp,runlist) {1 1 0 1}
135
  set gdb_target(rdptcp,after_attaching) {}
136
 
137
  # m32r rev C
138
  set gdb_target(m32r,pretty-name) "M32R/Serial"
139
  set gdb_target(m32r,defbaud) "9600"
140
  set gdb_target(m32r,baud-rates) {9600}
141
  set gdb_target(m32r,cmd) "m32r com1"
142
  set gdb_target(m32r,runlist) {1 1 0 1}
143
  set gdb_target(m32r,after_attaching) {}
144
  set gdb_target(m32rtcp,pretty-name) "M32R/TCP"
145
  set gdb_target(m32rtcp,defbaud) "TCP"
146
  set gdb_target(m32rtcp,baud-rates) {}
147
  set gdb_target(m32rtcp,cmd) "m32r tcpX"
148
  set gdb_target(m32rtcp,runlist) {1 1 0 1}
149
  set gdb_target(m32rtcp,after_attaching) {}
150
 
151
  # m32r msa2000
152
  set gdb_target(mon2000,pretty-name) "MON2000/Serial"
153
  set gdb_target(mon2000,defbaud) "9600"
154
  set gdb_target(mon2000,baud-rates) {9600}
155
  set gdb_target(mon2000,cmd) "mon2000 com1"
156
  set gdb_target(mon2000,runlist) {1 1 0 1}
157
  set gdb_target(mon2000,after_attaching) {}
158
  set gdb_target(mon2000tcp,pretty-name) "MON2000/TCP"
159
  set gdb_target(mon2000tcp,defbaud) "TCP"
160
  set gdb_target(mon2000tcp,baud-rates) {}
161
  set gdb_target(mon2000tcp,cmd) "mon2000 tcpX"
162
  set gdb_target(mon2000tcp,runlist) {1 1 0 1}
163
  set gdb_target(mon2000tcp,after_attaching) {}
164
 
165
  # sparclite
166
  set gdb_target(sparclite,pretty-name) "SPARClite/Serial"
167
  set gdb_target(sparclite,defbaud) "9600"
168
  set gdb_target(sparclite,baud-rates) {9600}
169
  set gdb_target(sparclite,cmd) "sparclite com1"
170
  set gdb_target(sparclite,runlist) {1 1 0 1}
171
  set gdb_target(sparclite,after_attaching) {}
172
  set gdb_target(sparclitetcp,pretty-name) "SPARClite/TCP"
173
  set gdb_target(sparclitetcp,defbaud) "TCP"
174
  set gdb_target(sparclitetcp,baud-rates) {}
175
  set gdb_target(sparclitetcp,cmd) "sparclite tcpX"
176
  set gdb_target(sparclitetcp,runlist) {1 1 0 1}
177
  set gdb_target(sparclitetcp,after_attaching) {}
178
 
179
  # V850 ICE
180
  set gdb_target(ice,pretty-name) "V850 ICE"
181
  set gdb_target(ice,defbaud) ""
182
  set gdb_target(ice,baud-rates) {}
183
  set gdb_target(ice,cmd) "ice"
184
  set gdb_target(ice,runlist) {1 1 0 1}
185
  set gdb_target(ice,after_attaching) {}
186
 
187
  # MIPS
188
  set gdb_target(mips,pretty-name) "MIPS/Serial"
189
  set gdb_target(mips,defbaud) "9600"
190
  set gdb_target(mips,baud-rates) {9600}
191
  set gdb_target(mips,cmd) "mips com1"
192
  set gdb_target(mips,runlist) {1 1 0 1}
193
  set gdb_target(mips,after_attaching) {}
194
  set gdb_target(mipstcp,pretty-name) "MIPS/TCP"
195
  set gdb_target(mipstcp,defbaud) "TCP"
196
  set gdb_target(mipstcp,baud-rates) {}
197
  set gdb_target(mipstcp,cmd) "mips tcpX"
198
  set gdb_target(mipstcp,runlist) {1 1 0 1}
199
  set gdb_target(mipstcp,after_attaching) {}
200
 
201
  # Picobug
202
  set gdb_target(picobug,pretty-name) "Picobug/Serial"
203
  set gdb_target(picobug,defbaud) "19200"
204
  set gdb_target(picobug,baud-rates) {19200}
205
  set gdb_target(picobug,cmd) "picobug com1"
206
  set gdb_target(picobug,runlist) {1 1 0 1}
207
  set gdb_target(picobug,after_attaching) {}
208
  set gdb_target(picobugtcp,pretty-name) "Picobug/TCP"
209
  set gdb_target(picobugtcp,defbaud) "TCP"
210
  set gdb_target(picobugtcp,baud-rates) {}
211
  set gdb_target(picobugtcp,cmd) "picobug tcpX"
212
  set gdb_target(picobugtcp,runlist) {1 1 0 1}
213
  set gdb_target(picobugtcp,after_attaching) {}
214
 
215
  # Cisco.
216
  set gdb_target(cisco,pretty-name) "Cisco/Serial"
217
  set gdb_target(cisco,defbaud) "38400"
218
  set gdb_target(cisco,baud-rates) {9600 19200 38400 56000}
219
  set gdb_target(cisco,cmd) "cisco com1"
220
  set gdb_target(cisco,runlist) {1 0 0 0}
221
  set gdb_target(cisco,after_attaching) "set os cisco"
222
  set gdb_target(ciscotcp,pretty-name) "Cisco/TCP"
223
  set gdb_target(ciscotcp,defbaud) "TCP"
224
  set gdb_target(ciscotcp,baud-rates) {}
225
  set gdb_target(ciscotcp,cmd) "cisco tcpX"
226
  set gdb_target(ciscotcp,runlist) {1 0 0 0}
227
  set gdb_target(ciscotcp,after_attaching) "set os cisco"
228
}
229
 
230
body TargetSelection::default_port {} {
231
  global tcl_platform
232
  switch -regexp $tcl_platform(os) {
233
    Windows { set port com1 }
234
    Linux   { set port /dev/ttyS0 }
235
    SunOS   { set port /dev/ttya }
236
    AIX     { set port /dev/foo1 }
237
    ULTRIX  { set port /dev/foo1 }
238
    IRIX    { set port /dev/foo1 }
239
    OSF1    { set port /dev/foo1 }
240
    NetBSD  { set port /dev/foo1 }
241
    HP-UX   {
242
      # Special case...
243
      switch -regexp $tcl_platform(osVersion) {
244
        A.09 { set port /dev/tty00 }
245
        B.10 { set port /dev/tty0p0 }
246
      }
247
    }
248
    default { set port /dev/ttya }
249
  }
250
 
251
  return $port
252
}
253
 
254
 
255
body TargetSelection::_init_prefs {} {
256
 
257
  if {$prefs_inited} {
258
    return
259
  }
260
  set prefs_inited 1
261
 
262
  # these are not target-specific
263
 
264
  pref define gdb/load/main 1
265
  pref define gdb/load/exit 1
266
  pref define gdb/load/check 0
267
 
268
  # these are target-specific
269
  # set up the defaults
270
  pref define gdb/load/default-verbose 0
271
  pref define gdb/load/default-port [default_port]
272
  pref define gdb/load/default-hostname ""
273
  pref define gdb/load/default-after_attaching {}
274
}
275
 
276
body TargetSelection::_init_target {} {
277
  global gdb_target_name
278
  set target_list [get_target_list]
279
  set target $gdb_target_name
280
 
281
  # target = CANCEL should never come into here.  If the target was
282
  # returned as CANCEL, it should be fixed by the caller...  But it
283
  # should not be harmful if it gets in here.
284
 
285
  if {$target == "" || [string compare $target CANCEL] == 0} {
286
    set target default
287
  }
288
 
289
  set defbaud $gdb_target($target,defbaud)
290
  pref define gdb/load/$target-baud $defbaud
291
  pref define gdb/load/$target-port [pref get gdb/load/default-port]
292
  pref define gdb/load/$target-verbose [pref get gdb/load/default-verbose]
293
  pref define gdb/load/$target-portname 1000
294
  pref define gdb/load/$target-hostname [pref get gdb/load/default-hostname]
295
 
296
  set err [catch {pref get gdb/load/$target-runlist} run_list]
297
  if {$err} {
298
    set run_list $gdb_target($target,runlist)
299
    pref setd gdb/load/$target-runlist $run_list
300
  }
301
  pref set gdb/src/run_attach [lindex $run_list 0]
302
  pref set gdb/src/run_load   [lindex $run_list 1]
303
  pref set gdb/src/run_run    [lindex $run_list 2]
304
  pref set gdb/src/run_cont   [lindex $run_list 3]
305
 
306
  set err [catch {pref get gdb/load/$target-after_attaching} aa]
307
  if {$err} {
308
    set aa $gdb_target($target,after_attaching)
309
    pref setd gdb/load/$target-after_attaching $aa
310
  }
311
}
312
 
313
body TargetSelection::_init {} {
314
 
315
  if {!$trace_inited} {
316
    # Trace all gdb_loaded changes based on target
317
    trace variable gdb_loaded w [code TargetSelection::target_trace]
318
  }
319
  set trace_inited 1
320
 
321
  init_target_db        ;# initialize database
322
  _init_prefs   ;# initialize load prefs
323
  _init_target  ;# initialize target prefs
324
  set_saved
325
 
326
  # This tells us that the target system is inited.  Some of these
327
  # init functions need to be called every time the target dialog is
328
  # posted, some only once.  The latter functions can check inited to
329
  # see what they should do.
330
 
331
}
332
 
333
# ------------------------------------------------------------------
334
#  METHOD:  build_win - build the dialog
335
# ------------------------------------------------------------------
336
body TargetSelection::build_win {} {
337
  global tcl_platform PREFS_state gdb_ImageDir gdb_target_name
338
 
339
  set f [frame $itk_interior.f]
340
  set opts [frame $itk_interior.moreoptions]
341
  frame $itk_interior.moreoptionsframe
342
  set btns [frame $itk_interior.buttons]
343
 
344
  #labelled frame "Connection"
345
  iwidgets::Labeledframe $f.lab -labelpos nw -labeltext [gettext "Connection"]
346
  set fr [$f.lab childsite]
347
 
348
  # target name
349
  label $fr.tarl -text [gettext "Target:"]
350
  combobox::combobox $fr.tar -editable 0 -command [code $this change_target] \
351
    -width $Width -maxheight 10
352
 
353
  # baud rate combobox
354
  label $fr.cbl -text [gettext "Baud Rate:"]
355
  combobox::combobox $fr.cb -editable 0 -command [code $this change_baud] \
356
    -textvariable [pref varname gdb/load/$target-baud] -width $Width \
357
    -maxheight 10
358
 
359
  if {[catch {gdb_cmd "show remotebaud"} res]} {
360
    set baud [pref get gdb/load/$target-baud]
361
  } else {
362
    set baud [lindex $res end]
363
    set baud [string trimright $baud "."]
364
    # When uninitialized, GDB returns a baud rate of 2^32
365
    # Detect this and ignore it.
366
    if {$baud > 4000000000} {
367
      set baud [pref get gdb/load/$target-baud]
368
    } else {
369
      pref setd gdb/load/$target-baud $baud
370
    }
371
  }
372
 
373
  # host entry widget
374
  entry $fr.host -textvariable [pref varname gdb/load/$target-hostname] \
375
    -width $Width
376
 
377
  # port combobox
378
  if {$tcl_platform(platform) == "windows"} {
379
    set editable 0
380
  } else {
381
    set editable 1
382
  }
383
 
384
  label $fr.portl -text [gettext "Port:"]
385
  combobox::combobox $fr.port -editable $editable \
386
    -textvariable [pref varname gdb/load/$target-port] \
387
    -width $Width -maxheight 10
388
 
389
  # load baud rates into combobox
390
  fill_rates
391
 
392
  # load port combobox
393
  if {$tcl_platform(platform) == "windows"} {
394
    foreach val [port_list] {
395
      $fr.port list insert end $val
396
    }
397
  } else {
398
    # fixme:  how do I find valid values for these????
399
    switch $tcl_platform(os) {
400
      Linux { set ports [list /dev/cua0 /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3]}
401
      SunOS { set ports [list /dev/ttya /dev/ttyb] }
402
      AIX   { set ports [list /dev/foo1 /dev/foo2] }
403
      ULTRIX { set ports [list /dev/foo1 /dev/foo2] }
404
      IRIX   { set ports [list /dev/foo1 /dev/foo2] }
405
      OSF1   { set ports [list /dev/foo1 /dev/foo2] }
406
      NetBSD { set ports [list /dev/foo1 /dev/foo2] }
407
      HP-UX  {
408
        # Special case...
409
        switch -regexp $tcl_platform(osVersion) {
410
          A.09 { set ports [list /dev/tty00 /dev/tty01] }
411
          B.10 { set ports [list /dev/tty0p0 /dev/tty1p0] }
412
        }
413
      }
414
      default { set ports [list UNKNOWN UNKNOWN] }
415
    }
416
    foreach val $ports {
417
      $fr.port list insert end $val
418
    }
419
  }
420
 
421
  # Port entry widget
422
  entry $fr.porte -textvariable [pref varname gdb/load/$target-port] -width $Width
423
 
424
  frame $f.fr
425
  checkbutton $f.fr.main -text [gettext "Set breakpoint at 'main'"] \
426
    -variable [pref varname gdb/load/main]
427
  checkbutton $f.fr.exit -text [gettext "Set breakpoint at 'exit'"] \
428
    -variable [pref varname gdb/load/exit]
429
  frame $f.fr.bp
430
  checkbutton $f.fr.bp.at_func -text [gettext "Set breakpoint at"] \
431
    -variable [pref varname gdb/load/bp_at_func]
432
  entry $f.fr.bp.func -textvariable [pref varname gdb/load/bp_func] -width 20
433
  checkbutton $f.fr.verb -text [gettext "Display Download Dialog"] \
434
    -variable [pref varname gdb/load/$target-verbose]
435
  checkbutton $f.fr.xterm -text [gettext "Use xterm as inferior's tty"] \
436
    -variable [pref varname gdb/process/xtermtty] \
437
    -onvalue yes -offvalue no
438
 
439
  if {![pref get gdb/control_target]} {
440
    $f.fr.main configure -state disabled
441
    $f.fr.exit configure -state disabled
442
    $f.fr.verb configure -state disabled
443
    $f.fr.bp.at_func configure -state disabled
444
    $f.fr.bp.func configure -state disabled
445
    checkbutton $f.fr.check -text [gettext "Compare to remote executable"] \
446
      -variable [pref varname gdb/load/check]
447
    if { $gdb_target_name == "exec" } {
448
      $f.fr.check configure -state disabled
449
    }
450
  }
451
 
452
  grid $fr.tarl $fr.tar -sticky w -padx 5 -pady 5
453
  grid $fr.cbl $fr.cb -sticky w -padx 5 -pady 5
454
  grid $fr.portl $fr.port -sticky w -padx 5 -pady 5
455
  set mapped1 $fr.cb
456
  set mapped2 $fr.port
457
 
458
  grid $f.fr.main -sticky w -padx 5 -pady 5
459
  grid $f.fr.exit -sticky w -padx 5 -pady 5
460
  pack $f.fr.bp.at_func $f.fr.bp.func -side left
461
  grid $f.fr.bp -sticky w -padx 5 -pady 5
462
  grid $f.fr.verb -sticky w -padx 5 -pady 5
463
  grid $f.fr.xterm -sticky w -padx 5 -pady 5
464
  if {![pref get gdb/control_target]} {
465
    grid $f.fr.check -sticky w -padx 5 -pady 5
466
  }
467
 
468
  grid $f.lab $f.fr -sticky w -padx 5 -pady 5
469
 
470
  # Create the "More Options" thingy
471
  if {[lsearch [image names] _MORE_] == -1} {
472
    image create photo _MORE_ -file [file join $gdb_ImageDir more.gif]
473
    image create photo _LESS_ -file [file join $gdb_ImageDir less.gif]
474
  }
475
 
476
  set MoreButton [button $opts.button -image _MORE_ \
477
                    -relief flat -command [code $this toggle_more_options]]
478
  set MoreLabel [label $opts.lbl -text {More Options}]
479
  frame $opts.frame -relief raised -bd 1
480
  pack $opts.button $opts.lbl -side left
481
  place $opts.frame -relx 1 -x -10 -rely 0.5 -relwidth 0.73 -height 2 -anchor e
482
 
483
  # Create the (hidden) more options frame
484
  set MoreFrame [iwidgets::Labeledframe $itk_interior.moreoptionsframe.frame \
485
                   -labelpos nw -labeltext {Run Options}]
486
  set frame [$MoreFrame childsite]
487
 
488
  set var [pref varname gdb/src/run_attach]
489
  checkbutton $frame.attach -text {Attach to Target} -variable $var
490
 
491
  set var [pref varname gdb/src/run_load]
492
  checkbutton $frame.load -text {Download Program} -variable $var
493
 
494
  set rm_frame [iwidgets::labeledframe $frame.run_method -labelpos nw -labeltext "Run Method" ]
495
  set RunMethod [ $rm_frame childsite ]
496
 
497
  set rm_label [label $frame.label -text "Run Method:"]
498
  set var [pref varname gdb/src/run_cont]
499
  radiobutton $RunMethod.cont -text {Continue from Last Stop} -value 1 -variable $var \
500
    -command [code $this set_run run]
501
 
502
  set var [pref varname gdb/src/run_run]
503
  radiobutton $RunMethod.run -text {Run Program} -value 1 -variable $var \
504
    -command [code $this set_run cont]
505
 
506
  # The after attaching command entry
507
  set _after_entry [entry $frame.aftere]
508
  label $frame.afterl -text {Command to issue after attaching:}
509
 
510
  grid $frame.label -column 1 -row 0 -sticky w
511
  grid $frame.attach -column 0 -row 1 -ipady 2
512
  grid $frame.load -column 0 -row 2 -ipady 2
513
 
514
  grid $RunMethod.run -column 0 -row 1 -sticky w -ipady 2
515
  grid $RunMethod.cont -column 0 -row 2 -sticky w -ipady 2
516
 
517
  grid $rm_frame -column 1 -row 1 -rowspan 2 -sticky nsew -ipady 2
518
 
519
  grid $frame.afterl -row 4 -sticky we -columnspan 2 -ipady 2
520
  grid $frame.aftere -sticky we -columnspan 2 -ipady 2
521
  grid columnconfigure $frame 0 -weight 1
522
  grid columnconfigure $frame 1 -weight 1
523
 
524
  # Map everything onto the screen
525
  # This looks like a possible packing bug -- our topmost frame
526
  # will not resize itself. So, instead, use the topmost frame.
527
  #pack $f $opts $itk_interior.moreoptionsframe -side top -fill x
528
  pack $MoreFrame -fill x -expand yes
529
  pack $f $opts -side top -fill x
530
 
531
  change_target $gdb_target($target,pretty-name)
532
 
533
  button $btns.ok -text [gettext OK] -width 7 -command [code $this save] \
534
    -default active
535
  button $btns.cancel -text [gettext Cancel] -width 7 \
536
    -command [code $this cancel]
537
  button $btns.help -text [gettext Help] -width 7 -command [code $this help] \
538
    -state disabled
539
  standard_button_box $btns
540
  bind $btns.ok  "$btns.ok flash; $btns.ok invoke"
541
  bind $btns.cancel  "$btns.cancel flash; $btns.cancel invoke"
542
  bind $btns.help  "$btns.help flash; $btns.help invoke"
543
 
544
  pack $btns -side bottom -anchor e
545
  focus $btns.ok
546
 
547
  # set up balloon help
548
  balloon register $f.fr.bp.at_func "Set User-Speficied Breakpoints at Run Time"
549
  balloon register $f.fr.bp.func "Enter a List of Functions for Breakpoints"
550
 
551
  window_name "Target Selection"
552
 
553
  if {[valid_target $target]} {
554
    $fr.tar configure -value $gdb_target($target,pretty-name)
555
  }
556
  fill_targets
557
 
558
 
559
}
560
 
561
# ------------------------------------------------------------------
562
#  METHOD:  set_saved - set saved values
563
# ------------------------------------------------------------------
564
body TargetSelection::set_saved {} {
565
  set saved_baud [pref get gdb/load/$target-baud]
566
  set saved_port [pref get gdb/load/$target-port]
567
  set saved_main [pref get gdb/load/main]
568
  set saved_exit [pref get gdb/load/exit]
569
  set saved_check [pref get gdb/load/check]
570
  set saved_verb [pref get gdb/load/$target-verbose]
571
  set saved_portname [pref get gdb/load/$target-portname]
572
  set saved_hostname [pref get gdb/load/$target-hostname]
573
  set saved_attach [pref get gdb/src/run_attach]
574
  set saved_load   [pref get gdb/src/run_load]
575
  set saved_run    [pref get gdb/src/run_run]
576
  set saved_cont   [pref get gdb/src/run_cont]
577
  if {[info exists gdb_target($target,options)]} {
578
    if {[catch {pref get gdb/load/$target-opts} saved_options]} {
579
      set saved_options ""
580
    }
581
  }
582
}
583
 
584
# ------------------------------------------------------------------
585
#  METHOD:  write_saved - write saved values to preferences
586
# ------------------------------------------------------------------
587
body TargetSelection::write_saved {} {
588
  pref setd gdb/load/$target-baud $saved_baud
589
  pref setd gdb/load/$target-port $saved_port
590
  pref setd gdb/load/main $saved_main
591
  pref setd gdb/load/exit $saved_exit
592
  pref setd gdb/load/check $saved_check
593
  pref setd gdb/load/$target-verbose $saved_verb
594
  pref setd gdb/load/$target-portname $saved_portname
595
  pref setd gdb/load/$target-hostname $saved_hostname
596
  pref setd gdb/load/$target-runlist [list $saved_attach $saved_load $saved_run $saved_cont]
597
  if {[info exists gdb_target($target,options)]} {
598
    pref setd gdb/load/$target-opts $saved_options
599
  }
600
  if {[catch {$_after_entry get} saved_after_attaching]} {
601
    set saved_after_attaching ""
602
  }
603
  pref setd gdb/load/$target-after_attaching $saved_after_attaching
604
}
605
 
606
# ------------------------------------------------------------------
607
#  METHOD:  fill_rates - fill baud rate combobox
608
# ------------------------------------------------------------------
609
body TargetSelection::fill_rates {} {
610
  $fr.cb list delete 0 end
611
 
612
  if {$gdb_target($target,baud-rates) != ""} {
613
    foreach val $gdb_target($target,baud-rates) {
614
      $fr.cb list insert end $val
615
    }
616
  }
617
}
618
 
619
# ------------------------------------------------------------------
620
#  METHOD:  fill_targets - fill target combobox
621
# ------------------------------------------------------------------
622
body TargetSelection::fill_targets {} {
623
  #[$fr.tar subwidget listbox] delete 0 end
624
  $fr.tar list delete 0 end
625
 
626
  foreach val $target_list {
627
    if {[info exists gdb_target($val,pretty-name)]} {
628
      $fr.tar list insert end $gdb_target($val,pretty-name)
629
 
630
      # Insert TCP target, if it exists
631
      if {[info exists gdb_target(${val}tcp,pretty-name)]} {
632
        $fr.tar list insert end $gdb_target(${val}tcp,pretty-name)
633
      }
634
    }
635
  }
636
}
637
 
638
# ------------------------------------------------------------------
639
#  METHOD:  config_dialog - Convenience method to map/unmap/rename
640
#            components onto the screen based on target T.
641
# ------------------------------------------------------------------
642
body TargetSelection::config_dialog {t} {
643
  pref define gdb/load/$t-verbose [pref get gdb/load/verbose]
644
  $f.fr.verb config -variable [pref varname gdb/load/$t-verbose]
645
  # Map the correct entries and comboboxes onto the screen
646
  if {$gdb_target($t,defbaud) == "TCP"} {
647
    # we have a tcp target
648
    # map host and porte
649
    if {$mapped1 != "$fr.host"} {
650
      grid forget $mapped1
651
      set mapped1 $fr.host
652
      grid $mapped1 -row 1 -column 1 -sticky w -padx 5 -pady 5
653
    }
654
    $fr.cbl configure -text "Hostname:"
655
    $fr.host config -textvariable [pref varname gdb/load/$t-hostname]
656
 
657
    if {$mapped2 != "$fr.porte"} {
658
      grid forget $mapped2
659
      set mapped2 $fr.porte
660
      grid $mapped2 -row 2 -column 1 -sticky w -padx 5 -pady 5
661
    }
662
    $fr.portl configure -text {Port:}
663
    $fr.porte config -textvariable [pref varname gdb/load/$t-portname] -fg black
664
 
665
    $mapped1 configure -state normal
666
    $mapped2 configure -state normal
667
  } elseif {$gdb_target($t,defbaud) == "ETH"} {
668
    # we have a udp target
669
    # map host and porte
670
    if {$mapped1 != "$fr.host"} {
671
      grid forget $mapped1
672
      set mapped1 $fr.host
673
      grid $mapped1 -row 1 -column 1 -sticky w -padx 5 -pady 5
674
    }
675
    $fr.cbl configure -text "Hostname:"
676
    $fr.host config -textvariable [pref varname gdb/load/$t-hostname]
677
 
678
    if {$mapped2 != "$fr.porte"} {
679
      grid forget $mapped2
680
    }
681
    $fr.portl configure -text {Port: N/A (fixed)}
682
 
683
    $mapped1 configure -state normal
684
    $mapped2 configure -state disabled
685
  } elseif {$gdb_target($t,defbaud) != ""} {
686
    # we have a serial target
687
    # map port and cb
688
    if {$mapped1 != "$fr.cb"} {
689
      grid forget $mapped1
690
      set mapped1 $fr.cb
691
      grid $mapped1 -row 1 -column 1 -sticky w -padx 5 -pady 5
692
    }
693
    $fr.cbl configure -text "Baud Rate:"
694
    $fr.cb configure -textvariable [pref varname gdb/load/$t-baud]
695
 
696
    if {$mapped2 != "$fr.port"} {
697
      grid forget $mapped2
698
      set mapped2 $fr.port
699
      grid $mapped2 -row 2 -column 1 -sticky w -padx 5 -pady 5
700
    }
701
    $fr.portl configure -text {Port:}
702
    $fr.port configure -textvariable [pref varname gdb/load/$t-port]
703
 
704
    $mapped1 configure -state normal
705
    $mapped2 configure -state normal
706
  } else {
707
    # we have a non-remote(-like) target
708
    # disable all (except tar) and check for
709
    # options
710
    $mapped1 configure -state disabled
711
    $mapped2 configure -state disabled
712
    $fr.porte configure -fg gray
713
 
714
    if {[info exists gdb_target($t,options)]} {
715
      if {$mapped1 != "$fr.host"} {
716
        grid forget $mapped1
717
        set mapped1 $fr.host
718
        grid $mapped1 -row 1 -column 1 -sticky w -padx 5 -pady 5
719
      }
720
      $mapped1 configure -state normal
721
      $fr.host config -textvariable [pref varname gdb/load/$t-opts]
722
 
723
      # We call options "arguments" for the exec target
724
      # FIXME: this is really overloaded!!
725
      if {$t == "exec"} {
726
        set text "Arguments:"
727
      } else {
728
        set text "Options:"
729
      }
730
      $fr.cbl configure -text $text
731
    }
732
  }
733
}
734
 
735
# ------------------------------------------------------------------
736
#  METHOD:  change_target - callback for target combobox
737
# ------------------------------------------------------------------
738
body TargetSelection::change_target {w {name ""}} {
739
  if {$name == ""} {return}
740
  set target [get_target $name]
741
 
742
  if { "$target" == "exec" } {
743
    $RunMethod.run configure -state disabled -value 1
744
    $RunMethod.cont configure -state disabled
745
  } else {
746
    $RunMethod.run configure -state normal
747
    $RunMethod.cont configure -state normal
748
  }
749
 
750
  debug "$target"
751
  set defbaud $gdb_target($target,defbaud)
752
  pref define gdb/load/$target-baud $defbaud
753
  pref define gdb/load/$target-portname 1000
754
  pref define gdb/load/$target-hostname [pref get gdb/load/default-hostname]
755
  if {$defbaud == ""} {
756
    pref define gdb/load/$target-port ""
757
  } else {
758
    pref define gdb/load/$target-port [pref get gdb/load/default-port]
759
  }
760
 
761
  config_dialog $target
762
  fill_rates
763
 
764
  # Configure the default run options for this target
765
  set err [catch {pref get gdb/load/$target-runlist} run_list]
766
  if {$err} {
767
    set run_list $gdb_target($target,runlist)
768
    pref setd gdb/load/$target-runlist $run_list
769
  }
770
 
771
  pref set gdb/src/run_attach [lindex $run_list 0]
772
  pref set gdb/src/run_load   [lindex $run_list 1]
773
  pref set gdb/src/run_run    [lindex $run_list 2]
774
  pref set gdb/src/run_cont   [lindex $run_list 3]
775
  set_check_button $name
776
 
777
  set err [catch {pref get gdb/load/$target-after_attaching} aa]
778
  if {$err} {
779
    set aa $gdb_target($target,after_attaching)
780
    pref setd gdb/load/$target-after_attaching $aa
781
  }
782
 
783
  $_after_entry delete 0 end
784
  $_after_entry insert 0 $aa
785
 
786
  set_saved
787
 
788
  set changes 0
789
}
790
 
791
# ------------------------------------------------------------------
792
#  PRIVATE METHOD:  change_baud - called when the baud rate is changed.
793
#  If GDB is running, set baud rate in GDB and read it back.
794
# ------------------------------------------------------------------
795
body TargetSelection::change_baud {w {baud ""}} {
796
  if {$baud != ""} {
797
    if {([string compare $baud "TCP"] != 0)
798
        && ([string compare $baud "ETH"] != 0)} {
799
      gdb_cmd "set remotebaud $baud"
800
      if {[catch {gdb_cmd "show remotebaud"} res]} {
801
        set newbaud 0
802
      } else {
803
        set newbaud [lindex $res end]
804
        set newbaud [string trimright $newbaud "."]
805
        if {$newbaud > 4000000} {
806
          set newbaud 0
807
        }
808
      }
809
      if {$newbaud != $baud} {
810
        pref set gdb/load/$target-baud $newbaud
811
      }
812
    }
813
  }
814
}
815
 
816
 
817
# ------------------------------------------------------------------
818
#  METHOD:  port_list - return a list of valid ports for Windows
819
# ------------------------------------------------------------------
820
body TargetSelection::port_list {} {
821
  set plist ""
822
  # Scan com1 - com8 trying to open each one.
823
  # If permission is denied that means it is in use,
824
  # which is OK because we may be using it or the user
825
  # may be setting up the remote target manually with
826
  # a terminal program.
827
  for {set i 1} {$i < 9} { incr i} {
828
    if {[catch { set fd [::open COM$i: RDWR] } msg]} {
829
      # Failed.  Find out why.
830
      if {[string first "permission denied" $msg] != -1} {
831
        # Port is there, but busy right now. That's OK.
832
        lappend plist com$i
833
      }
834
    } else {
835
      # We got it.  Now close it and add to list.
836
      close $fd
837
      lappend plist com$i
838
    }
839
  }
840
  return $plist
841
}
842
 
843
# ------------------------------------------------------------------
844
#  METHOD:  get_target_list - return a list of targets supported
845
#  by this GDB.  Parses the output of "help target"
846
# ------------------------------------------------------------------
847
body TargetSelection::get_target_list {} {
848
  set native [native_debugging]
849
  set names ""
850
  set res [gdb_cmd "help target"]
851
  foreach line [split $res \n] {
852
    if {![string compare [lindex $line 0] "target"]} {
853
      set name [lindex $line 1]
854
 
855
      # For cross debuggers, do not allow the target "exec"
856
      if {$name == "exec" && !$native} {
857
        continue
858
      }
859
      lappend names $name
860
    }
861
  }
862
  return $names
863
}
864
 
865
# ------------------------------------------------------------------
866
#  METHOD:  save - save values
867
# ------------------------------------------------------------------
868
body TargetSelection::save {} {
869
  global gdb_target_name
870
  set err [catch {
871
    set_saved
872
    write_saved
873
    set gdb_target_name $target
874
    pref setd gdb/load/target $target
875
  } errtxt]
876
  if {$err} {debug "target: $errtxt"}
877
  if {[valid_target $gdb_target_name]} {
878
    # Dismiss the dialog box
879
    unpost
880
  } else {
881
    tk_messageBox -message "The current target is not valid."
882
  }
883
 
884
}
885
 
886
 
887
# ------------------------------------------------------------------
888
#  METHOD:  cancel - restore previous values
889
# ------------------------------------------------------------------
890
body TargetSelection::cancel {} {
891
  global gdb_target_name
892
  catch {gdb_cmd "set remotebaud $saved_baud"}
893
 
894
  $fr.cb configure -value $saved_baud
895
  write_saved
896
  if {$exportcancel} {
897
    set gdb_target_name CANCEL
898
  }
899
 
900
  # Now dismiss the dialog
901
  unpost
902
}
903
 
904
# ------------------------------------------------------------------
905
#  METHOD: set_check_button - enable/disable compare-section command
906
# ------------------------------------------------------------------
907
body TargetSelection::set_check_button {name} {
908
  if {[winfo exists  $itk_interior.f.fr.check]} {
909
    if { $name == "exec" } {
910
      $itk_interior.f.fr.check configure -state disabled
911
    } else {
912
      $itk_interior.f.fr.check configure -state normal
913
    }
914
  }
915
}
916
 
917
# ------------------------------------------------------------------
918
#  METHOD:  help - launches context sensitive help.
919
# ------------------------------------------------------------------
920
body TargetSelection::help {} {
921
}
922
 
923
# ------------------------------------------------------------------
924
#  METHOD:  reconfig - used when preferences change
925
# ------------------------------------------------------------------
926
body TargetSelection::reconfig {} {
927
  # for now, just delete and recreate
928
  destroy $itk_interior.f
929
  build_win
930
}
931
 
932
# ------------------------------------------------------------------
933
#  METHOD:  get_target - get the internal name of a target from the
934
#              pretty-name
935
# ------------------------------------------------------------------
936
body TargetSelection::get_target {name} {
937
  set t {}
938
  set list [array get gdb_target *,pretty-name]
939
  set i [lsearch -exact $list $name]
940
  if {$i != -1} {
941
    incr i -1
942
    set t [lindex [split [lindex $list $i] ,] 0]
943
  } else {
944
    debug "unknown pretty-name \"$name\""
945
  }
946
  return $t
947
}
948
 
949
# ------------------------------------------------------------------
950
#  METHOD: toggle_more_options -- toggle displaying the  More/Fewer
951
#                Options pane
952
# ------------------------------------------------------------------
953
body TargetSelection::toggle_more_options {} {
954
  if {[$MoreLabel cget -text] == "More Options"} {
955
    $MoreLabel configure -text "Fewer Options"
956
    $MoreButton configure -image _LESS_
957
    # Bug in Tk? The top-most frame does not shrink...
958
    #pack $MoreFrame
959
    pack $itk_interior.moreoptionsframe -after $itk_interior.moreoptions -fill both -padx 5 -pady 5
960
  } else {
961
    $MoreLabel configure -text "More Options"
962
    $MoreButton configure -image _MORE_
963
    #pack forget $MoreFrame
964
    pack forget $itk_interior.moreoptionsframe
965
  }
966
}
967
 
968
# ------------------------------------------------------------------
969
#  METHOD:  set_run - set the run button. Make sure not both run and
970
#                     continue are selected.
971
# ------------------------------------------------------------------
972
body TargetSelection::set_run {check_which} {
973
  global PREFS_state
974
  set var [pref varname gdb/src/run_$check_which]
975
  global $var
976
  if {[set $var]} {
977
    set $var 0
978
  }
979
}
980
 
981
# ------------------------------------------------------------------
982
#   PROCEDURE: target_trace
983
#          This procedure is used to configure gdb_loaded
984
#          and possible more) whenever the value of gdb_loaded
985
#          is changed based on the current target.
986
# ------------------------------------------------------------------
987
body TargetSelection::target_trace {variable index op} {
988
  global gdb_target_name gdb_loaded
989
 
990
  switch $gdb_target_name {
991
 
992
    exec {
993
      # The exec target is always loaded.
994
      set gdb_loaded 1
995
    }
996
  }
997
}
998
 
999
# Returns 1 if TARGET is a _runnable_ target for this gdb.
1000
body TargetSelection::valid_target {target} {
1001
  set err [catch {gdb_cmd "help target $target"}]
1002
  if {$target == "exec" && ![native_debugging]} {
1003
    set err 1
1004
  }
1005
 
1006
  if {[regexp "tcp$" $target]} {
1007
    # Special case (of course)
1008
    regsub tcp$ $target {} foo
1009
    return [valid_target $foo]
1010
  }
1011
 
1012
  return [expr {$err == 0}]
1013
}
1014
 
1015
# Returns 1 if this is not a cross debugger.
1016
body TargetSelection::native_debugging {} {
1017
  global GDBStartup
1018
 
1019
  set r [string compare $GDBStartup(host_name) $GDBStartup(target_name)]
1020
  return [expr {!$r}]
1021
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.