+ // If this FDE is associated with a PLT, fill in the PLT's address
+ // and size.
+ if (this->object_ == NULL)
+ {
+ gold_assert(memcmp(oview + offset + 8, "\0\0\0\0\0\0\0\0", 8) == 0);
+ Output_data* plt = this->u_.from_linker.plt;
+ uint64_t poffset = plt->address() - (address + offset + 8);
+ int32_t spoffset = static_cast<int32_t>(poffset);
+ off_t psize = plt->data_size();
+ uint32_t upsize = static_cast<uint32_t>(psize);
+ if (static_cast<uint64_t>(static_cast<int64_t>(spoffset)) != poffset
+ || static_cast<off_t>(upsize) != psize)
+ gold_warning(_("overflow in PLT unwind data; "
+ "unwinding through PLT may fail"));
+ elfcpp::Swap<32, big_endian>::writeval(oview + offset + 8, spoffset);
+ elfcpp::Swap<32, big_endian>::writeval(oview + offset + 12, upsize);
+ }
+
+ if (aligned_full_length > length + 8)
+ memset(oview + offset + length + 8, 0, aligned_full_length - (length + 8));
+