]>
Commit | Line | Data |
---|---|---|
6ed6bacf | 1 | Index: gdb-7.2.90.20110525/gdb/dwarf2read.c |
51a5ef0f | 2 | =================================================================== |
6ed6bacf AM |
3 | --- gdb-7.2.90.20110525.orig/gdb/dwarf2read.c 2011-05-25 17:10:46.000000000 +0200 |
4 | +++ gdb-7.2.90.20110525/gdb/dwarf2read.c 2011-05-25 17:12:35.000000000 +0200 | |
5 | @@ -7675,7 +7675,12 @@ read_common_block (struct die_info *die, | |
ab050a48 BZ |
6 | { |
7 | struct attribute *attr; | |
8 | struct symbol *sym; | |
9 | - CORE_ADDR base = (CORE_ADDR) 0; | |
10 | + struct objfile *objfile = cu->objfile; | |
11 | + CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, | |
12 | + SECT_OFF_TEXT (objfile)); | |
13 | + /* This is used only for DW_AT_data_member_location entries. */ | |
14 | + CORE_ADDR base = 0; | |
15 | + int base_p = 0; | |
16 | ||
17 | attr = dwarf2_attr (die, DW_AT_location, cu); | |
18 | if (attr) | |
6ed6bacf | 19 | @@ -7684,6 +7689,7 @@ read_common_block (struct die_info *die, |
ab050a48 | 20 | if (attr_form_is_block (attr)) |
51a5ef0f PS |
21 | { |
22 | base = decode_locdesc (DW_BLOCK (attr), cu); | |
ab050a48 | 23 | + base_p = 1; |
51a5ef0f | 24 | } |
ab050a48 | 25 | else if (attr_form_is_section_offset (attr)) |
51a5ef0f | 26 | { |
6ed6bacf AM |
27 | @@ -7736,12 +7742,15 @@ read_common_block (struct die_info *die, |
28 | if (sym != NULL | |
29 | && handle_data_member_location (child_die, cu, &offset)) | |
30 | { | |
31 | - SYMBOL_VALUE_ADDRESS (sym) = base + offset; | |
ab050a48 BZ |
32 | + if (!base_p) |
33 | + dwarf2_invalid_attrib_class_complaint | |
34 | + ("DW_AT_data_member_location", "common block member"); | |
6ed6bacf | 35 | + SYMBOL_VALUE_ADDRESS (sym) = base + offset + baseaddr; |
ab050a48 BZ |
36 | add_symbol_to_list (sym, &global_symbols); |
37 | } | |
38 | ||
39 | if (SYMBOL_CLASS (sym) == LOC_STATIC) | |
40 | - SET_FIELD_PHYSADDR (*field, SYMBOL_VALUE_ADDRESS (sym)); | |
41 | + SET_FIELD_PHYSADDR (*field, SYMBOL_VALUE_ADDRESS (sym) - baseaddr); | |
42 | else | |
43 | SET_FIELD_PHYSNAME (*field, SYMBOL_LINKAGE_NAME (sym)); | |
44 | FIELD_TYPE (*field) = SYMBOL_TYPE (sym); | |
6ed6bacf | 45 | @@ -7755,7 +7764,7 @@ read_common_block (struct die_info *die, |
ab050a48 BZ |
46 | |
47 | sym = new_symbol (die, type, cu); | |
48 | /* SYMBOL_VALUE_ADDRESS never gets used as all its fields are static. */ | |
49 | - SYMBOL_VALUE_ADDRESS (sym) = base; | |
50 | + SYMBOL_VALUE_ADDRESS (sym) = base + baseaddr; | |
51 | ||
52 | set_die_type (die, type, cu); | |
53 | } | |
6ed6bacf | 54 | Index: gdb-7.2.90.20110525/gdb/gdbtypes.h |
51a5ef0f | 55 | =================================================================== |
6ed6bacf AM |
56 | --- gdb-7.2.90.20110525.orig/gdb/gdbtypes.h 2011-05-25 17:05:21.000000000 +0200 |
57 | +++ gdb-7.2.90.20110525/gdb/gdbtypes.h 2011-05-25 17:11:10.000000000 +0200 | |
58 | @@ -396,6 +396,7 @@ enum type_instance_flag_value | |
51a5ef0f PS |
59 | enum field_loc_kind |
60 | { | |
61 | FIELD_LOC_KIND_BITPOS, /* bitpos */ | |
62 | + /* This address is unrelocated by the objfile's ANOFFSET. */ | |
63 | FIELD_LOC_KIND_PHYSADDR, /* physaddr */ | |
64 | FIELD_LOC_KIND_PHYSNAME /* physname */ | |
65 | }; | |
6ed6bacf | 66 | @@ -580,6 +581,7 @@ struct main_type |
51a5ef0f | 67 | is the location (in the target) of the static field. |
6ed6bacf | 68 | Otherwise, physname is the mangled label of the static field. */ |
51a5ef0f PS |
69 | |
70 | + /* This address is unrelocated by the objfile's ANOFFSET. */ | |
71 | CORE_ADDR physaddr; | |
72 | char *physname; | |
73 | } | |
6ed6bacf | 74 | @@ -1106,6 +1108,7 @@ extern void allocate_gnat_aux_type (stru |
ab050a48 BZ |
75 | #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) |
76 | #define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos) | |
77 | #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname) | |
78 | +/* This address is unrelocated by the objfile's ANOFFSET. */ | |
79 | #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr) | |
ab050a48 | 80 | #define SET_FIELD_BITPOS(thisfld, bitpos) \ |
51a5ef0f | 81 | (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \ |
6ed6bacf | 82 | @@ -1113,6 +1116,7 @@ extern void allocate_gnat_aux_type (stru |
ab050a48 BZ |
83 | #define SET_FIELD_PHYSNAME(thisfld, name) \ |
84 | (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \ | |
85 | FIELD_STATIC_PHYSNAME (thisfld) = (name)) | |
86 | +/* This address is unrelocated by the objfile's ANOFFSET. */ | |
87 | #define SET_FIELD_PHYSADDR(thisfld, addr) \ | |
88 | (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \ | |
89 | FIELD_STATIC_PHYSADDR (thisfld) = (addr)) | |
6ed6bacf | 90 | @@ -1125,6 +1129,7 @@ extern void allocate_gnat_aux_type (stru |
ab050a48 BZ |
91 | #define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n)) |
92 | #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n)) | |
93 | #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n)) | |
94 | +/* This address is unrelocated by the objfile's ANOFFSET. */ | |
95 | #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n)) | |
ab050a48 | 96 | #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n)) |
51a5ef0f | 97 | #define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n)) |
6ed6bacf | 98 | Index: gdb-7.2.90.20110525/gdb/jv-lang.c |
51a5ef0f | 99 | =================================================================== |
6ed6bacf AM |
100 | --- gdb-7.2.90.20110525.orig/gdb/jv-lang.c 2011-03-02 01:42:53.000000000 +0100 |
101 | +++ gdb-7.2.90.20110525/gdb/jv-lang.c 2011-05-25 17:11:10.000000000 +0200 | |
102 | @@ -414,7 +414,8 @@ java_link_class_type (struct gdbarch *gd | |
ab050a48 BZ |
103 | |
104 | fields = NULL; | |
6ed6bacf | 105 | nfields--; /* First set up dummy "class" field. */ |
ab050a48 BZ |
106 | - SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas)); |
107 | + SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas) | |
108 | + - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); | |
109 | TYPE_FIELD_NAME (type, nfields) = "class"; | |
110 | TYPE_FIELD_TYPE (type, nfields) = value_type (clas); | |
111 | SET_TYPE_FIELD_PRIVATE (type, nfields); | |
6ed6bacf | 112 | @@ -462,7 +463,8 @@ java_link_class_type (struct gdbarch *gd |
ab050a48 BZ |
113 | SET_TYPE_FIELD_PROTECTED (type, i); |
114 | } | |
115 | if (accflags & 0x0008) /* ACC_STATIC */ | |
116 | - SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset); | |
117 | + SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset | |
118 | + - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); | |
119 | else | |
120 | TYPE_FIELD_BITPOS (type, i) = 8 * boffset; | |
121 | if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */ | |
6ed6bacf | 122 | Index: gdb-7.2.90.20110525/gdb/value.c |
51a5ef0f | 123 | =================================================================== |
6ed6bacf AM |
124 | --- gdb-7.2.90.20110525.orig/gdb/value.c 2011-05-25 17:05:21.000000000 +0200 |
125 | +++ gdb-7.2.90.20110525/gdb/value.c 2011-05-25 17:11:10.000000000 +0200 | |
126 | @@ -2492,7 +2492,8 @@ value_static_field (struct type *type, i | |
ab050a48 | 127 | { |
51a5ef0f PS |
128 | case FIELD_LOC_KIND_PHYSADDR: |
129 | retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno), | |
130 | - TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)); | |
131 | + TYPE_FIELD_STATIC_PHYSADDR (type, fieldno) | |
132 | + + (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); | |
133 | break; | |
134 | case FIELD_LOC_KIND_PHYSNAME: | |
ab050a48 | 135 | { |