+Tue Jul 26 17:38:01 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * cpu-i960.c (MAX_ARCH): New macro.
+ (compatible): Use it in computing array bounds. Put comma after
+ last entry in array, for regularity.
+ (arch_info_struct): Adjust spacing for easier reading.
+
+ * coff-i960.c (howto_rellong, howto_iprmed, howto_optcall): Use
+ HOWTO macro.
+
+ start-sanitize-i960xl
+ * cpu-i960.c (XL): Define as bfd_mach_i960_xl.
+ (scan_960_mach): Recognize xl machine.
+ (MAX_ARCH): Define to be XL.
+ (compatible): Add XL row to array.
+ (arch_info_struct): Add XL entry.
+
+ * archures.c (bfd_mach_i960_xl): New macro.
+ * bfd-in2.h: Regenerated.
+
+ * coffcode.h (coff_set_arch_mach_hook): For F_I960XL, set machine
+ to bfd_mach_i960_xl.
+ (coff_set_flags): For bfd_mach_i960_xl, set F_I960XL.
+ end-sanitize-i960xl
+
Tue Jul 26 11:04:00 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
* elfcode.h (elf_adjust_dynamic_symbol): When handling a weak
#define bfd_mach_i960_mc 4
#define bfd_mach_i960_xa 5
#define bfd_mach_i960_ca 6
+ /* start-sanitize-i960xl */
+#define bfd_mach_i960_xl 7
+ /* end-sanitize-i960xl */
bfd_arch_a29k, /* AMD 29000 */
bfd_arch_sparc, /* SPARC */
bfd *output_bfd,
char **error_message));
-
- /* If this field is non null, then the supplied function is
- called rather than the normal function. This is similar
- to special_function (previous), but takes different arguments,
- and is used for the new linking code. */
- bfd_reloc_status_type (*special_function1)
- PARAMS((const reloc_howto_type *howto,
- bfd *input_bfd,
- bfd_vma relocation,
- bfd_byte *location));
-
/* The textual name of the relocation type. */
char *name;
};
#define HOWTO(C, R,S,B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
- {(unsigned)C,R,S,B, P, BI, O,SF, 0,NAME,INPLACE,MASKSRC,MASKDST,PC}
-#define HOWTO2(C, R,S,B, P, BI, O, SF, SF1,NAME, INPLACE, MASKSRC, MASKDST, PC) \
- {(unsigned)C,R,S,B, P, BI, O,SF, SF1,NAME,INPLACE,MASKSRC,MASKDST,PC}
+ {(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
#define HOWTO_PREPARE(relocation, symbol) \
}
else if (styp_flags & STYP_INFO)
{
- /* This should be marked as SEC_DEBUGGING, but that can't be
- done until we make sure that strip can still work. strip
- will probably have to preserve the same number of sections to
- ensure that the section vma matches the section file
- position. */
+ /* We mark these as SEC_DEBUGGING, but only if COFF_PAGE_SIZE is
+ defined. coff_compute_section_file_positions uses
+ COFF_PAGE_SIZE to ensure that the low order bits of the
+ section VMA and the file offset match. If we don't know
+ COFF_PAGE_SIZE, we can't ensure the correct correspondence,
+ and demand page loading of the file will fail. */
+#ifdef COFF_PAGE_SIZE
+ sec_flags |= SEC_DEBUGGING;
+#endif
}
else
{
case F_I960KA:
machine = bfd_mach_i960_ka_sa;
break;
+ /* start-sanitize-i960xl */
+ case F_I960XL:
+ machine = bfd_mach_i960_xl;
+ break;
+ /* end-sanitize-i960xl */
}
break;
#endif
#endif
if (q->sym_ptr_ptr)
{
- if (q->sym_ptr_ptr == bfd_abs_section.symbol_ptr_ptr)
+ if (q->sym_ptr_ptr == bfd_abs_section_ptr->symbol_ptr_ptr)
/* This is a relocation relative to the absolute symbol. */
n.r_symndx = -1;
else
case bfd_mach_i960_ka_sa:
flags = F_I960KA;
break;
+ /* start-sanitize-i960xl */
+ case bfd_mach_i960_xl:
+ flags = F_I960XL;
+ break;
+ /* end-sanitize-i960xl */
default:
return false;
}
}
#endif
- /* FIXME, in demand paged files, the low order bits of the file
- offset must match the low order bits of the virtual address.
- "Low order" is apparently implementation defined. Add code
- here to round sofar up to match the virtual address. */
+
+#ifdef COFF_PAGE_SIZE
+ /* In demand paged files the low order bits of the file offset
+ must match the low order bits of the virtual address. */
+ if ((abfd->flags & D_PAGED) != 0)
+ sofar += (current->vma - sofar) % COFF_PAGE_SIZE;
+#endif
current->filepos = sofar;
{
if ((src->u.syment.n_value) == 0)
{
- dst->symbol.section = &bfd_und_section;
+ dst->symbol.section = bfd_und_section_ptr;
dst->symbol.value = 0;
}
else
{
- dst->symbol.section = &bfd_com_section;
+ dst->symbol.section = bfd_com_section_ptr;
dst->symbol.value = (src->u.syment.n_value);
}
}
}
else
{
- cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+ cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
ptr = 0;
}