diff options
author | Alan Modra <amodra@gmail.com> | 2016-05-27 17:20:55 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-05-28 11:17:20 +0930 |
commit | 1a72702bb30ec3f94627cfcae684823b413f20b9 (patch) | |
tree | d697bddb351a52f2f14e6c28a030357756609a30 /bfd/elf32-rx.c | |
parent | d5dca95ffc284d4380fddc063be43e155b7eb731 (diff) | |
download | gdb-1a72702bb30ec3f94627cfcae684823b413f20b9.zip gdb-1a72702bb30ec3f94627cfcae684823b413f20b9.tar.gz gdb-1a72702bb30ec3f94627cfcae684823b413f20b9.tar.bz2 |
Return void from linker callbacks
The ldmain.c implementation of these linker callback functions always
return true, so any code handling a false return is dead. What's
more, some of the bfd backends abort if ever a false return is seen,
and there seems to be some confusion in gdb's compile-object-load.c.
The return value was never meant to be "oh yes, a multiple_definition
error occurred", but rather "out of memory or other catastrophic
failure".
This patch removes the status return on the callbacks that always
return true. I kept the return status for "notice" because that one
does happen to need to return "out of memory".
include/
* bfdlink.h (struct bfd_link_callbacks): Update comments.
Return void from multiple_definition, multiple_common,
add_to_set, constructor, warning, undefined_symbol,
reloc_overflow, reloc_dangerous and unattached_reloc.
bfd/
* aoutx.h: Adjust linker callback calls throughout file,
removing dead code.
* bout.c: Likewise.
* coff-alpha.c: Likewise.
* coff-arm.c: Likewise.
* coff-h8300.c: Likewise.
* coff-h8500.c: Likewise.
* coff-i960.c: Likewise.
* coff-mcore.c: Likewise.
* coff-mips.c: Likewise.
* coff-ppc.c: Likewise.
* coff-rs6000.c: Likewise.
* coff-sh.c: Likewise.
* coff-tic80.c: Likewise.
* coff-w65.c: Likewise.
* coff-z80.c: Likewise.
* coff-z8k.c: Likewise.
* coff64-rs6000.c: Likewise.
* cofflink.c: Likewise.
* ecoff.c: Likewise.
* elf-bfd.h: Likewise.
* elf-m10200.c: Likewise.
* elf-m10300.c: Likewise.
* elf32-arc.c: Likewise.
* elf32-arm.c: Likewise.
* elf32-avr.c: Likewise.
* elf32-bfin.c: Likewise.
* elf32-cr16.c: Likewise.
* elf32-cr16c.c: Likewise.
* elf32-cris.c: Likewise.
* elf32-crx.c: Likewise.
* elf32-d10v.c: Likewise.
* elf32-epiphany.c: Likewise.
* elf32-fr30.c: Likewise.
* elf32-frv.c: Likewise.
* elf32-ft32.c: Likewise.
* elf32-h8300.c: Likewise.
* elf32-hppa.c: Likewise.
* elf32-i370.c: Likewise.
* elf32-i386.c: Likewise.
* elf32-i860.c: Likewise.
* elf32-ip2k.c: Likewise.
* elf32-iq2000.c: Likewise.
* elf32-lm32.c: Likewise.
* elf32-m32c.c: Likewise.
* elf32-m32r.c: Likewise.
* elf32-m68hc1x.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-mep.c: Likewise.
* elf32-metag.c: Likewise.
* elf32-microblaze.c: Likewise.
* elf32-moxie.c: Likewise.
* elf32-msp430.c: Likewise.
* elf32-mt.c: Likewise.
* elf32-nds32.c: Likewise.
* elf32-nios2.c: Likewise.
* elf32-or1k.c: Likewise.
* elf32-ppc.c: Likewise.
* elf32-s390.c: Likewise.
* elf32-score.c: Likewise.
* elf32-score7.c: Likewise.
* elf32-sh.c: Likewise.
* elf32-sh64.c: Likewise.
* elf32-spu.c: Likewise.
* elf32-tic6x.c: Likewise.
* elf32-tilepro.c: Likewise.
* elf32-v850.c: Likewise.
* elf32-vax.c: Likewise.
* elf32-visium.c: Likewise.
* elf32-xstormy16.c: Likewise.
* elf32-xtensa.c: Likewise.
* elf64-alpha.c: Likewise.
* elf64-hppa.c: Likewise.
* elf64-ia64-vms.c: Likewise.
* elf64-mmix.c: Likewise.
* elf64-ppc.c: Likewise.
* elf64-s390.c: Likewise.
* elf64-sh64.c: Likewise.
* elf64-x86-64.c: Likewise.
* elflink.c: Likewise.
* elfnn-aarch64.c: Likewise.
* elfnn-ia64.c: Likewise.
* elfxx-mips.c: Likewise.
* elfxx-sparc.c: Likewise.
* elfxx-tilegx.c: Likewise.
* linker.c: Likewise.
* pdp11.c: Likewise.
* pe-mips.c: Likewise.
* reloc.c: Likewise.
* reloc16.c: Likewise.
* simple.c: Likewise.
* vms-alpha.c: Likewise.
* xcofflink.c: Likewise.
* elf32-rl78.c (get_symbol_value, get_romstart, get_ramstart): Delete
status param. Adjust calls to these and linker callbacks throughout.
* elf32-rx.c: (get_symbol_value, get_gp, get_romstart,
get_ramstart): Delete status param. Adjust calls to these and
linker callbacks throughout.
ld/
* ldmain.c (multiple_definition, multiple_common, add_to_set,
constructor_callback, warning_callback, undefined_symbol,
reloc_overflow, reloc_dangerous, unattached_reloc): Return void.
* emultempl/elf32.em: Adjust callback calls.
gdb/
* compile/compile-object-load.c (link_callbacks_multiple_definition,
link_callbacks_warning, link_callbacks_undefined_symbol,
link_callbacks_undefined_symbol, link_callbacks_reloc_overflow,
link_callbacks_reloc_dangerous,
link_callbacks_unattached_reloc): Return void.
Diffstat (limited to 'bfd/elf32-rx.c')
-rw-r--r-- | bfd/elf32-rx.c | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index 147a1a3..49556d2 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -317,7 +317,6 @@ rx_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED, static bfd_vma get_symbol_value (const char * name, - bfd_reloc_status_type * status, struct bfd_link_info * info, bfd * input_bfd, asection * input_section, @@ -331,7 +330,7 @@ get_symbol_value (const char * name, if (h == NULL || (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)) - * status = info->callbacks->undefined_symbol + (*info->callbacks->undefined_symbol) (info, name, input_bfd, input_section, offset, TRUE); else value = (h->u.def.value @@ -340,6 +339,7 @@ get_symbol_value (const char * name, return value; } + static bfd_vma get_symbol_value_maybe (const char * name, struct bfd_link_info * info) @@ -362,8 +362,7 @@ get_symbol_value_maybe (const char * name, } static bfd_vma -get_gp (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_gp (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -373,15 +372,14 @@ get_gp (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("__gp", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("__gp", info, abfd, sec, offset); cached = TRUE; } return cached_value; } static bfd_vma -get_romstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_romstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -391,15 +389,14 @@ get_romstart (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("_start", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("_start", info, abfd, sec, offset); cached = TRUE; } return cached_value; } static bfd_vma -get_ramstart (bfd_reloc_status_type * status, - struct bfd_link_info * info, +get_ramstart (struct bfd_link_info * info, bfd * abfd, asection * sec, int offset) @@ -409,7 +406,7 @@ get_ramstart (bfd_reloc_status_type * status, if (!cached) { - cached_value = get_symbol_value ("__datastart", status, info, abfd, sec, offset); + cached_value = get_symbol_value ("__datastart", info, abfd, sec, offset); cached = TRUE; } return cached_value; @@ -553,7 +550,6 @@ rx_elf_relocate_section bfd_vma entry_vma; int idx; char *buf; - bfd_reloc_status_type tstat = 0; if (table_default_cache != name) { @@ -571,18 +567,14 @@ rx_elf_relocate_section buf = (char *) malloc (13 + strlen (name + 20)); sprintf (buf, "$tablestart$%s", name + 20); - tstat = 0; table_start_cache = get_symbol_value (buf, - &tstat, info, input_bfd, input_section, rel->r_offset); sprintf (buf, "$tableend$%s", name + 20); - tstat = 0; table_end_cache = get_symbol_value (buf, - &tstat, info, input_bfd, input_section, @@ -956,7 +948,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELB: WARN_REDHAT ("RX_RH_GPRELB"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); RANGE (0, 65535); #if RX_OPCODE_BIG_ENDIAN OP (1) = relocation; @@ -969,7 +961,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELW: WARN_REDHAT ("RX_RH_GPRELW"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); ALIGN (1); relocation >>= 1; RANGE (0, 65535); @@ -984,7 +976,7 @@ rx_elf_relocate_section case R_RX_RH_GPRELL: WARN_REDHAT ("RX_RH_GPRELL"); - relocation -= get_gp (&r, info, input_bfd, input_section, rel->r_offset); + relocation -= get_gp (info, input_bfd, input_section, rel->r_offset); ALIGN (3); relocation >>= 2; RANGE (0, 65535); @@ -1407,11 +1399,11 @@ rx_elf_relocate_section break; case R_RX_OPromtop: - RX_STACK_PUSH (get_romstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_romstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_OPramtop: - RX_STACK_PUSH (get_ramstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_ramstart (info, input_bfd, input_section, rel->r_offset)); break; default: @@ -1431,15 +1423,14 @@ rx_elf_relocate_section if (r_type == R_RX_DIR24S_PCREL) msg = _("%B(%A): error: call to undefined function '%s'"); else - r = info->callbacks->reloc_overflow + (*info->callbacks->reloc_overflow) (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: - r = info->callbacks->undefined_symbol - (info, name, input_bfd, input_section, rel->r_offset, - TRUE); + (*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, rel->r_offset, TRUE); break; case bfd_reloc_other: @@ -1465,9 +1456,6 @@ rx_elf_relocate_section if (msg) _bfd_error_handler (msg, input_bfd, input_section, name); - - if (! r) - return FALSE; } } @@ -1902,11 +1890,11 @@ rx_offset_for_reloc (bfd * abfd, break; case R_RX_OPromtop: - RX_STACK_PUSH (get_romstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_romstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_OPramtop: - RX_STACK_PUSH (get_ramstart (&r, info, input_bfd, input_section, rel->r_offset)); + RX_STACK_PUSH (get_ramstart (info, input_bfd, input_section, rel->r_offset)); break; case R_RX_DIR16UL: @@ -1941,6 +1929,8 @@ rx_offset_for_reloc (bfd * abfd, rel ++; } + /* FIXME. */ + (void) r; } static void |