Introduce new section flag: SEC_ELF_OCTETS
All symbols, sizes and relocations in this section are octets instead of bytes. Required for DWARF debug sections as DWARF information is organized in octets, not bytes. bfd/ * section.c (struct bfd_section): New flag SEC_ELF_OCTETS. * archures.c (bfd_octets_per_byte): New parameter sec. If section is not NULL and SEC_ELF_OCTETS is set, one octet es returned [ELF targets only]. * bfd.c (bfd_get_section_limit): Provide section parameter to bfd_octets_per_byte. * bfd-in2.h: regenerate. * binary.c (binary_set_section_contents): Move call to bfd_octets_per_byte into section loop. Provide section parameter to bfd_octets_per_byte. * coff-arm.c (coff_arm_reloc): Provide section parameter to bfd_octets_per_byte. * coff-i386.c (coff_i386_reloc): likewise. * coff-mips.c (mips_reflo_reloc): likewise. * coff-x86_64.c (coff_amd64_reloc): likewise. * cofflink.c (_bfd_coff_link_input_bfd): likewise. (_bfd_coff_reloc_link_order): likewise. * elf.c (_bfd_elf_section_offset): likewise. (_bfd_elf_make_section_from_shdr): likewise. Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes, .debug*, .zdebug* and .note.gnu*. * elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter to bfd_octets_per_byte. * elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise. * elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise. * elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise. * elf32-s12z.c (opru18_reloc): likewise. * elf32-sh.c (sh_elf_reloc): likewise. * elf32-spu.c (spu_elf_rel9): likewise. * elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise * elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise. (ppc64_elf_addr16_ha_reloc): likewise. (ppc64_elf_toc64_reloc): likewise. * elflink.c (bfd_elf_final_link): likewise. (bfd_elf_perform_complex_relocation): likewise. (elf_fixup_link_order): likewise. (elf_link_input_bfd): likewise. (elf_link_sort_relocs): likewise. (elf_reloc_link_order): likewise. (resolve_section): likewise. * linker.c (_bfd_generic_reloc_link_order): likewise. (bfd_generic_define_common_symbol): likewise. (default_data_link_order): likewise. (default_indirect_link_order): likewise. * srec.c (srec_set_section_contents): likewise. (srec_write_section): likewise. * syms.c (_bfd_stab_section_find_nearest_line): likewise. * reloc.c (_bfd_final_link_relocate): likewise. (bfd_generic_get_relocated_section_contents): likewise. (bfd_install_relocation): likewise. For section which have SEC_ELF_OCTETS set, multiply output_base and output_offset with bfd_octets_per_byte. (bfd_perform_relocation): likewise. include/ * coff/ti.h (GET_SCNHDR_SIZE, PUT_SCNHDR_SIZE, GET_SCN_SCNLEN), (PUT_SCN_SCNLEN): Adjust bfd_octets_per_byte calls. binutils/ * objdump.c (disassemble_data): Provide section parameter to bfd_octets_per_byte. (dump_section): likewise (dump_section_header): likewise. Show SEC_ELF_OCTETS flag if set. gas/ * as.h: Define SEC_OCTETS as SEC_ELF_OCTETS if OBJ_ELF. * dwarf2dbg.c: (dwarf2_finish): Set section flag SEC_OCTETS for .debug_line, .debug_info, .debug_abbrev, .debug_aranges, .debug_str and .debug_ranges sections. * write.c (maybe_generate_build_notes): Set section flag SEC_OCTETS for .gnu.build.attributes section. * frags.c (frag_now_fix): Don't divide by OCTETS_PER_BYTE if SEC_OCTETS is set. * symbols.c (resolve_symbol_value): Likewise. ld/ * ldexp.c (fold_name): Provide section parameter to bfd_octets_per_byte. * ldlang (init_opb): New argument s. Set opb_shift to 0 if SEC_ELF_OCTETS for the current section is set. (print_input_section): Pass current section to init_opb. (print_data_statement,print_reloc_statement, print_padding_statement): Likewise. (lang_check_section_addresses): Call init_opb for each section. (lang_size_sections_1,lang_size_sections_1, lang_do_assignments_1): Likewise. (lang_process): Pass NULL to init_opb.
This commit is contained in:
parent
e2b9a97eda
commit
618265039f
@ -1,3 +1,59 @@
|
|||||||
|
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
||||||
|
|
||||||
|
* section.c (struct bfd_section): New flag SEC_ELF_OCTETS.
|
||||||
|
* archures.c (bfd_octets_per_byte): New parameter sec.
|
||||||
|
If section is not NULL and SEC_ELF_OCTETS is set, one octet es
|
||||||
|
returned [ELF targets only].
|
||||||
|
* bfd.c (bfd_get_section_limit): Provide section parameter to
|
||||||
|
bfd_octets_per_byte.
|
||||||
|
* bfd-in2.h: regenerate.
|
||||||
|
* binary.c (binary_set_section_contents): Move call to
|
||||||
|
bfd_octets_per_byte into section loop. Provide section parameter
|
||||||
|
to bfd_octets_per_byte.
|
||||||
|
* coff-arm.c (coff_arm_reloc): Provide section parameter
|
||||||
|
to bfd_octets_per_byte.
|
||||||
|
* coff-i386.c (coff_i386_reloc): likewise.
|
||||||
|
* coff-mips.c (mips_reflo_reloc): likewise.
|
||||||
|
* coff-x86_64.c (coff_amd64_reloc): likewise.
|
||||||
|
* cofflink.c (_bfd_coff_link_input_bfd): likewise.
|
||||||
|
(_bfd_coff_reloc_link_order): likewise.
|
||||||
|
* elf.c (_bfd_elf_section_offset): likewise.
|
||||||
|
(_bfd_elf_make_section_from_shdr): likewise.
|
||||||
|
Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes,
|
||||||
|
.debug*, .zdebug* and .note.gnu*.
|
||||||
|
* elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter
|
||||||
|
to bfd_octets_per_byte.
|
||||||
|
* elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise.
|
||||||
|
* elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise.
|
||||||
|
* elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise.
|
||||||
|
* elf32-s12z.c (opru18_reloc): likewise.
|
||||||
|
* elf32-sh.c (sh_elf_reloc): likewise.
|
||||||
|
* elf32-spu.c (spu_elf_rel9): likewise.
|
||||||
|
* elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise
|
||||||
|
* elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise.
|
||||||
|
(ppc64_elf_addr16_ha_reloc): likewise.
|
||||||
|
(ppc64_elf_toc64_reloc): likewise.
|
||||||
|
* elflink.c (bfd_elf_final_link): likewise.
|
||||||
|
(bfd_elf_perform_complex_relocation): likewise.
|
||||||
|
(elf_fixup_link_order): likewise.
|
||||||
|
(elf_link_input_bfd): likewise.
|
||||||
|
(elf_link_sort_relocs): likewise.
|
||||||
|
(elf_reloc_link_order): likewise.
|
||||||
|
(resolve_section): likewise.
|
||||||
|
* linker.c (_bfd_generic_reloc_link_order): likewise.
|
||||||
|
(bfd_generic_define_common_symbol): likewise.
|
||||||
|
(default_data_link_order): likewise.
|
||||||
|
(default_indirect_link_order): likewise.
|
||||||
|
* srec.c (srec_set_section_contents): likewise.
|
||||||
|
(srec_write_section): likewise.
|
||||||
|
* syms.c (_bfd_stab_section_find_nearest_line): likewise.
|
||||||
|
* reloc.c (_bfd_final_link_relocate): likewise.
|
||||||
|
(bfd_generic_get_relocated_section_contents): likewise.
|
||||||
|
(bfd_install_relocation): likewise.
|
||||||
|
For section which have SEC_ELF_OCTETS set, multiply output_base
|
||||||
|
and output_offset with bfd_octets_per_byte.
|
||||||
|
(bfd_perform_relocation): likewise.
|
||||||
|
|
||||||
2019-11-21 Alan Modra <amodra@gmail.com>
|
2019-11-21 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library
|
* elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library
|
||||||
|
@ -1379,7 +1379,8 @@ FUNCTION
|
|||||||
bfd_octets_per_byte
|
bfd_octets_per_byte
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
unsigned int bfd_octets_per_byte (const bfd *abfd);
|
unsigned int bfd_octets_per_byte (const bfd *abfd,
|
||||||
|
const asection *sec);
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Return the number of octets (8-bit quantities) per target byte
|
Return the number of octets (8-bit quantities) per target byte
|
||||||
@ -1388,10 +1389,17 @@ DESCRIPTION
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
bfd_octets_per_byte (const bfd *abfd)
|
bfd_octets_per_byte (const bfd *abfd, const asection *sec)
|
||||||
{
|
{
|
||||||
return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
|
unsigned int opb = bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
|
||||||
bfd_get_mach (abfd));
|
bfd_get_mach (abfd));
|
||||||
|
|
||||||
|
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
|
||||||
|
&& sec != NULL
|
||||||
|
&& (sec->flags & SEC_ELF_OCTETS) != 0)
|
||||||
|
opb = 1;
|
||||||
|
|
||||||
|
return opb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -992,6 +992,11 @@ typedef struct bfd_section
|
|||||||
/* This section contains vliw code. This is for Toshiba MeP only. */
|
/* This section contains vliw code. This is for Toshiba MeP only. */
|
||||||
#define SEC_MEP_VLIW 0x20000000
|
#define SEC_MEP_VLIW 0x20000000
|
||||||
|
|
||||||
|
/* All symbols, sizes and relocations in this section are octets
|
||||||
|
instead of bytes. Required for DWARF debug sections as DWARF
|
||||||
|
information is organized in octets, not bytes. */
|
||||||
|
#define SEC_ELF_OCTETS 0x40000000
|
||||||
|
|
||||||
/* Indicate that section has the no read flag set. This happens
|
/* Indicate that section has the no read flag set. This happens
|
||||||
when memory read flag isn't set. */
|
when memory read flag isn't set. */
|
||||||
#define SEC_COFF_NOREAD 0x40000000
|
#define SEC_COFF_NOREAD 0x40000000
|
||||||
@ -1993,7 +1998,8 @@ const bfd_arch_info_type *bfd_lookup_arch
|
|||||||
const char *bfd_printable_arch_mach
|
const char *bfd_printable_arch_mach
|
||||||
(enum bfd_architecture arch, unsigned long machine);
|
(enum bfd_architecture arch, unsigned long machine);
|
||||||
|
|
||||||
unsigned int bfd_octets_per_byte (const bfd *abfd);
|
unsigned int bfd_octets_per_byte (const bfd *abfd,
|
||||||
|
const asection *sec);
|
||||||
|
|
||||||
unsigned int bfd_arch_mach_octets_per_byte
|
unsigned int bfd_arch_mach_octets_per_byte
|
||||||
(enum bfd_architecture arch, unsigned long machine);
|
(enum bfd_architecture arch, unsigned long machine);
|
||||||
@ -6854,7 +6860,8 @@ bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
|
|||||||
static inline bfd_size_type
|
static inline bfd_size_type
|
||||||
bfd_get_section_limit (const bfd *abfd, const asection *sec)
|
bfd_get_section_limit (const bfd *abfd, const asection *sec)
|
||||||
{
|
{
|
||||||
return bfd_get_section_limit_octets (abfd, sec) / bfd_octets_per_byte (abfd);
|
return (bfd_get_section_limit_octets (abfd, sec)
|
||||||
|
/ bfd_octets_per_byte (abfd, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Functions to handle insertion and deletion of a bfd's sections. These
|
/* Functions to handle insertion and deletion of a bfd's sections. These
|
||||||
|
@ -492,7 +492,8 @@ CODE_FRAGMENT
|
|||||||
.static inline bfd_size_type
|
.static inline bfd_size_type
|
||||||
.bfd_get_section_limit (const bfd *abfd, const asection *sec)
|
.bfd_get_section_limit (const bfd *abfd, const asection *sec)
|
||||||
.{
|
.{
|
||||||
. return bfd_get_section_limit_octets (abfd, sec) / bfd_octets_per_byte (abfd);
|
. return (bfd_get_section_limit_octets (abfd, sec)
|
||||||
|
. / bfd_octets_per_byte (abfd, NULL));
|
||||||
.}
|
.}
|
||||||
.
|
.
|
||||||
.{* Functions to handle insertion and deletion of a bfd's sections. These
|
.{* Functions to handle insertion and deletion of a bfd's sections. These
|
||||||
|
@ -230,7 +230,6 @@ binary_set_section_contents (bfd *abfd,
|
|||||||
|
|
||||||
if (! abfd->output_has_begun)
|
if (! abfd->output_has_begun)
|
||||||
{
|
{
|
||||||
unsigned int opb;
|
|
||||||
bfd_boolean found_low;
|
bfd_boolean found_low;
|
||||||
bfd_vma low;
|
bfd_vma low;
|
||||||
asection *s;
|
asection *s;
|
||||||
@ -251,9 +250,10 @@ binary_set_section_contents (bfd *abfd,
|
|||||||
found_low = TRUE;
|
found_low = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
opb = bfd_octets_per_byte (abfd);
|
|
||||||
for (s = abfd->sections; s != NULL; s = s->next)
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
{
|
{
|
||||||
|
unsigned int opb = bfd_octets_per_byte (abfd, s);
|
||||||
|
|
||||||
s->filepos = (s->lma - low) * opb;
|
s->filepos = (s->lma - low) * opb;
|
||||||
|
|
||||||
/* Skip following warning check for sections that will not
|
/* Skip following warning check for sections that will not
|
||||||
|
@ -118,7 +118,7 @@ coff_arm_reloc (bfd *abfd,
|
|||||||
|
|
||||||
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
||||||
reloc_entry->address
|
reloc_entry->address
|
||||||
* bfd_octets_per_byte (abfd)))
|
* bfd_octets_per_byte (abfd, NULL)))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
switch (howto->size)
|
switch (howto->size)
|
||||||
|
@ -146,7 +146,7 @@ coff_i386_reloc (bfd *abfd,
|
|||||||
|
|
||||||
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
||||||
reloc_entry->address
|
reloc_entry->address
|
||||||
* bfd_octets_per_byte (abfd)))
|
* bfd_octets_per_byte (abfd, NULL)))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
switch (howto->size)
|
switch (howto->size)
|
||||||
|
@ -507,7 +507,7 @@ mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
|||||||
if (! bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
|
if (! bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
|
||||||
input_section,
|
input_section,
|
||||||
reloc_entry->address
|
reloc_entry->address
|
||||||
* bfd_octets_per_byte (abfd)))
|
* bfd_octets_per_byte (abfd, NULL)))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
/* Do the REFHI relocation. Note that we actually don't
|
/* Do the REFHI relocation. Note that we actually don't
|
||||||
|
@ -145,7 +145,7 @@ coff_amd64_reloc (bfd *abfd,
|
|||||||
|
|
||||||
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
|
||||||
reloc_entry->address
|
reloc_entry->address
|
||||||
* bfd_octets_per_byte (abfd)))
|
* bfd_octets_per_byte (abfd, NULL)))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
switch (howto->size)
|
switch (howto->size)
|
||||||
|
@ -2541,7 +2541,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd)
|
|||||||
/* Write out the modified section contents. */
|
/* Write out the modified section contents. */
|
||||||
if (secdata == NULL || secdata->stab_info == NULL)
|
if (secdata == NULL || secdata->stab_info == NULL)
|
||||||
{
|
{
|
||||||
file_ptr loc = o->output_offset * bfd_octets_per_byte (output_bfd);
|
file_ptr loc = (o->output_offset
|
||||||
|
* bfd_octets_per_byte (output_bfd, NULL));
|
||||||
if (! bfd_set_section_contents (output_bfd, o->output_section,
|
if (! bfd_set_section_contents (output_bfd, o->output_section,
|
||||||
contents, loc, o->size))
|
contents, loc, o->size))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -2852,7 +2853,7 @@ _bfd_coff_reloc_link_order (bfd *output_bfd,
|
|||||||
(bfd *) NULL, (asection *) NULL, (bfd_vma) 0);
|
(bfd *) NULL, (asection *) NULL, (bfd_vma) 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
loc = link_order->offset * bfd_octets_per_byte (output_bfd);
|
loc = link_order->offset * bfd_octets_per_byte (output_bfd, NULL);
|
||||||
ok = bfd_set_section_contents (output_bfd, output_section, buf,
|
ok = bfd_set_section_contents (output_bfd, output_section, buf,
|
||||||
loc, size);
|
loc, size);
|
||||||
free (buf);
|
free (buf);
|
||||||
|
12
bfd/elf.c
12
bfd/elf.c
@ -1120,6 +1120,15 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
|
|||||||
p = NULL, n = 0;
|
p = NULL, n = 0;
|
||||||
if (p != NULL && strncmp (name, p, n) == 0)
|
if (p != NULL && strncmp (name, p, n) == 0)
|
||||||
flags |= SEC_DEBUGGING;
|
flags |= SEC_DEBUGGING;
|
||||||
|
|
||||||
|
/* DWARF debug sections and ELF notes are organized in octets. */
|
||||||
|
if (strncmp (name, ".debug", 6) == 0 ||
|
||||||
|
strncmp (name, ".zdebug", 7) == 0 ||
|
||||||
|
strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0 ||
|
||||||
|
strncmp (name, ".note.gnu", 9) == 0)
|
||||||
|
{
|
||||||
|
flags |= SEC_ELF_OCTETS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12054,7 +12063,8 @@ _bfd_elf_section_offset (bfd *abfd,
|
|||||||
|
|
||||||
/* address_size and sec->size are in octets. Convert
|
/* address_size and sec->size are in octets. Convert
|
||||||
to bytes before subtracting the original offset. */
|
to bytes before subtracting the original offset. */
|
||||||
offset = (sec->size - address_size) / bfd_octets_per_byte (abfd) - offset;
|
offset = ((sec->size - address_size)
|
||||||
|
/ bfd_octets_per_byte (abfd, NULL) - offset);
|
||||||
}
|
}
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ rl78_sym_diff_handler (bfd * abfd,
|
|||||||
char ** error_message ATTRIBUTE_UNUSED)
|
char ** error_message ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
bfd_size_type octets;
|
bfd_size_type octets;
|
||||||
octets = reloc->address * bfd_octets_per_byte (abfd);
|
octets = reloc->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
|
|
||||||
/* Catch the case where bfd_install_relocation would return
|
/* Catch the case where bfd_install_relocation would return
|
||||||
bfd_reloc_outofrange because the SYM_DIFF reloc is being used in a very
|
bfd_reloc_outofrange because the SYM_DIFF reloc is being used in a very
|
||||||
|
@ -13220,7 +13220,7 @@ nds32_elf_get_relocated_section_contents (bfd *abfd,
|
|||||||
= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
|
= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
|
||||||
"unused", FALSE, 0, 0, FALSE);
|
"unused", FALSE, 0, 0, FALSE);
|
||||||
|
|
||||||
off = (*parent)->address * bfd_octets_per_byte (input_bfd);
|
off = (*parent)->address * bfd_octets_per_byte (input_bfd, NULL);
|
||||||
_bfd_clear_contents ((*parent)->howto, input_bfd,
|
_bfd_clear_contents ((*parent)->howto, input_bfd,
|
||||||
input_section, data, off);
|
input_section, data, off);
|
||||||
(*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
(*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
||||||
|
@ -956,7 +956,7 @@ ppc_elf_addr16_ha_reloc (bfd *abfd,
|
|||||||
+ input_section->output_section->vma);
|
+ input_section->output_section->vma);
|
||||||
value >>= 16;
|
value >>= 16;
|
||||||
|
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
||||||
insn &= ~0x1fffc1;
|
insn &= ~0x1fffc1;
|
||||||
insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
|
insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
|
||||||
|
@ -537,7 +537,7 @@ pru_elf32_do_ldi32_relocate (bfd *abfd, reloc_howto_type *howto,
|
|||||||
bfd_vma symbol_value, bfd_vma addend)
|
bfd_vma symbol_value, bfd_vma addend)
|
||||||
{
|
{
|
||||||
bfd_signed_vma relocation;
|
bfd_signed_vma relocation;
|
||||||
bfd_size_type octets = offset * bfd_octets_per_byte (abfd);
|
bfd_size_type octets = offset * bfd_octets_per_byte (abfd, NULL);
|
||||||
bfd_byte *location;
|
bfd_byte *location;
|
||||||
unsigned long in1, in2;
|
unsigned long in1, in2;
|
||||||
|
|
||||||
@ -557,7 +557,7 @@ pru_elf32_do_ldi32_relocate (bfd *abfd, reloc_howto_type *howto,
|
|||||||
BFD_ASSERT (!howto->pc_relative);
|
BFD_ASSERT (!howto->pc_relative);
|
||||||
|
|
||||||
/* A hacked-up version of _bfd_relocate_contents() follows. */
|
/* A hacked-up version of _bfd_relocate_contents() follows. */
|
||||||
location = data + offset * bfd_octets_per_byte (abfd);
|
location = data + offset * bfd_octets_per_byte (abfd, NULL);
|
||||||
|
|
||||||
BFD_ASSERT (!howto->pc_relative);
|
BFD_ASSERT (!howto->pc_relative);
|
||||||
|
|
||||||
|
@ -43,7 +43,8 @@ opru18_reloc (bfd *abfd, arelent *reloc_entry, struct bfd_symbol *symbol,
|
|||||||
is shifted one place to the left of where it would normally be. See
|
is shifted one place to the left of where it would normally be. See
|
||||||
Appendix A.4 of the S12Z reference manual. */
|
Appendix A.4 of the S12Z reference manual. */
|
||||||
|
|
||||||
bfd_size_type octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
bfd_size_type octets = (reloc_entry->address
|
||||||
|
* bfd_octets_per_byte (abfd, NULL));
|
||||||
bfd_vma result = bfd_get_24 (abfd, (unsigned char *) data + octets);
|
bfd_vma result = bfd_get_24 (abfd, (unsigned char *) data + octets);
|
||||||
bfd_vma val = bfd_asymbol_value (symbol);
|
bfd_vma val = bfd_asymbol_value (symbol);
|
||||||
|
|
||||||
|
@ -254,7 +254,8 @@ sh_elf_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol_in,
|
|||||||
return bfd_reloc_undefined;
|
return bfd_reloc_undefined;
|
||||||
|
|
||||||
/* PR 17512: file: 9891ca98. */
|
/* PR 17512: file: 9891ca98. */
|
||||||
if (addr * bfd_octets_per_byte (abfd) + bfd_get_reloc_size (reloc_entry->howto)
|
if ((addr * bfd_octets_per_byte (abfd, NULL)
|
||||||
|
+ bfd_get_reloc_size (reloc_entry->howto))
|
||||||
> bfd_get_section_limit_octets (abfd, input_section))
|
> bfd_get_section_limit_octets (abfd, input_section))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ spu_elf_rel9 (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
|
|||||||
|
|
||||||
if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
|
if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
|
|
||||||
/* Get symbol value. */
|
/* Get symbol value. */
|
||||||
val = 0;
|
val = 0;
|
||||||
|
@ -2103,7 +2103,8 @@ bfd_elf_xtensa_reloc (bfd *abfd,
|
|||||||
{
|
{
|
||||||
bfd_vma relocation;
|
bfd_vma relocation;
|
||||||
bfd_reloc_status_type flag;
|
bfd_reloc_status_type flag;
|
||||||
bfd_size_type octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
bfd_size_type octets = (reloc_entry->address
|
||||||
|
* bfd_octets_per_byte (abfd, NULL));
|
||||||
bfd_vma output_base = 0;
|
bfd_vma output_base = 0;
|
||||||
reloc_howto_type *howto = reloc_entry->howto;
|
reloc_howto_type *howto = reloc_entry->howto;
|
||||||
asection *reloc_target_output_section;
|
asection *reloc_target_output_section;
|
||||||
|
@ -1405,7 +1405,7 @@ ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
|
|||||||
+ input_section->output_section->vma);
|
+ input_section->output_section->vma);
|
||||||
value = (bfd_signed_vma) value >> 16;
|
value = (bfd_signed_vma) value >> 16;
|
||||||
|
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
||||||
insn &= ~0x1fffc1;
|
insn &= ~0x1fffc1;
|
||||||
insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
|
insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
|
||||||
@ -1480,7 +1480,7 @@ ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
|
|||||||
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
|
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
|
||||||
input_section, output_bfd, error_message);
|
input_section, output_bfd, error_message);
|
||||||
|
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
|
||||||
insn &= ~(0x01 << 21);
|
insn &= ~(0x01 << 21);
|
||||||
r_type = reloc_entry->howto->type;
|
r_type = reloc_entry->howto->type;
|
||||||
@ -1630,7 +1630,7 @@ ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
|
|||||||
if (TOCstart == 0)
|
if (TOCstart == 0)
|
||||||
TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
|
TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
|
||||||
|
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, NULL);
|
||||||
bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
|
bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
|
||||||
return bfd_reloc_ok;
|
return bfd_reloc_ok;
|
||||||
}
|
}
|
||||||
|
@ -8456,7 +8456,8 @@ resolve_section (const char *name,
|
|||||||
{
|
{
|
||||||
if (strncmp (".end", name + len, 4) == 0)
|
if (strncmp (".end", name + len, 4) == 0)
|
||||||
{
|
{
|
||||||
*result = curr->vma + curr->size / bfd_octets_per_byte (abfd);
|
*result = (curr->vma
|
||||||
|
+ curr->size / bfd_octets_per_byte (abfd, NULL));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8778,7 +8779,8 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd,
|
|||||||
shift = (8 * wordsz) - (start + len);
|
shift = (8 * wordsz) - (start + len);
|
||||||
|
|
||||||
x = get_value (wordsz, chunksz, input_bfd,
|
x = get_value (wordsz, chunksz, input_bfd,
|
||||||
contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
|
contents
|
||||||
|
+ rel->r_offset * bfd_octets_per_byte (input_bfd, NULL));
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf ("Doing complex reloc: "
|
printf ("Doing complex reloc: "
|
||||||
@ -8811,7 +8813,7 @@ bfd_elf_perform_complex_relocation (bfd *input_bfd,
|
|||||||
(unsigned long) ((relocation & mask) << shift), (unsigned long) x);
|
(unsigned long) ((relocation & mask) << shift), (unsigned long) x);
|
||||||
#endif
|
#endif
|
||||||
put_value (wordsz, chunksz, input_bfd, x,
|
put_value (wordsz, chunksz, input_bfd, x,
|
||||||
contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
|
contents + rel->r_offset * bfd_octets_per_byte (input_bfd, NULL));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9175,7 +9177,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
|
|||||||
struct elf_link_sort_rela *sq;
|
struct elf_link_sort_rela *sq;
|
||||||
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||||
int i2e = bed->s->int_rels_per_ext_rel;
|
int i2e = bed->s->int_rels_per_ext_rel;
|
||||||
unsigned int opb = bfd_octets_per_byte (abfd);
|
unsigned int opb = bfd_octets_per_byte (abfd, NULL);
|
||||||
void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
|
void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
|
||||||
void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
|
void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
|
||||||
struct bfd_link_order *lo;
|
struct bfd_link_order *lo;
|
||||||
@ -11303,7 +11305,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
|
|||||||
file_ptr offset = (file_ptr) o->output_offset;
|
file_ptr offset = (file_ptr) o->output_offset;
|
||||||
bfd_size_type todo = o->size;
|
bfd_size_type todo = o->size;
|
||||||
|
|
||||||
offset *= bfd_octets_per_byte (output_bfd);
|
offset *= bfd_octets_per_byte (output_bfd, NULL);
|
||||||
|
|
||||||
if ((o->flags & SEC_ELF_REVERSE_COPY))
|
if ((o->flags & SEC_ELF_REVERSE_COPY))
|
||||||
{
|
{
|
||||||
@ -11465,7 +11467,7 @@ elf_reloc_link_order (bfd *output_bfd,
|
|||||||
|
|
||||||
ok = bfd_set_section_contents (output_bfd, output_section, buf,
|
ok = bfd_set_section_contents (output_bfd, output_section, buf,
|
||||||
link_order->offset
|
link_order->offset
|
||||||
* bfd_octets_per_byte (output_bfd),
|
* bfd_octets_per_byte (output_bfd, NULL),
|
||||||
size);
|
size);
|
||||||
free (buf);
|
free (buf);
|
||||||
if (! ok)
|
if (! ok)
|
||||||
@ -11633,7 +11635,7 @@ elf_fixup_link_order (bfd *abfd, asection *o)
|
|||||||
s = sections[n]->u.indirect.section;
|
s = sections[n]->u.indirect.section;
|
||||||
mask = ~(bfd_vma) 0 << s->alignment_power;
|
mask = ~(bfd_vma) 0 << s->alignment_power;
|
||||||
offset = (offset + ~mask) & mask;
|
offset = (offset + ~mask) & mask;
|
||||||
s->output_offset = offset / bfd_octets_per_byte (abfd);
|
s->output_offset = offset / bfd_octets_per_byte (abfd, NULL);
|
||||||
sections[n]->offset = offset;
|
sections[n]->offset = offset;
|
||||||
offset += sections[n]->size;
|
offset += sections[n]->size;
|
||||||
}
|
}
|
||||||
@ -12857,7 +12859,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
|
|||||||
if (! bfd_set_section_contents (abfd, o->output_section,
|
if (! bfd_set_section_contents (abfd, o->output_section,
|
||||||
o->contents,
|
o->contents,
|
||||||
(file_ptr) o->output_offset
|
(file_ptr) o->output_offset
|
||||||
* bfd_octets_per_byte (abfd),
|
* bfd_octets_per_byte (abfd,
|
||||||
|
NULL),
|
||||||
o->size))
|
o->size))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
@ -2402,7 +2402,7 @@ _bfd_generic_reloc_link_order (bfd *abfd,
|
|||||||
NULL, NULL, 0);
|
NULL, NULL, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
loc = link_order->offset * bfd_octets_per_byte (abfd);
|
loc = link_order->offset * bfd_octets_per_byte (abfd, sec);
|
||||||
ok = bfd_set_section_contents (abfd, sec, buf, loc, size);
|
ok = bfd_set_section_contents (abfd, sec, buf, loc, size);
|
||||||
free (buf);
|
free (buf);
|
||||||
if (! ok)
|
if (! ok)
|
||||||
@ -2518,7 +2518,7 @@ default_data_link_order (bfd *abfd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loc = link_order->offset * bfd_octets_per_byte (abfd);
|
loc = link_order->offset * bfd_octets_per_byte (abfd, sec);
|
||||||
result = bfd_set_section_contents (abfd, sec, fill, loc, size);
|
result = bfd_set_section_contents (abfd, sec, fill, loc, size);
|
||||||
|
|
||||||
if (fill != link_order->u.data.contents)
|
if (fill != link_order->u.data.contents)
|
||||||
@ -2655,7 +2655,8 @@ default_indirect_link_order (bfd *output_bfd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Output the section contents. */
|
/* Output the section contents. */
|
||||||
loc = input_section->output_offset * bfd_octets_per_byte (output_bfd);
|
loc = (input_section->output_offset
|
||||||
|
* bfd_octets_per_byte (output_bfd, output_section));
|
||||||
if (! bfd_set_section_contents (output_bfd, output_section,
|
if (! bfd_set_section_contents (output_bfd, output_section,
|
||||||
new_contents, loc, input_section->size))
|
new_contents, loc, input_section->size))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
@ -3099,7 +3100,7 @@ bfd_generic_define_common_symbol (bfd *output_bfd,
|
|||||||
|
|
||||||
/* Increase the size of the section to align the common symbol.
|
/* Increase the size of the section to align the common symbol.
|
||||||
The alignment must be a power of two. */
|
The alignment must be a power of two. */
|
||||||
alignment = bfd_octets_per_byte (output_bfd) << power_of_two;
|
alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two;
|
||||||
BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment);
|
BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment);
|
||||||
section->size += alignment - 1;
|
section->size += alignment - 1;
|
||||||
section->size &= -alignment;
|
section->size &= -alignment;
|
||||||
|
32
bfd/reloc.c
32
bfd/reloc.c
@ -722,7 +722,7 @@ bfd_perform_relocation (bfd *abfd,
|
|||||||
return bfd_reloc_undefined;
|
return bfd_reloc_undefined;
|
||||||
|
|
||||||
/* Is the address of the relocation really within the section? */
|
/* Is the address of the relocation really within the section? */
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
|
||||||
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
|
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
@ -744,7 +744,14 @@ bfd_perform_relocation (bfd *abfd,
|
|||||||
else
|
else
|
||||||
output_base = reloc_target_output_section->vma;
|
output_base = reloc_target_output_section->vma;
|
||||||
|
|
||||||
relocation += output_base + symbol->section->output_offset;
|
/* For sections where relocations are in octets, output_base and
|
||||||
|
output_offset must also be converted to octets. */
|
||||||
|
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
|
||||||
|
&& (symbol->section->flags & SEC_ELF_OCTETS))
|
||||||
|
relocation += ((output_base + symbol->section->output_offset)
|
||||||
|
* bfd_octets_per_byte (abfd, NULL));
|
||||||
|
else
|
||||||
|
relocation += output_base + symbol->section->output_offset;
|
||||||
|
|
||||||
/* Add in supplied addend. */
|
/* Add in supplied addend. */
|
||||||
relocation += reloc_entry->addend;
|
relocation += reloc_entry->addend;
|
||||||
@ -1052,7 +1059,7 @@ bfd_install_relocation (bfd *abfd,
|
|||||||
it will have been checked in `bfd_perform_relocation already'. */
|
it will have been checked in `bfd_perform_relocation already'. */
|
||||||
|
|
||||||
/* Is the address of the relocation really within the section? */
|
/* Is the address of the relocation really within the section? */
|
||||||
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
|
octets = reloc_entry->address * bfd_octets_per_byte (abfd, input_section);
|
||||||
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
|
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octets))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
@ -1073,7 +1080,14 @@ bfd_install_relocation (bfd *abfd,
|
|||||||
else
|
else
|
||||||
output_base = reloc_target_output_section->vma;
|
output_base = reloc_target_output_section->vma;
|
||||||
|
|
||||||
relocation += output_base + symbol->section->output_offset;
|
/* For sections where relocations are in octets, output_base and
|
||||||
|
output_offset must also be converted to octets. */
|
||||||
|
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
|
||||||
|
&& (symbol->section->flags & SEC_ELF_OCTETS))
|
||||||
|
relocation += ((output_base + symbol->section->output_offset)
|
||||||
|
* bfd_octets_per_byte (abfd, NULL));
|
||||||
|
else
|
||||||
|
relocation += output_base + symbol->section->output_offset;
|
||||||
|
|
||||||
/* Add in supplied addend. */
|
/* Add in supplied addend. */
|
||||||
relocation += reloc_entry->addend;
|
relocation += reloc_entry->addend;
|
||||||
@ -1337,7 +1351,8 @@ _bfd_final_link_relocate (reloc_howto_type *howto,
|
|||||||
bfd_vma addend)
|
bfd_vma addend)
|
||||||
{
|
{
|
||||||
bfd_vma relocation;
|
bfd_vma relocation;
|
||||||
bfd_size_type octets = address * bfd_octets_per_byte (input_bfd);
|
bfd_size_type octets = (address
|
||||||
|
* bfd_octets_per_byte (input_bfd, input_section));
|
||||||
|
|
||||||
/* Sanity check the address. */
|
/* Sanity check the address. */
|
||||||
if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, octets))
|
if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, octets))
|
||||||
@ -1369,7 +1384,9 @@ _bfd_final_link_relocate (reloc_howto_type *howto,
|
|||||||
|
|
||||||
return _bfd_relocate_contents (howto, input_bfd, relocation,
|
return _bfd_relocate_contents (howto, input_bfd, relocation,
|
||||||
contents
|
contents
|
||||||
+ address * bfd_octets_per_byte (input_bfd));
|
+ address
|
||||||
|
* bfd_octets_per_byte (input_bfd,
|
||||||
|
input_section));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Relocate a given location using a given value and howto. */
|
/* Relocate a given location using a given value and howto. */
|
||||||
@ -8346,7 +8363,8 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
|
|||||||
= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
|
= HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
|
||||||
"unused", FALSE, 0, 0, FALSE);
|
"unused", FALSE, 0, 0, FALSE);
|
||||||
|
|
||||||
off = (*parent)->address * bfd_octets_per_byte (input_bfd);
|
off = ((*parent)->address
|
||||||
|
* bfd_octets_per_byte (input_bfd, input_section));
|
||||||
_bfd_clear_contents ((*parent)->howto, input_bfd,
|
_bfd_clear_contents ((*parent)->howto, input_bfd,
|
||||||
input_section, data, off);
|
input_section, data, off);
|
||||||
(*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
(*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
||||||
|
@ -351,6 +351,11 @@ CODE_FRAGMENT
|
|||||||
. {* This section contains vliw code. This is for Toshiba MeP only. *}
|
. {* This section contains vliw code. This is for Toshiba MeP only. *}
|
||||||
.#define SEC_MEP_VLIW 0x20000000
|
.#define SEC_MEP_VLIW 0x20000000
|
||||||
.
|
.
|
||||||
|
. {* All symbols, sizes and relocations in this section are octets
|
||||||
|
. instead of bytes. Required for DWARF debug sections as DWARF
|
||||||
|
. information is organized in octets, not bytes. *}
|
||||||
|
.#define SEC_ELF_OCTETS 0x40000000
|
||||||
|
.
|
||||||
. {* Indicate that section has the no read flag set. This happens
|
. {* Indicate that section has the no read flag set. This happens
|
||||||
. when memory read flag isn't set. *}
|
. when memory read flag isn't set. *}
|
||||||
.#define SEC_COFF_NOREAD 0x40000000
|
.#define SEC_COFF_NOREAD 0x40000000
|
||||||
|
@ -885,7 +885,7 @@ srec_set_section_contents (bfd *abfd,
|
|||||||
file_ptr offset,
|
file_ptr offset,
|
||||||
bfd_size_type bytes_to_do)
|
bfd_size_type bytes_to_do)
|
||||||
{
|
{
|
||||||
int opb = bfd_octets_per_byte (abfd);
|
int opb = bfd_octets_per_byte (abfd, NULL);
|
||||||
tdata_type *tdata = abfd->tdata.srec_data;
|
tdata_type *tdata = abfd->tdata.srec_data;
|
||||||
srec_data_list_type *entry;
|
srec_data_list_type *entry;
|
||||||
|
|
||||||
@ -1053,7 +1053,8 @@ srec_write_section (bfd *abfd,
|
|||||||
if (octets_this_chunk > _bfd_srec_len)
|
if (octets_this_chunk > _bfd_srec_len)
|
||||||
octets_this_chunk = _bfd_srec_len;
|
octets_this_chunk = _bfd_srec_len;
|
||||||
|
|
||||||
address = list->where + octets_written / bfd_octets_per_byte (abfd);
|
address = list->where + (octets_written
|
||||||
|
/ bfd_octets_per_byte (abfd, NULL));
|
||||||
|
|
||||||
if (! srec_write_record (abfd,
|
if (! srec_write_record (abfd,
|
||||||
tdata->type,
|
tdata->type,
|
||||||
|
@ -1090,7 +1090,8 @@ _bfd_stab_section_find_nearest_line (bfd *abfd,
|
|||||||
|| r->howto->pc_relative
|
|| r->howto->pc_relative
|
||||||
|| r->howto->bitpos != 0
|
|| r->howto->bitpos != 0
|
||||||
|| r->howto->dst_mask != 0xffffffff
|
|| r->howto->dst_mask != 0xffffffff
|
||||||
|| r->address * bfd_octets_per_byte (abfd) + 4 > stabsize)
|
|| (r->address * bfd_octets_per_byte (abfd, NULL) + 4
|
||||||
|
> stabsize))
|
||||||
{
|
{
|
||||||
_bfd_error_handler
|
_bfd_error_handler
|
||||||
(_("unsupported .stab relocation"));
|
(_("unsupported .stab relocation"));
|
||||||
@ -1101,12 +1102,13 @@ _bfd_stab_section_find_nearest_line (bfd *abfd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
val = bfd_get_32 (abfd, info->stabs
|
val = bfd_get_32 (abfd, info->stabs
|
||||||
+ r->address * bfd_octets_per_byte (abfd));
|
+ (r->address
|
||||||
|
* bfd_octets_per_byte (abfd, NULL)));
|
||||||
val &= r->howto->src_mask;
|
val &= r->howto->src_mask;
|
||||||
sym = *r->sym_ptr_ptr;
|
sym = *r->sym_ptr_ptr;
|
||||||
val += sym->value + sym->section->vma + r->addend;
|
val += sym->value + sym->section->vma + r->addend;
|
||||||
bfd_put_32 (abfd, (bfd_vma) val, info->stabs
|
bfd_put_32 (abfd, (bfd_vma) val, info->stabs
|
||||||
+ r->address * bfd_octets_per_byte (abfd));
|
+ r->address * bfd_octets_per_byte (abfd, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
||||||
|
|
||||||
|
* objdump.c (disassemble_data): Provide section parameter to
|
||||||
|
bfd_octets_per_byte.
|
||||||
|
(dump_section): likewise
|
||||||
|
(dump_section_header): likewise. Show SEC_ELF_OCTETS flag if set.
|
||||||
|
|
||||||
2019-11-21 Alan Modra <amodra@gmail.com>
|
2019-11-21 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 273
|
PR 273
|
||||||
|
@ -532,7 +532,7 @@ static void
|
|||||||
dump_section_header (bfd *abfd, asection *section, void *data)
|
dump_section_header (bfd *abfd, asection *section, void *data)
|
||||||
{
|
{
|
||||||
char *comma = "";
|
char *comma = "";
|
||||||
unsigned int opb = bfd_octets_per_byte (abfd);
|
unsigned int opb = bfd_octets_per_byte (abfd, section);
|
||||||
int longest_section_name = *((int *) data);
|
int longest_section_name = *((int *) data);
|
||||||
|
|
||||||
/* Ignore linker created section. See elfNN_ia64_object_p in
|
/* Ignore linker created section. See elfNN_ia64_object_p in
|
||||||
@ -584,7 +584,10 @@ dump_section_header (bfd *abfd, asection *section, void *data)
|
|||||||
PF (SEC_COFF_NOREAD, "NOREAD");
|
PF (SEC_COFF_NOREAD, "NOREAD");
|
||||||
}
|
}
|
||||||
else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||||
PF (SEC_ELF_PURECODE, "PURECODE");
|
{
|
||||||
|
PF (SEC_ELF_OCTETS, "OCTETS");
|
||||||
|
PF (SEC_ELF_PURECODE, "PURECODE");
|
||||||
|
}
|
||||||
PF (SEC_THREAD_LOCAL, "THREAD_LOCAL");
|
PF (SEC_THREAD_LOCAL, "THREAD_LOCAL");
|
||||||
PF (SEC_GROUP, "GROUP");
|
PF (SEC_GROUP, "GROUP");
|
||||||
if (bfd_get_arch (abfd) == bfd_arch_mep)
|
if (bfd_get_arch (abfd) == bfd_arch_mep)
|
||||||
@ -2682,7 +2685,7 @@ disassemble_data (bfd *abfd)
|
|||||||
disasm_info.arch = bfd_get_arch (abfd);
|
disasm_info.arch = bfd_get_arch (abfd);
|
||||||
disasm_info.mach = bfd_get_mach (abfd);
|
disasm_info.mach = bfd_get_mach (abfd);
|
||||||
disasm_info.disassembler_options = disassembler_options;
|
disasm_info.disassembler_options = disassembler_options;
|
||||||
disasm_info.octets_per_byte = bfd_octets_per_byte (abfd);
|
disasm_info.octets_per_byte = bfd_octets_per_byte (abfd, NULL);
|
||||||
disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES;
|
disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES;
|
||||||
disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END;
|
disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END;
|
||||||
disasm_info.disassembler_needs_relocs = FALSE;
|
disasm_info.disassembler_needs_relocs = FALSE;
|
||||||
@ -3459,7 +3462,7 @@ dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED)
|
|||||||
bfd_vma addr_offset;
|
bfd_vma addr_offset;
|
||||||
bfd_vma start_offset;
|
bfd_vma start_offset;
|
||||||
bfd_vma stop_offset;
|
bfd_vma stop_offset;
|
||||||
unsigned int opb = bfd_octets_per_byte (abfd);
|
unsigned int opb = bfd_octets_per_byte (abfd, section);
|
||||||
/* Bytes per line. */
|
/* Bytes per line. */
|
||||||
const int onaline = 16;
|
const int onaline = 16;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
||||||
|
|
||||||
|
* as.h: Define SEC_OCTETS as SEC_ELF_OCTETS if OBJ_ELF.
|
||||||
|
* dwarf2dbg.c: (dwarf2_finish): Set section flag SEC_OCTETS for
|
||||||
|
.debug_line, .debug_info, .debug_abbrev, .debug_aranges, .debug_str
|
||||||
|
and .debug_ranges sections.
|
||||||
|
* write.c (maybe_generate_build_notes): Set section flag
|
||||||
|
SEC_OCTETS for .gnu.build.attributes section.
|
||||||
|
* frags.c (frag_now_fix): Don't divide by OCTETS_PER_BYTE if
|
||||||
|
SEC_OCTETS is set.
|
||||||
|
* symbols.c (resolve_symbol_value): Likewise.
|
||||||
|
|
||||||
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
||||||
|
|
||||||
* dwarf2dbg.c (out_set_addr): Revert 2019-03-13 change.
|
* dwarf2dbg.c (out_set_addr): Revert 2019-03-13 change.
|
||||||
|
7
gas/as.h
7
gas/as.h
@ -649,4 +649,11 @@ COMMON int flag_sectname_subst;
|
|||||||
#error "Octets per byte conflicts with its power-of-two definition!"
|
#error "Octets per byte conflicts with its power-of-two definition!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
|
||||||
|
/* On ELF platforms, mark debug sections with SEC_ELF_OCTETS */
|
||||||
|
#define SEC_OCTETS (IS_ELF ? SEC_ELF_OCTETS : 0)
|
||||||
|
#else
|
||||||
|
#define SEC_OCTETS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* GAS */
|
#endif /* GAS */
|
||||||
|
@ -2215,7 +2215,7 @@ dwarf2_finish (void)
|
|||||||
|
|
||||||
/* Create and switch to the line number section. */
|
/* Create and switch to the line number section. */
|
||||||
line_seg = subseg_new (".debug_line", 0);
|
line_seg = subseg_new (".debug_line", 0);
|
||||||
bfd_set_section_flags (line_seg, SEC_READONLY | SEC_DEBUGGING);
|
bfd_set_section_flags (line_seg, SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
|
||||||
|
|
||||||
/* For each subsection, chain the debug entries together. */
|
/* For each subsection, chain the debug entries together. */
|
||||||
for (s = all_segs; s; s = s->next)
|
for (s = all_segs; s; s = s->next)
|
||||||
@ -2261,11 +2261,15 @@ dwarf2_finish (void)
|
|||||||
aranges_seg = subseg_new (".debug_aranges", 0);
|
aranges_seg = subseg_new (".debug_aranges", 0);
|
||||||
str_seg = subseg_new (".debug_str", 0);
|
str_seg = subseg_new (".debug_str", 0);
|
||||||
|
|
||||||
bfd_set_section_flags (info_seg, SEC_READONLY | SEC_DEBUGGING);
|
bfd_set_section_flags (info_seg,
|
||||||
bfd_set_section_flags (abbrev_seg, SEC_READONLY | SEC_DEBUGGING);
|
SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
|
||||||
bfd_set_section_flags (aranges_seg, SEC_READONLY | SEC_DEBUGGING);
|
bfd_set_section_flags (abbrev_seg,
|
||||||
bfd_set_section_flags (str_seg, (SEC_READONLY | SEC_DEBUGGING
|
SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
|
||||||
| SEC_MERGE | SEC_STRINGS));
|
bfd_set_section_flags (aranges_seg,
|
||||||
|
SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
|
||||||
|
bfd_set_section_flags (str_seg,
|
||||||
|
SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS
|
||||||
|
| SEC_MERGE | SEC_STRINGS);
|
||||||
str_seg->entsize = 1;
|
str_seg->entsize = 1;
|
||||||
|
|
||||||
record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
|
record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
|
||||||
@ -2275,7 +2279,8 @@ dwarf2_finish (void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ranges_seg = subseg_new (".debug_ranges", 0);
|
ranges_seg = subseg_new (".debug_ranges", 0);
|
||||||
bfd_set_section_flags (ranges_seg, SEC_READONLY | SEC_DEBUGGING);
|
bfd_set_section_flags (ranges_seg,
|
||||||
|
SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
|
||||||
record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
|
record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
|
||||||
out_debug_ranges (ranges_seg);
|
out_debug_ranges (ranges_seg);
|
||||||
}
|
}
|
||||||
|
@ -395,7 +395,12 @@ frag_now_fix_octets (void)
|
|||||||
addressT
|
addressT
|
||||||
frag_now_fix (void)
|
frag_now_fix (void)
|
||||||
{
|
{
|
||||||
return frag_now_fix_octets () / OCTETS_PER_BYTE;
|
/* Symbols whose section has SEC_ELF_OCTETS set,
|
||||||
|
resolve to octets instead of target bytes. */
|
||||||
|
if (now_seg->flags & SEC_OCTETS)
|
||||||
|
return frag_now_fix_octets ();
|
||||||
|
else
|
||||||
|
return frag_now_fix_octets () / OCTETS_PER_BYTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1217,7 +1217,13 @@ resolve_symbol_value (symbolS *symp)
|
|||||||
if (local_symbol_resolved_p (locsym))
|
if (local_symbol_resolved_p (locsym))
|
||||||
return final_val;
|
return final_val;
|
||||||
|
|
||||||
final_val += local_symbol_get_frag (locsym)->fr_address / OCTETS_PER_BYTE;
|
/* Symbols whose section has SEC_ELF_OCTETS set,
|
||||||
|
resolve to octets instead of target bytes. */
|
||||||
|
if (locsym->lsy_section->flags & SEC_OCTETS)
|
||||||
|
final_val += local_symbol_get_frag (locsym)->fr_address;
|
||||||
|
else
|
||||||
|
final_val += (local_symbol_get_frag (locsym)->fr_address
|
||||||
|
/ OCTETS_PER_BYTE);
|
||||||
|
|
||||||
if (finalize_syms)
|
if (finalize_syms)
|
||||||
{
|
{
|
||||||
@ -1330,7 +1336,12 @@ resolve_symbol_value (symbolS *symp)
|
|||||||
/* Fall through. */
|
/* Fall through. */
|
||||||
|
|
||||||
case O_constant:
|
case O_constant:
|
||||||
final_val += symp->sy_frag->fr_address / OCTETS_PER_BYTE;
|
/* Symbols whose section has SEC_ELF_OCTETS set,
|
||||||
|
resolve to octets instead of target bytes. */
|
||||||
|
if (symp->bsym->section->flags & SEC_OCTETS)
|
||||||
|
final_val += symp->sy_frag->fr_address;
|
||||||
|
else
|
||||||
|
final_val += symp->sy_frag->fr_address / OCTETS_PER_BYTE;
|
||||||
if (final_seg == expr_section)
|
if (final_seg == expr_section)
|
||||||
final_seg = absolute_section;
|
final_seg = absolute_section;
|
||||||
/* Fall through. */
|
/* Fall through. */
|
||||||
|
@ -1960,7 +1960,8 @@ maybe_generate_build_notes (void)
|
|||||||
/* Create a GNU Build Attribute section. */
|
/* Create a GNU Build Attribute section. */
|
||||||
sec = subseg_new (GNU_BUILD_ATTRS_SECTION_NAME, FALSE);
|
sec = subseg_new (GNU_BUILD_ATTRS_SECTION_NAME, FALSE);
|
||||||
elf_section_type (sec) = SHT_NOTE;
|
elf_section_type (sec) = SHT_NOTE;
|
||||||
bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA);
|
bfd_set_section_flags (sec, (SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA
|
||||||
|
| SEC_OCTETS));
|
||||||
bfd_set_section_alignment (sec, 2);
|
bfd_set_section_alignment (sec, 2);
|
||||||
|
|
||||||
/* Work out the size of the notes that we will create,
|
/* Work out the size of the notes that we will create,
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2019-11-25 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* coff/ti.h (GET_SCNHDR_SIZE, PUT_SCNHDR_SIZE, GET_SCN_SCNLEN),
|
||||||
|
(PUT_SCN_SCNLEN): Adjust bfd_octets_per_byte calls.
|
||||||
|
|
||||||
2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com>
|
2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com>
|
||||||
|
|
||||||
* opcode/arm.h (ARM_EXT2_CRC): New extension feature
|
* opcode/arm.h (ARM_EXT2_CRC): New extension feature
|
||||||
@ -26,7 +31,7 @@
|
|||||||
instructions that do not require special handling.
|
instructions that do not require special handling.
|
||||||
|
|
||||||
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
||||||
2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com>
|
Matthew Malcomson <matthew.malcomson@arm.com>
|
||||||
|
|
||||||
* opcode/arm.h (ARM_EXT2_V8_6A, ARM_AEXT2_V8_6A,
|
* opcode/arm.h (ARM_EXT2_V8_6A, ARM_AEXT2_V8_6A,
|
||||||
ARM_ARCH_V8_6A): New.
|
ARM_ARCH_V8_6A): New.
|
||||||
@ -34,7 +39,7 @@
|
|||||||
(ARM_AEXT2_V8_6A): Include above macro in definition.
|
(ARM_AEXT2_V8_6A): Include above macro in definition.
|
||||||
|
|
||||||
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
||||||
2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com>
|
Matthew Malcomson <matthew.malcomson@arm.com>
|
||||||
|
|
||||||
* opcode/aarch64.h (AARCH64_FEATURE_BFLOAT16): New feature macros.
|
* opcode/aarch64.h (AARCH64_FEATURE_BFLOAT16): New feature macros.
|
||||||
(AARCH64_ARCH_V8_6): Include BFloat16 feature macros.
|
(AARCH64_ARCH_V8_6): Include BFloat16 feature macros.
|
||||||
@ -45,7 +50,7 @@
|
|||||||
instructions to support the movprfx constraint.
|
instructions to support the movprfx constraint.
|
||||||
|
|
||||||
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com>
|
||||||
2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com>
|
Matthew Malcomson <matthew.malcomson@arm.com>
|
||||||
|
|
||||||
* opcode/aarch64.h (AARCH64_FEATURE_V8_6): New.
|
* opcode/aarch64.h (AARCH64_FEATURE_V8_6): New.
|
||||||
(AARCH64_ARCH_V8_6): New.
|
(AARCH64_ARCH_V8_6): New.
|
||||||
|
@ -313,9 +313,9 @@ struct external_scnhdr {
|
|||||||
/* TI COFF stores section size as number of bytes (address units, not octets),
|
/* TI COFF stores section size as number of bytes (address units, not octets),
|
||||||
so adjust to be number of octets, which is what BFD expects */
|
so adjust to be number of octets, which is what BFD expects */
|
||||||
#define GET_SCNHDR_SIZE(ABFD, SZP) \
|
#define GET_SCNHDR_SIZE(ABFD, SZP) \
|
||||||
(H_GET_32 (ABFD, SZP) * bfd_octets_per_byte (ABFD))
|
(H_GET_32 (ABFD, SZP) * bfd_octets_per_byte (ABFD, NULL))
|
||||||
#define PUT_SCNHDR_SIZE(ABFD, SZ, SZP) \
|
#define PUT_SCNHDR_SIZE(ABFD, SZ, SZP) \
|
||||||
H_PUT_32 (ABFD, (SZ) / bfd_octets_per_byte (ABFD), SZP)
|
H_PUT_32 (ABFD, (SZ) / bfd_octets_per_byte (ABFD, NULL), SZP)
|
||||||
|
|
||||||
#define COFF_ADJUST_SCNHDR_IN_POST(ABFD, EXT, INT) \
|
#define COFF_ADJUST_SCNHDR_IN_POST(ABFD, EXT, INT) \
|
||||||
do \
|
do \
|
||||||
@ -471,9 +471,9 @@ union external_auxent {
|
|||||||
|
|
||||||
/* section lengths are in target bytes (not host bytes) */
|
/* section lengths are in target bytes (not host bytes) */
|
||||||
#define GET_SCN_SCNLEN(ABFD, EXT) \
|
#define GET_SCN_SCNLEN(ABFD, EXT) \
|
||||||
(H_GET_32 (ABFD, (EXT)->x_scn.x_scnlen) * bfd_octets_per_byte (ABFD))
|
(H_GET_32 (ABFD, (EXT)->x_scn.x_scnlen) * bfd_octets_per_byte (ABFD, NULL))
|
||||||
#define PUT_SCN_SCNLEN(ABFD, INT, EXT) \
|
#define PUT_SCN_SCNLEN(ABFD, INT, EXT) \
|
||||||
H_PUT_32 (ABFD, (INT) / bfd_octets_per_byte (ABFD), (EXT)->x_scn.x_scnlen)
|
H_PUT_32 (ABFD, (INT) / bfd_octets_per_byte (ABFD, NULL), (EXT)->x_scn.x_scnlen)
|
||||||
|
|
||||||
/* lnsz size is in bits in COFF file, in bytes in BFD */
|
/* lnsz size is in bits in COFF file, in bytes in BFD */
|
||||||
#define GET_LNSZ_SIZE(abfd, ext) \
|
#define GET_LNSZ_SIZE(abfd, ext) \
|
||||||
|
15
ld/ChangeLog
15
ld/ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
2019-11-25 Christian Eggers <ceggers@gmx.de>
|
||||||
|
|
||||||
|
* ldexp.c (fold_name): Provide section parameter to
|
||||||
|
bfd_octets_per_byte.
|
||||||
|
* ldlang (init_opb): New argument s. Set opb_shift to 0 if
|
||||||
|
SEC_ELF_OCTETS for the current section is set.
|
||||||
|
(print_input_section): Pass current section to init_opb.
|
||||||
|
(print_data_statement,print_reloc_statement,
|
||||||
|
print_padding_statement): Likewise.
|
||||||
|
(lang_check_section_addresses): Call init_opb for each
|
||||||
|
section.
|
||||||
|
(lang_size_sections_1,lang_size_sections_1,
|
||||||
|
lang_do_assignments_1): Likewise.
|
||||||
|
(lang_process): Pass NULL to init_opb.
|
||||||
|
|
||||||
2019-11-22 Nick Clifton <nickc@redhat.com>
|
2019-11-22 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* ld.texi (Output Section Discarding): Add note indicating that
|
* ld.texi (Output Section Discarding): Add note indicating that
|
||||||
|
@ -852,7 +852,7 @@ fold_name (etree_type *tree)
|
|||||||
|
|
||||||
if (tree->type.node_code == SIZEOF)
|
if (tree->type.node_code == SIZEOF)
|
||||||
val = (os->bfd_section->size
|
val = (os->bfd_section->size
|
||||||
/ bfd_octets_per_byte (link_info.output_bfd));
|
/ bfd_octets_per_byte (link_info.output_bfd, NULL));
|
||||||
else
|
else
|
||||||
val = (bfd_vma)1 << os->bfd_section->alignment_power;
|
val = (bfd_vma)1 << os->bfd_section->alignment_power;
|
||||||
|
|
||||||
|
23
ld/ldlang.c
23
ld/ldlang.c
@ -3440,10 +3440,17 @@ ldlang_open_output (lang_statement_union_type *statement)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_opb (void)
|
init_opb (asection *s)
|
||||||
{
|
{
|
||||||
unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
|
unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
|
||||||
ldfile_output_machine);
|
ldfile_output_machine);
|
||||||
|
if (s != NULL)
|
||||||
|
{
|
||||||
|
if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
|
||||||
|
&& (s->flags & SEC_ELF_OCTETS))
|
||||||
|
x = 1;
|
||||||
|
}
|
||||||
|
|
||||||
opb_shift = 0;
|
opb_shift = 0;
|
||||||
if (x > 1)
|
if (x > 1)
|
||||||
while ((x & 1) == 0)
|
while ((x & 1) == 0)
|
||||||
@ -4626,7 +4633,7 @@ print_input_section (asection *i, bfd_boolean is_discarded)
|
|||||||
int len;
|
int len;
|
||||||
bfd_vma addr;
|
bfd_vma addr;
|
||||||
|
|
||||||
init_opb ();
|
init_opb (i);
|
||||||
|
|
||||||
print_space ();
|
print_space ();
|
||||||
minfo ("%s", i->name);
|
minfo ("%s", i->name);
|
||||||
@ -4707,7 +4714,7 @@ print_data_statement (lang_data_statement_type *data)
|
|||||||
bfd_size_type size;
|
bfd_size_type size;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
init_opb ();
|
init_opb (data->output_section);
|
||||||
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
||||||
print_space ();
|
print_space ();
|
||||||
|
|
||||||
@ -4776,7 +4783,7 @@ print_reloc_statement (lang_reloc_statement_type *reloc)
|
|||||||
bfd_vma addr;
|
bfd_vma addr;
|
||||||
bfd_size_type size;
|
bfd_size_type size;
|
||||||
|
|
||||||
init_opb ();
|
init_opb (reloc->output_section);
|
||||||
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
||||||
print_space ();
|
print_space ();
|
||||||
|
|
||||||
@ -4806,7 +4813,7 @@ print_padding_statement (lang_padding_statement_type *s)
|
|||||||
int len;
|
int len;
|
||||||
bfd_vma addr;
|
bfd_vma addr;
|
||||||
|
|
||||||
init_opb ();
|
init_opb (s->output_section);
|
||||||
minfo (" *fill*");
|
minfo (" *fill*");
|
||||||
|
|
||||||
len = sizeof " *fill*" - 1;
|
len = sizeof " *fill*" - 1;
|
||||||
@ -5276,6 +5283,7 @@ lang_check_section_addresses (void)
|
|||||||
for (p = NULL, i = 0; i < count; i++)
|
for (p = NULL, i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
s = sections[i].sec;
|
s = sections[i].sec;
|
||||||
|
init_opb (s);
|
||||||
if ((s->flags & SEC_LOAD) != 0)
|
if ((s->flags & SEC_LOAD) != 0)
|
||||||
{
|
{
|
||||||
s_start = s->lma;
|
s_start = s->lma;
|
||||||
@ -5326,6 +5334,7 @@ lang_check_section_addresses (void)
|
|||||||
for (p = NULL, i = 0; i < count; i++)
|
for (p = NULL, i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
s = sections[i].sec;
|
s = sections[i].sec;
|
||||||
|
init_opb (s);
|
||||||
s_start = s->vma;
|
s_start = s->vma;
|
||||||
s_end = s_start + TO_ADDR (s->size) - 1;
|
s_end = s_start + TO_ADDR (s->size) - 1;
|
||||||
|
|
||||||
@ -5450,6 +5459,7 @@ lang_size_sections_1
|
|||||||
int section_alignment = 0;
|
int section_alignment = 0;
|
||||||
|
|
||||||
os = &s->output_section_statement;
|
os = &s->output_section_statement;
|
||||||
|
init_opb (os->bfd_section);
|
||||||
if (os->constraint == -1)
|
if (os->constraint == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -6191,6 +6201,7 @@ lang_do_assignments_1 (lang_statement_union_type *s,
|
|||||||
|
|
||||||
os = &(s->output_section_statement);
|
os = &(s->output_section_statement);
|
||||||
os->after_end = *found_end;
|
os->after_end = *found_end;
|
||||||
|
init_opb (os->bfd_section);
|
||||||
if (os->bfd_section != NULL && !os->ignored)
|
if (os->bfd_section != NULL && !os->ignored)
|
||||||
{
|
{
|
||||||
if ((os->bfd_section->flags & SEC_ALLOC) != 0)
|
if ((os->bfd_section->flags & SEC_ALLOC) != 0)
|
||||||
@ -7622,7 +7633,7 @@ lang_process (void)
|
|||||||
|
|
||||||
/* Open the output file. */
|
/* Open the output file. */
|
||||||
lang_for_each_statement (ldlang_open_output);
|
lang_for_each_statement (ldlang_open_output);
|
||||||
init_opb ();
|
init_opb (NULL);
|
||||||
|
|
||||||
ldemul_create_output_section_statements ();
|
ldemul_create_output_section_statements ();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user