X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Fcoffcode.h;h=c3f13300a43c97dd357fc434506b983f958e9c2d;hb=refs%2Fheads%2Fsandbox%2Fvbarinov%2Ftizen_6_base;hp=498b531c262f1f55b79a52d7ce7caeee1a242c29;hpb=12ef3f5a7c5a6b89964842fd3da047b8d07dec91;p=external%2Fbinutils.git diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 498b531..c3f1330 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -1,5 +1,5 @@ /* Support for the generic parts of most COFF variants, for BFD. - Copyright (C) 1990-2018 Free Software Foundation, Inc. + Copyright (C) 1990-2019 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -32,19 +32,14 @@ SECTION Coff in all its varieties is implemented with a few common files and a number of implementation specific files. For - example, The 88k bcs coff format is implemented in the file - @file{coff-m88k.c}. This file @code{#include}s - @file{coff/m88k.h} which defines the external structure of the - coff format for the 88k, and @file{coff/internal.h} which - defines the internal structure. @file{coff-m88k.c} also - defines the relocations used by the 88k format + example, the i386 coff format is implemented in the file + @file{coff-i386.c}. This file @code{#include}s + @file{coff/i386.h} which defines the external structure of the + coff format for the i386, and @file{coff/internal.h} which + defines the internal structure. @file{coff-i386.c} also + defines the relocations used by the i386 coff format @xref{Relocations}. - The Intel i960 processor version of coff is implemented in - @file{coff-i960.c}. This file has the same structure as - @file{coff-m88k.c}, except that it includes @file{coff/i960.h} - rather than @file{coff-m88k.h}. - SUBSECTION Porting to a new version of coff @@ -97,15 +92,6 @@ SUBSUBSECTION Some of the Coff targets then also have additional routines in the target source file itself. - For example, @file{coff-i960.c} includes - @file{coff/internal.h} and @file{coff/i960.h}. It then - defines a few constants, such as @code{I960}, and includes - @file{coffcode.h}. Since the i960 has complex relocation - types, @file{coff-i960.c} also includes some code to - manipulate the i960 relocs. This code is not in - @file{coffcode.h} because it would not be used by any other - target. - SUBSUBSECTION Coff long section names @@ -437,8 +423,6 @@ static bfd_boolean coff_write_object_contents (bfd *) ATTRIBUTE_UNUSED; static bfd_boolean coff_set_section_contents (bfd *, asection *, const void *, file_ptr, bfd_size_type); -static void * buy_and_read - (bfd *, file_ptr, bfd_size_type); static bfd_boolean coff_slurp_line_table (bfd *, asection *); static bfd_boolean coff_slurp_symbol_table @@ -965,7 +949,7 @@ handle_COMDAT (bfd * abfd, /* PR 17512 file: 078-11867-0.004 */ if (symname == NULL) { - _bfd_error_handler (_("%B: unable to load COMDAT section name"), + _bfd_error_handler (_("%pB: unable to load COMDAT section name"), abfd); break; } @@ -1000,7 +984,7 @@ handle_COMDAT (bfd * abfd, { /* Malformed input files can trigger this test. cf PR 21781. */ - _bfd_error_handler (_("%B: error: unexpected symbol '%s' in COMDAT section"), + _bfd_error_handler (_("%pB: error: unexpected symbol '%s' in COMDAT section"), abfd, symname); goto breakloop; } @@ -1012,7 +996,7 @@ handle_COMDAT (bfd * abfd, if (isym.n_sclass == C_STAT && strcmp (name, symname) != 0) /* xgettext:c-format */ - _bfd_error_handler (_("%B: warning: COMDAT symbol '%s'" + _bfd_error_handler (_("%pB: warning: COMDAT symbol '%s'" " does not match section name '%s'"), abfd, symname, name); @@ -1022,7 +1006,7 @@ handle_COMDAT (bfd * abfd, if (esym + bfd_coff_symesz (abfd) >= esymend) { /* xgettext:c-format */ - _bfd_error_handler (_("%B: warning: No symbol for" + _bfd_error_handler (_("%pB: warning: no symbol for" " section '%s' found"), abfd, symname); break; @@ -1190,6 +1174,11 @@ styp_to_sec_flags (bfd *abfd, #ifdef COFF_LONG_SECTION_NAMES || CONST_STRNEQ (name, GNU_LINKONCE_WI) || CONST_STRNEQ (name, GNU_LINKONCE_WT) + /* FIXME: These definitions ought to be in a header file. */ +#define GNU_DEBUGLINK ".gnu_debuglink" +#define GNU_DEBUGALTLINK ".gnu_debugaltlink" + || CONST_STRNEQ (name, GNU_DEBUGLINK) + || CONST_STRNEQ (name, GNU_DEBUGALTLINK) #endif || CONST_STRNEQ (name, ".stab")) is_dbg = TRUE; @@ -1248,9 +1237,9 @@ styp_to_sec_flags (bfd *abfd, variable as this will allow some .sys files generate by other toolchains to be processed. See bugzilla issue 196. */ /* xgettext:c-format */ - _bfd_error_handler (_("%B: Warning: Ignoring section flag" - " IMAGE_SCN_MEM_NOT_PAGED in section %s"), - abfd, name); + _bfd_error_handler (_("%pB: warning: ignoring section flag" + " %s in section %s"), + abfd, "IMAGE_SCN_MEM_NOT_PAGED", name); break; case IMAGE_SCN_MEM_EXECUTE: sec_flags |= SEC_CODE; @@ -1317,7 +1306,7 @@ styp_to_sec_flags (bfd *abfd, { _bfd_error_handler /* xgettext:c-format */ - (_("%B (%s): Section flag %s (%#lx) ignored"), + (_("%pB (%s): section flag %s (%#lx) ignored"), abfd, name, unhandled, flag); result = FALSE; } @@ -1664,19 +1653,6 @@ coff_bad_format_hook (bfd * abfd ATTRIBUTE_UNUSED, void * filehdr) if (BADMAG (*internal_f)) return FALSE; - /* If the optional header is NULL or not the correct size then - quit; the only difference I can see between m88k dgux headers (MC88DMAGIC) - and Intel 960 readwrite headers (I960WRMAGIC) is that the - optional header is of a different size. - - But the mips keeps extra stuff in it's opthdr, so dont check - when doing that. */ - -#if defined(M88) || defined(I960) - if (internal_f->f_opthdr != 0 && bfd_coff_aoutsz (abfd) != internal_f->f_opthdr) - return FALSE; -#endif - return TRUE; } @@ -1848,12 +1824,6 @@ coff_set_alignment_hook (bfd * abfd ATTRIBUTE_UNUSED, struct internal_scnhdr *hdr = (struct internal_scnhdr *) scnhdr; unsigned int i; -#ifdef I960 - /* Extract ALIGN from 2**ALIGN stored in section header. */ - for (i = 0; i < 32; i++) - if ((1 << i) >= hdr->s_align) - break; -#endif #ifdef COFF_DECODE_ALIGNMENT i = COFF_DECODE_ALIGNMENT(hdr->s_flags); #endif @@ -1947,7 +1917,7 @@ coff_set_alignment_hook (bfd * abfd ATTRIBUTE_UNUSED, } else if (hdr->s_nreloc == 0xffff) _bfd_error_handler - (_("%B: warning: claims to have 0xffff relocs, without overflow"), + (_("%pB: warning: claims to have 0xffff relocs, without overflow"), abfd); } #undef ALIGN_SET @@ -1985,8 +1955,12 @@ coff_set_alignment_hook (bfd *abfd, asection *section, void * scnhdr) #else /* ! RS6000COFF_C */ -#define coff_set_alignment_hook \ - ((void (*) (bfd *, asection *, void *)) (void (*)) bfd_void) +static void +coff_set_alignment_hook (bfd *abfd ATTRIBUTE_UNUSED, + asection *section ATTRIBUTE_UNUSED, + void *scnhdr ATTRIBUTE_UNUSED) +{ +} #endif /* ! RS6000COFF_C */ #endif /* ! COFF_WITH_PE */ @@ -2132,12 +2106,20 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) case I386MAGIC: case I386PTXMAGIC: case I386AIXMAGIC: /* Danbury PS/2 AIX C Compiler. */ - case LYNXCOFFMAGIC: /* Shadows the m68k Lynx number below, sigh. */ + case LYNXCOFFMAGIC: + case I386_APPLE_MAGIC: + case I386_FREEBSD_MAGIC: + case I386_LINUX_MAGIC: + case I386_NETBSD_MAGIC: arch = bfd_arch_i386; break; #endif #ifdef AMD64MAGIC case AMD64MAGIC: + case AMD64_APPLE_MAGIC: + case AMD64_FREEBSD_MAGIC: + case AMD64_LINUX_MAGIC: + case AMD64_NETBSD_MAGIC: arch = bfd_arch_i386; machine = bfd_mach_x86_64; break; @@ -2174,30 +2156,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) } break; #endif -#ifdef MC68MAGIC - case MC68MAGIC: - case M68MAGIC: -#ifdef MC68KBCSMAGIC - case MC68KBCSMAGIC: -#endif -#ifdef APOLLOM68KMAGIC - case APOLLOM68KMAGIC: -#endif -#ifdef LYNXCOFFMAGIC - case LYNXCOFFMAGIC: -#endif - arch = bfd_arch_m68k; - machine = bfd_mach_m68020; - break; -#endif -#ifdef MC88MAGIC - case MC88MAGIC: - case MC88DMAGIC: - case MC88OMAGIC: - arch = bfd_arch_m88k; - machine = 88100; - break; -#endif #ifdef Z80MAGIC case Z80MAGIC: arch = bfd_arch_z80; @@ -2231,47 +2189,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) } break; #endif -#ifdef I860 - case I860MAGIC: - arch = bfd_arch_i860; - break; -#endif -#ifdef I960 -#ifdef I960ROMAGIC - case I960ROMAGIC: - case I960RWMAGIC: - arch = bfd_arch_i960; - switch (F_I960TYPE & internal_f->f_flags) - { - default: - case F_I960CORE: - machine = bfd_mach_i960_core; - break; - case F_I960KB: - machine = bfd_mach_i960_kb_sb; - break; - case F_I960MC: - machine = bfd_mach_i960_mc; - break; - case F_I960XA: - machine = bfd_mach_i960_xa; - break; - case F_I960CA: - machine = bfd_mach_i960_ca; - break; - case F_I960KA: - machine = bfd_mach_i960_ka_sa; - break; - case F_I960JX: - machine = bfd_mach_i960_jx; - break; - case F_I960HX: - machine = bfd_mach_i960_hx; - break; - } - break; -#endif -#endif #ifdef RS6000COFF_C #ifdef XCOFF64 @@ -2349,57 +2266,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) break; #endif -#ifdef WE32KMAGIC - case WE32KMAGIC: - arch = bfd_arch_we32k; - break; -#endif - -#ifdef H8300MAGIC - case H8300MAGIC: - arch = bfd_arch_h8300; - machine = bfd_mach_h8300; - /* !! FIXME this probably isn't the right place for this. */ - abfd->flags |= BFD_IS_RELAXABLE; - break; -#endif - -#ifdef H8300HMAGIC - case H8300HMAGIC: - arch = bfd_arch_h8300; - machine = bfd_mach_h8300h; - /* !! FIXME this probably isn't the right place for this. */ - abfd->flags |= BFD_IS_RELAXABLE; - break; -#endif - -#ifdef H8300SMAGIC - case H8300SMAGIC: - arch = bfd_arch_h8300; - machine = bfd_mach_h8300s; - /* !! FIXME this probably isn't the right place for this. */ - abfd->flags |= BFD_IS_RELAXABLE; - break; -#endif - -#ifdef H8300HNMAGIC - case H8300HNMAGIC: - arch = bfd_arch_h8300; - machine = bfd_mach_h8300hn; - /* !! FIXME this probably isn't the right place for this. */ - abfd->flags |= BFD_IS_RELAXABLE; - break; -#endif - -#ifdef H8300SNMAGIC - case H8300SNMAGIC: - arch = bfd_arch_h8300; - machine = bfd_mach_h8300sn; - /* !! FIXME this probably isn't the right place for this. */ - abfd->flags |= BFD_IS_RELAXABLE; - break; -#endif - #ifdef SH_ARCH_MAGIC_BIG case SH_ARCH_MAGIC_BIG: case SH_ARCH_MAGIC_LITTLE: @@ -2416,12 +2282,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) break; #endif -#ifdef H8500MAGIC - case H8500MAGIC: - arch = bfd_arch_h8500; - break; -#endif - #ifdef SPARCMAGIC case SPARCMAGIC: #ifdef LYNXCOFFMAGIC @@ -2463,7 +2323,7 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) default: arch = bfd_arch_obscure; _bfd_error_handler - (_("Unrecognized TI COFF target id '0x%x'"), + (_("unrecognized TI COFF target id '0x%x'"), internal_f->f_target_id); break; } @@ -2482,12 +2342,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) break; #endif -#ifdef W65MAGIC - case W65MAGIC: - arch = bfd_arch_w65; - break; -#endif - default: /* Unreadable input file type. */ arch = bfd_arch_obscure; break; @@ -2497,20 +2351,16 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) return TRUE; } -#ifdef SYMNAME_IN_DEBUG - static bfd_boolean -symname_in_debug_hook (bfd * abfd ATTRIBUTE_UNUSED, struct internal_syment *sym) +symname_in_debug_hook (bfd *abfd ATTRIBUTE_UNUSED, + struct internal_syment *sym ATTRIBUTE_UNUSED) { +#ifdef SYMNAME_IN_DEBUG return SYMNAME_IN_DEBUG (sym) != 0; -} - #else - -#define symname_in_debug_hook \ - (bfd_boolean (*) (bfd *, struct internal_syment *)) (bfd_boolean (*)) bfd_false - + return FALSE; #endif +} #ifdef RS6000COFF_C @@ -2552,31 +2402,7 @@ coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, } #else -#ifdef I960 - -/* We don't want to pointerize bal entries. */ - -static bfd_boolean -coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, - combined_entry_type *table_base ATTRIBUTE_UNUSED, - combined_entry_type *symbol, - unsigned int indaux, - combined_entry_type *aux ATTRIBUTE_UNUSED) -{ - /* Return TRUE if we don't want to pointerize this aux entry, which - is the case for the lastfirst aux entry for a C_LEAFPROC symbol. */ - return (indaux == 1 - && symbol->is_sym - && (symbol->u.syment.n_sclass == C_LEAFPROC - || symbol->u.syment.n_sclass == C_LEAFSTAT - || symbol->u.syment.n_sclass == C_LEAFEXT)); -} - -#else /* ! I960 */ - #define coff_pointerize_aux_hook 0 - -#endif /* ! I960 */ #endif /* ! RS6000COFF_C */ /* Print an aux entry. This returns TRUE if it has printed it. */ @@ -2781,7 +2607,7 @@ coff_write_relocs (bfd * abfd, int first_undef) { bfd_set_error (bfd_error_bad_value); /* xgettext:c-format */ - _bfd_error_handler (_("%B: reloc against a non-existent" + _bfd_error_handler (_("%pB: reloc against a non-existent" " symbol index: %ld"), abfd, n.r_symndx); return FALSE; @@ -2856,32 +2682,6 @@ coff_set_flags (bfd * abfd, return TRUE; #endif -#ifdef I960ROMAGIC - case bfd_arch_i960: - - { - unsigned flags; - - *magicp = I960ROMAGIC; - - switch (bfd_get_mach (abfd)) - { - case bfd_mach_i960_core: flags = F_I960CORE; break; - case bfd_mach_i960_kb_sb: flags = F_I960KB; break; - case bfd_mach_i960_mc: flags = F_I960MC; break; - case bfd_mach_i960_xa: flags = F_I960XA; break; - case bfd_mach_i960_ca: flags = F_I960CA; break; - case bfd_mach_i960_ka_sa: flags = F_I960KA; break; - case bfd_mach_i960_jx: flags = F_I960JX; break; - case bfd_mach_i960_hx: flags = F_I960HX; break; - default: return FALSE; - } - *flagsp = flags; - return TRUE; - } - break; -#endif - #ifdef TIC30MAGIC case bfd_arch_tic30: *magicp = TIC30MAGIC; @@ -2981,57 +2781,12 @@ coff_set_flags (bfd * abfd, return TRUE; #endif -#ifdef I860MAGIC - case bfd_arch_i860: - *magicp = I860MAGIC; - return TRUE; -#endif - #ifdef IA64MAGIC case bfd_arch_ia64: *magicp = IA64MAGIC; return TRUE; #endif -#ifdef MC68MAGIC - case bfd_arch_m68k: -#ifdef APOLLOM68KMAGIC - *magicp = APOLLO_COFF_VERSION_NUMBER; -#else - /* NAMES_HAVE_UNDERSCORE may be defined by coff-u68k.c. */ -#ifdef NAMES_HAVE_UNDERSCORE - *magicp = MC68KBCSMAGIC; -#else - *magicp = MC68MAGIC; -#endif -#endif -#ifdef LYNXOS - /* Just overwrite the usual value if we're doing Lynx. */ - *magicp = LYNXCOFFMAGIC; -#endif - return TRUE; -#endif - -#ifdef MC88MAGIC - case bfd_arch_m88k: - *magicp = MC88OMAGIC; - return TRUE; -#endif - -#ifdef H8300MAGIC - case bfd_arch_h8300: - switch (bfd_get_mach (abfd)) - { - case bfd_mach_h8300: *magicp = H8300MAGIC; return TRUE; - case bfd_mach_h8300h: *magicp = H8300HMAGIC; return TRUE; - case bfd_mach_h8300s: *magicp = H8300SMAGIC; return TRUE; - case bfd_mach_h8300hn: *magicp = H8300HNMAGIC; return TRUE; - case bfd_mach_h8300sn: *magicp = H8300SNMAGIC; return TRUE; - default: break; - } - break; -#endif - #ifdef SH_ARCH_MAGIC_BIG case bfd_arch_sh: #ifdef COFF_IMAGE_WITH_PE @@ -3061,19 +2816,6 @@ coff_set_flags (bfd * abfd, return TRUE; #endif -#ifdef H8500MAGIC - case bfd_arch_h8500: - *magicp = H8500MAGIC; - return TRUE; - break; -#endif - -#ifdef WE32KMAGIC - case bfd_arch_we32k: - *magicp = WE32KMAGIC; - return TRUE; -#endif - #ifdef RS6000COFF_C case bfd_arch_rs6000: #ifndef PPCMAGIC @@ -3090,12 +2832,6 @@ coff_set_flags (bfd * abfd, return TRUE; #endif -#ifdef W65MAGIC - case bfd_arch_w65: - *magicp = W65MAGIC; - return TRUE; -#endif - default: /* Unknown architecture. */ /* Fall through to "return FALSE" below, to avoid "statement never reached" errors on the one below. */ @@ -3146,9 +2882,7 @@ sort_by_secaddr (const void * arg1, const void * arg2) /* Calculate the file position for each section. */ -#ifndef I960 #define ALIGN_SECTIONS_IN_FILE -#endif #if defined(TIC80COFF) || defined(TICOFF) #undef ALIGN_SECTIONS_IN_FILE #endif @@ -3184,7 +2918,7 @@ coff_compute_section_file_positions (bfd * abfd) bfd_set_error (bfd_error_file_too_big); _bfd_error_handler /* xgettext:c-format */ - (_("%B: page size is too large (0x%x)"), abfd, page_size); + (_("%pB: page size is too large (0x%x)"), abfd, page_size); return FALSE; } } @@ -3344,7 +3078,7 @@ coff_compute_section_file_positions (bfd * abfd) bfd_set_error (bfd_error_file_too_big); _bfd_error_handler /* xgettext:c-format */ - (_("%B: too many sections (%d)"), abfd, target_index); + (_("%pB: too many sections (%d)"), abfd, target_index); return FALSE; } @@ -3389,9 +3123,7 @@ coff_compute_section_file_positions (bfd * abfd) #endif /* Align the sections in the file to the same boundary on - which they are aligned in virtual memory. I960 doesn't - do this (FIXME) so we can stay in sync with Intel. 960 - doesn't yet page from files... */ + which they are aligned in virtual memory. */ #ifdef ALIGN_SECTIONS_IN_FILE if ((abfd->flags & EXEC_P) != 0) { @@ -3765,7 +3497,7 @@ coff_write_object_contents (bfd * abfd) bfd_set_error (bfd_error_file_too_big); _bfd_error_handler /* xgettext:c-format */ - (_("%B: section %A: string table overflow at offset %ld"), + (_("%pB: section %pA: string table overflow at offset %ld"), abfd, current, (unsigned long) string_size); return FALSE; } @@ -3855,11 +3587,6 @@ coff_write_object_contents (bfd * abfd) else if (!strcmp (current->name, _BSS)) bss_sec = current; -#ifdef I960 - section.s_align = (current->alignment_power - ? 1 << current->alignment_power - : 0); -#endif #ifdef COFF_ENCODE_ALIGNMENT COFF_ENCODE_ALIGNMENT(section, current->alignment_power); if ((unsigned int)COFF_DECODE_ALIGNMENT(section.s_flags) @@ -3870,7 +3597,7 @@ coff_write_object_contents (bfd * abfd) _bfd_error_handler /* xgettext:c-format */ - (_("%B:%s section %s: alignment 2**%u not representable"), + (_("%pB:%s section %s: alignment 2**%u not representable"), abfd, warn ? " warning:" : "", current->name, current->alignment_power); if (!warn) @@ -4118,41 +3845,6 @@ coff_write_object_contents (bfd * abfd) internal_a.magic = TIC80_ARCH_MAGIC; #define __A_MAGIC_SET__ #endif /* TIC80 */ -#ifdef I860 - /* FIXME: What are the a.out magic numbers for the i860? */ - internal_a.magic = 0; -#define __A_MAGIC_SET__ -#endif /* I860 */ -#ifdef I960 - internal_a.magic = (magic == I960ROMAGIC ? NMAGIC : OMAGIC); -#define __A_MAGIC_SET__ -#endif /* I960 */ -#if M88 -#define __A_MAGIC_SET__ - internal_a.magic = PAGEMAGICBCS; -#endif /* M88 */ - -#if APOLLO_M68 -#define __A_MAGIC_SET__ - internal_a.magic = APOLLO_COFF_VERSION_NUMBER; -#endif - -#if defined(M68) || defined(WE32K) || defined(M68K) -#define __A_MAGIC_SET__ -#if defined(LYNXOS) - internal_a.magic = LYNXCOFFMAGIC; -#else -#if defined(TARG_AUX) - internal_a.magic = (abfd->flags & D_PAGED ? PAGEMAGICPEXECPAGED : - abfd->flags & WP_TEXT ? PAGEMAGICPEXECSWAPPED : - PAGEMAGICEXECSWAPPED); -#else -#if defined (PAGEMAGICPEXECPAGED) - internal_a.magic = PAGEMAGICPEXECPAGED; -#endif -#endif /* TARG_AUX */ -#endif /* LYNXOS */ -#endif /* M68 || WE32K || M68K */ #if defined(ARM) #define __A_MAGIC_SET__ @@ -4516,12 +4208,14 @@ coff_set_section_contents (bfd * abfd, } static void * -buy_and_read (bfd *abfd, file_ptr where, bfd_size_type size) +buy_and_read (bfd *abfd, file_ptr where, + bfd_size_type nmemb, bfd_size_type size) { - void * area = bfd_alloc (abfd, size); + void *area = bfd_alloc2 (abfd, nmemb, size); if (!area) return NULL; + size *= nmemb; if (bfd_seek (abfd, where, SEEK_SET) != 0 || bfd_bread (area, size, abfd) != size) return NULL; @@ -4574,7 +4268,6 @@ coff_slurp_line_table (bfd *abfd, asection *asect) { LINENO *native_lineno; alent *lineno_cache; - bfd_size_type amt; unsigned int counter; alent *cache_ptr; bfd_vma prev_offset = 0; @@ -4584,27 +4277,32 @@ coff_slurp_line_table (bfd *abfd, asection *asect) bfd_boolean have_func; bfd_boolean ret = TRUE; + if (asect->lineno_count == 0) + return TRUE; + BFD_ASSERT (asect->lineno == NULL); if (asect->lineno_count > asect->size) { _bfd_error_handler - (_("%B: warning: line number count (%#lx) exceeds section size (%#lx)"), + (_("%pB: warning: line number count (%#lx) exceeds section size (%#lx)"), abfd, (unsigned long) asect->lineno_count, (unsigned long) asect->size); return FALSE; } - amt = ((bfd_size_type) asect->lineno_count + 1) * sizeof (alent); - lineno_cache = (alent *) bfd_alloc (abfd, amt); + lineno_cache = (alent *) bfd_alloc2 (abfd, + (bfd_size_type) asect->lineno_count + 1, + sizeof (alent)); if (lineno_cache == NULL) return FALSE; - amt = (bfd_size_type) bfd_coff_linesz (abfd) * asect->lineno_count; - native_lineno = (LINENO *) buy_and_read (abfd, asect->line_filepos, amt); + native_lineno = (LINENO *) buy_and_read (abfd, asect->line_filepos, + asect->lineno_count, + bfd_coff_linesz (abfd)); if (native_lineno == NULL) { _bfd_error_handler - (_("%B: warning: line number table read failed"), abfd); + (_("%pB: warning: line number table read failed"), abfd); bfd_release (abfd, lineno_cache); return FALSE; } @@ -4638,7 +4336,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) { _bfd_error_handler /* xgettext:c-format */ - (_("%B: warning: illegal symbol index 0x%lx in line number entry %d"), + (_("%pB: warning: illegal symbol index 0x%lx in line number entry %d"), abfd, symndx, counter); cache_ptr->line_number = -1; ret = FALSE; @@ -4652,7 +4350,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) { _bfd_error_handler /* xgettext:c-format */ - (_("%B: warning: illegal symbol index 0x%lx in line number entry %d"), + (_("%pB: warning: illegal symbol index 0x%lx in line number entry %d"), abfd, symndx, counter); cache_ptr->line_number = -1; ret = FALSE; @@ -4666,7 +4364,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) { _bfd_error_handler /* xgettext:c-format */ - (_("%B: warning: illegal symbol in line number entry %d"), + (_("%pB: warning: illegal symbol in line number entry %d"), abfd, counter); cache_ptr->line_number = -1; ret = FALSE; @@ -4679,7 +4377,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) if (sym->lineno != NULL) _bfd_error_handler /* xgettext:c-format */ - (_("%B: warning: duplicate line number information for `%s'"), + (_("%pB: warning: duplicate line number information for `%s'"), abfd, bfd_asymbol_name (&sym->symbol)); sym->lineno = cache_ptr; @@ -4709,7 +4407,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) alent *n_lineno_cache; /* Create a table of functions. */ - func_table = (alent **) bfd_alloc (abfd, nbr_func * sizeof (alent *)); + func_table = (alent **) bfd_alloc2 (abfd, nbr_func, sizeof (alent *)); if (func_table != NULL) { alent **p = func_table; @@ -4725,8 +4423,8 @@ coff_slurp_line_table (bfd *abfd, asection *asect) qsort (func_table, nbr_func, sizeof (alent *), coff_sort_func_alent); /* Create the new sorted table. */ - amt = (bfd_size_type) asect->lineno_count * sizeof (alent); - n_lineno_cache = (alent *) bfd_alloc (abfd, amt); + n_lineno_cache = (alent *) bfd_alloc2 (abfd, asect->lineno_count, + sizeof (alent)); if (n_lineno_cache != NULL) { alent *n_cache_ptr = n_lineno_cache; @@ -4746,9 +4444,9 @@ coff_slurp_line_table (bfd *abfd, asection *asect) *n_cache_ptr++ = *old_ptr++; while (old_ptr->line_number != 0); } - BFD_ASSERT ((bfd_size_type) (n_cache_ptr - n_lineno_cache) == (amt / sizeof (alent))); - memcpy (lineno_cache, n_lineno_cache, amt); + memcpy (lineno_cache, n_lineno_cache, + asect->lineno_count * sizeof (alent)); } else ret = FALSE; @@ -4771,7 +4469,6 @@ coff_slurp_symbol_table (bfd * abfd) combined_entry_type *native_symbols; coff_symbol_type *cached_area; unsigned int *table_ptr; - bfd_size_type amt; unsigned int number_of_symbols = 0; bfd_boolean ret = TRUE; @@ -4783,15 +4480,14 @@ coff_slurp_symbol_table (bfd * abfd) return FALSE; /* Allocate enough room for all the symbols in cached form. */ - amt = obj_raw_syment_count (abfd); - amt *= sizeof (coff_symbol_type); - cached_area = (coff_symbol_type *) bfd_alloc (abfd, amt); + cached_area = (coff_symbol_type *) bfd_alloc2 (abfd, + obj_raw_syment_count (abfd), + sizeof (coff_symbol_type)); if (cached_area == NULL) return FALSE; - amt = obj_raw_syment_count (abfd); - amt *= sizeof (unsigned int); - table_ptr = (unsigned int *) bfd_zalloc (abfd, amt); + table_ptr = (unsigned int *) bfd_zalloc2 (abfd, obj_raw_syment_count (abfd), + sizeof (unsigned int)); if (table_ptr == NULL) return FALSE; @@ -4820,11 +4516,6 @@ coff_slurp_symbol_table (bfd * abfd) switch (src->u.syment.n_sclass) { -#ifdef I960 - case C_LEAFEXT: - /* Fall through to next case. */ -#endif - case C_EXT: case C_WEAKEXT: #if defined ARM @@ -4918,9 +4609,6 @@ coff_slurp_symbol_table (bfd * abfd) break; case C_STAT: /* Static. */ -#ifdef I960 - case C_LEAFSTAT: /* Static leaf procedure. */ -#endif #if defined ARM case C_THUMBSTAT: /* Thumb static. */ case C_THUMBLABEL: /* Thumb label. */ @@ -4958,11 +4646,6 @@ coff_slurp_symbol_table (bfd * abfd) case C_REGPARM: /* Register parameter. */ case C_REG: /* register variable. */ /* C_AUTOARG conflicts with TI COFF C_UEXT. */ -#if !defined (TIC80COFF) && !defined (TICOFF) -#ifdef C_AUTOARG - case C_AUTOARG: /* 960-specific storage class. */ -#endif -#endif case C_TPDEF: /* Type definition. */ case C_ARG: case C_AUTO: /* Automatic variable. */ @@ -5100,7 +4783,7 @@ coff_slurp_symbol_table (bfd * abfd) default: _bfd_error_handler /* xgettext:c-format */ - (_("%B: Unrecognized storage class %d for %s symbol `%s'"), + (_("%pB: unrecognized storage class %d for %s symbol `%s'"), abfd, src->u.syment.n_sclass, dst->symbol.section->name, dst->symbol.name); ret = FALSE; @@ -5158,9 +4841,6 @@ coff_classify_symbol (bfd *abfd, { case C_EXT: case C_WEAKEXT: -#ifdef I960 - case C_LEAFEXT: -#endif #ifdef ARM case C_THUMBEXT: case C_THUMBEXTFUNC: @@ -5233,7 +4913,7 @@ coff_classify_symbol (bfd *abfd, _bfd_error_handler /* xgettext:c-format */ - (_("warning: %B: local symbol `%s' has no section"), + (_("warning: %pB: local symbol `%s' has no section"), abfd, _bfd_coff_internal_syment_name (abfd, syment, buf)); } @@ -5262,9 +4942,8 @@ SUBSUBSECTION o The reloc index is turned into a pointer to a howto structure, in a back end specific way. For instance, the 386 - and 960 use the @code{r_type} to directly produce an index - into a howto table vector; the 88k subtracts a number from the - @code{r_type} field and creates an addend field. + uses the @code{r_type} to directly produce an index + into a howto table vector. */ #ifndef CALC_ADDEND @@ -5296,7 +4975,6 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols) arelent *reloc_cache; arelent *cache_ptr; unsigned int idx; - bfd_size_type amt; if (asect->relocation) return TRUE; @@ -5307,10 +4985,11 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols) if (!coff_slurp_symbol_table (abfd)) return FALSE; - amt = (bfd_size_type) bfd_coff_relsz (abfd) * asect->reloc_count; - native_relocs = (RELOC *) buy_and_read (abfd, asect->rel_filepos, amt); - amt = (bfd_size_type) asect->reloc_count * sizeof (arelent); - reloc_cache = (arelent *) bfd_alloc (abfd, amt); + native_relocs = (RELOC *) buy_and_read (abfd, asect->rel_filepos, + asect->reloc_count, + bfd_coff_relsz (abfd)); + reloc_cache = (arelent *) bfd_alloc2 (abfd, asect->reloc_count, + sizeof (arelent)); if (reloc_cache == NULL || native_relocs == NULL) return FALSE; @@ -5340,7 +5019,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols) { _bfd_error_handler /* xgettext:c-format */ - (_("%B: warning: illegal symbol index %ld in relocs"), + (_("%pB: warning: illegal symbol index %ld in relocs"), abfd, dst.r_symndx); cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; ptr = NULL; @@ -5380,8 +5059,8 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols) { _bfd_error_handler /* xgettext:c-format */ - (_("%B: illegal relocation type %d at address %#Lx"), - abfd, dst.r_type, dst.r_vaddr); + (_("%pB: illegal relocation type %d at address %#" PRIx64), + abfd, dst.r_type, (uint64_t) dst.r_vaddr); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -5864,6 +5543,9 @@ coff_bigobj_swap_aux_in (bfd *abfd, AUXENT_BIGOBJ *ext = (AUXENT_BIGOBJ *) ext1; union internal_auxent *in = (union internal_auxent *) in1; + /* Make sure that all fields in the aux structure are + initialised. */ + memset (in, 0, sizeof * in); switch (in_class) { case C_FILE: @@ -6024,7 +5706,7 @@ static bfd_coff_backend_data bigobj_swap_table = #endif #ifndef coff_bfd_is_target_special_symbol -#define coff_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) (bfd_boolean (*)) bfd_false) +#define coff_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false #endif #ifndef coff_read_minisymbols @@ -6082,6 +5764,10 @@ static bfd_coff_backend_data bigobj_swap_table = #define coff_bfd_define_common_symbol bfd_generic_define_common_symbol #endif +#ifndef coff_bfd_link_hide_symbol +#define coff_bfd_link_hide_symbol _bfd_generic_link_hide_symbol +#endif + #ifndef coff_bfd_define_start_stop #define coff_bfd_define_start_stop bfd_generic_define_start_stop #endif @@ -6113,14 +5799,24 @@ const bfd_target VAR = \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ bfd_getb16, bfd_getb_signed_16, bfd_putb16, \ \ - /* bfd_check_format. */ \ - { _bfd_dummy_target, coff_object_p, bfd_generic_archive_p, \ - _bfd_dummy_target }, \ - /* bfd_set_format. */ \ - { bfd_false, coff_mkobject, _bfd_generic_mkarchive, bfd_false }, \ - /* bfd_write_contents. */ \ - { bfd_false, coff_write_object_contents, _bfd_write_archive_contents, \ - bfd_false }, \ + { /* bfd_check_format. */ \ + _bfd_dummy_target, \ + coff_object_p, \ + bfd_generic_archive_p, \ + _bfd_dummy_target \ + }, \ + { /* bfd_set_format. */ \ + _bfd_bool_bfd_false_error, \ + coff_mkobject, \ + _bfd_generic_mkarchive, \ + _bfd_bool_bfd_false_error \ + }, \ + { /* bfd_write_contents. */ \ + _bfd_bool_bfd_false_error, \ + coff_write_object_contents, \ + _bfd_write_archive_contents, \ + _bfd_bool_bfd_false_error \ + }, \ \ BFD_JUMP_TABLE_GENERIC (coff), \ BFD_JUMP_TABLE_COPY (coff), \ @@ -6164,14 +5860,24 @@ const bfd_target VAR = \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ bfd_getb16, bfd_getb_signed_16, bfd_putb16, \ \ - /* bfd_check_format. */ \ - { _bfd_dummy_target, coff_object_p, bfd_generic_archive_p, \ - _bfd_dummy_target }, \ - /* bfd_set_format. */ \ - { bfd_false, coff_mkobject, _bfd_generic_mkarchive, bfd_false }, \ - /* bfd_write_contents. */ \ - { bfd_false, coff_write_object_contents, _bfd_write_archive_contents, \ - bfd_false }, \ + { /* bfd_check_format. */ \ + _bfd_dummy_target, \ + coff_object_p, \ + bfd_generic_archive_p, \ + _bfd_dummy_target \ + }, \ + { /* bfd_set_format. */ \ + _bfd_bool_bfd_false_error, \ + coff_mkobject, \ + _bfd_generic_mkarchive, \ + _bfd_bool_bfd_false_error \ + }, \ + { /* bfd_write_contents. */ \ + _bfd_bool_bfd_false_error, \ + coff_write_object_contents, \ + _bfd_write_archive_contents, \ + _bfd_bool_bfd_false_error \ + }, \ \ BFD_JUMP_TABLE_GENERIC (coff), \ BFD_JUMP_TABLE_COPY (coff), \ @@ -6213,14 +5919,25 @@ const bfd_target VAR = \ bfd_getl64, bfd_getl_signed_64, bfd_putl64, \ bfd_getl32, bfd_getl_signed_32, bfd_putl32, \ bfd_getl16, bfd_getl_signed_16, bfd_putl16, \ - /* bfd_check_format. */ \ - { _bfd_dummy_target, coff_object_p, bfd_generic_archive_p, \ - _bfd_dummy_target }, \ - /* bfd_set_format. */ \ - { bfd_false, coff_mkobject, _bfd_generic_mkarchive, bfd_false }, \ - /* bfd_write_contents. */ \ - { bfd_false, coff_write_object_contents, _bfd_write_archive_contents, \ - bfd_false }, \ + \ + { /* bfd_check_format. */ \ + _bfd_dummy_target, \ + coff_object_p, \ + bfd_generic_archive_p, \ + _bfd_dummy_target \ + }, \ + { /* bfd_set_format. */ \ + _bfd_bool_bfd_false_error, \ + coff_mkobject, \ + _bfd_generic_mkarchive, \ + _bfd_bool_bfd_false_error \ + }, \ + { /* bfd_write_contents. */ \ + _bfd_bool_bfd_false_error, \ + coff_write_object_contents, \ + _bfd_write_archive_contents, \ + _bfd_bool_bfd_false_error \ + }, \ \ BFD_JUMP_TABLE_GENERIC (coff), \ BFD_JUMP_TABLE_COPY (coff), \