diff options
| author | Nick Roberts | 2005-05-26 12:20:21 +0000 |
|---|---|---|
| committer | Nick Roberts | 2005-05-26 12:20:21 +0000 |
| commit | 5770a942e767f732f390b25bc592fe92a154e3e4 (patch) | |
| tree | 06617c33a7e5241f0eaf0745ab17a6eb0defe2b4 | |
| parent | e3e4b1f233ec3d7875ba8ceca8d534b148e15b49 (diff) | |
| download | emacs-5770a942e767f732f390b25bc592fe92a154e3e4.tar.gz emacs-5770a942e767f732f390b25bc592fe92a154e3e4.zip | |
(gdb-frame-address):
Rename from gdb-current-address.
(gdb-previous-frame-address): Rename from gdb-previous-address.
(gdb-selected-frame): Rename from gdb-current-frame.
(gdb-get-selected-frame): Rename from gdb-get-current-frame.
(gdb-frame-number): Rename from gdb-current-stack-level.
(gdb-ann3): Match new mode-name for disassembly buffer.
Extend initialisation of variables.
(gdb-post-prompt): Update disassembly from gdb-frame-handler.
(gdb-memory-mode): Use mouse-face in header line.
(gdb-assembler-buffer-name): Call it disassembly and give frame
in mode line.
(gdb-source-spec-regexp, gdb-assembler-custom)
(gdb-invalidate-assembler, gdb-frame-handler):
Make robust to leading zeroes in address format.
| -rw-r--r-- | lisp/progmodes/gdb-ui.el | 160 |
1 files changed, 85 insertions, 75 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index 1a26b64beca..f7773a98f34 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el | |||
| @@ -66,12 +66,12 @@ | |||
| 66 | 66 | ||
| 67 | (require 'gud) | 67 | (require 'gud) |
| 68 | 68 | ||
| 69 | (defvar gdb-current-address "main" "Initialisation for Assembler buffer.") | 69 | (defvar gdb-frame-address "main" "Initialisation for Assembler buffer.") |
| 70 | (defvar gdb-previous-address nil) | 70 | (defvar gdb-previous-frame-address nil) |
| 71 | (defvar gdb-memory-address "main") | 71 | (defvar gdb-memory-address "main") |
| 72 | (defvar gdb-previous-frame nil) | 72 | (defvar gdb-previous-frame nil) |
| 73 | (defvar gdb-current-frame nil) | 73 | (defvar gdb-selected-frame nil) |
| 74 | (defvar gdb-current-stack-level nil) | 74 | (defvar gdb-frame-number nil) |
| 75 | (defvar gdb-current-language nil) | 75 | (defvar gdb-current-language nil) |
| 76 | (defvar gdb-var-list nil "List of variables in watch window.") | 76 | (defvar gdb-var-list nil "List of variables in watch window.") |
| 77 | (defvar gdb-var-changed nil "Non-nil means that gdb-var-list has changed.") | 77 | (defvar gdb-var-changed nil "Non-nil means that gdb-var-list has changed.") |
| @@ -295,7 +295,7 @@ predefined macros." | |||
| 295 | (set (make-local-variable 'gud-minor-mode) 'gdba) | 295 | (set (make-local-variable 'gud-minor-mode) 'gdba) |
| 296 | (set (make-local-variable 'gud-marker-filter) 'gud-gdba-marker-filter) | 296 | (set (make-local-variable 'gud-marker-filter) 'gud-gdba-marker-filter) |
| 297 | ;; | 297 | ;; |
| 298 | (gud-def gud-break (if (not (string-equal mode-name "Machine")) | 298 | (gud-def gud-break (if (not (string-match "Machine" mode-name)) |
| 299 | (gud-call "break %f:%l" arg) | 299 | (gud-call "break %f:%l" arg) |
| 300 | (save-excursion | 300 | (save-excursion |
| 301 | (beginning-of-line) | 301 | (beginning-of-line) |
| @@ -303,7 +303,7 @@ predefined macros." | |||
| 303 | (gud-call "break *%a" arg))) | 303 | (gud-call "break *%a" arg))) |
| 304 | "\C-b" "Set breakpoint at current line or address.") | 304 | "\C-b" "Set breakpoint at current line or address.") |
| 305 | ;; | 305 | ;; |
| 306 | (gud-def gud-remove (if (not (string-equal mode-name "Machine")) | 306 | (gud-def gud-remove (if (not (string-match "Machine" mode-name)) |
| 307 | (gud-call "clear %f:%l" arg) | 307 | (gud-call "clear %f:%l" arg) |
| 308 | (save-excursion | 308 | (save-excursion |
| 309 | (beginning-of-line) | 309 | (beginning-of-line) |
| @@ -311,7 +311,7 @@ predefined macros." | |||
| 311 | (gud-call "clear *%a" arg))) | 311 | (gud-call "clear *%a" arg))) |
| 312 | "\C-d" "Remove breakpoint at current line or address.") | 312 | "\C-d" "Remove breakpoint at current line or address.") |
| 313 | ;; | 313 | ;; |
| 314 | (gud-def gud-until (if (not (string-equal mode-name "Machine")) | 314 | (gud-def gud-until (if (not (string-match "Machine" mode-name)) |
| 315 | (gud-call "until %f:%l" arg) | 315 | (gud-call "until %f:%l" arg) |
| 316 | (save-excursion | 316 | (save-excursion |
| 317 | (beginning-of-line) | 317 | (beginning-of-line) |
| @@ -332,25 +332,26 @@ predefined macros." | |||
| 332 | (setq comint-input-sender 'gdb-send) | 332 | (setq comint-input-sender 'gdb-send) |
| 333 | ;; | 333 | ;; |
| 334 | ;; (re-)initialize | 334 | ;; (re-)initialize |
| 335 | (setq gdb-current-address "main") | 335 | (setq gdb-frame-address (if gdb-show-main "main" nil)) |
| 336 | (setq gdb-previous-address nil) | 336 | (setq gdb-previous-frame-address nil |
| 337 | (setq gdb-memory-address "main") | 337 | gdb-memory-address "main" |
| 338 | (setq gdb-previous-frame nil) | 338 | gdb-previous-frame nil |
| 339 | (setq gdb-current-frame nil) | 339 | gdb-selected-frame nil |
| 340 | (setq gdb-current-stack-level nil) | 340 | gdb-current-language nil |
| 341 | (setq gdb-var-list nil) | 341 | gdb-frame-number nil |
| 342 | (setq gdb-var-changed nil) | 342 | gdb-var-list nil |
| 343 | (setq gdb-first-prompt nil) | 343 | gdb-var-changed nil |
| 344 | (setq gdb-prompting nil) | 344 | gdb-first-prompt nil |
| 345 | (setq gdb-input-queue nil) | 345 | gdb-prompting nil |
| 346 | (setq gdb-current-item nil) | 346 | gdb-input-queue nil |
| 347 | (setq gdb-pending-triggers nil) | 347 | gdb-current-item nil |
| 348 | (setq gdb-output-sink 'user) | 348 | gdb-pending-triggers nil |
| 349 | (setq gdb-server-prefix "server ") | 349 | gdb-output-sink 'user |
| 350 | (setq gdb-flush-pending-output nil) | 350 | gdb-server-prefix "server " |
| 351 | (setq gdb-location-alist nil) | 351 | gdb-flush-pending-output nil |
| 352 | (setq gdb-find-file-unhook nil) | 352 | gdb-location-alist nil |
| 353 | (setq gdb-macro-info nil) | 353 | gdb-find-file-unhook nil |
| 354 | gdb-macro-info nil) | ||
| 354 | ;; | 355 | ;; |
| 355 | (setq gdb-buffer-type 'gdba) | 356 | (setq gdb-buffer-type 'gdba) |
| 356 | ;; | 357 | ;; |
| @@ -380,8 +381,8 @@ predefined macros." | |||
| 380 | (require 'tooltip) | 381 | (require 'tooltip) |
| 381 | (let ((expr (tooltip-identifier-from-point (point)))) | 382 | (let ((expr (tooltip-identifier-from-point (point)))) |
| 382 | (if (and (string-equal gdb-current-language "c") | 383 | (if (and (string-equal gdb-current-language "c") |
| 383 | gdb-use-colon-colon-notation gdb-current-frame) | 384 | gdb-use-colon-colon-notation gdb-selected-frame) |
| 384 | (setq expr (concat gdb-current-frame "::" expr))) | 385 | (setq expr (concat gdb-selected-frame "::" expr))) |
| 385 | (catch 'already-watched | 386 | (catch 'already-watched |
| 386 | (dolist (var gdb-var-list) | 387 | (dolist (var gdb-var-list) |
| 387 | (if (string-equal expr (car var)) (throw 'already-watched nil))) | 388 | (if (string-equal expr (car var)) (throw 'already-watched nil))) |
| @@ -862,7 +863,7 @@ This filter may simply queue input for a later time." | |||
| 862 | (setq gdb-prompting t)) | 863 | (setq gdb-prompting t)) |
| 863 | 864 | ||
| 864 | (defconst gdb-source-spec-regexp | 865 | (defconst gdb-source-spec-regexp |
| 865 | "\\(.*\\):\\([0-9]*\\):[0-9]*:[a-z]*:\\(0x[a-f0-9]*\\)") | 866 | "\\(.*\\):\\([0-9]*\\):[0-9]*:[a-z]*:0x0*\\([a-f0-9]*\\)") |
| 866 | 867 | ||
| 867 | ;; Do not use this except as an annotation handler. | 868 | ;; Do not use this except as an annotation handler. |
| 868 | (defun gdb-source (args) | 869 | (defun gdb-source (args) |
| @@ -872,7 +873,7 @@ This filter may simply queue input for a later time." | |||
| 872 | (cons | 873 | (cons |
| 873 | (match-string 1 args) | 874 | (match-string 1 args) |
| 874 | (string-to-number (match-string 2 args)))) | 875 | (string-to-number (match-string 2 args)))) |
| 875 | (setq gdb-current-address (match-string 3 args)) | 876 | (setq gdb-frame-address (match-string 3 args)) |
| 876 | ;; cover for auto-display output which comes *before* | 877 | ;; cover for auto-display output which comes *before* |
| 877 | ;; stopped annotation | 878 | ;; stopped annotation |
| 878 | (if (eq gdb-output-sink 'inferior) (setq gdb-output-sink 'user))) | 879 | (if (eq gdb-output-sink 'inferior) (setq gdb-output-sink 'user))) |
| @@ -985,10 +986,12 @@ sink to `user' in `gdb-stopping', that is fine." | |||
| 985 | This begins the collection of output from the current command if that | 986 | This begins the collection of output from the current command if that |
| 986 | happens to be appropriate." | 987 | happens to be appropriate." |
| 987 | (unless gdb-pending-triggers | 988 | (unless gdb-pending-triggers |
| 988 | (gdb-get-current-frame) | 989 | (gdb-get-selected-frame) |
| 989 | (gdb-invalidate-frames) | 990 | (gdb-invalidate-frames) |
| 990 | (gdb-invalidate-breakpoints) | 991 | (gdb-invalidate-breakpoints) |
| 991 | (gdb-invalidate-assembler) | 992 | ;; Do this through gdb-get-selected-frame -> gdb-frame-handler |
| 993 | ;; so gdb-frame-address is updated. | ||
| 994 | ;; (gdb-invalidate-assembler) | ||
| 992 | (gdb-invalidate-registers) | 995 | (gdb-invalidate-registers) |
| 993 | (gdb-invalidate-memory) | 996 | (gdb-invalidate-memory) |
| 994 | (gdb-invalidate-locals) | 997 | (gdb-invalidate-locals) |
| @@ -1511,7 +1514,7 @@ static char *magick[] = { | |||
| 1511 | help-echo "mouse-2, RET: Select frame")) | 1514 | help-echo "mouse-2, RET: Select frame")) |
| 1512 | (beginning-of-line) | 1515 | (beginning-of-line) |
| 1513 | (when (and (looking-at "^#\\([0-9]+\\)") | 1516 | (when (and (looking-at "^#\\([0-9]+\\)") |
| 1514 | (equal (match-string 1) gdb-current-stack-level)) | 1517 | (equal (match-string 1) gdb-frame-number)) |
| 1515 | (put-text-property (line-beginning-position) (line-end-position) | 1518 | (put-text-property (line-beginning-position) (line-end-position) |
| 1516 | 'face '(:inverse-video t))) | 1519 | 'face '(:inverse-video t))) |
| 1517 | (forward-line 1)))))) | 1520 | (forward-line 1)))))) |
| @@ -1915,6 +1918,7 @@ corresponding to the mode line clicked." | |||
| 1915 | (propertize gdb-memory-address | 1918 | (propertize gdb-memory-address |
| 1916 | 'face font-lock-warning-face | 1919 | 'face font-lock-warning-face |
| 1917 | 'help-echo "mouse-1: Set memory address" | 1920 | 'help-echo "mouse-1: Set memory address" |
| 1921 | 'mouse-face 'mode-line-highlight | ||
| 1918 | 'local-map (gdb-make-header-line-mouse-map | 1922 | 'local-map (gdb-make-header-line-mouse-map |
| 1919 | 'mouse-1 | 1923 | 'mouse-1 |
| 1920 | #'gdb-memory-set-address)) | 1924 | #'gdb-memory-set-address)) |
| @@ -1922,6 +1926,7 @@ corresponding to the mode line clicked." | |||
| 1922 | (propertize (number-to-string gdb-memory-repeat-count) | 1926 | (propertize (number-to-string gdb-memory-repeat-count) |
| 1923 | 'face font-lock-warning-face | 1927 | 'face font-lock-warning-face |
| 1924 | 'help-echo "mouse-1: Set repeat count" | 1928 | 'help-echo "mouse-1: Set repeat count" |
| 1929 | 'mouse-face 'mode-line-highlight | ||
| 1925 | 'local-map (gdb-make-header-line-mouse-map | 1930 | 'local-map (gdb-make-header-line-mouse-map |
| 1926 | 'mouse-1 | 1931 | 'mouse-1 |
| 1927 | #'gdb-memory-set-repeat-count)) | 1932 | #'gdb-memory-set-repeat-count)) |
| @@ -1929,11 +1934,13 @@ corresponding to the mode line clicked." | |||
| 1929 | (propertize gdb-memory-format | 1934 | (propertize gdb-memory-format |
| 1930 | 'face font-lock-warning-face | 1935 | 'face font-lock-warning-face |
| 1931 | 'help-echo "mouse-3: Select display format" | 1936 | 'help-echo "mouse-3: Select display format" |
| 1937 | 'mouse-face 'mode-line-highlight | ||
| 1932 | 'local-map gdb-memory-format-keymap) | 1938 | 'local-map gdb-memory-format-keymap) |
| 1933 | " Unit Size: " | 1939 | " Unit Size: " |
| 1934 | (propertize gdb-memory-unit | 1940 | (propertize gdb-memory-unit |
| 1935 | 'face font-lock-warning-face | 1941 | 'face font-lock-warning-face |
| 1936 | 'help-echo "mouse-3: Select unit size" | 1942 | 'help-echo "mouse-3: Select unit size" |
| 1943 | 'mouse-face 'mode-line-highlight | ||
| 1937 | 'local-map gdb-memory-unit-keymap)))) | 1944 | 'local-map gdb-memory-unit-keymap)))) |
| 1938 | (run-mode-hooks 'gdb-memory-mode-hook) | 1945 | (run-mode-hooks 'gdb-memory-mode-hook) |
| 1939 | 'gdb-invalidate-memory) | 1946 | 'gdb-invalidate-memory) |
| @@ -2009,7 +2016,7 @@ corresponding to the mode line clicked." | |||
| 2009 | \\{gdb-locals-mode-map}" | 2016 | \\{gdb-locals-mode-map}" |
| 2010 | (kill-all-local-variables) | 2017 | (kill-all-local-variables) |
| 2011 | (setq major-mode 'gdb-locals-mode) | 2018 | (setq major-mode 'gdb-locals-mode) |
| 2012 | (setq mode-name (concat "Locals:" gdb-current-frame)) | 2019 | (setq mode-name (concat "Locals:" gdb-selected-frame)) |
| 2013 | (setq buffer-read-only t) | 2020 | (setq buffer-read-only t) |
| 2014 | (use-local-map gdb-locals-mode-map) | 2021 | (use-local-map gdb-locals-mode-map) |
| 2015 | (run-mode-hooks 'gdb-locals-mode-hook) | 2022 | (run-mode-hooks 'gdb-locals-mode-hook) |
| @@ -2069,7 +2076,8 @@ corresponding to the mode line clicked." | |||
| 2069 | (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer)) | 2076 | (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer)) |
| 2070 | (define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) | 2077 | (define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) |
| 2071 | (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) | 2078 | (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) |
| 2072 | (define-key menu [assembler] '("Machine" . gdb-display-assembler-buffer)) | 2079 | (define-key menu [disassembly] |
| 2080 | '("Disassembly" . gdb-display-assembler-buffer)) | ||
| 2073 | (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) | 2081 | (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) |
| 2074 | (define-key menu [inferior] | 2082 | (define-key menu [inferior] |
| 2075 | '(menu-item "Inferior IO" gdb-display-inferior-io-buffer | 2083 | '(menu-item "Inferior IO" gdb-display-inferior-io-buffer |
| @@ -2086,7 +2094,7 @@ corresponding to the mode line clicked." | |||
| 2086 | (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) | 2094 | (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) |
| 2087 | (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) | 2095 | (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) |
| 2088 | (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) | 2096 | (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) |
| 2089 | (define-key menu [assembler] '("Machine" . gdb-frame-assembler-buffer)) | 2097 | (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer)) |
| 2090 | (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) | 2098 | (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) |
| 2091 | (define-key menu [inferior] | 2099 | (define-key menu [inferior] |
| 2092 | '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer | 2100 | '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer |
| @@ -2132,7 +2140,8 @@ corresponding to the mode line clicked." | |||
| 2132 | (defvar gdb-main-file nil "Source file from which program execution begins.") | 2140 | (defvar gdb-main-file nil "Source file from which program execution begins.") |
| 2133 | 2141 | ||
| 2134 | (defcustom gdb-show-main nil | 2142 | (defcustom gdb-show-main nil |
| 2135 | "Nil means don't display source file containing the main routine." | 2143 | "Non-nil means display source file containing the main routine at startup." |
| 2144 | "Also display the main routine in the disassembly buffer if present." | ||
| 2136 | :type 'boolean | 2145 | :type 'boolean |
| 2137 | :group 'gud | 2146 | :group 'gud |
| 2138 | :version "22.1") | 2147 | :version "22.1") |
| @@ -2399,7 +2408,9 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2399 | 2408 | ||
| 2400 | (def-gdb-auto-updated-buffer gdb-assembler-buffer | 2409 | (def-gdb-auto-updated-buffer gdb-assembler-buffer |
| 2401 | gdb-invalidate-assembler | 2410 | gdb-invalidate-assembler |
| 2402 | (concat gdb-server-prefix "disassemble " gdb-current-address "\n") | 2411 | (concat gdb-server-prefix "disassemble " |
| 2412 | (if (member gdb-frame-address '(nil "main")) nil "0x") | ||
| 2413 | gdb-frame-address "\n") | ||
| 2403 | gdb-assembler-handler | 2414 | gdb-assembler-handler |
| 2404 | gdb-assembler-custom) | 2415 | gdb-assembler-custom) |
| 2405 | 2416 | ||
| @@ -2407,10 +2418,11 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2407 | (let ((buffer (gdb-get-buffer 'gdb-assembler-buffer)) | 2418 | (let ((buffer (gdb-get-buffer 'gdb-assembler-buffer)) |
| 2408 | (pos 1) (address) (flag) (bptno)) | 2419 | (pos 1) (address) (flag) (bptno)) |
| 2409 | (with-current-buffer buffer | 2420 | (with-current-buffer buffer |
| 2410 | (if (not (equal gdb-current-address "main")) | 2421 | (if (not (equal gdb-frame-address "main")) |
| 2411 | (progn | 2422 | (progn |
| 2412 | (goto-char (point-min)) | 2423 | (goto-char (point-min)) |
| 2413 | (if (re-search-forward gdb-current-address nil t) | 2424 | (if (and gdb-frame-address |
| 2425 | (re-search-forward gdb-frame-address nil t)) | ||
| 2414 | (progn | 2426 | (progn |
| 2415 | (setq pos (point)) | 2427 | (setq pos (point)) |
| 2416 | (beginning-of-line) | 2428 | (beginning-of-line) |
| @@ -2427,18 +2439,15 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2427 | (if (looking-at "[^\t].*breakpoint") | 2439 | (if (looking-at "[^\t].*breakpoint") |
| 2428 | (progn | 2440 | (progn |
| 2429 | (looking-at | 2441 | (looking-at |
| 2430 | "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)\\s-+0x\\(\\S-+\\)") | 2442 | "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)\\s-+0x0*\\(\\S-+\\)") |
| 2431 | (setq bptno (match-string 1)) | 2443 | (setq bptno (match-string 1)) |
| 2432 | (setq flag (char-after (match-beginning 2))) | 2444 | (setq flag (char-after (match-beginning 2))) |
| 2433 | (setq address (match-string 3)) | 2445 | (setq address (match-string 3)) |
| 2434 | ;; remove leading 0s from output of info break. | ||
| 2435 | (if (string-match "^0+\\(.*\\)" address) | ||
| 2436 | (setq address (match-string 1 address))) | ||
| 2437 | (with-current-buffer buffer | 2446 | (with-current-buffer buffer |
| 2438 | (goto-char (point-min)) | 2447 | (goto-char (point-min)) |
| 2439 | (if (re-search-forward address nil t) | 2448 | (if (re-search-forward address nil t) |
| 2440 | (gdb-put-breakpoint-icon (eq flag ?y) bptno))))))) | 2449 | (gdb-put-breakpoint-icon (eq flag ?y) bptno))))))) |
| 2441 | (if (not (equal gdb-current-address "main")) | 2450 | (if (not (equal gdb-frame-address "main")) |
| 2442 | (set-window-point (get-buffer-window buffer 0) pos)))) | 2451 | (set-window-point (get-buffer-window buffer 0) pos)))) |
| 2443 | 2452 | ||
| 2444 | (defvar gdb-assembler-mode-map | 2453 | (defvar gdb-assembler-mode-map |
| @@ -2468,7 +2477,7 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2468 | \\{gdb-assembler-mode-map}" | 2477 | \\{gdb-assembler-mode-map}" |
| 2469 | (kill-all-local-variables) | 2478 | (kill-all-local-variables) |
| 2470 | (setq major-mode 'gdb-assembler-mode) | 2479 | (setq major-mode 'gdb-assembler-mode) |
| 2471 | (setq mode-name "Machine") | 2480 | (setq mode-name (concat "Machine:" gdb-selected-frame)) |
| 2472 | (setq gdb-overlay-arrow-position nil) | 2481 | (setq gdb-overlay-arrow-position nil) |
| 2473 | (add-to-list 'overlay-arrow-variable-list 'gdb-overlay-arrow-position) | 2482 | (add-to-list 'overlay-arrow-variable-list 'gdb-overlay-arrow-position) |
| 2474 | (setq fringes-outside-margins t) | 2483 | (setq fringes-outside-margins t) |
| @@ -2482,7 +2491,7 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2482 | 2491 | ||
| 2483 | (defun gdb-assembler-buffer-name () | 2492 | (defun gdb-assembler-buffer-name () |
| 2484 | (with-current-buffer gud-comint-buffer | 2493 | (with-current-buffer gud-comint-buffer |
| 2485 | (concat "*Machine Code " (gdb-get-target-string) "*"))) | 2494 | (concat "*Disassembly of " (gdb-get-target-string) "*"))) |
| 2486 | 2495 | ||
| 2487 | (defun gdb-display-assembler-buffer () | 2496 | (defun gdb-display-assembler-buffer () |
| 2488 | "Display disassembly view." | 2497 | "Display disassembly view." |
| @@ -2497,18 +2506,19 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2497 | (special-display-frame-alist gdb-frame-parameters)) | 2506 | (special-display-frame-alist gdb-frame-parameters)) |
| 2498 | (display-buffer (gdb-get-create-buffer 'gdb-assembler-buffer)))) | 2507 | (display-buffer (gdb-get-create-buffer 'gdb-assembler-buffer)))) |
| 2499 | 2508 | ||
| 2500 | ;; modified because if gdb-current-address has changed value a new command | 2509 | ;; modified because if gdb-frame-address has changed value a new command |
| 2501 | ;; must be enqueued to update the buffer with the new output | 2510 | ;; must be enqueued to update the buffer with the new output |
| 2502 | (defun gdb-invalidate-assembler (&optional ignored) | 2511 | (defun gdb-invalidate-assembler (&optional ignored) |
| 2503 | (if (gdb-get-buffer 'gdb-assembler-buffer) | 2512 | (if (gdb-get-buffer 'gdb-assembler-buffer) |
| 2504 | (progn | 2513 | (progn |
| 2505 | (unless (string-equal gdb-current-frame gdb-previous-frame) | 2514 | (unless (and gdb-selected-frame |
| 2515 | (string-equal gdb-selected-frame gdb-previous-frame)) | ||
| 2506 | (if (or (not (member 'gdb-invalidate-assembler | 2516 | (if (or (not (member 'gdb-invalidate-assembler |
| 2507 | gdb-pending-triggers)) | 2517 | gdb-pending-triggers)) |
| 2508 | (not (string-equal gdb-current-address | 2518 | (not (string-equal gdb-frame-address |
| 2509 | gdb-previous-address))) | 2519 | gdb-previous-frame-address))) |
| 2510 | (progn | 2520 | (progn |
| 2511 | ;; take previous disassemble command off the queue | 2521 | ;; take previous disassemble command, if any, off the queue |
| 2512 | (with-current-buffer gud-comint-buffer | 2522 | (with-current-buffer gud-comint-buffer |
| 2513 | (let ((queue gdb-input-queue)) | 2523 | (let ((queue gdb-input-queue)) |
| 2514 | (dolist (item queue) | 2524 | (dolist (item queue) |
| @@ -2516,46 +2526,46 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2516 | (setq gdb-input-queue | 2526 | (setq gdb-input-queue |
| 2517 | (delete item gdb-input-queue)))))) | 2527 | (delete item gdb-input-queue)))))) |
| 2518 | (gdb-enqueue-input | 2528 | (gdb-enqueue-input |
| 2519 | (list (concat gdb-server-prefix "disassemble " | 2529 | (list |
| 2520 | gdb-current-address "\n") | 2530 | (concat gdb-server-prefix "disassemble " |
| 2531 | (if (member gdb-frame-address '(nil "main")) nil "0x") | ||
| 2532 | gdb-frame-address "\n") | ||
| 2521 | 'gdb-assembler-handler)) | 2533 | 'gdb-assembler-handler)) |
| 2522 | (push 'gdb-invalidate-assembler gdb-pending-triggers) | 2534 | (push 'gdb-invalidate-assembler gdb-pending-triggers) |
| 2523 | (setq gdb-previous-address gdb-current-address) | 2535 | (setq gdb-previous-frame-address gdb-frame-address) |
| 2524 | (setq gdb-previous-frame gdb-current-frame))))))) | 2536 | (setq gdb-previous-frame gdb-selected-frame))))))) |
| 2525 | 2537 | ||
| 2526 | (defun gdb-get-current-frame () | 2538 | (defun gdb-get-selected-frame () |
| 2527 | (if (not (member 'gdb-get-current-frame gdb-pending-triggers)) | 2539 | (if (not (member 'gdb-get-selected-frame gdb-pending-triggers)) |
| 2528 | (progn | 2540 | (progn |
| 2529 | (gdb-enqueue-input | 2541 | (gdb-enqueue-input |
| 2530 | (list (concat gdb-server-prefix "info frame\n") 'gdb-frame-handler)) | 2542 | (list (concat gdb-server-prefix "info frame\n") 'gdb-frame-handler)) |
| 2531 | (push 'gdb-get-current-frame | 2543 | (push 'gdb-get-selected-frame |
| 2532 | gdb-pending-triggers)))) | 2544 | gdb-pending-triggers)))) |
| 2533 | 2545 | ||
| 2534 | (defun gdb-frame-handler () | 2546 | (defun gdb-frame-handler () |
| 2535 | (setq gdb-pending-triggers | 2547 | (setq gdb-pending-triggers |
| 2536 | (delq 'gdb-get-current-frame gdb-pending-triggers)) | 2548 | (delq 'gdb-get-selected-frame gdb-pending-triggers)) |
| 2537 | (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 2549 | (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) |
| 2538 | (goto-char (point-min)) | 2550 | (goto-char (point-min)) |
| 2539 | (if (looking-at "Stack level \\([0-9]+\\)") | 2551 | (if (re-search-forward "Stack level \\([0-9]+\\)" nil t) |
| 2540 | (setq gdb-current-stack-level (match-string 1))) | 2552 | (setq gdb-frame-number (match-string 1))) |
| 2541 | (forward-line) | 2553 | (goto-char (point-min)) |
| 2542 | (if (looking-at ".*=\\s-+0x\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? ") | 2554 | (if (re-search-forward |
| 2555 | ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? " nil t) | ||
| 2543 | (progn | 2556 | (progn |
| 2544 | (setq gdb-current-frame (match-string 2)) | 2557 | (setq gdb-selected-frame (match-string 2)) |
| 2545 | (if (gdb-get-buffer 'gdb-locals-buffer) | 2558 | (if (gdb-get-buffer 'gdb-locals-buffer) |
| 2546 | (with-current-buffer (gdb-get-buffer 'gdb-locals-buffer) | 2559 | (with-current-buffer (gdb-get-buffer 'gdb-locals-buffer) |
| 2547 | (setq mode-name (concat "Locals:" gdb-current-frame)))) | 2560 | (setq mode-name (concat "Locals:" gdb-selected-frame)))) |
| 2548 | (let ((address (match-string 1))) | 2561 | (if (gdb-get-buffer 'gdb-assembler-buffer) |
| 2549 | ;; remove leading 0s from output of info frame command. | 2562 | (with-current-buffer (gdb-get-buffer 'gdb-assembler-buffer) |
| 2550 | (if (string-match "^0+\\(.*\\)" address) | 2563 | (setq mode-name (concat "Machine:" gdb-selected-frame)))) |
| 2551 | (setq gdb-current-address | 2564 | (setq gdb-frame-address (match-string 1)))) |
| 2552 | (concat "0x" (match-string 1 address))) | 2565 | (goto-char (point-min)) |
| 2553 | (setq gdb-current-address (concat "0x" address)))) | ||
| 2554 | (if (not (re-search-forward "(\\S-*:[0-9]*);" nil t)) | ||
| 2555 | ;;update with new frame for machine code if necessary | ||
| 2556 | (gdb-invalidate-assembler))))) | ||
| 2557 | (if (re-search-forward " source language \\(\\S-*\\)\." nil t) | 2566 | (if (re-search-forward " source language \\(\\S-*\\)\." nil t) |
| 2558 | (setq gdb-current-language (match-string 1)))) | 2567 | (setq gdb-current-language (match-string 1)))) |
| 2568 | (gdb-invalidate-assembler)) | ||
| 2559 | 2569 | ||
| 2560 | (provide 'gdb-ui) | 2570 | (provide 'gdb-ui) |
| 2561 | 2571 | ||