mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-29 15:00:34 +00:00
* coffcode.h (bfd_coff_backend_data): Add new field
_bfd_coff_adjust_symndx. (bfd_coff_adjust_symndx): Define. (coff_adjust_symndx): Define as NULL if not already defined. (bfd_coff_std_swap_table): Initialize new field to coff_adjust_symndx. * cofflink.c (coff_link_input_bfd): Call coff_adjust_symndx if it is defined. * coff-a29k.c (coff_a29k_adjust_symndx): New static function. (coff_adjust_symndx): Define before including coffcode.h. * libcoff.h: Rebuild.
This commit is contained in:
parent
597e3d58ba
commit
f135c69272
@ -1,5 +1,17 @@
|
||||
Tue Mar 7 12:23:47 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* coffcode.h (bfd_coff_backend_data): Add new field
|
||||
_bfd_coff_adjust_symndx.
|
||||
(bfd_coff_adjust_symndx): Define.
|
||||
(coff_adjust_symndx): Define as NULL if not already defined.
|
||||
(bfd_coff_std_swap_table): Initialize new field to
|
||||
coff_adjust_symndx.
|
||||
* cofflink.c (coff_link_input_bfd): Call coff_adjust_symndx if it
|
||||
is defined.
|
||||
* coff-a29k.c (coff_a29k_adjust_symndx): New static function.
|
||||
(coff_adjust_symndx): Define before including coffcode.h.
|
||||
* libcoff.h: Rebuild.
|
||||
|
||||
* format.c (bfd_check_format_matches): Skip binary_vec when
|
||||
searching through bfd_target_vector.
|
||||
|
||||
|
@ -34,6 +34,9 @@ static bfd_reloc_status_type a29k_reloc
|
||||
static boolean coff_a29k_relocate_section
|
||||
PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
|
||||
struct internal_reloc *, struct internal_syment *, asection **));
|
||||
static boolean coff_a29k_adjust_symndx
|
||||
PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *,
|
||||
struct internal_reloc *, boolean *));
|
||||
|
||||
#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
|
||||
|
||||
@ -537,6 +540,28 @@ coff_a29k_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
|
||||
#define coff_relocate_section coff_a29k_relocate_section
|
||||
|
||||
/* We don't want to change the symndx of a R_IHCONST reloc, since it
|
||||
is actually an addend, not a symbol index at all. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
coff_a29k_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp)
|
||||
bfd *obfd;
|
||||
struct bfd_link_info *info;
|
||||
bfd *ibfd;
|
||||
asection *sec;
|
||||
struct internal_reloc *irel;
|
||||
boolean *adjustedp;
|
||||
{
|
||||
if (irel->r_type == R_IHCONST)
|
||||
*adjustedp = true;
|
||||
else
|
||||
*adjustedp = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
#define coff_adjust_symndx coff_a29k_adjust_symndx
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
const bfd_target a29kcoff_big_vec =
|
||||
|
106
bfd/coffcode.h
106
bfd/coffcode.h
@ -1,5 +1,5 @@
|
||||
/* Support for the generic parts of most COFF variants, for BFD.
|
||||
Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
Copyright 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -527,7 +527,7 @@ styp_to_sec_flags (abfd, hdr, name)
|
||||
return (sec_flags);
|
||||
}
|
||||
|
||||
#define get_index(symbol) ((long) (symbol)->udata)
|
||||
#define get_index(symbol) ((symbol)->udata.i)
|
||||
|
||||
/*
|
||||
INTERNAL_DEFINITION
|
||||
@ -681,6 +681,20 @@ dependent COFF routines:
|
||||
. struct internal_reloc *relocs,
|
||||
. struct internal_syment *syms,
|
||||
. asection **sections));
|
||||
. reloc_howto_type *(*_bfd_coff_rtype_to_howto) PARAMS ((
|
||||
. bfd *abfd,
|
||||
. asection *sec,
|
||||
. struct internal_reloc *rel,
|
||||
. struct coff_link_hash_entry *h,
|
||||
. struct internal_syment *sym,
|
||||
. bfd_vma *addendp));
|
||||
. boolean (*_bfd_coff_adjust_symndx) PARAMS ((
|
||||
. bfd *obfd,
|
||||
. struct bfd_link_info *info,
|
||||
. bfd *ibfd,
|
||||
. asection *sec,
|
||||
. struct internal_reloc *reloc,
|
||||
. boolean *adjustedp));
|
||||
.
|
||||
.} bfd_coff_backend_data;
|
||||
.
|
||||
@ -778,6 +792,12 @@ dependent COFF routines:
|
||||
.#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
|
||||
. ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
|
||||
. (obfd, info, ibfd, o, con, rel, isyms, secs))
|
||||
.#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
|
||||
. (abfd, sec, rel, h, sym, addendp))
|
||||
.#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
|
||||
. (obfd, info, ibfd, sec, rel, adjustedp))
|
||||
.
|
||||
*/
|
||||
|
||||
@ -836,7 +856,8 @@ coff_new_section_hook (abfd, section)
|
||||
bfd * abfd;
|
||||
asection * section;
|
||||
{
|
||||
section->alignment_power = abfd->xvec->align_power_min;
|
||||
section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER;
|
||||
|
||||
/* Allocate aux records for section symbols, to store size and
|
||||
related info.
|
||||
|
||||
@ -845,17 +866,20 @@ coff_new_section_hook (abfd, section)
|
||||
(combined_entry_type *) bfd_zalloc (abfd,
|
||||
sizeof (combined_entry_type) * 10);
|
||||
|
||||
#ifdef COFF_SPARC
|
||||
/* This is to allow double-word operations on addresses in data or bss. */
|
||||
if (strcmp (section->name, ".data") == 0
|
||||
|| strcmp (section->name, ".bss") == 0)
|
||||
section->alignment_power = 3;
|
||||
#endif /* COFF_SPARC */
|
||||
/* The .stab section must be aligned to 2**2 at most, because
|
||||
otherwise there may be gaps in the section which gdb will not
|
||||
know how to interpret. Examining the section name is a hack, but
|
||||
that is also how gdb locates the section. We also align the
|
||||
.stabstr section this way for backward compatibility, although I
|
||||
believe it would work anyhow. */
|
||||
if (COFF_DEFAULT_SECTION_ALIGNMENT_POWER > 2
|
||||
&& (strcmp (section->name, ".stab") == 0
|
||||
|| strcmp (section->name, ".stabstr") == 0))
|
||||
section->alignment_power = 2;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
#ifdef I960
|
||||
|
||||
/* Set the alignment of a BFD section. */
|
||||
@ -1086,8 +1110,9 @@ coff_set_arch_mach_hook (abfd, filehdr)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef SH_ARCH_MAGIC
|
||||
case SH_ARCH_MAGIC:
|
||||
#ifdef SH_ARCH_MAGIC_BIG
|
||||
case SH_ARCH_MAGIC_BIG:
|
||||
case SH_ARCH_MAGIC_LITTLE:
|
||||
arch = bfd_arch_sh;
|
||||
machine = 0;
|
||||
break;
|
||||
@ -1332,9 +1357,12 @@ coff_set_flags (abfd, magicp, flagsp)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef SH_ARCH_MAGIC
|
||||
#ifdef SH_ARCH_MAGIC_BIG
|
||||
case bfd_arch_sh:
|
||||
*magicp = SH_ARCH_MAGIC;
|
||||
if (abfd->xvec->byteorder_big_p)
|
||||
*magicp = SH_ARCH_MAGIC_BIG;
|
||||
else
|
||||
*magicp = SH_ARCH_MAGIC_LITTLE;
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
@ -2309,7 +2337,7 @@ coff_slurp_symbol_table (abfd)
|
||||
|
||||
dst->native = src;
|
||||
|
||||
dst->symbol.udata = 0;
|
||||
dst->symbol.udata.i = 0;
|
||||
dst->lineno = (alent *) NULL;
|
||||
this_index += (src->u.syment.n_numaux) + 1;
|
||||
dst++;
|
||||
@ -2518,6 +2546,42 @@ coff_slurp_reloc_table (abfd, asect, symbols)
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifndef coff_rtype_to_howto
|
||||
#ifdef RTYPE2HOWTO
|
||||
|
||||
/* Get the howto structure for a reloc. This is only used if the file
|
||||
including this one defines coff_relocate_section to be
|
||||
_bfd_coff_generic_relocate_section, so it is OK if it does not
|
||||
always work. It is the responsibility of the including file to
|
||||
make sure it is reasonable if it is needed. */
|
||||
|
||||
static reloc_howto_type *coff_rtype_to_howto
|
||||
PARAMS ((bfd *, asection *, struct internal_reloc *,
|
||||
struct coff_link_hash_entry *, struct internal_syment *,
|
||||
bfd_vma *));
|
||||
|
||||
/*ARGSUSED*/
|
||||
static reloc_howto_type *
|
||||
coff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
|
||||
bfd *abfd;
|
||||
asection *sec;
|
||||
struct internal_reloc *rel;
|
||||
struct coff_link_hash_entry *h;
|
||||
struct internal_syment *sym;
|
||||
bfd_vma *addendp;
|
||||
{
|
||||
arelent genrel;
|
||||
|
||||
RTYPE2HOWTO (&genrel, rel);
|
||||
return genrel.howto;
|
||||
}
|
||||
|
||||
#else /* ! defined (RTYPE2HOWTO) */
|
||||
|
||||
#define coff_rtype_to_howto NULL
|
||||
|
||||
#endif /* ! defined (RTYPE2HOWTO) */
|
||||
#endif /* ! defined (coff_rtype_to_howto) */
|
||||
|
||||
/* This is stupid. This function should be a boolean predicate. */
|
||||
static long
|
||||
@ -2607,9 +2671,15 @@ dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
|
||||
/* If coff_relocate_section is defined, we can use the optimized COFF
|
||||
backend linker. Otherwise we must continue to use the old linker. */
|
||||
#ifdef coff_relocate_section
|
||||
#ifndef coff_bfd_link_hash_table_create
|
||||
#define coff_bfd_link_hash_table_create _bfd_coff_link_hash_table_create
|
||||
#endif
|
||||
#ifndef coff_bfd_link_add_symbols
|
||||
#define coff_bfd_link_add_symbols _bfd_coff_link_add_symbols
|
||||
#endif
|
||||
#ifndef coff_bfd_final_link
|
||||
#define coff_bfd_final_link _bfd_coff_final_link
|
||||
#endif
|
||||
#else /* ! defined (coff_relocate_section) */
|
||||
#define coff_relocate_section NULL
|
||||
#define coff_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
|
||||
@ -2617,6 +2687,10 @@ dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
|
||||
#define coff_bfd_final_link _bfd_generic_final_link
|
||||
#endif /* ! defined (coff_relocate_section) */
|
||||
|
||||
#ifndef coff_adjust_symndx
|
||||
#define coff_adjust_symndx NULL
|
||||
#endif
|
||||
|
||||
static CONST bfd_coff_backend_data bfd_coff_std_swap_table =
|
||||
{
|
||||
coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in,
|
||||
@ -2636,7 +2710,7 @@ static CONST bfd_coff_backend_data bfd_coff_std_swap_table =
|
||||
coff_set_alignment_hook, coff_slurp_symbol_table, symname_in_debug_hook,
|
||||
coff_reloc16_extra_cases, coff_reloc16_estimate,
|
||||
coff_sym_is_global, coff_compute_section_file_positions,
|
||||
coff_relocate_section
|
||||
coff_relocate_section, coff_rtype_to_howto, coff_adjust_symndx
|
||||
};
|
||||
|
||||
#define coff_close_and_cleanup _bfd_generic_close_and_cleanup
|
||||
|
Loading…
Reference in New Issue
Block a user