aboutsummaryrefslogtreecommitdiff
path: root/bfd/coffcode.h
diff options
context:
space:
mode:
authorSteve Chamberlain <sac@cygnus>1992-05-02 01:46:50 +0000
committerSteve Chamberlain <sac@cygnus>1992-05-02 01:46:50 +0000
commit54862c89ac67642b22168994398e0489632b0b83 (patch)
treee52eb3c67fe8cf104ee35f87497fc9342bb7f761 /bfd/coffcode.h
parent9068cbe7b42321e7f400332d88f82b5cf2846a58 (diff)
downloadfsf-binutils-gdb-54862c89ac67642b22168994398e0489632b0b83.zip
fsf-binutils-gdb-54862c89ac67642b22168994398e0489632b0b83.tar.gz
fsf-binutils-gdb-54862c89ac67642b22168994398e0489632b0b83.tar.bz2
* coffcode.h (coff_write_object_contents): use RELSZ to work out
size of output reloc struct.
Diffstat (limited to 'bfd/coffcode.h')
-rw-r--r--bfd/coffcode.h22
1 files changed, 19 insertions, 3 deletions
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index d969fdd..6c7eea9 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -396,8 +396,8 @@ DEFUN(styp_to_sec_flags, (styp_flags),
return(sec_flags);
}
-#define get_index(symbol) ((int) (symbol)->value)
-#define set_index(symbol, idx) ((symbol)->value = (idx))
+#define get_index(symbol) ((int) (symbol)->udata)
+#define set_index(symbol, idx) ((symbol)->udata =(PTR) (idx))
/* **********************************************************************
Here are all the routines for swapping the structures seen in the
@@ -1611,9 +1611,25 @@ unsigned int written)
count++;
while (lineno[count].line_number) {
+#if 0
+/* 13 april 92. sac
+I've been told this, but still need proof:
+> The second bug is also in `bfd/coffcode.h'. This bug causes the linker to screw
+> up the pc-relocations for all the line numbers in COFF code. This bug isn't
+> only specific to A29K implementations, but affects all systems using COFF
+> format binaries. Note that in COFF object files, the line number core offsets
+> output by the assembler are relative to the start of each procedure, not
+> to the start of the .text section. This patch relocates the line numbers
+> relative to the `native->u.syment.n_value' instead of the section virtual
+> address. modular!olson@cs.arizona.edu (Jon Olson)
+*/
+ lineno[count].u.offset += native->u.syment.n_value;
+
+#else
lineno[count].u.offset +=
symbol->symbol.section->output_section->vma +
symbol->symbol.section->output_offset;
+#endif
count++;
}
symbol->done_lineno = true;
@@ -2217,7 +2233,7 @@ DEFUN(coff_write_object_contents,(abfd),
}
if (current->reloc_count) {
current->rel_filepos = reloc_base;
- reloc_base += current->reloc_count * sizeof(struct internal_reloc);
+ reloc_base += current->reloc_count * RELSZ;
}
else {
current->rel_filepos = 0;