1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-10-27 18:55:19 +03:00

Watch out for collisions in GDB global namespace.

Better 'lv_status_r' printing.
This commit is contained in:
Jonathan Earl Brassow 2011-03-14 18:05:56 +00:00
parent b8ccce3500
commit 547d3f13ab

View File

@ -28,6 +28,8 @@ printf "Use 'help <command>' for more info\n"
printf "\n\n"
printf "Popular breakpoints:\n"
printf "break lv_extend\n"
printf "break check_lv_segments\n"
printf "break text_import_areas\n"
printf "run --type raid1 -L 200M -n lv vg\n"
printf "lv_status_r lv\n"
printf "\n\n"
@ -46,10 +48,10 @@ set follow-fork-mode child
# __first_seg <return> <LV>
define __first_seg
set $arg0 = 0x0
set $_lv = (struct logical_volume *)$arg1
set $_FS_lv = (struct logical_volume *)$arg1
if ($_lv->segments.n != &$_lv->segments)
set $arg0 = (struct lv_segment *)$_lv->segments.n
if ($_FS_lv->segments.n != &$_FS_lv->segments)
set $arg0 = (struct lv_segment *)$_FS_lv->segments.n
end
end
@ -79,30 +81,30 @@ end
# __seg_item <return> <seg> <index>
define __seg_type
set $arg0 = 0x0
set $_seg = (struct lv_segment *)$arg1
set $_index= $arg2
set $_area = $_seg->areas[$_index]
set $_type = $_area.type
set $_ST_seg = (struct lv_segment *)$arg1
set $_ST_index= $arg2
set $_ST_area = $_ST_seg->areas[$_ST_index]
set $_ST_type = $_ST_area.type
set $arg0 = $_type
set $arg0 = $_ST_type
end
#
# __seg_item <return> <seg> <index>
define __seg_item
set $arg0 = 0x0
set $_seg = (struct lv_segment *)$arg1
set $_index= $arg2
set $_SI_seg = (struct lv_segment *)$arg1
set $_SI_index= $arg2
if ($_index < $_seg->area_count)
set $_area = $_seg->areas[$_index]
set $_type = $_area.type
if ($_SI_index < $_SI_seg->area_count)
set $_SI_area = $_SI_seg->areas[$_SI_index]
set $_SI_type = $_SI_area.type
if ($_type == AREA_PV)
set $arg0 = $_area.u.pv.pvseg->pv
if ($_SI_type == AREA_PV)
set $arg0 = $_SI_area.u.pv.pvseg->pv
else
if ($_type == AREA_LV)
set $arg0 = $_area.u.lv.lv
if ($_SI_type == AREA_LV)
set $arg0 = $_SI_area.u.lv.lv
end
end
end
@ -197,10 +199,38 @@ define __status
end
end
#
# __print_indent <num indents> [No marks]
define __print_indent
set $_PI_indent = $arg0
set $_PI_lead_mark = 0
while ($_PI_indent)
if ($_PI_indent == 1)
if ($argc > 1)
if ($_PI_lead_mark)
printf " "
else
printf "| "
end
else
printf "|-----> "
end
else
printf "| "
set $_PI_lead_mark = 1
end
set $_PI_indent--
end
end
define lv_status
# Use __lv because we don't want to overwrite higher functions
set $__lv = (struct logical_volume *)$arg0
if ($argc == 2)
__print_indent $arg1
end
printf "%s->status:", $__lv->name
__status $__lv
printf "\n"
@ -215,6 +245,9 @@ end
define seg_status
set $_seg=(struct lv_segment *)$arg0
if ($argc == 2)
__print_indent $arg1 1
end
printf "[ (%s) seg->status:", $_seg->lv->name
__status $_seg
printf " ]\n"
@ -223,7 +256,7 @@ end
document seg_status
Display the flags that are set on an lv_segment.
Usage: lv_status <(struct lv_segment *)>
Usage: seg_status <(struct lv_segment *)>
end
#
@ -338,8 +371,8 @@ define __lv_status_r
set $_s = $_lv->segments.n
set $_area_index = 0
printf "\n"
lv_status $_lv
# printf "\n"
lv_status $_lv $indent
else
set $_seg = (struct lv_segment *)$arg1
@ -364,20 +397,28 @@ define __lv_status_r
set $_type = 0x0
if (!$_area_index)
seg_status $_seg
seg_status $_seg $indent
end
__seg_type $_type $_seg $_area_index
if ($_type == AREA_LV)
set $indent++
__seg_item $_lv $_seg $_area_index
__lv_status_r $_lv
else
if ($_seg->log_lv)
printf "[LOG OF %s] ", $_lv->name
lv_status $_seg->log_lv
set $indent++
set $_log_seg = 0x0
__first_seg $_log_seg $_seg->log_lv
lv_status $_seg->log_lv $indent
seg_status $_log_seg $indent
set $indent--
end
__get_only_segment_using_this_lv $_seg $_lv
if ($_seg)
set $indent--
__lv_status_r $_lv $_seg
end
end
@ -385,6 +426,7 @@ define __lv_status_r
end
define lv_status_r
set $indent = 0
__lv_status_r $arg0
end