diff --git a/gdb-archer.patch b/gdb-archer.patch
index 8986b25..c25844b 100644
--- a/gdb-archer.patch
+++ b/gdb-archer.patch
@@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectArcher
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
-commit 200516d5be8a1cab02f0b18d607d1c1fb9cfa3e7
+commit 6e73988f653ba986e8742f208f17ec084292cbd5
branch `archer' - the merge of branches:
archer-tromey-call-frame-cfa
@@ -21827,6 +21827,64 @@ index d76cc36..496ff18 100644
# test help stack
test_class_help "stack" {
"Examining the stack\..*\[\r\n\]+"
+diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.c b/gdb/testsuite/gdb.base/internal-var-field-address.c
+new file mode 100644
+index 0000000..eeb7b85
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/internal-var-field-address.c
+@@ -0,0 +1,20 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2009 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see . */
++
++struct {
++ int field;
++} staticstruct = { 1 };
+diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.exp b/gdb/testsuite/gdb.base/internal-var-field-address.exp
+new file mode 100644
+index 0000000..6d82e73
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/internal-var-field-address.exp
+@@ -0,0 +1,26 @@
++# Copyright 2009 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see .
++
++set test internal-var-field-address
++set binfile ${test}.x
++if { [gdb_compile "${srcdir}/${subdir}/${test}.c" "${objdir}/${subdir}/${binfile}" object {debug}] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++
++clean_restart $binfile
++
++gdb_test {set $varstruct = staticstruct}
++gdb_test {p $varstruct.field} " = 1"
diff --git a/gdb/testsuite/gdb.base/lineno-makeup-func.c b/gdb/testsuite/gdb.base/lineno-makeup-func.c
new file mode 100644
index 0000000..1a0220e
@@ -29155,7 +29213,7 @@ index cbb5d94..f9634ea 100644
++reps;
++rep1;
diff --git a/gdb/value.c b/gdb/value.c
-index 589e03b..66013b7 100644
+index 589e03b..62003fa 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -37,8 +37,10 @@
@@ -29239,18 +29297,20 @@ index 589e03b..66013b7 100644
if (VALUE_LVAL (whole) == lval_computed)
{
struct lval_funcs *funcs = whole->location.computed.funcs;
-@@ -776,6 +799,10 @@ set_value_component_location (struct value *component, struct value *whole)
+@@ -776,6 +799,12 @@ set_value_component_location (struct value *component, struct value *whole)
if (funcs->copy_closure)
component->location.computed.closure = funcs->copy_closure (whole);
}
+
+ addr = value_raw_address (component);
+ object_address_get_data (value_type (whole), &addr);
-+ set_value_address (component, addr);
++ if (component->lval != lval_internalvar
++ && component->lval != lval_internalvar_component)
++ set_value_address (component, addr);
}
-@@ -906,6 +933,29 @@ show_values (char *num_exp, int from_tty)
+@@ -906,6 +935,29 @@ show_values (char *num_exp, int from_tty)
num_exp[1] = '\0';
}
}
@@ -29280,7 +29340,7 @@ index 589e03b..66013b7 100644
/* Internal variables. These are variables within the debugger
that hold values assigned by debugger commands.
-@@ -1381,6 +1431,40 @@ call_internal_function (struct gdbarch *gdbarch,
+@@ -1381,6 +1433,40 @@ call_internal_function (struct gdbarch *gdbarch,
return (*ifn->handler) (gdbarch, language, ifn->cookie, argc, argv);
}
@@ -29321,7 +29381,7 @@ index 589e03b..66013b7 100644
/* The 'function' command. This does nothing -- it is just a
placeholder to let "help function NAME" work. This is also used as
the implementation of the sub-command that is created when
-@@ -1428,11 +1512,10 @@ preserve_one_value (struct value *value, struct objfile *objfile,
+@@ -1428,11 +1514,10 @@ preserve_one_value (struct value *value, struct objfile *objfile,
htab_t copied_types)
{
if (TYPE_OBJFILE (value->type) == objfile)
@@ -29335,7 +29395,7 @@ index 589e03b..66013b7 100644
copied_types);
}
-@@ -1447,13 +1530,13 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile,
+@@ -1447,13 +1532,13 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile,
case INTERNALVAR_INTEGER:
if (var->u.integer.type && TYPE_OBJFILE (var->u.integer.type) == objfile)
var->u.integer.type
@@ -29351,7 +29411,7 @@ index 589e03b..66013b7 100644
break;
case INTERNALVAR_VALUE:
-@@ -1855,6 +1938,8 @@ value_change_enclosing_type (struct value *val, struct type *new_encl_type)
+@@ -1855,6 +1940,8 @@ value_change_enclosing_type (struct value *val, struct type *new_encl_type)
val->contents =
(gdb_byte *) xrealloc (val->contents, TYPE_LENGTH (new_encl_type));
@@ -29360,7 +29420,7 @@ index 589e03b..66013b7 100644
val->enclosing_type = new_encl_type;
return val;
}
-@@ -1919,6 +2004,8 @@ value_primitive_field (struct value *arg1, int offset,
+@@ -1919,6 +2006,8 @@ value_primitive_field (struct value *arg1, int offset,
memcpy (value_contents_all_raw (v), value_contents_all_raw (arg1),
TYPE_LENGTH (value_enclosing_type (arg1)));
}
@@ -29369,7 +29429,7 @@ index 589e03b..66013b7 100644
v->type = type;
v->offset = value_offset (arg1);
v->embedded_offset = (offset + value_embedded_offset (arg1)
-@@ -2177,6 +2264,42 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
+@@ -2177,6 +2266,42 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
}
@@ -29412,7 +29472,7 @@ index 589e03b..66013b7 100644
/* Convert C numbers into newly allocated values. */
struct value *
-@@ -2190,6 +2313,19 @@ value_from_longest (struct type *type, LONGEST num)
+@@ -2190,6 +2315,19 @@ value_from_longest (struct type *type, LONGEST num)
}
@@ -29432,7 +29492,7 @@ index 589e03b..66013b7 100644
/* Create a value representing a pointer of type TYPE to the address
ADDR. */
struct value *
-@@ -2348,4 +2484,8 @@ VARIABLE is already initialized."));
+@@ -2348,4 +2486,8 @@ VARIABLE is already initialized."));
add_prefix_cmd ("function", no_class, function_command, _("\
Placeholder command for showing help on convenience functions."),
&functionlist, "function ", 0, &cmdlist);
diff --git a/gdb.spec b/gdb.spec
index a2d839e..f481e73 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -36,7 +36,7 @@ Version: 7.0.1
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 20%{?_with_upstream:.upstream}%{dist}
+Release: 21%{?_with_upstream:.upstream}%{dist}
License: GPLv3+
Group: Development/Debuggers
@@ -1006,6 +1006,10 @@ fi
%endif
%changelog
+* Thu Jan 7 2010 Jan Kratochvil - 7.0.1-21.fc12
+- [vla] Fix regression on fields of structs in internal vars (BZ 553338).
+- archer-jankratochvil-fedora12 commit: 6e73988f653ba986e8742f208f17ec084292cbd5
+
* Thu Jan 7 2010 Jan Kratochvil - 7.0.1-20.fc12
- Fix crash reading broken stabs (it377671).