+ if (fd.IsAggregate() || fd.IsReferenced()) {
+ char **dest = reinterpret_cast<char **>(
+ object + fd.Offset());
+ if (!(*dest)) {
+ continue;
+ }
+ if (fd.TypeId() == Interpreter::IMAGE_ID) {
+ images.insert(make_pair(
+ pos + fd.Offset(), *dest));
+ }
+ map<const void *, unsigned int>::const_iterator
+ entry(addressMap.find(*dest));
+ if (entry == addressMap.end()) {
+ throw runtime_error(string("unable to relocate field ")
+ + i->first + " in object of type " + td.TypeName());
+ }
+ unsigned int destOffset = entry->second;
+ *dest = reinterpret_cast<char *>(destOffset);
+ } else {
+ const TypeDescription &nestedType
+ = TypeDescription::Get(fd.TypeId());
+ Relocate(pos + fd.Offset(), object + fd.Offset(), nestedType);