* ecoff.c (_bfd_ecoff_bfd_is_local_label): New function.
* libecoff.h (_bfd_ecoff_bfd_is_local_label): Declare. * elf32-mips.c (mips_elf_is_local_label): New static function. (bfd_elf32_bfd_is_local_label): Define. PR 6978.
This commit is contained in:
parent
3af584b4a1
commit
a2546fcef7
|
@ -1,5 +1,10 @@
|
|||
Wed Jul 5 10:31:47 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* ecoff.c (_bfd_ecoff_bfd_is_local_label): New function.
|
||||
* libecoff.h (_bfd_ecoff_bfd_is_local_label): Declare.
|
||||
* elf32-mips.c (mips_elf_is_local_label): New static function.
|
||||
(bfd_elf32_bfd_is_local_label): Define.
|
||||
|
||||
* configure.in: Use $ac_config_sub, not $configsub.
|
||||
* configure: Likewise.
|
||||
|
||||
|
|
11
bfd/ecoff.c
11
bfd/ecoff.c
|
@ -1467,6 +1467,17 @@ _bfd_ecoff_get_symbol_info (abfd, symbol, ret)
|
|||
bfd_symbol_info (symbol, ret);
|
||||
}
|
||||
|
||||
/* Return whether this is a local label. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
boolean
|
||||
_bfd_ecoff_bfd_is_local_label (abfd, symbol)
|
||||
bfd *abfd;
|
||||
asymbol *symbol;
|
||||
{
|
||||
return symbol->name[0] == '$';
|
||||
}
|
||||
|
||||
/* Print information about an ECOFF symbol. */
|
||||
|
||||
void
|
||||
|
|
|
@ -84,6 +84,8 @@ static boolean mips_elf_section_processing
|
|||
static void mips_elf_symbol_processing PARAMS ((bfd *, asymbol *));
|
||||
static boolean mips_elf_read_ecoff_info
|
||||
PARAMS ((bfd *, asection *, struct ecoff_debug_info *));
|
||||
static boolean mips_elf_is_local_label
|
||||
PARAMS ((bfd *, asymbol *));
|
||||
static boolean mips_elf_find_nearest_line
|
||||
PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
|
||||
const char **, unsigned int *));
|
||||
|
@ -791,8 +793,8 @@ mips_elf_gprel16_reloc (abfd,
|
|||
}
|
||||
}
|
||||
|
||||
return gprel16_with_gp (symbol, reloc_entry, input_section, relocateable,
|
||||
data, elf_gp (output_bfd));
|
||||
return gprel16_with_gp (abfd, symbol, reloc_entry, input_section,
|
||||
relocateable, data, elf_gp (output_bfd));
|
||||
}
|
||||
|
||||
static bfd_reloc_status_type
|
||||
|
@ -1507,6 +1509,17 @@ mips_elf_read_ecoff_info (abfd, section, debug)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* MIPS ELF local labels start with '$', not 'L'. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
static boolean
|
||||
mips_elf_is_local_label (abfd, symbol)
|
||||
bfd *abfd;
|
||||
asymbol *symbol;
|
||||
{
|
||||
return symbol->name[0] == '$';
|
||||
}
|
||||
|
||||
/* MIPS ELF uses a special find_nearest_line routine in order the
|
||||
handle the ECOFF debugging information. */
|
||||
|
||||
|
@ -2805,7 +2818,7 @@ elf32_mips_get_relocated_section_contents (abfd, link_info, link_order, data,
|
|||
lh = 0;
|
||||
else
|
||||
{
|
||||
h = bfd_hash_lookup (link_info->hash, "_gp", false, false);
|
||||
h = bfd_hash_lookup (&link_info->hash->table, "_gp", false, false);
|
||||
lh = (struct bfd_link_hash_entry *) h;
|
||||
}
|
||||
lookup:
|
||||
|
@ -2990,6 +3003,7 @@ static const struct ecoff_debug_swap mips_elf_ecoff_debug_swap =
|
|||
mips_elf_final_write_processing
|
||||
#define elf_backend_ecoff_debug_swap &mips_elf_ecoff_debug_swap
|
||||
|
||||
#define bfd_elf32_bfd_is_local_label mips_elf_is_local_label
|
||||
#define bfd_elf32_find_nearest_line mips_elf_find_nearest_line
|
||||
|
||||
#define bfd_elf32_bfd_link_hash_table_create \
|
||||
|
|
|
@ -50,7 +50,7 @@ struct ecoff_backend_data
|
|||
/* Bitsize of constructor entries. */
|
||||
unsigned int constructor_bitsize;
|
||||
/* Reloc to use for constructor entries. */
|
||||
CONST struct reloc_howto_struct *constructor_reloc;
|
||||
reloc_howto_type *constructor_reloc;
|
||||
/* How to swap debugging information. */
|
||||
struct ecoff_debug_swap debug_swap;
|
||||
/* External reloc size. */
|
||||
|
@ -124,6 +124,11 @@ typedef struct ecoff_tdata
|
|||
/* True if this BFD was written by the backend linker. */
|
||||
boolean linker;
|
||||
|
||||
/* Used by find_nearest_line entry point. The structure could be
|
||||
included directly in this one, but there's no point to wasting
|
||||
the memory just for the infrequently called find_nearest_line. */
|
||||
struct ecoff_find_line *find_line_info;
|
||||
|
||||
} ecoff_data_type;
|
||||
|
||||
/* Each canonical asymbol really looks like this. */
|
||||
|
@ -149,11 +154,11 @@ typedef struct ecoff_symbol_struct
|
|||
macro is only ever applied to an asymbol. */
|
||||
#define ecoffsymbol(asymbol) ((ecoff_symbol_type *) (&((asymbol)->the_bfd)))
|
||||
|
||||
/* This is a hack borrowed from coffcode.h; we need to save the index
|
||||
of an external symbol when we write it out so that can set the
|
||||
symbol index correctly when we write out the relocs. */
|
||||
#define ecoff_get_sym_index(symbol) ((unsigned long) (symbol)->udata)
|
||||
#define ecoff_set_sym_index(symbol, idx) ((symbol)->udata = (PTR) (idx))
|
||||
/* We need to save the index of an external symbol when we write it
|
||||
out so that can set the symbol index correctly when we write out
|
||||
the relocs. */
|
||||
#define ecoff_get_sym_index(symbol) ((symbol)->udata.i)
|
||||
#define ecoff_set_sym_index(symbol, idx) ((symbol)->udata.i = (idx))
|
||||
|
||||
/* When generating MIPS embedded PIC code, the linker relaxes the code
|
||||
to turn PC relative branches into longer code sequences when the PC
|
||||
|
@ -238,18 +243,30 @@ extern boolean _bfd_ecoff_new_section_hook
|
|||
extern boolean _bfd_ecoff_get_section_contents
|
||||
PARAMS ((bfd *, asection *, PTR location, file_ptr, bfd_size_type));
|
||||
|
||||
#define _bfd_ecoff_bfd_link_split_section _bfd_generic_link_split_section
|
||||
|
||||
extern boolean _bfd_ecoff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *));
|
||||
#define _bfd_ecoff_bfd_copy_private_section_data \
|
||||
_bfd_generic_bfd_copy_private_section_data
|
||||
|
||||
#define _bfd_ecoff_bfd_copy_private_symbol_data \
|
||||
_bfd_generic_bfd_copy_private_symbol_data
|
||||
|
||||
#define _bfd_ecoff_bfd_merge_private_bfd_data \
|
||||
_bfd_generic_bfd_merge_private_bfd_data
|
||||
|
||||
#define _bfd_ecoff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
|
||||
extern boolean _bfd_ecoff_slurp_armap PARAMS ((bfd *abfd));
|
||||
#define _bfd_ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table
|
||||
#define _bfd_ecoff_construct_extended_name_table \
|
||||
_bfd_archive_bsd_construct_extended_name_table
|
||||
#define _bfd_ecoff_truncate_arname bfd_dont_truncate_arname
|
||||
extern boolean _bfd_ecoff_write_armap
|
||||
PARAMS ((bfd *, unsigned int, struct orl *, unsigned int, int));
|
||||
#define _bfd_ecoff_openr_next_archived_file \
|
||||
bfd_generic_openr_next_archived_file
|
||||
#define _bfd_ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt
|
||||
#define _bfd_ecoff_update_armap_timestamp bfd_true
|
||||
|
||||
extern long _bfd_ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd));
|
||||
extern long _bfd_ecoff_get_symtab PARAMS ((bfd *abfd, asymbol **alocation));
|
||||
|
@ -258,7 +275,8 @@ extern void _bfd_ecoff_print_symbol
|
|||
PARAMS ((bfd *, PTR filep, asymbol *, bfd_print_symbol_type));
|
||||
extern void _bfd_ecoff_get_symbol_info
|
||||
PARAMS ((bfd *, asymbol *, symbol_info *));
|
||||
#define _bfd_ecoff_bfd_is_local_label bfd_generic_is_local_label
|
||||
extern boolean _bfd_ecoff_bfd_is_local_label
|
||||
PARAMS ((bfd *, asymbol *));
|
||||
#define _bfd_ecoff_get_lineno _bfd_nosymbols_get_lineno
|
||||
extern boolean _bfd_ecoff_find_nearest_line
|
||||
PARAMS ((bfd *, asection *, asymbol **, bfd_vma offset,
|
||||
|
@ -296,3 +314,15 @@ extern boolean _bfd_ecoff_set_arch_mach_hook PARAMS ((bfd *abfd, PTR filehdr));
|
|||
extern flagword _bfd_ecoff_styp_to_sec_flags
|
||||
PARAMS ((bfd *abfd, PTR hdr, const char *name));
|
||||
extern boolean _bfd_ecoff_slurp_symbol_table PARAMS ((bfd *abfd));
|
||||
|
||||
/* ECOFF auxiliary information swapping routines. These are the same
|
||||
for all ECOFF targets, so they are defined in ecofflink.c. */
|
||||
|
||||
extern void _bfd_ecoff_swap_tir_in
|
||||
PARAMS ((int, const struct tir_ext *, TIR *));
|
||||
extern void _bfd_ecoff_swap_tir_out
|
||||
PARAMS ((int, const TIR *, struct tir_ext *));
|
||||
extern void _bfd_ecoff_swap_rndx_in
|
||||
PARAMS ((int, const struct rndx_ext *, RNDXR *));
|
||||
extern void _bfd_ecoff_swap_rndx_out
|
||||
PARAMS ((int, const RNDXR *, struct rndx_ext *));
|
||||
|
|
Loading…
Reference in New Issue