if (fixup->sub_symbol) {
struct section *sub_symbol_section;
-
symbol_resolve_value (fixup->sub_symbol);
+
sub_symbol_section = symbol_get_section (fixup->sub_symbol);
if (fixup->add_symbol && add_symbol_section == sub_symbol_section && !symbol_force_reloc (fixup->add_symbol) && !symbol_force_reloc (fixup->add_symbol)) {
}
- if (fixup && size == 1) {
+ if (fixup) {
switch (size) {
fixup->done = 1;
}
+ if (state->format == AS_OUTPUT_WIN32 || state->format == AS_OUTPUT_WIN64) {
+
+ /* Not sure why but COFF requires this adjustment. */
+ if (fixup->pcrel && fixup->add_symbol && symbol_get_section (fixup->add_symbol) != current_section) {
+ value += machine_dependent_pcrel_from (fixup);
+ }
+
+ }
+
if (fixup->reloc_type == RELOC_TYPE_FAR_CALL) {
*(p - 1) = (state->model > 4) ? 0xFF : 0x9A;