This commit was generated by cvs2svn to compensate for changes in r99461,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
David E. O'Brien 2002-07-05 20:16:34 +00:00
commit 95cd50e6d7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=99462
96 changed files with 13355 additions and 3172 deletions

View File

@ -1,3 +1,311 @@
2002-05-14 Daniel Jacobowitz <drow@mvista.com>
* configure.in: Set is_release=y for 2.12.1 release.
* configure: Likewise.
2002-05-13 David Edelsohn <edelsohn@gnu.org>
* configure.in: Auto-configure HAVE_ST_C_IMPL.
* configure: Regenerate.
* config.in: Regenerate.
* rs6000-core.c (CNEW_IMPL): Guard use of c_impl with HAVE_ST_C_IMPL
or AIX_5_CORE.
2002-05-11 Daniel Jacobowitz <drow@mvista.com>
Merge from mainline (to elf32-mips.c):
2002-05-03 H.J. Lu (hjl@gnu.org)
* elfxx-mips.c (mips_elf_link_hash_entry): Add forced_local.
(mips_elf_link_hash_newfunc): Initialize forced_local to false.
(mips_elf_record_global_got_symbol): Call _bfd_mips_elf_hide_symbol
to hide a global symbol.
(_bfd_mips_elf_hide_symbol): Return if forced_local is true. Set
forced_local to true.
2002-05-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
Daniel Jacobowitz <drow@mvista.com>
* coff-sh.c (sh_reloc_map): Map to R_SH_IMM32 for non-PE. Don't
map BFD_RELOC_RVA.
2002-05-09 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (RA_REGISTER_MASK, RA_REGISTER_SHIFT): Delete.
Merge from mainline
2002-05-08 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_create_got): New function.
(ppc_elf_create_dynamic_sections): Call ppc_elf_create_got before
_bfd_elf_create_dynamic_sections. Correct .plt flags.
(ppc_elf_check_relocs): Use ppc_elf_create_got in place of
_bfd_elf_create_got_section.
2002-05-07 Alan Modra <amodra@bigpond.net.au>
* elf-bfd.h (struct elf_backend_data): Add rela_normal.
* elfxx-target.h (elf_backend_rela_normal): Define.
(elfNN_bed): Init rela_normal.
* elflink.h (elf_link_input_bfd <emit_relocs>): Handle adjustment
for section symbols here if rela_normal. Simplify abs section test.
* elf-m10200.c (mn10200_elf_relocate_section): If relocatable,
return immediately. Remove code handling relocatable linking.
* elf-m10300.c (mn10300_elf_relocate_section): Likewise.
* elf32-fr30.c (fr30_elf_relocate_section): Likewise.
* elf32-i370.c (i370_elf_relocate_section): Likewise.
* elf32-i860.c (elf32_i860_relocate_section): Likewise.
* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
* elf32-mcore.c (mcore_elf_relocate_section): Likewise.
* elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
* elf32-s390.c (elf_s390_relocate_section): Likewise.
* elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
* elf64-s390.c (elf_s390_relocate_section): Likewise.
* elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
* elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
* elf32-arm.h (elf32_arm_relocate_section): Likewise #ifndef USE_REL.
* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
* elf-m10200.c (elf_backend_rela_normal): Define.
* elf-m10300.c (elf_backend_rela_normal): Define.
* elf32-fr30.c (elf_backend_rela_normal): Define.
* elf32-i370.c (elf_backend_rela_normal): Define.
* elf32-i860.c (elf_backend_rela_normal): Define.
* elf32-m68k.c (elf_backend_rela_normal): Define.
* elf32-mcore.c (elf_backend_rela_normal): Define.
* elf32-openrisc.c (elf_backend_rela_normal): Define.
* elf32-ppc.c (elf_backend_rela_normal): Define.
* elf32-s390.c (elf_backend_rela_normal): Define.
* elf32-xstormy16.c (elf_backend_rela_normal): Define.
* elf64-ppc.c (elf_backend_rela_normal): Define.
* elf64-s390.c (elf_backend_rela_normal): Define.
* elf64-x86-64.c (elf_backend_rela_normal): Define.
* elfxx-ia64.c (elf_backend_rela_normal): Define.
* elf32-arm.h (elf_backend_rela_normal): Define #ifndef USE_REL.
* elf32-m32r.c (elf_backend_rela_normal): Likewise.
2002-05-06 Alan Modra <amodra@bigpond.net.au>
* elflink.h (elf_link_input_bfd <emit_relocs>): Adjust r_offset
when not relocatable. Fix reloc_emitter call for K&R.
2002-05-04 Alan Modra <amodra@bigpond.net.au>
* dwarf2.c (struct line_head): Make prologue_length a bfd_vma.
(read_abbrevs): Change "offset" param to bfd_vma.
(parse_comp_unit): Change "version" and addr_size to unsigned ints.
Change "abbrev_offset" to bfd_vma.
(read_indirect_string): Use correct conversion chars in error
message format string, cast bfd_vma's to unsigned long.
(read_abbrevs): Likewise.
(read_attribute_value): Likewise.
(decode_line_info): Likewise.
(scan_unit_for_functions): Likewise.
(parse_comp_unit): Likewise.
2002-05-04 Bob Byrnes <byrnes@curl.com>
* opncls.c (_bfd_new_bfd_contained_in): Check return value of
_bfd_new_bfd.
2002-05-02 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (ppc64_elf_howto_raw <R_PPC64_SECTOFF>): Change to a
16 bit reloc.
<R_PPC64_SECTOFF_DS>: Likewise.
(ppc64_elf_reloc_type_lookup): Map from BFD_RELOC_16_BASEREL to
SECTOFF reloc.
* elf32-ppc.c (ppc_elf_howto_raw <R_PPC_SECTOFF>): Correct.
(ppc_elf_reloc_type_lookup): Map from BFD_RELOC_16_BASEREL to
SECTOFF reloc.
* elf64-ppc.c (ppc64_elf_addr16_ha_reloc): Delete.
(ppc64_elf_ha_reloc): New function.
(ppc64_elf_brtaken_reloc): New function.
(ppc64_elf_sectoff_reloc): New function.
(ppc64_elf_sectoff_ha_reloc): New function.
(ppc64_elf_toc_reloc): New function.
(ppc64_elf_toc_ha_reloc): New function.
(ppc64_elf_toc64_reloc): New function.
(ppc64_elf_unhandled_reloc): New function.
(ppc64_elf_howto_raw): Use the above.
<R_PPC64_RELATIVE>: Mark pc_relative, pcrel_offset.
<R_PPC64_SECTOFF>: Not pc_relative or pcrel_offset. Fix dst_mask.
<R_PPC64_SECTOFF_DS>: Likewise.
(IS_ABSOLUTE_RELOC): Update.
(struct ppc_link_hash_table): Add have_undefweak.
(ppc64_elf_link_hash_table_create): Init.
(func_desc_adjust): Set have_undefweak.
(ppc64_elf_func_desc_adjust): Call func_desc_adjust earlier. Only
add the .sfpr blr when have_undefweak.
(ppc64_elf_set_toc): Rename to ppc64_elf_toc, remove info param
and relocatable test. Return TOCstart and don't set elf_gp.
(ppc64_elf_relocate_section): Correct BRTAKEN/BRNTAKEN branch
offset calculation. Add assert on weak sym branch tweaks.
* elf64-ppc.h (ppc64_elf_set_toc): Delete.
(ppc64_elf_toc): Declare.
2002-05-01 Alan Modra <amodra@bigpond.net.au>
* syms.c (_bfd_stab_section_find_nearest_line): Don't bomb on NULL
file_name.
2002-05-01 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (CROR_151515, CROR_313131): Define.
(ppc64_elf_relocate_section): Use them. Don't look for plt calls
on R_PPC64_ADDR24 relocs. Require a nop or no link reg on plt
call branches. Correct undefined weak destination.
(ppc64_elf_func_desc_adjust): Always create at least one blr in
.sfpr, and correct case where either only savef* or restf* is
needed.
2002-04-09 DJ Delorie <dj@redhat.com>
* elfarm-nabi.c (elf32_arm_howto_table): Fix ABS16 masks.
2002-05-06 Nick Clifton <nickc@cambridge.redhat.com>
* elf32-arm.h (elf32_arm_final_link_relocate): Convert
'reloc_signed_max' and 'reloc_signed_min' into half-word offsets.
2002-05-02 Richard Henderson <rth@redhat.com>
* elf64-alpha.c (elf64_alpha_relocate_section): Force relative relocs
vs SHN_UNDEF to zero.
2002-04-27 Alan Modra <amodra@bigpond.net.au>
Merge from mainline
2002-04-12 Alan Modra <amodra@bigpond.net.au>
* elf.c (prep_headers): Don't zero EI_OSABI, EI_ABIVERSION or
header pad.
2002-02-21 Andreas Jaeger <aj@suse.de>
* elf64-x86-64.c: Major rework that introduces all recent changes
to the x86-64 backend. Get a closer match to elf32-i386.
(struct elf64_x86_64_dyn_relocs): Rename from
elf64_x86_64_pcrel_relocs_copied, add additional fields. Change
all users.
(struct elf64_x86_64_link_hash_table): Add short cuts to some
sections.
(link_hash_newfunc): Rename from elf64_x86_64_link_hash_newfunc,
remove casts, initialize new hash members.
(create_got_section): New.
(elf64_x86_64_create_dynamic_sections): New.
(elf64_x86_64_copy_indirect_symbol): New.
(elf64_x86_64_check_relocs): Don't allocate space for dynamic
relocs, .got or .relgot here but do it in allocate_dynrelocs.
Reference count possible .plt and .got entries. Don't test input
section SEC_READONLY here to try to avoid copy relocs, and keep
dyn_relocs regardless of ELF_LINK_NON_GOT_REF. Don't set
DF_TEXTREL here. Delay setting of variables until needed. Cache
pointer to "sreloc" section in elf_section_data. Tweak condition
under which .got created. Report files with bad relocation
section names.
(elf64_x86_64_gc_sweep_hook): Sweep dyn_relocs and local_dynrel.
Reference count possible .plt entries. Don't deallocate .got and
.relgot space here.
(elf64_x86_64_adjust_dynamic_symbol): Handle nocopyreloc. Don't
do copy reloc processing for weakdefs. Remove redundant casts and
aborts. Delay setting of vars until needed. Move creation of
dynamic symbols and allocation of .plt and .rela.plt to
allocate_dynrelocs. Replace BFD_ASSERT with abort.
(WILL_CALL_FINISH_DYNAMIC_SYMBOL): New.
(allocate_dynrelocs): New.
(readonly_dynrelocs): New.
(elf64_x86_64_size_dynamic_sections): Call readonly_dynrelocs.
Allocate space for dyn relocs. Replace BFD_ASSERT with abort.
Zero out the dynamic allocated content space.
(elf64_x86_64_discard_copies): Removed.
(elf64_x86_64_relocate_section): Make use of dynamic section
short-cuts. Localise vars, and delay setting. Better error
reporting, replace BFD_ASSERT with abort. Check
ELF_LINK_HASH_DEF_DYNAMIC to see if a symbol is not defined in the
regular object file and tread the weak definition as the normal
one. Don't discard relocs for undefweak or undefined symbols and
check !DEF_REGULAR as well as DEF_DYNAMIC in test for avoided copy
relocs.
(elf64_x86_64_finish_dynamic_symbol): Don't copy relocs for
symbols that have been forced local. Use same test to decide if
we can use a relative reloc for got as relocate_section. Expand
SHN_UNDEF comment. Move expressions out of function calls.
Replace BFD_ASSERT with abort.
(bfd_elf64_bfd_final_link): Removed.
(elf_backend_copy_indirect_symbol): Define.
* reloc.c: Move sh relocs to where they belong.
* libbfd.h, bfd-in2.h: Regenerate.
Merge from mainline
2002-04-26 Alan Modra <amodra@bigpond.net.au>
* opncls.c (bfd_make_readable): Call bfd_section_list_clear.
* xcofflink.c (xcoff_link_add_dynamic_symbols): Likewise.
* elflink.h (elf_bfd_final_link): Ensure input bfd class is the
same as the output before calling elf_link_input_bfd.
* coffcode.h (coff_compute_section_file_positions): Set
section_tail after shuffling section list.
2002-04-23 Alan Modra <amodra@bigpond.net.au>
* elf32-hppa.c (hppa_type_of_stub): Correct and simplify condition
under which a plt call stub is used.
(final_link_relocate): Similarly.
(allocate_plt_static): Clear h-plabel except when plt entry is
exclusively used for a plabel.
(allocate_dynrelocs): Use the above to simplify plt sizing.
(struct elf32_hppa_link_hash_table): Add has_22bit_branch.
(elf32_hppa_link_hash_table_create): Init.
(BL22_RP): Define.
(hppa_build_one_stub): Use BL22_RP if has_22bit_branch.
(elf32_hppa_check_relocs): Set has_22bit_branch.
* elf32-hppa.c (elf32_hppa_check_relocs): Remove debug message.
(final_link_relocate): Likewise.
2002-04-20 Alan Modra <amodra@bigpond.net.au>
* archures.c (bfd_arch_info): Add comment on list order.
(bfd_default_set_arch_mach): Use bfd_lookup_arch.
* cpu-powerpc.c (bfd_powerpc_archs): Re-order so that the default
is always at head of list.
* bfd-in2.h: Regenerate.
2002-04-16 Alan Modra <amodra@bigpond.net.au>
* elf32-m32r.c (m32r_elf_add_symbol_hook): Check the hash table
type rather than just assuming entries are ELF.
* elf32-sh64.c (sh64_elf_add_symbol_hook): Likewise.
* elf64-sh64.c (sh64_elf64_add_symbol_hook): Likewise.
* elf64-sparc.c (sparc64_elf_add_symbol_hook): Likewise.
* elf64-mmix.c (mmix_elf_add_symbol_hook): Use bfd_link_hash_entry
rather than elf_link_hash_entry.
2002-04-15 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_add_symbol_hook): Check the hash table type.
2002-04-08 Randolph Chung <tausq@debian.org>
* elf32-hppa.c (hppa_unwind_entry_compare): Move to elf-hppa.h.
(elf32_hppa_final_link): Split out sorting logic to..
* elf-hppa.h (elf_hppa_sort_unwind): ..here.
(elf_hppa_final_link): Call elf_hppa_sort_unwind.
2002-04-26 Richard Smith <richard@ex-parrot.com>
Jakub Jelinek <jakub@redhat.com>
* elf-eh-frame.c (struct eh_cie_fde): Add per_encoding_relative.
(_bfd_elf_discard_section_eh_frame): Set it for CIEs with pcrel
encoded personality.
(_bfd_elf_write_section_eh_frame): Adjust pcrel encoded personality
for CIE/FDE removal.
2002-04-26 Jakub Jelinek <jakub@redhat.com>
* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't build
search table if some FDE is DW_EH_PE_aligned encoded either.
(_bfd_elf_write_section_eh_frame): Handle terminating FDE specially.
2002-04-18 Nick Clifton <nickc@cambridge.redhat.com>
* coff-arm.c (coff_thumb_pcrel_12, coff_thumb_pcrel_9,
insert_thumb_branch, record_thumb_to_arm_glue): Suppress
definition of these functions for ARM_WINCE builds as they are
not used.
(SWAP_IN_RELOC_OFFSET, SWAP_OUT_RELOC_OFFSET): Do not define
for ARM_WINCE builds.
2002-04-16 Nick Clifton <nickc@cambridge.redhat.com>
* ihex.c (ihex_write_object_contents): Fix check for records
crossing 64K boundaries.
2002-04-06 Hans-Peter Nilsson <hp@axis.com>
* elf32-cris.c (cris_elf_howto_table) <R_CRIS_16_PCREL,

View File

@ -6887,7 +6887,7 @@ Tue May 24 16:17:18 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* libelf.h (struct elf_obj_tdata): Add new field bad_symtab.
(elf_bad_symtab): Define new accessor macro.
(_bfd_elf_link_hash_newfunc): Declare.
(_bew_elf_link_hash_table_init): Declare.
(_bfd_elf_link_hash_table_init): Declare.
* elfcode.h (elf_object_p): Call backend object_p hook after
swapping in all the section headers.
(map_program_segments): Correct typo: Internal for External.

View File

@ -288,7 +288,9 @@ DESCRIPTION
. const char *arch_name;
. const char *printable_name;
. unsigned int section_align_power;
. {* True if this is the default machine for the architecture. *}
. {* True if this is the default machine for the architecture.
. The default arch should be the first entry for an arch so that
. all the entries for that arch can be accessed via <<next>>. *}
. boolean the_default;
. const struct bfd_arch_info * (*compatible)
. PARAMS ((const struct bfd_arch_info *a,
@ -604,21 +606,9 @@ bfd_default_set_arch_mach (abfd, arch, mach)
enum bfd_architecture arch;
unsigned long mach;
{
const bfd_arch_info_type * const *app, *ap;
for (app = bfd_archures_list; *app != NULL; app++)
{
for (ap = *app; ap != NULL; ap = ap->next)
{
if (ap->arch == arch
&& (ap->mach == mach
|| (mach == 0 && ap->the_default)))
{
abfd->arch_info = ap;
return true;
}
}
}
abfd->arch_info = bfd_lookup_arch (arch, mach);
if (abfd->arch_info != NULL)
return true;
abfd->arch_info = &bfd_default_arch_struct;
bfd_set_error (bfd_error_bad_value);

View File

@ -1657,7 +1657,9 @@ typedef struct bfd_arch_info
const char *arch_name;
const char *printable_name;
unsigned int section_align_power;
/* True if this is the default machine for the architecture. */
/* True if this is the default machine for the architecture.
The default arch should be the first entry for an arch so that
all the entries for that arch can be accessed via <<next>>. */
boolean the_default;
const struct bfd_arch_info * (*compatible)
PARAMS ((const struct bfd_arch_info *a,
@ -2194,55 +2196,6 @@ to compensate for the borrow when the low bits are added. */
BFD_RELOC_MIPS_REL16,
BFD_RELOC_MIPS_RELGOT,
BFD_RELOC_MIPS_JALR,
BFD_RELOC_SH_GOT_LOW16,
BFD_RELOC_SH_GOT_MEDLOW16,
BFD_RELOC_SH_GOT_MEDHI16,
BFD_RELOC_SH_GOT_HI16,
BFD_RELOC_SH_GOTPLT_LOW16,
BFD_RELOC_SH_GOTPLT_MEDLOW16,
BFD_RELOC_SH_GOTPLT_MEDHI16,
BFD_RELOC_SH_GOTPLT_HI16,
BFD_RELOC_SH_PLT_LOW16,
BFD_RELOC_SH_PLT_MEDLOW16,
BFD_RELOC_SH_PLT_MEDHI16,
BFD_RELOC_SH_PLT_HI16,
BFD_RELOC_SH_GOTOFF_LOW16,
BFD_RELOC_SH_GOTOFF_MEDLOW16,
BFD_RELOC_SH_GOTOFF_MEDHI16,
BFD_RELOC_SH_GOTOFF_HI16,
BFD_RELOC_SH_GOTPC_LOW16,
BFD_RELOC_SH_GOTPC_MEDLOW16,
BFD_RELOC_SH_GOTPC_MEDHI16,
BFD_RELOC_SH_GOTPC_HI16,
BFD_RELOC_SH_COPY64,
BFD_RELOC_SH_GLOB_DAT64,
BFD_RELOC_SH_JMP_SLOT64,
BFD_RELOC_SH_RELATIVE64,
BFD_RELOC_SH_GOT10BY4,
BFD_RELOC_SH_GOT10BY8,
BFD_RELOC_SH_GOTPLT10BY4,
BFD_RELOC_SH_GOTPLT10BY8,
BFD_RELOC_SH_GOTPLT32,
BFD_RELOC_SH_SHMEDIA_CODE,
BFD_RELOC_SH_IMMU5,
BFD_RELOC_SH_IMMS6,
BFD_RELOC_SH_IMMS6BY32,
BFD_RELOC_SH_IMMU6,
BFD_RELOC_SH_IMMS10,
BFD_RELOC_SH_IMMS10BY2,
BFD_RELOC_SH_IMMS10BY4,
BFD_RELOC_SH_IMMS10BY8,
BFD_RELOC_SH_IMMS16,
BFD_RELOC_SH_IMMU16,
BFD_RELOC_SH_IMM_LOW16,
BFD_RELOC_SH_IMM_LOW16_PCREL,
BFD_RELOC_SH_IMM_MEDLOW16,
BFD_RELOC_SH_IMM_MEDLOW16_PCREL,
BFD_RELOC_SH_IMM_MEDHI16,
BFD_RELOC_SH_IMM_MEDHI16_PCREL,
BFD_RELOC_SH_IMM_HI16,
BFD_RELOC_SH_IMM_HI16_PCREL,
BFD_RELOC_SH_PT_16,
/* i386/elf relocations */
@ -2423,6 +2376,55 @@ field in the instruction. */
BFD_RELOC_SH_JMP_SLOT,
BFD_RELOC_SH_RELATIVE,
BFD_RELOC_SH_GOTPC,
BFD_RELOC_SH_GOT_LOW16,
BFD_RELOC_SH_GOT_MEDLOW16,
BFD_RELOC_SH_GOT_MEDHI16,
BFD_RELOC_SH_GOT_HI16,
BFD_RELOC_SH_GOTPLT_LOW16,
BFD_RELOC_SH_GOTPLT_MEDLOW16,
BFD_RELOC_SH_GOTPLT_MEDHI16,
BFD_RELOC_SH_GOTPLT_HI16,
BFD_RELOC_SH_PLT_LOW16,
BFD_RELOC_SH_PLT_MEDLOW16,
BFD_RELOC_SH_PLT_MEDHI16,
BFD_RELOC_SH_PLT_HI16,
BFD_RELOC_SH_GOTOFF_LOW16,
BFD_RELOC_SH_GOTOFF_MEDLOW16,
BFD_RELOC_SH_GOTOFF_MEDHI16,
BFD_RELOC_SH_GOTOFF_HI16,
BFD_RELOC_SH_GOTPC_LOW16,
BFD_RELOC_SH_GOTPC_MEDLOW16,
BFD_RELOC_SH_GOTPC_MEDHI16,
BFD_RELOC_SH_GOTPC_HI16,
BFD_RELOC_SH_COPY64,
BFD_RELOC_SH_GLOB_DAT64,
BFD_RELOC_SH_JMP_SLOT64,
BFD_RELOC_SH_RELATIVE64,
BFD_RELOC_SH_GOT10BY4,
BFD_RELOC_SH_GOT10BY8,
BFD_RELOC_SH_GOTPLT10BY4,
BFD_RELOC_SH_GOTPLT10BY8,
BFD_RELOC_SH_GOTPLT32,
BFD_RELOC_SH_SHMEDIA_CODE,
BFD_RELOC_SH_IMMU5,
BFD_RELOC_SH_IMMS6,
BFD_RELOC_SH_IMMS6BY32,
BFD_RELOC_SH_IMMU6,
BFD_RELOC_SH_IMMS10,
BFD_RELOC_SH_IMMS10BY2,
BFD_RELOC_SH_IMMS10BY4,
BFD_RELOC_SH_IMMS10BY8,
BFD_RELOC_SH_IMMS16,
BFD_RELOC_SH_IMMU16,
BFD_RELOC_SH_IMM_LOW16,
BFD_RELOC_SH_IMM_LOW16_PCREL,
BFD_RELOC_SH_IMM_MEDLOW16,
BFD_RELOC_SH_IMM_MEDLOW16_PCREL,
BFD_RELOC_SH_IMM_MEDHI16,
BFD_RELOC_SH_IMM_MEDHI16_PCREL,
BFD_RELOC_SH_IMM_HI16,
BFD_RELOC_SH_IMM_HI16_PCREL,
BFD_RELOC_SH_PT_16,
/* Thumb 23-, 12- and 9-bit pc-relative branches. The lowest bit must
be zero and is not stored in the instruction. */

View File

@ -87,12 +87,16 @@ static bfd_reloc_status_type aoutarm_fix_pcrel_26_done
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static bfd_reloc_status_type aoutarm_fix_pcrel_26
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
#ifndef ARM_WINCE
static bfd_reloc_status_type coff_thumb_pcrel_23
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static bfd_reloc_status_type coff_thumb_pcrel_12
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static bfd_reloc_status_type coff_thumb_pcrel_9
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static insn32 insert_thumb_branch
PARAMS ((insn32, int));
#endif
static bfd_reloc_status_type coff_thumb_pcrel_12
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static bfd_reloc_status_type coff_arm_reloc
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static boolean coff_arm_adjust_symndx
@ -109,8 +113,6 @@ static const struct reloc_howto_struct * coff_arm_reloc_type_lookup
PARAMS ((bfd *, bfd_reloc_code_real_type));
static struct bfd_link_hash_table * coff_arm_link_hash_table_create
PARAMS ((bfd *));
static insn32 insert_thumb_branch
PARAMS ((insn32, int));
static struct coff_link_hash_entry * find_thumb_glue
PARAMS ((struct bfd_link_info *, const char *, bfd *));
static struct coff_link_hash_entry * find_arm_glue
@ -118,9 +120,11 @@ static struct coff_link_hash_entry * find_arm_glue
#ifndef COFF_IMAGE_WITH_PE
static void record_arm_to_thumb_glue
PARAMS ((struct bfd_link_info *, struct coff_link_hash_entry *));
#ifndef ARM_WINCE
static void record_thumb_to_arm_glue
PARAMS ((struct bfd_link_info *, struct coff_link_hash_entry *));
#endif
#endif
static boolean coff_arm_merge_private_bfd_data
PARAMS ((bfd *, bfd *));
static boolean coff_arm_print_private_bfd_data
@ -801,6 +805,7 @@ coff_thumb_pcrel_common (abfd, reloc_entry, symbol, data, input_section,
return flag;
}
#ifndef ARM_WINCE
static bfd_reloc_status_type
coff_thumb_pcrel_23 (abfd, reloc_entry, symbol, data, input_section,
output_bfd, error_message)
@ -817,22 +822,6 @@ coff_thumb_pcrel_23 (abfd, reloc_entry, symbol, data, input_section,
b23);
}
static bfd_reloc_status_type
coff_thumb_pcrel_12 (abfd, reloc_entry, symbol, data, input_section,
output_bfd, error_message)
bfd *abfd;
arelent *reloc_entry;
asymbol *symbol;
PTR data;
asection *input_section;
bfd *output_bfd;
char **error_message;
{
return coff_thumb_pcrel_common (abfd, reloc_entry, symbol, data,
input_section, output_bfd, error_message,
b12);
}
static bfd_reloc_status_type
coff_thumb_pcrel_9 (abfd, reloc_entry, symbol, data, input_section,
output_bfd, error_message)
@ -848,6 +837,23 @@ coff_thumb_pcrel_9 (abfd, reloc_entry, symbol, data, input_section,
input_section, output_bfd, error_message,
b9);
}
#endif /* not ARM_WINCE */
static bfd_reloc_status_type
coff_thumb_pcrel_12 (abfd, reloc_entry, symbol, data, input_section,
output_bfd, error_message)
bfd *abfd;
arelent *reloc_entry;
asymbol *symbol;
PTR data;
asection *input_section;
bfd *output_bfd;
char **error_message;
{
return coff_thumb_pcrel_common (abfd, reloc_entry, symbol, data,
input_section, output_bfd, error_message,
b12);
}
static const struct reloc_howto_struct *
coff_arm_reloc_type_lookup (abfd, code)
@ -900,10 +906,12 @@ coff_arm_reloc_type_lookup (abfd, code)
#define BADMAG(x) ARMBADMAG(x)
#define ARM 1 /* Customize coffcode.h */
#ifndef ARM_WINCE
/* Make sure that the 'r_offset' field is copied properly
so that identical binaries will compare the same. */
#define SWAP_IN_RELOC_OFFSET H_GET_32
#define SWAP_OUT_RELOC_OFFSET H_PUT_32
#endif
/* Extend the coff_link_hash_table structure with a few ARM specific fields.
This allows us to store global data here without actually creating any
@ -975,6 +983,7 @@ arm_emit_base_file_entry (info, output_bfd, input_section, reloc_offset)
}
#ifndef ARM_WINCE
/* The thumb form of a long branch is a bit finicky, because the offset
encoding is split over two fields, each in it's own instruction. They
can occur in any order. So given a thumb form of long branch, and an
@ -1031,6 +1040,7 @@ insert_thumb_branch (br_insn, rel_off)
return br_insn;
}
static struct coff_link_hash_entry *
find_thumb_glue (info, name, input_bfd)
@ -1060,6 +1070,7 @@ find_thumb_glue (info, name, input_bfd)
return myh;
}
#endif /* not ARM_WINCE */
static struct coff_link_hash_entry *
find_arm_glue (info, name, input_bfd)
@ -1914,6 +1925,7 @@ record_arm_to_thumb_glue (info, h)
return;
}
#ifndef ARM_WINCE
static void
record_thumb_to_arm_glue (info, h)
struct bfd_link_info * info;
@ -1987,6 +1999,7 @@ record_thumb_to_arm_glue (info, h)
return;
}
#endif /* not ARM_WINCE */
/* Select a BFD to be used to hold the sections used by the glue code.
This function is called from the linker scripts in ld/emultempl/

View File

@ -3014,6 +3014,7 @@ coff_compute_section_file_positions (abfd)
else
current->target_index = target_index++;
}
abfd->section_tail = &current->next;
free (section_list);
}

View File

@ -214,6 +214,9 @@
/* Define if getenv is not declared in system header files. */
#undef NEED_DECLARATION_GETENV
/* Define if struct core_dumpx has member c_impl */
#undef HAVE_ST_C_IMPL
/* Define if <sys/procfs.h> has prstatus_t. */
#undef HAVE_PRSTATUS_T

View File

@ -1199,7 +1199,7 @@ fi
# Uncomment the next line to remove the date from the reported bfd version
#is_release=y
is_release=y
bfd_version=`echo "${VERSION}" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$/\1\2\3\4\5/'`
@ -5173,6 +5173,32 @@ if test "${target}" = "${host}"; then
rs6000-*-aix4.[3-9]* | powerpc-*-aix4.[3-9]*)
COREFILE=rs6000-core.lo
COREFLAG="$COREFLAG -DAIX_CORE_DUMPX_CORE"
# Not all versions of AIX with -DAIX_CORE_DUMPX_CORE
# have c_impl as a member of struct core_dumpx
echo $ac_n "checking for c_impl in struct core_dumpx""... $ac_c" 1>&6
echo "configure:5180: checking for c_impl in struct core_dumpx" >&5
cat > conftest.$ac_ext <<EOF
#line 5182 "configure"
#include "confdefs.h"
#include <core.h>
int main() {
struct core_dumpx c; c.c_impl = 0;
; return 0; }
EOF
if { (eval echo configure:5189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_ST_C_IMPL 1
EOF
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
;;
rs6000-*-aix4*) COREFILE=rs6000-core.lo ;;
rs6000-*-*) COREFILE=rs6000-core.lo ;;
@ -5226,17 +5252,17 @@ if test "${target}" = "${host}"; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5230: checking for $ac_hdr" >&5
echo "configure:5256: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5235 "configure"
#line 5261 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -5264,12 +5290,12 @@ done
if test "$ac_cv_header_sys_procfs_h" = yes; then
echo $ac_n "checking for prstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5268: checking for prstatus_t in sys/procfs.h" >&5
echo "configure:5294: checking for prstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5273 "configure"
#line 5299 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5278,7 +5304,7 @@ int main() {
prstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_prstatus_t=yes
else
@ -5300,12 +5326,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_prstatus_t" 1>&6
echo $ac_n "checking for prstatus32_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5304: checking for prstatus32_t in sys/procfs.h" >&5
echo "configure:5330: checking for prstatus32_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prstatus32_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5309 "configure"
#line 5335 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5314,7 +5340,7 @@ int main() {
prstatus32_t avar
; return 0; }
EOF
if { (eval echo configure:5318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_prstatus32_t=yes
else
@ -5336,12 +5362,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_prstatus32_t" 1>&6
echo $ac_n "checking for prstatus_t.pr_who in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5340: checking for prstatus_t.pr_who in sys/procfs.h" >&5
echo "configure:5366: checking for prstatus_t.pr_who in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5345 "configure"
#line 5371 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5350,7 +5376,7 @@ int main() {
prstatus_t avar; void* aref = (void*) &avar.pr_who
; return 0; }
EOF
if { (eval echo configure:5354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=yes
else
@ -5372,12 +5398,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" 1>&6
echo $ac_n "checking for prstatus32_t.pr_who in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5376: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
echo "configure:5402: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5381 "configure"
#line 5407 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5386,7 +5412,7 @@ int main() {
prstatus32_t avar; void* aref = (void*) &avar.pr_who
; return 0; }
EOF
if { (eval echo configure:5390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5416: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=yes
else
@ -5408,12 +5434,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" 1>&6
echo $ac_n "checking for pstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5412: checking for pstatus_t in sys/procfs.h" >&5
echo "configure:5438: checking for pstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5417 "configure"
#line 5443 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5422,7 +5448,7 @@ int main() {
pstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_pstatus_t=yes
else
@ -5444,12 +5470,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_pstatus_t" 1>&6
echo $ac_n "checking for pxstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5448: checking for pxstatus_t in sys/procfs.h" >&5
echo "configure:5474: checking for pxstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pxstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5453 "configure"
#line 5479 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5458,7 +5484,7 @@ int main() {
pxstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5488: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_pxstatus_t=yes
else
@ -5480,12 +5506,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_pxstatus_t" 1>&6
echo $ac_n "checking for pstatus32_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5484: checking for pstatus32_t in sys/procfs.h" >&5
echo "configure:5510: checking for pstatus32_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pstatus32_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5489 "configure"
#line 5515 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5494,7 +5520,7 @@ int main() {
pstatus32_t avar
; return 0; }
EOF
if { (eval echo configure:5498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_pstatus32_t=yes
else
@ -5516,12 +5542,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_pstatus32_t" 1>&6
echo $ac_n "checking for prpsinfo_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5520: checking for prpsinfo_t in sys/procfs.h" >&5
echo "configure:5546: checking for prpsinfo_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prpsinfo_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5525 "configure"
#line 5551 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5530,7 +5556,7 @@ int main() {
prpsinfo_t avar
; return 0; }
EOF
if { (eval echo configure:5534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5560: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_prpsinfo_t=yes
else
@ -5552,12 +5578,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_prpsinfo_t" 1>&6
echo $ac_n "checking for prpsinfo32_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5556: checking for prpsinfo32_t in sys/procfs.h" >&5
echo "configure:5582: checking for prpsinfo32_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prpsinfo32_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5561 "configure"
#line 5587 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5566,7 +5592,7 @@ int main() {
prpsinfo32_t avar
; return 0; }
EOF
if { (eval echo configure:5570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5596: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_prpsinfo32_t=yes
else
@ -5588,12 +5614,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_prpsinfo32_t" 1>&6
echo $ac_n "checking for psinfo_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5592: checking for psinfo_t in sys/procfs.h" >&5
echo "configure:5618: checking for psinfo_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_psinfo_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5597 "configure"
#line 5623 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5602,7 +5628,7 @@ int main() {
psinfo_t avar
; return 0; }
EOF
if { (eval echo configure:5606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5632: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_psinfo_t=yes
else
@ -5624,12 +5650,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_psinfo_t" 1>&6
echo $ac_n "checking for psinfo32_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5628: checking for psinfo32_t in sys/procfs.h" >&5
echo "configure:5654: checking for psinfo32_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_psinfo32_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5633 "configure"
#line 5659 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5638,7 +5664,7 @@ int main() {
psinfo32_t avar
; return 0; }
EOF
if { (eval echo configure:5642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5668: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_psinfo32_t=yes
else
@ -5660,12 +5686,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_psinfo32_t" 1>&6
echo $ac_n "checking for lwpstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5664: checking for lwpstatus_t in sys/procfs.h" >&5
echo "configure:5690: checking for lwpstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_lwpstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5669 "configure"
#line 5695 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5674,7 +5700,7 @@ int main() {
lwpstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_lwpstatus_t=yes
else
@ -5696,12 +5722,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_lwpstatus_t" 1>&6
echo $ac_n "checking for lwpxstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5700: checking for lwpxstatus_t in sys/procfs.h" >&5
echo "configure:5726: checking for lwpxstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_lwpxstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5705 "configure"
#line 5731 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5710,7 +5736,7 @@ int main() {
lwpxstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5740: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_lwpxstatus_t=yes
else
@ -5732,12 +5758,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_lwpxstatus_t" 1>&6
echo $ac_n "checking for lwpstatus_t.pr_context in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5736: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
echo "configure:5762: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5741 "configure"
#line 5767 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5746,7 +5772,7 @@ int main() {
lwpstatus_t avar; void* aref = (void*) &avar.pr_context
; return 0; }
EOF
if { (eval echo configure:5750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=yes
else
@ -5768,12 +5794,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" 1>&6
echo $ac_n "checking for lwpstatus_t.pr_reg in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5772: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
echo "configure:5798: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5777 "configure"
#line 5803 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5782,7 +5808,7 @@ int main() {
lwpstatus_t avar; void* aref = (void*) &avar.pr_reg
; return 0; }
EOF
if { (eval echo configure:5786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5812: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=yes
else
@ -5804,12 +5830,12 @@ EOF
echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" 1>&6
echo $ac_n "checking for win32_pstatus_t in sys/procfs.h""... $ac_c" 1>&6
echo "configure:5808: checking for win32_pstatus_t in sys/procfs.h" >&5
echo "configure:5834: checking for win32_pstatus_t in sys/procfs.h" >&5
if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_win32_pstatus_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5813 "configure"
#line 5839 "configure"
#include "confdefs.h"
#define _SYSCALL32
@ -5818,7 +5844,7 @@ int main() {
win32_pstatus_t avar
; return 0; }
EOF
if { (eval echo configure:5822: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
bfd_cv_have_sys_procfs_type_win32_pstatus_t=yes
else
@ -6235,10 +6261,10 @@ case ${host64}-${target64}-${want64} in
if test -n "$GCC" ; then
bad_64bit_gcc=no;
echo $ac_n "checking for gcc version with buggy 64-bit support""... $ac_c" 1>&6
echo "configure:6239: checking for gcc version with buggy 64-bit support" >&5
echo "configure:6265: checking for gcc version with buggy 64-bit support" >&5
# Add more tests for gcc versions with non-working 64-bit support here.
cat > conftest.$ac_ext <<EOF
#line 6242 "configure"
#line 6268 "configure"
#include "confdefs.h"
:__GNUC__:__GNUC_MINOR__:__i386__:
EOF
@ -6283,17 +6309,17 @@ for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:6287: checking for $ac_hdr" >&5
echo "configure:6313: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6292 "configure"
#line 6318 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:6297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:6323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -6322,12 +6348,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:6326: checking for $ac_func" >&5
echo "configure:6352: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6331 "configure"
#line 6357 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -6350,7 +6376,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:6354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:6380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -6375,7 +6401,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
echo "configure:6379: checking for working mmap" >&5
echo "configure:6405: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -6383,7 +6409,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
#line 6387 "configure"
#line 6413 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@ -6536,7 +6562,7 @@ main()
}
EOF
if { (eval echo configure:6540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:6566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@ -6561,12 +6587,12 @@ fi
for ac_func in madvise mprotect
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:6565: checking for $ac_func" >&5
echo "configure:6591: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6570 "configure"
#line 6596 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -6589,7 +6615,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:6593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:6619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else

View File

@ -9,7 +9,7 @@ AC_ISC_POSIX
AM_INIT_AUTOMAKE(bfd, 2.12.1)
# Uncomment the next line to remove the date from the reported bfd version
#is_release=y
is_release=y
changequote(,)dnl
bfd_version=`echo "${VERSION}" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$/\1\2\3\4\5/'`
@ -327,6 +327,14 @@ changequote(,)dnl
changequote([,])dnl
COREFILE=rs6000-core.lo
COREFLAG="$COREFLAG -DAIX_CORE_DUMPX_CORE"
# Not all versions of AIX with -DAIX_CORE_DUMPX_CORE
# have c_impl as a member of struct core_dumpx
AC_MSG_CHECKING([for c_impl in struct core_dumpx])
AC_TRY_COMPILE([#include <core.h>],
[struct core_dumpx c; c.c_impl = 0;],
[AC_DEFINE(HAVE_ST_C_IMPL, 1,
[Define if struct core_dumpx has member c_impl])
AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
;;
rs6000-*-aix4*) COREFILE=rs6000-core.lo ;;
rs6000-*-*) COREFILE=rs6000-core.lo ;;

View File

@ -50,6 +50,65 @@ powerpc_compatible (a,b)
const bfd_arch_info_type bfd_powerpc_archs[] =
{
#if BFD_DEFAULT_TARGET_SIZE == 64 /* default arch must come first. */
{
64, /* 64 bits in a word */
64, /* 64 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc64,
"powerpc",
"powerpc:common64",
3,
true, /* default for 64 bit target */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[1]
},
{
32, /* 32 bits in a word */
32, /* 32 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
"powerpc",
"powerpc:common",
3,
false,
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[2],
},
#else
{
32, /* 32 bits in a word */
32, /* 32 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
"powerpc",
"powerpc:common",
3,
true, /* default for 32 bit target */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[1],
},
{
64, /* 64 bits in a word */
64, /* 64 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc64,
"powerpc",
"powerpc:common64",
3,
false,
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[2]
},
#endif
{
32, /* 32 bits in a word */
32, /* 32 bits in an address */
@ -62,7 +121,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[1]
&bfd_powerpc_archs[3]
},
{
32, /* 32 bits in a word */
@ -76,7 +135,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[2]
&bfd_powerpc_archs[4]
},
{
32, /* 32 bits in a word */
@ -90,7 +149,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[3]
&bfd_powerpc_archs[5]
},
{
32, /* 32 bits in a word */
@ -104,7 +163,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[4]
&bfd_powerpc_archs[6]
},
{
32, /* 32 bits in a word */
@ -118,7 +177,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[5]
&bfd_powerpc_archs[7]
},
{
64, /* 64 bits in a word */
@ -132,7 +191,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[6]
&bfd_powerpc_archs[8]
},
{
64, /* 64 bits in a word */
@ -146,7 +205,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[7]
&bfd_powerpc_archs[9]
},
{
64, /* 64 bits in a word */
@ -160,7 +219,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[8]
&bfd_powerpc_archs[10]
},
{
64, /* 64 bits in a word */
@ -174,7 +233,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[9]
&bfd_powerpc_archs[11]
},
{
64, /* 64 bits in a word */
@ -188,7 +247,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[10]
&bfd_powerpc_archs[12]
},
{
32, /* 32 bits in a word */
@ -202,7 +261,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[11]
&bfd_powerpc_archs[13]
},
{
32, /* 32 bits in a word */
@ -216,34 +275,6 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[12]
},
{
64, /* 64 bits in a word */
64, /* 64 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc64,
"powerpc",
"powerpc:common64",
3,
BFD_DEFAULT_TARGET_SIZE == 64, /* default for 64 bit target */
powerpc_compatible,
bfd_default_scan,
&bfd_powerpc_archs[13]
},
{
32, /* 32 bits in a word */
32, /* 32 bits in an address */
8, /* 8 bits in a byte */
bfd_arch_powerpc,
bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
"powerpc",
"powerpc:common",
3,
BFD_DEFAULT_TARGET_SIZE != 64, /* default for 32 bit target */
powerpc_compatible,
bfd_default_scan,
0
}
};

View File

@ -0,0 +1,56 @@
/* BFD support for the s390 processor.
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Carl B. Pedersen and Martin Schwidefsky.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include "bfd.h"
#include "sysdep.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_s390_64_arch =
{
64, /* bits in a word */
64, /* bits in an address */
8, /* bits in a byte */
bfd_arch_s390,
bfd_mach_s390_64,
"s390",
"s390:64-bit",
3, /* section alignment power */
true, /* the default */
bfd_default_compatible,
bfd_default_scan,
NULL
};
const bfd_arch_info_type bfd_s390_arch =
{
32, /* bits in a word */
32, /* bits in an address */
8, /* bits in a byte */
bfd_arch_s390,
bfd_mach_s390_31,
"s390",
"s390:31-bit",
3, /* section alignment power */
true, /* the default */
bfd_default_compatible,
bfd_default_scan,
&bfd_s390_64_arch
};

View File

@ -225,8 +225,8 @@ enum bfd_architecture
#define bfd_mach_avr5 5
bfd_arch_cris, /* Axis CRIS */
bfd_arch_s390, /* IBM s390 */
#define bfd_mach_s390_esa 0
#define bfd_mach_s390_esame 1
#define bfd_mach_s390_31 0
#define bfd_mach_s390_64 1
bfd_arch_openrisc, /* OpenRISC */
bfd_arch_mmix, /* Donald Knuth's educational processor. */
bfd_arch_xstormy16,
@ -253,7 +253,9 @@ typedef struct bfd_arch_info
const char *arch_name;
const char *printable_name;
unsigned int section_align_power;
/* True if this is the default machine for the architecture. */
/* True if this is the default machine for the architecture.
The default arch should be the first entry for an arch so that
all the entries for that arch can be accessed via @code{next}. */
boolean the_default;
const struct bfd_arch_info * (*compatible)
PARAMS ((const struct bfd_arch_info *a,

View File

@ -10,7 +10,7 @@ completeness.
@subsubsection @code{bfd_write_bigendian_4byte_int}
@strong{Synopsis}
@example
void bfd_write_bigendian_4byte_int (bfd *, unsigned int);
boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
@end example
@strong{Description}@*
Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big

View File

@ -768,55 +768,6 @@ Relocation against a MIPS literal section.
@deffnx {} BFD_RELOC_MIPS_REL16
@deffnx {} BFD_RELOC_MIPS_RELGOT
@deffnx {} BFD_RELOC_MIPS_JALR
@deffnx {} BFD_RELOC_SH_GOT_LOW16
@deffnx {} BFD_RELOC_SH_GOT_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOT_MEDHI16
@deffnx {} BFD_RELOC_SH_GOT_HI16
@deffnx {} BFD_RELOC_SH_GOTPLT_LOW16
@deffnx {} BFD_RELOC_SH_GOTPLT_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTPLT_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTPLT_HI16
@deffnx {} BFD_RELOC_SH_PLT_LOW16
@deffnx {} BFD_RELOC_SH_PLT_MEDLOW16
@deffnx {} BFD_RELOC_SH_PLT_MEDHI16
@deffnx {} BFD_RELOC_SH_PLT_HI16
@deffnx {} BFD_RELOC_SH_GOTOFF_LOW16
@deffnx {} BFD_RELOC_SH_GOTOFF_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTOFF_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTOFF_HI16
@deffnx {} BFD_RELOC_SH_GOTPC_LOW16
@deffnx {} BFD_RELOC_SH_GOTPC_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTPC_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTPC_HI16
@deffnx {} BFD_RELOC_SH_COPY64
@deffnx {} BFD_RELOC_SH_GLOB_DAT64
@deffnx {} BFD_RELOC_SH_JMP_SLOT64
@deffnx {} BFD_RELOC_SH_RELATIVE64
@deffnx {} BFD_RELOC_SH_GOT10BY4
@deffnx {} BFD_RELOC_SH_GOT10BY8
@deffnx {} BFD_RELOC_SH_GOTPLT10BY4
@deffnx {} BFD_RELOC_SH_GOTPLT10BY8
@deffnx {} BFD_RELOC_SH_GOTPLT32
@deffnx {} BFD_RELOC_SH_SHMEDIA_CODE
@deffnx {} BFD_RELOC_SH_IMMU5
@deffnx {} BFD_RELOC_SH_IMMS6
@deffnx {} BFD_RELOC_SH_IMMS6BY32
@deffnx {} BFD_RELOC_SH_IMMU6
@deffnx {} BFD_RELOC_SH_IMMS10
@deffnx {} BFD_RELOC_SH_IMMS10BY2
@deffnx {} BFD_RELOC_SH_IMMS10BY4
@deffnx {} BFD_RELOC_SH_IMMS10BY8
@deffnx {} BFD_RELOC_SH_IMMS16
@deffnx {} BFD_RELOC_SH_IMMU16
@deffnx {} BFD_RELOC_SH_IMM_LOW16
@deffnx {} BFD_RELOC_SH_IMM_LOW16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16
@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_MEDHI16
@deffnx {} BFD_RELOC_SH_IMM_MEDHI16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_HI16
@deffnx {} BFD_RELOC_SH_IMM_HI16_PCREL
@deffnx {} BFD_RELOC_SH_PT_16
MIPS ELF relocations.
@end deffn
@deffn {} BFD_RELOC_386_GOT32
@ -996,6 +947,55 @@ These relocs are only used within the ARM assembler. They are not
@deffnx {} BFD_RELOC_SH_JMP_SLOT
@deffnx {} BFD_RELOC_SH_RELATIVE
@deffnx {} BFD_RELOC_SH_GOTPC
@deffnx {} BFD_RELOC_SH_GOT_LOW16
@deffnx {} BFD_RELOC_SH_GOT_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOT_MEDHI16
@deffnx {} BFD_RELOC_SH_GOT_HI16
@deffnx {} BFD_RELOC_SH_GOTPLT_LOW16
@deffnx {} BFD_RELOC_SH_GOTPLT_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTPLT_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTPLT_HI16
@deffnx {} BFD_RELOC_SH_PLT_LOW16
@deffnx {} BFD_RELOC_SH_PLT_MEDLOW16
@deffnx {} BFD_RELOC_SH_PLT_MEDHI16
@deffnx {} BFD_RELOC_SH_PLT_HI16
@deffnx {} BFD_RELOC_SH_GOTOFF_LOW16
@deffnx {} BFD_RELOC_SH_GOTOFF_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTOFF_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTOFF_HI16
@deffnx {} BFD_RELOC_SH_GOTPC_LOW16
@deffnx {} BFD_RELOC_SH_GOTPC_MEDLOW16
@deffnx {} BFD_RELOC_SH_GOTPC_MEDHI16
@deffnx {} BFD_RELOC_SH_GOTPC_HI16
@deffnx {} BFD_RELOC_SH_COPY64
@deffnx {} BFD_RELOC_SH_GLOB_DAT64
@deffnx {} BFD_RELOC_SH_JMP_SLOT64
@deffnx {} BFD_RELOC_SH_RELATIVE64
@deffnx {} BFD_RELOC_SH_GOT10BY4
@deffnx {} BFD_RELOC_SH_GOT10BY8
@deffnx {} BFD_RELOC_SH_GOTPLT10BY4
@deffnx {} BFD_RELOC_SH_GOTPLT10BY8
@deffnx {} BFD_RELOC_SH_GOTPLT32
@deffnx {} BFD_RELOC_SH_SHMEDIA_CODE
@deffnx {} BFD_RELOC_SH_IMMU5
@deffnx {} BFD_RELOC_SH_IMMS6
@deffnx {} BFD_RELOC_SH_IMMS6BY32
@deffnx {} BFD_RELOC_SH_IMMU6
@deffnx {} BFD_RELOC_SH_IMMS10
@deffnx {} BFD_RELOC_SH_IMMS10BY2
@deffnx {} BFD_RELOC_SH_IMMS10BY4
@deffnx {} BFD_RELOC_SH_IMMS10BY8
@deffnx {} BFD_RELOC_SH_IMMS16
@deffnx {} BFD_RELOC_SH_IMMU16
@deffnx {} BFD_RELOC_SH_IMM_LOW16
@deffnx {} BFD_RELOC_SH_IMM_LOW16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16
@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_MEDHI16
@deffnx {} BFD_RELOC_SH_IMM_MEDHI16_PCREL
@deffnx {} BFD_RELOC_SH_IMM_HI16
@deffnx {} BFD_RELOC_SH_IMM_HI16_PCREL
@deffnx {} BFD_RELOC_SH_PT_16
Hitachi SH relocs. Not all of these appear in object files.
@end deffn
@deffn {} BFD_RELOC_THUMB_PCREL_BRANCH9

View File

@ -42,7 +42,7 @@ struct line_head
{
bfd_vma total_length;
unsigned short version;
unsigned int prologue_length;
bfd_vma prologue_length;
unsigned char minimum_instruction_length;
unsigned char default_is_stmt;
int line_base;
@ -225,7 +225,7 @@ static bfd_vma read_address PARAMS ((struct comp_unit *, char *));
static struct abbrev_info *lookup_abbrev
PARAMS ((unsigned int, struct abbrev_info **));
static struct abbrev_info **read_abbrevs
PARAMS ((bfd *, unsigned int, struct dwarf2_debug *));
PARAMS ((bfd *, bfd_vma, struct dwarf2_debug *));
static char *read_attribute
PARAMS ((struct attribute *, struct attr_abbrev *,
struct comp_unit *, char *));
@ -396,8 +396,8 @@ read_indirect_string (unit, buf, bytes_read_ptr)
if (offset >= stash->dwarf_str_size)
{
(*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%u) greater than or equal to .debug_str size (%u)."),
offset, stash->dwarf_str_size);
(*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
(unsigned long) offset, stash->dwarf_str_size);
bfd_set_error (bfd_error_bad_value);
return NULL;
}
@ -523,7 +523,7 @@ lookup_abbrev (number,abbrevs)
static struct abbrev_info**
read_abbrevs (abfd, offset, stash)
bfd * abfd;
unsigned int offset;
bfd_vma offset;
struct dwarf2_debug *stash;
{
struct abbrev_info **abbrevs;
@ -557,8 +557,8 @@ read_abbrevs (abfd, offset, stash)
if (offset >= stash->dwarf_abbrev_size)
{
(*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%u) greater than or equal to .debug_abbrev size (%u)."),
offset, stash->dwarf_abbrev_size);
(*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
(unsigned long) offset, stash->dwarf_abbrev_size);
bfd_set_error (bfd_error_bad_value);
return 0;
}
@ -754,7 +754,7 @@ read_attribute_value (attr, form, unit, info_ptr)
info_ptr = read_attribute_value (attr, form, unit, info_ptr);
break;
default:
(*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %d."),
(*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
form);
bfd_set_error (bfd_error_bad_value);
}
@ -958,7 +958,7 @@ decode_line_info (unit, stash)
below. */
if (unit->line_offset >= stash->dwarf_line_size)
{
(*_bfd_error_handler) (_("Dwarf Error: Line offset (%u) greater than or equal to .debug_line size (%u)."),
(*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
unit->line_offset, stash->dwarf_line_size);
bfd_set_error (bfd_error_bad_value);
return 0;
@ -1345,7 +1345,7 @@ scan_unit_for_functions (unit)
abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
if (! abbrev)
{
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %d."),
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
abbrev_number);
bfd_set_error (bfd_error_bad_value);
return false;
@ -1486,9 +1486,9 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
unsigned int offset_size;
{
struct comp_unit* unit;
unsigned short version;
unsigned int abbrev_offset = 0;
unsigned char addr_size;
unsigned int version;
bfd_vma abbrev_offset = 0;
unsigned int addr_size;
struct abbrev_info** abbrevs;
unsigned int abbrev_number, bytes_read, i;
struct abbrev_info *abbrev;
@ -1517,7 +1517,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
if (version != 2)
{
(*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%hu', this reader only handles version 2 information."), version);
(*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
bfd_set_error (bfd_error_bad_value);
return 0;
}
@ -1526,7 +1526,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
{
(*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
addr_size,
sizeof (bfd_vma));
(unsigned int) sizeof (bfd_vma));
bfd_set_error (bfd_error_bad_value);
return 0;
}
@ -1547,7 +1547,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
info_ptr += bytes_read;
if (! abbrev_number)
{
(*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %d."),
(*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
abbrev_number);
bfd_set_error (bfd_error_bad_value);
return 0;
@ -1556,7 +1556,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
abbrev = lookup_abbrev (abbrev_number, abbrevs);
if (! abbrev)
{
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %d."),
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
abbrev_number);
bfd_set_error (bfd_error_bad_value);
return 0;

View File

@ -788,6 +788,11 @@ struct elf_backend_data
section. */
unsigned default_use_rela_p : 1;
/* Set if RELA relocations for a relocatable link can be handled by
generic code. Backends that set this flag need do nothing in the
backend relocate_section routine for relocatable linking. */
unsigned rela_normal : 1;
/* True if addresses "naturally" sign extend. This is used when
swapping in from Elf32 when BFD64. */
unsigned sign_extend_vma : 1;

View File

@ -64,6 +64,7 @@ struct eh_cie_fde
unsigned char removed : 1;
unsigned char make_relative : 1;
unsigned char make_lsda_relative : 1;
unsigned char per_encoding_relative : 1;
};
struct eh_frame_sec_info
@ -469,6 +470,8 @@ _bfd_elf_discard_section_eh_frame (abfd, info, sec, ehdrsec,
= cie.make_relative;
sec_info->entry[last_cie_ndx].make_lsda_relative
= cie.make_lsda_relative;
sec_info->entry[last_cie_ndx].per_encoding_relative
= (cie.per_encoding & 0x70) == DW_EH_PE_pcrel;
}
}
@ -633,8 +636,9 @@ _bfd_elf_discard_section_eh_frame (abfd, info, sec, ehdrsec,
else
{
if (info->shared
&& (cie.fde_encoding & 0xf0) == DW_EH_PE_absptr
&& cie.make_relative == 0)
&& (((cie.fde_encoding & 0xf0) == DW_EH_PE_absptr
&& cie.make_relative == 0)
|| (cie.fde_encoding & 0xf0) == DW_EH_PE_aligned))
{
/* If shared library uses absolute pointers
which we cannot turn into PC relative,
@ -689,6 +693,7 @@ _bfd_elf_discard_section_eh_frame (abfd, info, sec, ehdrsec,
{
sec_info->entry[i].make_relative = make_relative;
sec_info->entry[i].make_lsda_relative = make_lsda_relative;
sec_info->entry[i].per_encoding_relative = 0;
}
}
else if (sec_info->entry[i].cie && sec_info->entry[i].sec == sec)
@ -947,7 +952,8 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents)
/* CIE */
cie_offset = sec_info->entry[i].new_offset;
if (sec_info->entry[i].make_relative
|| sec_info->entry[i].make_lsda_relative)
|| sec_info->entry[i].make_lsda_relative
|| sec_info->entry[i].per_encoding_relative)
{
unsigned char *aug;
unsigned int action;
@ -956,7 +962,8 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents)
/* Need to find 'R' or 'L' augmentation's argument and modify
DW_EH_PE_* value. */
action = (sec_info->entry[i].make_relative ? 1 : 0)
| (sec_info->entry[i].make_lsda_relative ? 2 : 0);
| (sec_info->entry[i].make_lsda_relative ? 2 : 0)
| (sec_info->entry[i].per_encoding_relative ? 4 : 0);
buf = contents + sec_info->entry[i].offset;
/* Skip length, id and version. */
buf += 9;
@ -988,10 +995,22 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents)
per_width = get_DW_EH_PE_width (per_encoding,
ptr_size);
BFD_ASSERT (per_width != 0);
BFD_ASSERT (((per_encoding & 0x70) == DW_EH_PE_pcrel)
== sec_info->entry[i].per_encoding_relative);
if ((per_encoding & 0xf0) == DW_EH_PE_aligned)
buf = (contents
+ ((buf - contents + per_width - 1)
& ~((bfd_size_type) per_width - 1)));
if (action & 4)
{
bfd_vma value;
value = read_value (abfd, buf, per_width);
value += (sec_info->entry[i].offset
- sec_info->entry[i].new_offset);
write_value (abfd, buf, value, per_width);
action &= ~4;
}
buf += per_width;
break;
case 'R':
@ -1008,7 +1027,7 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents)
}
}
}
else
else if (sec_info->entry[i].size > 4)
{
/* FDE */
bfd_vma value = 0, address;
@ -1081,6 +1100,9 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents)
}
}
}
else
/* Terminating FDE must be at the end of .eh_frame section only. */
BFD_ASSERT (i == sec_info->count - 1);
BFD_ASSERT (p == contents + sec_info->entry[i].new_offset);
memmove (p, contents + sec_info->entry[i].offset,

View File

@ -1390,7 +1390,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
boolean overflow = false;
bfd_vma upper_insn = bfd_get_16 (input_bfd, hit_data);
bfd_vma lower_insn = bfd_get_16 (input_bfd, hit_data + 2);
bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
bfd_signed_vma reloc_signed_max = ((1 << (howto->bitsize - 1)) - 1) >> howto->rightshift;
bfd_signed_vma reloc_signed_min = ~ reloc_signed_max;
bfd_vma check;
bfd_signed_vma signed_check;
@ -1830,6 +1830,11 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela * relend;
const char * name;
#ifndef USE_REL
if (info->relocateable)
return true;
#endif
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@ -1862,6 +1867,7 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
#endif
howto = bfd_reloc.howto;
#ifdef USE_REL
if (info->relocateable)
{
/* This is a relocateable link. We don't have to change
@ -1874,19 +1880,16 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
sec = local_sections[r_symndx];
#ifdef USE_REL
arm_add_to_rel (input_bfd, contents + rel->r_offset,
howto,
(bfd_signed_vma) (sec->output_offset
+ sym->st_value));
#else
rel->r_addend += (sec->output_offset + sym->st_value);
#endif
}
}
continue;
}
#endif
/* This is a final link. */
h = NULL;
@ -3637,6 +3640,9 @@ elf32_arm_reloc_type_class (rela)
#define elf_backend_plt_readonly 1
#define elf_backend_want_got_plt 1
#define elf_backend_want_plt_sym 0
#ifndef USE_REL
#define elf_backend_rela_normal 1
#endif
#define elf_backend_got_header_size 12
#define elf_backend_plt_header_size PLT_ENTRY_SIZE

View File

@ -105,6 +105,9 @@ struct mips_elf_link_hash_entry
/* This is like the call_stub field, but it is used if the function
being called returns a floating point value. */
asection *call_fp_stub;
/* Are we forced local? .*/
boolean forced_local;
};
static bfd_reloc_status_type mips32_64bit_reloc
@ -4528,6 +4531,7 @@ mips_elf_link_hash_newfunc (entry, table, string)
ret->need_fn_stub = false;
ret->call_stub = NULL;
ret->call_fp_stub = NULL;
ret->forced_local = false;
}
return (struct bfd_hash_entry *) ret;
@ -4543,7 +4547,12 @@ _bfd_mips_elf_hide_symbol (info, entry, force_local)
asection *got;
struct mips_got_info *g;
struct mips_elf_link_hash_entry *h;
h = (struct mips_elf_link_hash_entry *) entry;
if (h->forced_local)
return;
h->forced_local = true;
dynobj = elf_hash_table (info)->dynobj;
got = bfd_get_section_by_name (dynobj, ".got");
g = (struct mips_got_info *) elf_section_data (got)->tdata;
@ -6047,9 +6056,18 @@ mips_elf_record_global_got_symbol (h, info, g)
{
/* A global symbol in the GOT must also be in the dynamic symbol
table. */
if (h->dynindx == -1
&& !bfd_elf32_link_record_dynamic_symbol (info, h))
return false;
if (h->dynindx == -1)
{
switch (ELF_ST_VISIBILITY (h->other))
{
case STV_INTERNAL:
case STV_HIDDEN:
_bfd_mips_elf_hide_symbol (info, h, true);
break;
}
if (!bfd_elf32_link_record_dynamic_symbol (info, h))
return false;
}
/* If we've already marked this entry as needing GOT space, we don't
need to do it again. */

View File

@ -1,5 +1,5 @@
/* PowerPC-specific support for 32-bit ELF
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
@ -49,6 +49,8 @@ static boolean ppc_elf_merge_private_bfd_data PARAMS ((bfd *, bfd *));
static int ppc_elf_additional_program_headers PARAMS ((bfd *));
static boolean ppc_elf_modify_segment_map PARAMS ((bfd *));
static asection *ppc_elf_create_got
PARAMS ((bfd *, struct bfd_link_info *));
static boolean ppc_elf_create_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
@ -679,20 +681,20 @@ static reloc_howto_type ppc_elf_howto_raw[] = {
0xffff, /* dst_mask */
false), /* pcrel_offset */
/* 32-bit section relative relocation. */
/* 16-bit section relative relocation. */
HOWTO (R_PPC_SECTOFF, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
true, /* pc_relative */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_PPC_SECTOFF", /* name */
false, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
true), /* pcrel_offset */
0xffff, /* dst_mask */
false), /* pcrel_offset */
/* 16-bit lower half section relative relocation. */
HOWTO (R_PPC_SECTOFF_LO, /* type */
@ -1295,7 +1297,7 @@ ppc_elf_reloc_type_lookup (abfd, code)
case BFD_RELOC_HI16_PLTOFF: ppc_reloc = R_PPC_PLT16_HI; break;
case BFD_RELOC_HI16_S_PLTOFF: ppc_reloc = R_PPC_PLT16_HA; break;
case BFD_RELOC_GPREL16: ppc_reloc = R_PPC_SDAREL16; break;
case BFD_RELOC_32_BASEREL: ppc_reloc = R_PPC_SECTOFF; break;
case BFD_RELOC_16_BASEREL: ppc_reloc = R_PPC_SECTOFF; break;
case BFD_RELOC_LO16_BASEREL: ppc_reloc = R_PPC_SECTOFF_LO; break;
case BFD_RELOC_HI16_BASEREL: ppc_reloc = R_PPC_SECTOFF_HI; break;
case BFD_RELOC_HI16_S_BASEREL: ppc_reloc = R_PPC_SECTOFF_HA; break;
@ -1632,6 +1634,30 @@ ppc_elf_modify_segment_map (abfd)
return true;
}
/* The powerpc .got has a blrl instruction in it. Mark it executable. */
static asection *
ppc_elf_create_got (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
{
register asection *s;
flagword flags;
if (!_bfd_elf_create_got_section (abfd, info))
return NULL;
s = bfd_get_section_by_name (abfd, ".got");
if (s == NULL)
abort ();
flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_IN_MEMORY
| SEC_LINKER_CREATED);
if (!bfd_set_section_flags (abfd, s, flags))
return NULL;
return s;
}
/* We have to create .dynsbss and .rela.sbss here so that they get mapped
to output sections (just like _bfd_elf_create_dynamic_sections has
to create .dynbss and .rela.bss). */
@ -1644,6 +1670,9 @@ ppc_elf_create_dynamic_sections (abfd, info)
register asection *s;
flagword flags;
if (!ppc_elf_create_got (abfd, info))
return false;
if (!_bfd_elf_create_dynamic_sections (abfd, info))
return false;
@ -1663,7 +1692,13 @@ ppc_elf_create_dynamic_sections (abfd, info)
|| ! bfd_set_section_alignment (abfd, s, 2))
return false;
}
return true;
s = bfd_get_section_by_name (abfd, ".plt");
if (s == NULL)
abort ();
flags = SEC_ALLOC | SEC_CODE | SEC_IN_MEMORY | SEC_LINKER_CREATED;
return bfd_set_section_flags (abfd, s, flags);
}
/* Adjust a symbol defined by a dynamic object and referenced by a
@ -2119,10 +2154,9 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
{
if (dynobj == NULL)
elf_hash_table (info)->dynobj = dynobj = abfd;
if (! _bfd_elf_create_got_section (dynobj, info))
sgot = ppc_elf_create_got (dynobj, info);
if (sgot == NULL)
return false;
sgot = bfd_get_section_by_name (dynobj, ".got");
BFD_ASSERT (sgot != NULL);
}
}
@ -2139,10 +2173,9 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
{
if (dynobj == NULL)
elf_hash_table (info)->dynobj = dynobj = abfd;
if (! _bfd_elf_create_got_section (dynobj, info))
sgot = ppc_elf_create_got (dynobj, info);
if (sgot == NULL)
return false;
sgot = bfd_get_section_by_name (dynobj, ".got");
BFD_ASSERT (sgot != NULL);
}
if (srelgot == NULL
@ -2542,7 +2575,8 @@ ppc_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
{
if (sym->st_shndx == SHN_COMMON
&& !info->relocateable
&& sym->st_size <= elf_gp_size (abfd))
&& sym->st_size <= elf_gp_size (abfd)
&& info->hash->creator->flavour == bfd_target_elf_flavour)
{
/* Common symbols less than or equal to -G nn bytes are automatically
put into .sdata. */
@ -2895,6 +2929,9 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
(info->relocateable) ? " (relocatable)" : "");
#endif
if (info->relocateable)
return true;
if (!ppc_elf_howto_table[R_PPC_ADDR32])
/* Initialize howto table if needed. */
ppc_elf_howto_init ();
@ -2939,34 +2976,6 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
howto = ppc_elf_howto_table[(int) r_type];
r_symndx = ELF32_R_SYM (rel->r_info);
if (info->relocateable)
{
/* This is a relocateable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
if ((unsigned) ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
sec = local_sections[r_symndx];
addend = rel->r_addend += sec->output_offset + sym->st_value;
}
}
#ifdef DEBUG
fprintf (stderr, "\ttype = %s (%d), symbol index = %ld, offset = %ld, addend = %ld\n",
howto->name,
(int) r_type,
r_symndx,
(long) offset,
(long) addend);
#endif
continue;
}
/* This is a final link. */
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
@ -3780,6 +3789,7 @@ ppc_elf_grok_psinfo (abfd, note)
#define elf_backend_can_refcount 1
#define elf_backend_got_header_size 12
#define elf_backend_plt_header_size PLT_INITIAL_ENTRY_SIZE
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_merge_private_bfd_data ppc_elf_merge_private_bfd_data
#define bfd_elf32_bfd_relax_section ppc_elf_relax_section

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,6 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
boolean ppc64_elf_set_toc PARAMS ((bfd *, struct bfd_link_info *));
bfd_vma ppc64_elf_toc PARAMS ((bfd *));
boolean ppc64_elf_size_stubs PARAMS ((bfd *, struct bfd_link_info *, int *));
boolean ppc64_elf_build_stubs PARAMS ((bfd *, struct bfd_link_info *));

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* SPARC-specific support for 64-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -1385,9 +1385,8 @@ sparc64_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
*namep = NULL;
return true;
}
else if (! *namep || ! **namep)
return true;
else
else if (*namep && **namep
&& info->hash->creator->flavour == bfd_target_elf_flavour)
{
int i;
struct sparc64_elf_app_reg *p;

File diff suppressed because it is too large Load Diff

View File

@ -138,8 +138,8 @@ static reloc_howto_type elf32_arm_howto_table[] =
bfd_elf_generic_reloc, /* special_function */
"R_ARM_ABS16", /* name */
false, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
false), /* pcrel_offset */
/* 12 bit absolute */

View File

@ -3502,6 +3502,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
elf_section_data(input_section->output_section)
->this_hdr.sh_flags |= flags;
return true;
}
gp_val = _bfd_get_gp_value (output_bfd);
@ -3534,29 +3535,9 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
ret_val = false;
continue;
}
howto = lookup_howto (r_type);
r_symndx = ELFNN_R_SYM (rel->r_info);
if (info->relocateable)
{
/* This is a relocateable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
sym_sec = local_sections[r_symndx];
rel->r_addend += sym_sec->output_offset;
}
}
continue;
}
/* This is a final link. */
h = NULL;
sym = NULL;
sym_sec = NULL;
@ -4561,6 +4542,7 @@ elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval)
#define elf_backend_copy_indirect_symbol elfNN_ia64_hash_copy_indirect
#define elf_backend_hide_symbol elfNN_ia64_hash_hide_symbol
#define elf_backend_reloc_type_class elfNN_ia64_reloc_type_class
#define elf_backend_rela_normal 1
#include "elfNN-target.h"

View File

@ -390,6 +390,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define elf_backend_default_use_rela_p !USE_REL
#endif
#ifndef elf_backend_rela_normal
#define elf_backend_rela_normal 0
#endif
#ifndef ELF_MACHINE_ALT1
#define ELF_MACHINE_ALT1 0
#endif
@ -470,6 +474,7 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_may_use_rel_p,
elf_backend_may_use_rela_p,
elf_backend_default_use_rela_p,
elf_backend_rela_normal,
elf_backend_sign_extend_vma,
elf_backend_want_got_plt,
elf_backend_plt_readonly,

View File

@ -875,8 +875,8 @@ ihex_write_object_contents (abfd)
rec_addr = where - (extbase + segbase);
/* Output records shouldn't cross 64K boundaries. */
if (rec_addr + now > 0xfffff)
now = 0xffff - rec_addr;
if (rec_addr + now > 0xffff)
now = 0x10000 - rec_addr;
if (! ihex_write_record (abfd, now, rec_addr, 0, p))
return false;

View File

@ -752,55 +752,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_MIPS_REL16",
"BFD_RELOC_MIPS_RELGOT",
"BFD_RELOC_MIPS_JALR",
"BFD_RELOC_SH_GOT_LOW16",
"BFD_RELOC_SH_GOT_MEDLOW16",
"BFD_RELOC_SH_GOT_MEDHI16",
"BFD_RELOC_SH_GOT_HI16",
"BFD_RELOC_SH_GOTPLT_LOW16",
"BFD_RELOC_SH_GOTPLT_MEDLOW16",
"BFD_RELOC_SH_GOTPLT_MEDHI16",
"BFD_RELOC_SH_GOTPLT_HI16",
"BFD_RELOC_SH_PLT_LOW16",
"BFD_RELOC_SH_PLT_MEDLOW16",
"BFD_RELOC_SH_PLT_MEDHI16",
"BFD_RELOC_SH_PLT_HI16",
"BFD_RELOC_SH_GOTOFF_LOW16",
"BFD_RELOC_SH_GOTOFF_MEDLOW16",
"BFD_RELOC_SH_GOTOFF_MEDHI16",
"BFD_RELOC_SH_GOTOFF_HI16",
"BFD_RELOC_SH_GOTPC_LOW16",
"BFD_RELOC_SH_GOTPC_MEDLOW16",
"BFD_RELOC_SH_GOTPC_MEDHI16",
"BFD_RELOC_SH_GOTPC_HI16",
"BFD_RELOC_SH_COPY64",
"BFD_RELOC_SH_GLOB_DAT64",
"BFD_RELOC_SH_JMP_SLOT64",
"BFD_RELOC_SH_RELATIVE64",
"BFD_RELOC_SH_GOT10BY4",
"BFD_RELOC_SH_GOT10BY8",
"BFD_RELOC_SH_GOTPLT10BY4",
"BFD_RELOC_SH_GOTPLT10BY8",
"BFD_RELOC_SH_GOTPLT32",
"BFD_RELOC_SH_SHMEDIA_CODE",
"BFD_RELOC_SH_IMMU5",
"BFD_RELOC_SH_IMMS6",
"BFD_RELOC_SH_IMMS6BY32",
"BFD_RELOC_SH_IMMU6",
"BFD_RELOC_SH_IMMS10",
"BFD_RELOC_SH_IMMS10BY2",
"BFD_RELOC_SH_IMMS10BY4",
"BFD_RELOC_SH_IMMS10BY8",
"BFD_RELOC_SH_IMMS16",
"BFD_RELOC_SH_IMMU16",
"BFD_RELOC_SH_IMM_LOW16",
"BFD_RELOC_SH_IMM_LOW16_PCREL",
"BFD_RELOC_SH_IMM_MEDLOW16",
"BFD_RELOC_SH_IMM_MEDLOW16_PCREL",
"BFD_RELOC_SH_IMM_MEDHI16",
"BFD_RELOC_SH_IMM_MEDHI16_PCREL",
"BFD_RELOC_SH_IMM_HI16",
"BFD_RELOC_SH_IMM_HI16_PCREL",
"BFD_RELOC_SH_PT_16",
"BFD_RELOC_386_GOT32",
"BFD_RELOC_386_PLT32",
@ -947,6 +898,55 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_SH_JMP_SLOT",
"BFD_RELOC_SH_RELATIVE",
"BFD_RELOC_SH_GOTPC",
"BFD_RELOC_SH_GOT_LOW16",
"BFD_RELOC_SH_GOT_MEDLOW16",
"BFD_RELOC_SH_GOT_MEDHI16",
"BFD_RELOC_SH_GOT_HI16",
"BFD_RELOC_SH_GOTPLT_LOW16",
"BFD_RELOC_SH_GOTPLT_MEDLOW16",
"BFD_RELOC_SH_GOTPLT_MEDHI16",
"BFD_RELOC_SH_GOTPLT_HI16",
"BFD_RELOC_SH_PLT_LOW16",
"BFD_RELOC_SH_PLT_MEDLOW16",
"BFD_RELOC_SH_PLT_MEDHI16",
"BFD_RELOC_SH_PLT_HI16",
"BFD_RELOC_SH_GOTOFF_LOW16",
"BFD_RELOC_SH_GOTOFF_MEDLOW16",
"BFD_RELOC_SH_GOTOFF_MEDHI16",
"BFD_RELOC_SH_GOTOFF_HI16",
"BFD_RELOC_SH_GOTPC_LOW16",
"BFD_RELOC_SH_GOTPC_MEDLOW16",
"BFD_RELOC_SH_GOTPC_MEDHI16",
"BFD_RELOC_SH_GOTPC_HI16",
"BFD_RELOC_SH_COPY64",
"BFD_RELOC_SH_GLOB_DAT64",
"BFD_RELOC_SH_JMP_SLOT64",
"BFD_RELOC_SH_RELATIVE64",
"BFD_RELOC_SH_GOT10BY4",
"BFD_RELOC_SH_GOT10BY8",
"BFD_RELOC_SH_GOTPLT10BY4",
"BFD_RELOC_SH_GOTPLT10BY8",
"BFD_RELOC_SH_GOTPLT32",
"BFD_RELOC_SH_SHMEDIA_CODE",
"BFD_RELOC_SH_IMMU5",
"BFD_RELOC_SH_IMMS6",
"BFD_RELOC_SH_IMMS6BY32",
"BFD_RELOC_SH_IMMU6",
"BFD_RELOC_SH_IMMS10",
"BFD_RELOC_SH_IMMS10BY2",
"BFD_RELOC_SH_IMMS10BY4",
"BFD_RELOC_SH_IMMS10BY8",
"BFD_RELOC_SH_IMMS16",
"BFD_RELOC_SH_IMMU16",
"BFD_RELOC_SH_IMM_LOW16",
"BFD_RELOC_SH_IMM_LOW16_PCREL",
"BFD_RELOC_SH_IMM_MEDLOW16",
"BFD_RELOC_SH_IMM_MEDLOW16_PCREL",
"BFD_RELOC_SH_IMM_MEDHI16",
"BFD_RELOC_SH_IMM_MEDHI16_PCREL",
"BFD_RELOC_SH_IMM_HI16",
"BFD_RELOC_SH_IMM_HI16_PCREL",
"BFD_RELOC_SH_PT_16",
"BFD_RELOC_THUMB_PCREL_BRANCH9",
"BFD_RELOC_THUMB_PCREL_BRANCH12",
"BFD_RELOC_THUMB_PCREL_BRANCH23",

View File

@ -1,6 +1,6 @@
/* opncls.c -- open and close a BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
2001
2001, 2002
Free Software Foundation, Inc.
Written by Cygnus Support.
@ -96,6 +96,8 @@ _bfd_new_bfd_contained_in (obfd)
bfd *nbfd;
nbfd = _bfd_new_bfd ();
if (nbfd == NULL)
return NULL;
nbfd->xvec = obfd->xvec;
nbfd->my_archive = obfd;
nbfd->direction = read_direction;
@ -618,7 +620,6 @@ bfd_make_readable(abfd)
abfd->arch_info = &bfd_default_arch_struct;
abfd->where = 0;
abfd->sections = (asection *) NULL;
abfd->format = bfd_unknown;
abfd->my_archive = (bfd *) NULL;
abfd->origin = 0;
@ -637,6 +638,7 @@ bfd_make_readable(abfd)
abfd->outsymbols = 0;
abfd->tdata.any = 0;
bfd_section_list_clear (abfd);
bfd_check_format(abfd, bfd_object);
return true;

View File

@ -2051,106 +2051,6 @@ ENUMX
BFD_RELOC_MIPS_JALR
COMMENT
COMMENT
ENUMX
BFD_RELOC_SH_GOT_LOW16
ENUMX
BFD_RELOC_SH_GOT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOT_MEDHI16
ENUMX
BFD_RELOC_SH_GOT_HI16
ENUMX
BFD_RELOC_SH_GOTPLT_LOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPLT_HI16
ENUMX
BFD_RELOC_SH_PLT_LOW16
ENUMX
BFD_RELOC_SH_PLT_MEDLOW16
ENUMX
BFD_RELOC_SH_PLT_MEDHI16
ENUMX
BFD_RELOC_SH_PLT_HI16
ENUMX
BFD_RELOC_SH_GOTOFF_LOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDHI16
ENUMX
BFD_RELOC_SH_GOTOFF_HI16
ENUMX
BFD_RELOC_SH_GOTPC_LOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPC_HI16
ENUMX
BFD_RELOC_SH_COPY64
ENUMX
BFD_RELOC_SH_GLOB_DAT64
ENUMX
BFD_RELOC_SH_JMP_SLOT64
ENUMX
BFD_RELOC_SH_RELATIVE64
ENUMX
BFD_RELOC_SH_GOT10BY4
ENUMX
BFD_RELOC_SH_GOT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT10BY4
ENUMX
BFD_RELOC_SH_GOTPLT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT32
COMMENT
ENUMX
BFD_RELOC_SH_SHMEDIA_CODE
ENUMX
BFD_RELOC_SH_IMMU5
ENUMX
BFD_RELOC_SH_IMMS6
ENUMX
BFD_RELOC_SH_IMMS6BY32
ENUMX
BFD_RELOC_SH_IMMU6
ENUMX
BFD_RELOC_SH_IMMS10
ENUMX
BFD_RELOC_SH_IMMS10BY2
ENUMX
BFD_RELOC_SH_IMMS10BY4
ENUMX
BFD_RELOC_SH_IMMS10BY8
ENUMX
BFD_RELOC_SH_IMMS16
ENUMX
BFD_RELOC_SH_IMMU16
ENUMX
BFD_RELOC_SH_IMM_LOW16
ENUMX
BFD_RELOC_SH_IMM_LOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDHI16
ENUMX
BFD_RELOC_SH_IMM_MEDHI16_PCREL
ENUMX
BFD_RELOC_SH_IMM_HI16
ENUMX
BFD_RELOC_SH_IMM_HI16_PCREL
ENUMX
BFD_RELOC_SH_PT_16
COMMENT
ENUMDOC
MIPS ELF relocations.
@ -2487,6 +2387,104 @@ ENUMX
BFD_RELOC_SH_RELATIVE
ENUMX
BFD_RELOC_SH_GOTPC
ENUMX
BFD_RELOC_SH_GOT_LOW16
ENUMX
BFD_RELOC_SH_GOT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOT_MEDHI16
ENUMX
BFD_RELOC_SH_GOT_HI16
ENUMX
BFD_RELOC_SH_GOTPLT_LOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPLT_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPLT_HI16
ENUMX
BFD_RELOC_SH_PLT_LOW16
ENUMX
BFD_RELOC_SH_PLT_MEDLOW16
ENUMX
BFD_RELOC_SH_PLT_MEDHI16
ENUMX
BFD_RELOC_SH_PLT_HI16
ENUMX
BFD_RELOC_SH_GOTOFF_LOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTOFF_MEDHI16
ENUMX
BFD_RELOC_SH_GOTOFF_HI16
ENUMX
BFD_RELOC_SH_GOTPC_LOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDLOW16
ENUMX
BFD_RELOC_SH_GOTPC_MEDHI16
ENUMX
BFD_RELOC_SH_GOTPC_HI16
ENUMX
BFD_RELOC_SH_COPY64
ENUMX
BFD_RELOC_SH_GLOB_DAT64
ENUMX
BFD_RELOC_SH_JMP_SLOT64
ENUMX
BFD_RELOC_SH_RELATIVE64
ENUMX
BFD_RELOC_SH_GOT10BY4
ENUMX
BFD_RELOC_SH_GOT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT10BY4
ENUMX
BFD_RELOC_SH_GOTPLT10BY8
ENUMX
BFD_RELOC_SH_GOTPLT32
ENUMX
BFD_RELOC_SH_SHMEDIA_CODE
ENUMX
BFD_RELOC_SH_IMMU5
ENUMX
BFD_RELOC_SH_IMMS6
ENUMX
BFD_RELOC_SH_IMMS6BY32
ENUMX
BFD_RELOC_SH_IMMU6
ENUMX
BFD_RELOC_SH_IMMS10
ENUMX
BFD_RELOC_SH_IMMS10BY2
ENUMX
BFD_RELOC_SH_IMMS10BY4
ENUMX
BFD_RELOC_SH_IMMS10BY8
ENUMX
BFD_RELOC_SH_IMMS16
ENUMX
BFD_RELOC_SH_IMMU16
ENUMX
BFD_RELOC_SH_IMM_LOW16
ENUMX
BFD_RELOC_SH_IMM_LOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16
ENUMX
BFD_RELOC_SH_IMM_MEDLOW16_PCREL
ENUMX
BFD_RELOC_SH_IMM_MEDHI16
ENUMX
BFD_RELOC_SH_IMM_MEDHI16_PCREL
ENUMX
BFD_RELOC_SH_IMM_HI16
ENUMX
BFD_RELOC_SH_IMM_HI16_PCREL
ENUMX
BFD_RELOC_SH_PT_16
ENUMDOC
Hitachi SH relocs. Not all of these appear in object files.

View File

@ -182,7 +182,7 @@ typedef union {
/* Return the c_impl field from struct core_dumpx C. */
#ifdef AIX_CORE_DUMPX_CORE
#if defined (HAVE_ST_C_IMPL) || defined (AIX_5_CORE)
# define CNEW_IMPL(c) (c).c_impl
#else
# define CNEW_IMPL(c) 0

View File

@ -1297,7 +1297,8 @@ _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset, pfound,
*pfound = true;
if (IS_ABSOLUTE_PATH(file_name) || directory_name == NULL)
if (file_name == NULL || IS_ABSOLUTE_PATH (file_name)
|| directory_name == NULL)
*pfilename = file_name;
else
{

View File

@ -1 +1 @@
#define BFD_VERSION_DATE 20020412
#define BFD_VERSION_DATE 20020622

View File

@ -2114,7 +2114,7 @@ xcoff_link_add_dynamic_symbols (abfd, info)
/* Remove the sections from this object, so that they do not get
included in the link. */
abfd->sections = NULL;
bfd_section_list_clear (abfd);
bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);

View File

@ -1,3 +1,131 @@
2002-05-09 Alan Modra <amodra@bigpond.net.au>
* configure.in: Replace `*pe' with `pe' throughout.
* configure: Regenerate.
Merge from mainline
2002-05-06 Alan Modra <amodra@bigpond.net.au>
* dlltool.c (process_def_file): Add missing prototype.
(new_directive, assemble_file, main): Likewise.
(process_def_file, new_directive): Make static.
(inform): Rewrite using VA_FIXEDARG.
* dllwrap.c (mybasename): Add missing prototype.
(strhash, main): Likewise.
(inform): Rewrite using VA_FIXEDARG.
(warn): Likewise.
(cleanup_and_exit): Use old style function definition.
(strhash): Likewise.
* windres.c (define_resource): Use one memset to clear all of
struct res_resource.
* rcparse.y: Remove newcmd rule. Move rcparse_discard_strings
call to rules that need no lookahead. Check for no lookahead.
2002-05-06 Borut Razem <borut.razem@siol.net>
* rclex.l (get_string): Correct "strings" list handling.
* resrc.c (read_rc_file): Discard strings.
2002-05-04 Bob Byrnes <byrnes@curl.com>
* size.c (display_archive): Add last_arfile and code to close archives.
2002-05-01 Alan Modra <amodra@bigpond.net.au>
* nm.c (print_symbol): Check returned filename from
bfd_find_nearest_line is non-NULL.
2002-04-17 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* arparse.y: Fix syntax warning.
2002-04-16 Nick Clifton <nickc@cambridge.redhat.com>
* rcparse.y: Set MEMFLAG_DISCARDABLE by default.
2002-04-15 Nick Clifton <nickc@cambridge.redhat.com>
* resrc.c (write_rc_dialog): If charset is non-default value
display all of the DIALOGEX parameters.
2002-04-15 Eric Kohl <ekohl@rz-online.de>
* rcparse.y: Allow two to five parameter in FONT statement of
DIALOGEX resources.
* resbin.c (bin_to_res_dialog): Fixed read/write code for dialogex
resource data.
(res_to_bin_dialog): Likewise.
* windres.h: Added misssing charset variable to dialog_ex
structure.
2002-04-10 Nick Clifton <nickc@cambridge.redhat.com>
* rcparse.y: Set MEMFLAG_PURE by default.
2002-04-09 Bernd Herd <info@herdsoft.com>
* rcparse.y: CLASS definitions in DIALOG resources
are quoted.
Fix typo in BEDIT warning.
Don't add default dialog style when explicit style specified.
Add WS_CAPTION dialog style if CAPTION is specified.
* rclex.l (handle_quotes): "\xhex" encoding in strings corrected.
(handle_quotes) "\a" escape (used for right justified key
definitions in menus) is encodes as binary 8.
* resrc.c (write_rc_dialog): Print style even if it is 0.
(write_rc_directory): Fix overlooked sublang shift bug.
(bin_to_res_dialog): Don't print empty dialog caption.
* resbin.c (bin_to_res_dialog): Use signature to identify
DIALOGEX.
* windres.c (main): Set default LANGUAGE to english/us.
2002-04-09 Gunnar Degnbol <degnbol@danbbs.dk>
* resrc.c: print CLASS names in quotes
2002-04-27 Alan Modra <amodra@bigpond.net.au>
Merge from mainline
2002-04-25 Elena Zannoni <ezannoni@redhat.com>
* readelf.c (get_AT_name): Handle DW_AT_GNU_vector.
2002-04-16 Nick Clifton <nickc@cambridge.redhat.com>
* readelf.c (fetch_location_list): Remove unused function.
* readelf.c (process_corefile_note_segment): Catch corrupt notes
and display a warning message, then exit the loop.
2002-04-24 Christian Groessler <chris@groessler.org>
* MAINTAINERS: Changed my email address.
2002-04-09 J"orn Rennecke <joern.rennecke@superh.com>
* MAINTAINERS: Update my email address.
2002-03-27 Peter Targett <peter.targett@arc.com>
* MAINTAINERS: Update my email address.
2002-03-20 Daniel Berlin <dan@dberlin.org>
* readelf.c: Add support for displaying dwarf2 location lists.
(do_debug_loc, debug_loc_section, debug_loc_size): New.
(parse_args): Use 'O' as shorthand for displaying location list
section.
(process_section_headers): Handle debug_loc as well.
(load_debug_loc): New.
(free_debug_loc): New.
(fetch_location_list): New.
(display_debug_loc): New.
(display_debug_info): Call load_debug_loc and free_debug_loc.
(debug_displays): We can display .debug_loc now, too.
(usage): Update usage string.
(read_and_display_attr_value): Note location lists, but don't
display them inline.
2002-03-01 Dmitry Timoshkov <dmitry@baikal.ru>
* dlltool.c (gen_exp_file): Take into account --kill-at (-k) while
generating .exp file.
2002-02-21 Nick Clifton <nickc@cambridge.redhat.com>
* readelf.c (dump_relocations): Fix typo.
2002-02-18 Timothy Daly <remote_bob@yahoo.com>
* readelf.c (dump_relocations): Display 2nd and 3rd reloc
types for 64-bit MIPS. Narrow some fields for 80-char
output.
(dump_relocations): Change spelling from 'unrecognised'
to 'unrecognized'.
(decode_ARM_machine_flags): Likewise.
(parse_args): Likewise.
(read_and_display_attr_value): Likewise.
(display_debug_section): Likewise.
2002-04-04 Alan Modra <amodra@bigpond.net.au>
* dep-in.sed: Cope with absolute paths.

View File

@ -50,7 +50,7 @@ maintainers for a given domain then responsibility falls to the first
maintainer. The first maintainer is free to devolve that
responsibility among the other maintainers.
ARC Peter Targett <peter.targett@arccores.com>
ARC Peter Targett <peter.targett@arc.com>
ARM Nick Clifton <nickc@redhat.com>
ARM Richard Earnshaw <rearnsha@arm.com>
AVR Denis Chertykov <denisc@overta.ru>
@ -74,12 +74,13 @@ responsibility among the other maintainers.
PPC Geoff Keating <geoffk@redhat.com>
PPC XCOFF Tom Rix <trix@redhat.com>
s390, s390x Martin Schwidefsky <schwidefsky@de.ibm.com>
SH J<>örn Rennecke <amylaar@onetel.net.uk>
SH J<>örn Rennecke <joern.rennecke@superh.com>
SH Hans-Peter Nilsson <hp@bitrange.com>
SH Alexandre Oliva <aoliva@redhat.com>
SPARC Jakub Jelinek <jakub@redhat.com>
TIC54X Timothy Wall <twall@alum.mit.edu>
z8k Christian Groessler <cpg@aladdin.de>
z8k Christian Groessler <chris@groessler.org>
--------- CGEN Maintainers -------------

View File

@ -74,6 +74,7 @@ session:
command_line:
command NEWLINE { prompt(); }
;
command:
open_command

View File

@ -28,6 +28,9 @@
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define if you need to in order for stat and other things to work. */
#undef _POSIX_SOURCE
/* Define to `unsigned' if <sys/types.h> doesn't define. */
#undef size_t

View File

@ -5495,12 +5495,12 @@ do
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
arm-*pe* | arm-*-wince)
arm-pe* | arm-*-wince)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
thumb-*pe*)
thumb-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
@ -5508,7 +5508,7 @@ do
arm*-* | xscale-* | strongarm-* | d10v-*)
OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS"
;;
i[3-6]86-*pe* | i[3-6]86-*-cygwin* | i[3-6]86-*-mingw32*)
i[3-6]86-pe* | i[3-6]86-*-cygwin* | i[3-6]86-*-mingw32*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
@ -5518,22 +5518,22 @@ do
BUILD_DLLTOOL='$(DLLTOOL_PROG)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
;;
powerpc*-*-*pe* | powerpc*-*-cygwin*)
powerpc*-*-pe* | powerpc*-*-cygwin*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_PPC"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
sh*-*-*pe)
sh*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
mips*-*-*pe)
mips*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MIPS"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
mcore-*pe)
mcore-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'

View File

@ -235,12 +235,12 @@ changequote([,])dnl
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
arm-*pe* | arm-*-wince)
arm-pe* | arm-*-wince)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
thumb-*pe*)
thumb-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
@ -249,7 +249,7 @@ changequote([,])dnl
OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS"
;;
changequote(,)dnl
i[3-6]86-*pe* | i[3-6]86-*-cygwin* | i[3-6]86-*-mingw32*)
i[3-6]86-pe* | i[3-6]86-*-cygwin* | i[3-6]86-*-mingw32*)
changequote([,])dnl
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
@ -260,22 +260,22 @@ changequote([,])dnl
BUILD_DLLTOOL='$(DLLTOOL_PROG)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
;;
powerpc*-*-*pe* | powerpc*-*-cygwin*)
powerpc*-*-pe* | powerpc*-*-cygwin*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_PPC"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
sh*-*-*pe)
sh*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
mips*-*-*pe)
mips*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MIPS"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
;;
mcore-*pe)
mcore-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'

View File

@ -1,5 +1,5 @@
/* dlltool.c -- tool to generate stuff for PE style DLLs
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@ -658,6 +658,8 @@ static struct string_list *excludes;
static const char *rvaafter PARAMS ((int));
static const char *rvabefore PARAMS ((int));
static const char *asm_prefix PARAMS ((int));
static void process_def_file PARAMS ((const char *));
static void new_directive PARAMS ((char *));
static void append_import PARAMS ((const char *, const char *, int));
static void run PARAMS ((const char *, char *));
static void scan_drectve_symbols PARAMS ((bfd *));
@ -674,6 +676,7 @@ static int sfunc PARAMS ((const void *, const void *));
static void flush_page PARAMS ((FILE *, long *, int, int));
static void gen_def_file PARAMS ((void));
static void generate_idata_ofile PARAMS ((FILE *));
static void assemble_file PARAMS ((const char *, const char *));
static void gen_exp_file PARAMS ((void));
static const char *xlate PARAMS ((const char *));
#if 0
@ -697,28 +700,17 @@ static void inform PARAMS ((const char *, ...));
static void
#ifdef __STDC__
inform (const char * message, ...)
#else
inform (message, va_alist)
const char * message;
va_dcl
#endif
inform VPARAMS ((const char *message, ...))
{
va_list args;
VA_OPEN (args, message);
VA_FIXEDARG (args, const char *, message);
if (!verbose)
return;
#ifdef __STDC__
va_start (args, message);
#else
va_start (args);
#endif
report (message, args);
va_end (args);
VA_CLOSE (args);
}
static const char *
@ -820,7 +812,7 @@ asm_prefix (machine)
static char **oav;
void
static void
process_def_file (name)
const char *name;
{
@ -943,7 +935,7 @@ def_description (desc)
d_list = d;
}
void
static void
new_directive (dir)
char *dir;
{
@ -1865,7 +1857,7 @@ gen_exp_file ()
if (!exp->noname || show_allnames)
{
fprintf (f, "n%d: %s \"%s\"\n",
exp->ordinal, ASM_TEXT, exp->name);
exp->ordinal, ASM_TEXT, xlate (exp->name));
if (exp->forward != 0)
fprintf (f, "f%d: %s \"%s\"\n",
exp->forward, ASM_TEXT, exp->internal_name);
@ -3206,6 +3198,8 @@ static const struct option long_options[] =
{NULL,0,NULL,0}
};
int main PARAMS ((int, char **));
int
main (ac, av)
int ac;

View File

@ -115,14 +115,16 @@ static int delete_exp_file = 1;
static int delete_def_file = 1;
static int run PARAMS ((const char *, char *));
static char *mybasename PARAMS ((const char *));
static int strhash PARAMS ((const char *));
static void usage PARAMS ((FILE *, int));
static void display PARAMS ((const char *, va_list));
static void inform PARAMS ((const char *, ...));
static void warn PARAMS ((const char *format, ...));
static void warn PARAMS ((const char *, ...));
static char *look_for_prog PARAMS ((const char *, const char *, int));
static char *deduce_name PARAMS ((const char *));
static void delete_temp_files PARAMS ((void));
static void cleanup_and_exit PARAMS ((int status));
static void cleanup_and_exit PARAMS ((int));
/**********************************************************************/
@ -147,58 +149,30 @@ display (message, args)
}
#ifdef __STDC__
static void
inform (const char * message, ...)
inform VPARAMS ((const char *message, ...))
{
va_list args;
VA_OPEN (args, message);
VA_FIXEDARG (args, const char *, message);
if (!verbose)
return;
va_start (args, message);
display (message, args);
va_end (args);
VA_CLOSE (args);
}
static void
warn (const char *format, ...)
warn VPARAMS ((const char *format, ...))
{
va_list args;
VA_OPEN (args, format);
VA_FIXEDARG (args, const char *, format);
va_start (args, format);
display (format, args);
va_end (args);
VA_CLOSE (args);
}
#else
static void
inform (message, va_alist)
const char * message;
va_dcl
{
va_list args;
if (!verbose)
return;
va_start (args);
display (message, args);
va_end (args);
}
static void
warn (format, va_alist)
const char *format;
va_dcl
{
va_list args;
va_start (args);
display (format, args);
va_end (args);
}
#endif
/* Look for the program formed by concatenating PROG_NAME and the
string running from PREFIX to END_PREFIX. If the concatenated
@ -375,7 +349,8 @@ delete_temp_files ()
}
static void
cleanup_and_exit (int status)
cleanup_and_exit (status)
int status;
{
delete_temp_files ();
exit (status);
@ -487,7 +462,8 @@ mybasename (name)
}
static int
strhash (const char *str)
strhash (str)
const char *str;
{
const unsigned char *s;
unsigned long hash;
@ -635,6 +611,8 @@ static const struct option long_options[] =
{0, 0, 0, 0}
};
int main PARAMS ((int, char **));
int
main (argc, argv)
int argc;

View File

@ -175,7 +175,7 @@ DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "ADDR2LINE 1"
.TH ADDR2LINE 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH ADDR2LINE 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
addr2line \- convert addresses into file names and line numbers.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "AR 1"
.TH AR 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH AR 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
ar \- create, modify, and extract from archives

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "C++FILT 1"
.TH C++FILT 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH C++FILT 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
cxxfilt \- Demangle \*(C+ and Java symbols.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "DLLTOOL 1"
.TH DLLTOOL 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH DLLTOOL 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
dlltool \- Create files needed to build and use DLLs.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "NM 1"
.TH NM 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH NM 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
nm \- list symbols from object files

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "OBJCOPY 1"
.TH OBJCOPY 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH OBJCOPY 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
objcopy \- copy and translate object files

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "OBJDUMP 1"
.TH OBJDUMP 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH OBJDUMP 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
objdump \- display information from object files.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "RANLIB 1"
.TH RANLIB 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH RANLIB 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
ranlib \- generate index to archive.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "READELF 1"
.TH READELF 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH READELF 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
readelf \- Displays information about \s-1ELF\s0 files.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "SIZE 1"
.TH SIZE 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH SIZE 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
size \- list section sizes and total size.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "STRINGS 1"
.TH STRINGS 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH STRINGS 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
strings \- print the strings of printable characters in files.

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "STRIP 1"
.TH STRIP 1 "2002-03-08" "binutils-2.12" "GNU Development Tools"
.TH STRIP 1 "2002-05-14" "binutils-2.12.1" "GNU Development Tools"
.UC
.SH "NAME"
strip \- Discard symbols from object files.

View File

@ -1,7 +1,7 @@
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
* $Header: /cvs/src/src/binutils/Attic/rclex.c,v 1.1.6.1 2002/03/08 17:01:00 drow Exp $
* $Header: /cvs/src/src/binutils/Attic/rclex.c,v 1.1.6.2 2002/05/11 20:00:49 drow Exp $
*/
#define FLEX_SCANNER
@ -22,7 +22,7 @@
#ifdef __cplusplus
#include <stdlib.h>
#ifndef _Win32
#ifndef _WIN32
#include <unistd.h>
#else
#ifndef YY_ALWAYS_INTERACTIVE
@ -643,7 +643,7 @@ char *yytext;
#line 1 "rclex.l"
#define INITIAL 0
#line 2 "rclex.l"
/* Copyright 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
/* Copyright 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -2022,7 +2022,7 @@ YY_BUFFER_STATE b;
}
#ifndef _Win32
#ifndef _WIN32
#include <unistd.h>
#else
#ifndef YY_ALWAYS_INTERACTIVE
@ -2400,11 +2400,11 @@ cpp_line (s)
if (!initial_fn)
{
initial_fn = xmalloc (strlen (fn) + 1);
strcpy(initial_fn, fn);
strcpy (initial_fn, fn);
}
/* Allow the initial file, regardless of name. Suppress all other
files if they end in ".h" (this allows included "*.rc") */
files if they end in ".h" (this allows included "*.rc"). */
if (strcmp (initial_fn, fn) == 0
|| strcmp (fn + strlen (fn) - 2, ".h") != 0)
suppress_cpp_data = 0;
@ -2447,7 +2447,7 @@ handle_quotes (input, len)
break;
case 'a':
*s++ = ESCAPE_A;
*s++ = ESCAPE_B; /* Strange, but true... */
++t;
break;
@ -2510,9 +2510,9 @@ handle_quotes (input, len)
if (*t >= '0' && *t <= '9')
ch = (ch << 4) | (*t - '0');
else if (*t >= 'a' && *t <= 'f')
ch = (ch << 4) | (*t - 'a');
ch = (ch << 4) | (*t - 'a' + 10);
else if (*t >= 'A' && *t <= 'F')
ch = (ch << 4) | (*t - 'A');
ch = (ch << 4) | (*t - 'A' + 10);
else
break;
++t;
@ -2568,7 +2568,7 @@ get_string (len)
as->s = xmalloc (len);
as->next = strings;
strings = as->next;
strings = as;
return as->s;
}

View File

@ -1,5 +1,5 @@
%{ /* rclex.l -- lexer for Windows rc files parser */
/* Copyright 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
/* Copyright 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -284,11 +284,11 @@ cpp_line (s)
if (!initial_fn)
{
initial_fn = xmalloc (strlen (fn) + 1);
strcpy(initial_fn, fn);
strcpy (initial_fn, fn);
}
/* Allow the initial file, regardless of name. Suppress all other
files if they end in ".h" (this allows included "*.rc") */
files if they end in ".h" (this allows included "*.rc"). */
if (strcmp (initial_fn, fn) == 0
|| strcmp (fn + strlen (fn) - 2, ".h") != 0)
suppress_cpp_data = 0;
@ -331,7 +331,7 @@ handle_quotes (input, len)
break;
case 'a':
*s++ = ESCAPE_A;
*s++ = ESCAPE_B; /* Strange, but true... */
++t;
break;
@ -394,9 +394,9 @@ handle_quotes (input, len)
if (*t >= '0' && *t <= '9')
ch = (ch << 4) | (*t - '0');
else if (*t >= 'a' && *t <= 'f')
ch = (ch << 4) | (*t - 'a');
ch = (ch << 4) | (*t - 'a' + 10);
else if (*t >= 'A' && *t <= 'F')
ch = (ch << 4) | (*t - 'A');
ch = (ch << 4) | (*t - 'A' + 10);
else
break;
++t;
@ -452,7 +452,7 @@ get_string (len)
as->s = xmalloc (len);
as->next = strings;
strings = as->next;
strings = as;
return as->s;
}

File diff suppressed because it is too large Load Diff

View File

@ -42,6 +42,7 @@ typedef union
} ss;
} yystype;
# define YYSTYPE yystype
# define YYSTYPE_IS_TRIVIAL 1
#endif
# define BEG 257
# define END 258

View File

@ -1,5 +1,5 @@
%{ /* rcparse.y -- parser for Windows rc files
Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -153,28 +153,21 @@ static unsigned long class;
input:
/* empty */
| input newcmd accelerator
| input newcmd bitmap
| input newcmd cursor
| input newcmd dialog
| input newcmd font
| input newcmd icon
| input newcmd language
| input newcmd menu
| input newcmd menuex
| input newcmd messagetable
| input newcmd rcdata
| input newcmd stringtable
| input newcmd user
| input newcmd versioninfo
| input newcmd IGNORED_TOKEN
;
newcmd:
/* empty */
{
rcparse_discard_strings ();
}
| input accelerator
| input bitmap
| input cursor
| input dialog
| input font
| input icon
| input language
| input menu
| input menuex
| input messagetable
| input rcdata
| input stringtable
| input user
| input versioninfo
| input IGNORED_TOKEN
;
/* Accelerator resources. */
@ -183,6 +176,9 @@ accelerator:
id ACCELERATORS suboptions BEG acc_entries END
{
define_accelerator ($1, &$3, $5);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -309,6 +305,9 @@ bitmap:
id BITMAP memflags_move file_name
{
define_bitmap ($1, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -318,6 +317,9 @@ cursor:
id CURSOR memflags_move_discard file_name
{
define_cursor ($1, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -340,10 +342,14 @@ dialog:
dialog.ex = NULL;
dialog.controls = NULL;
sub_res_info = $3;
style = 0;
}
styles BEG controls END
{
define_dialog ($1, &sub_res_info, &dialog);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
| id DIALOGEX memflags_move exstyle posnumexpr cnumexpr cnumexpr
cnumexpr
@ -363,10 +369,14 @@ dialog:
memset (dialog.ex, 0, sizeof (struct dialog_ex));
dialog.controls = NULL;
sub_res_info = $3;
style = 0;
}
styles BEG controls END
{
define_dialog ($1, &sub_res_info, &dialog);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
| id DIALOGEX memflags_move exstyle posnumexpr cnumexpr cnumexpr
cnumexpr cnumexpr
@ -387,10 +397,14 @@ dialog:
dialog.ex->help = $9;
dialog.controls = NULL;
sub_res_info = $3;
style = 0;
}
styles BEG controls END
{
define_dialog ($1, &sub_res_info, &dialog);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -409,6 +423,8 @@ styles:
/* empty */
| styles CAPTION QUOTEDSTRING
{
dialog.style |= WS_CAPTION;
style |= WS_CAPTION;
unicode_from_ascii ((int *) NULL, &dialog.caption, $3);
}
| styles CLASS id
@ -416,7 +432,6 @@ styles:
dialog.class = $3;
}
| styles STYLE
{ style = dialog.style; }
styleexpr
{
dialog.style = style;
@ -425,15 +440,42 @@ styles:
{
dialog.exstyle = $3;
}
| styles CLASS QUOTEDSTRING
{
res_string_to_id (& dialog.class, $3);
}
| styles FONT numexpr ',' QUOTEDSTRING
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex != NULL)
{
dialog.ex->weight = 0;
dialog.ex->italic = 0;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
{
dialog.ex->weight = $6;
dialog.ex->italic = 0;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
@ -442,6 +484,22 @@ styles:
{
dialog.ex->weight = $6;
dialog.ex->italic = $7;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
{
dialog.ex->weight = $6;
dialog.ex->italic = $7;
dialog.ex->charset = $8;
}
}
| styles MENU id
@ -515,7 +573,7 @@ control:
{
$$ = $3;
if (dialog.ex == NULL)
rcparse_warning (_("IEDIT requires DIALOGEX"));
rcparse_warning (_("BEDIT requires DIALOGEX"));
res_string_to_id (&$$->class, "BEDIT");
}
| CHECKBOX
@ -569,7 +627,7 @@ control:
$$->data = $12;
}
$$->class.named = 1;
unicode_from_ascii(&$$->class.u.n.length, &$$->class.u.n.name, $5);
unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5);
}
| CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr
cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data
@ -580,7 +638,7 @@ control:
$$->help = $12;
$$->data = $13;
$$->class.named = 1;
unicode_from_ascii(&$$->class.u.n.length, &$$->class.u.n.name, $5);
unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5);
}
| CTEXT
{
@ -855,6 +913,9 @@ font:
id FONT memflags_move_discard file_name
{
define_font ($1, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -864,6 +925,9 @@ icon:
id ICON memflags_move_discard file_name
{
define_icon ($1, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -883,6 +947,9 @@ menu:
id MENU suboptions BEG menuitems END
{
define_menu ($1, &$3, $5);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -970,6 +1037,9 @@ menuex:
id MENUEX suboptions BEG menuexitems END
{
define_menu ($1, &$3, $5);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1036,6 +1106,9 @@ messagetable:
id MESSAGETABLE memflags_move file_name
{
define_messagetable ($1, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1045,6 +1118,9 @@ rcdata:
id RCDATA suboptions BEG optrcdata_data END
{
define_rcdata ($1, &$3, $5.first);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1124,10 +1200,16 @@ string_data:
| string_data numexpr QUOTEDSTRING
{
define_stringtable (&sub_res_info, $2, $3);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
| string_data numexpr ',' QUOTEDSTRING
{
define_stringtable (&sub_res_info, $2, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1138,10 +1220,16 @@ user:
id id suboptions BEG optrcdata_data END
{
define_user_data ($1, $2, &$3, $5.first);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
| id id suboptions file_name
{
define_user_file ($1, $2, &$3, $4);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1151,6 +1239,9 @@ versioninfo:
id VERSIONINFO fixedverinfo BEG verblocks END
{
define_versioninfo ($1, language, $3, $5);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
;
@ -1310,7 +1401,7 @@ suboptions:
memset (&$$, 0, sizeof (struct res_res_info));
$$.language = language;
/* FIXME: Is this the right default? */
$$.memflags = MEMFLAG_MOVEABLE;
$$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
}
| suboptions memflag
{
@ -1359,7 +1450,7 @@ memflags_move:
{
memset (&$$, 0, sizeof (struct res_res_info));
$$.language = language;
$$.memflags = MEMFLAG_MOVEABLE;
$$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
}
| memflags_move memflag
{

View File

@ -127,6 +127,7 @@ int do_debug_frames;
int do_debug_frames_interp;
int do_debug_macinfo;
int do_debug_str;
int do_debug_loc;
int do_arch;
int do_notes;
int is_32bit_elf;
@ -227,10 +228,13 @@ static int display_debug_aranges PARAMS ((Elf32_Internal_Sh
static int display_debug_frames PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_macinfo PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_str PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_loc PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static unsigned char * process_abbrev_section PARAMS ((unsigned char *, unsigned char *));
static void load_debug_str PARAMS ((FILE *));
static void free_debug_str PARAMS ((void));
static const char * fetch_indirect_string PARAMS ((unsigned long));
static void load_debug_loc PARAMS ((FILE *));
static void free_debug_loc PARAMS ((void));
static unsigned long read_leb128 PARAMS ((unsigned char *, int *, int));
static int process_extended_line_op PARAMS ((unsigned char *, int, int));
static void reset_state_machine PARAMS ((int));
@ -845,29 +849,49 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
if (is_32bit_elf)
{
if (is_rela)
printf
(_(" Offset Info Type Symbol's Value Symbol's Name Addend\n"));
{
if (do_wide)
printf (_(" Offset Info Type Sym. Value Symbol's Name + Addend\n"));
else
printf (_(" Offset Info Type Sym.Value Sym. Name + Addend\n"));
}
else
printf
(_(" Offset Info Type Symbol's Value Symbol's Name\n"));
{
if (do_wide)
printf (_(" Offset Info Type Sym. Value Symbol's Name\n"));
else
printf (_(" Offset Info Type Sym.Value Sym. Name\n"));
}
}
else
{
if (is_rela)
printf
(_(" Offset Info Type Symbol's Value Symbol's Name Addend\n"));
{
if (do_wide)
printf (_(" Offset Info Type Symbol's Value Symbol's Name + Addend\n"));
else
printf (_(" Offset Info Type Sym. Value Sym. Name + Addend\n"));
}
else
printf
(_(" Offset Info Type Symbol's Value Symbol's Name\n"));
{
if (do_wide)
printf (_(" Offset Info Type Symbol's Value Symbol's Name\n"));
else
printf (_(" Offset Info Type Sym. Value Sym. Name\n"));
}
}
for (i = 0; i < rel_size; i++)
{
const char * rtype;
const char * rtype2 = NULL;
const char * rtype3 = NULL;
bfd_vma offset;
bfd_vma info;
bfd_vma symtab_index;
bfd_vma type;
bfd_vma type2 = (bfd_vma) NULL;
bfd_vma type3 = (bfd_vma) NULL;
if (is_rela)
{
@ -887,10 +911,16 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
}
else
{
if (elf_header.e_machine == EM_SPARCV9)
type = ELF64_R_TYPE_ID (info);
if (elf_header.e_machine == EM_MIPS)
{
type = ELF64_MIPS_R_TYPE (info);
type2 = ELF64_MIPS_R_TYPE2 (info);
type3 = ELF64_MIPS_R_TYPE3 (info);
}
else if (elf_header.e_machine == EM_SPARCV9)
type = ELF64_R_TYPE_ID (info);
else
type = ELF64_R_TYPE (info);
type = ELF64_R_TYPE (info);
/* The #ifdef BFD64 below is to prevent a compile time warning.
We know that if we do not have a 64 bit data type that we
will never execute this code anyway. */
@ -910,13 +940,18 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
else
{
#ifdef _bfd_int64_low
printf ("%8.8lx%8.8lx %8.8lx%8.8lx ",
printf (do_wide
? "%8.8lx%8.8lx %8.8lx%8.8lx "
: "%4.4lx%8.8lx %4.4lx%8.8lx ",
_bfd_int64_high (offset),
_bfd_int64_low (offset),
_bfd_int64_high (info),
_bfd_int64_low (info));
#else
printf ("%16.16lx %16.16lx ", offset, info);
printf (do_wide
? "%16.16lx %16.16lx "
: "%12.12lx %12.12lx ",
offset, info);
#endif
}
@ -1006,6 +1041,11 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
case EM_MIPS:
case EM_MIPS_RS3_LE:
rtype = elf_mips_reloc_type (type);
if (!is_32bit_elf)
{
rtype2 = elf_mips_reloc_type (type2);
rtype3 = elf_mips_reloc_type (type3);
}
break;
case EM_ALPHA:
@ -1067,12 +1107,12 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
if (rtype == NULL)
#ifdef _bfd_int64_low
printf (_("unrecognised: %-7lx"), _bfd_int64_low (type));
printf (_("unrecognized: %-7lx"), _bfd_int64_low (type));
#else
printf (_("unrecognised: %-7lx"), type);
printf (_("unrecognized: %-7lx"), type);
#endif
else
printf ("%-21.21s", rtype);
printf (do_wide ? "%-21.21s" : "%-17.17s", rtype);
if (symtab_index)
{
@ -1086,14 +1126,14 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
printf (" ");
print_vma (psym->st_value, LONG_HEX);
printf (" ");
printf (is_32bit_elf ? " " : " ");
if (psym->st_name == 0)
print_symbol (-25, SECTION_NAME (section_headers + psym->st_shndx));
print_symbol (22, SECTION_NAME (section_headers + psym->st_shndx));
else if (strtab == NULL)
printf (_("<string table index %3ld>"), psym->st_name);
else
print_symbol (-25, strtab + psym->st_name);
print_symbol (22, strtab + psym->st_name);
if (is_rela)
printf (" + %lx", (unsigned long) relas [i].r_addend);
@ -1101,7 +1141,7 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
}
else if (is_rela)
{
printf ("%*c", is_32bit_elf ? 34 : 26, ' ');
printf ("%*c", is_32bit_elf ? (do_wide ? 34 : 28) : (do_wide ? 26 : 20), ' ');
print_vma (relas[i].r_addend, LONG_HEX);
}
@ -1110,6 +1150,33 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
putchar ('\n');
if (! is_32bit_elf && elf_header.e_machine == EM_MIPS)
{
printf (" Type2: ");
if (rtype2 == NULL)
#ifdef _bfd_int64_low
printf (_("unrecognized: %-7lx"), _bfd_int64_low (type2));
#else
printf (_("unrecognized: %-7lx"), type2);
#endif
else
printf ("%-17.17s", rtype2);
printf("\n Type3: ");
if (rtype3 == NULL)
#ifdef _bfd_int64_low
printf (_("unrecognized: %-7lx"), _bfd_int64_low (type3));
#else
printf (_("unrecognized: %-7lx"), type3);
#endif
else
printf ("%-17.17s", rtype3);
putchar ('\n');
}
}
if (is_rela)
@ -1504,7 +1571,7 @@ decode_ARM_machine_flags (e_flags, buf)
switch (eabi)
{
default:
strcat (buf, ", <unrecognised EABI>");
strcat (buf, ", <unrecognized EABI>");
if (e_flags)
unknown = 1;
break;
@ -2185,7 +2252,7 @@ usage ()
-A --arch-specific Display architecture specific information (if any).\n\
-D --use-dynamic Use the dynamic section info when displaying symbols\n\
-x --hex-dump=<number> Dump the contents of section <number>\n\
-w --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str]\n\
-w --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n\
Display the contents of DWARF2 debug sections\n"));
#ifdef SUPPORT_DISASSEMBLY
fprintf (stdout, _("\
@ -2372,8 +2439,13 @@ parse_args (argc, argv)
do_debug_str = 1;
break;
case 'o':
case 'O':
do_debug_loc = 1;
break;
default:
warn (_("Unrecognised debug option '%s'\n"), optarg);
warn (_("Unrecognized debug option '%s'\n"), optarg);
break;
}
}
@ -3238,7 +3310,8 @@ process_section_headers (file)
}
else if ((do_debugging || do_debug_info || do_debug_abbrevs
|| do_debug_lines || do_debug_pubnames || do_debug_aranges
|| do_debug_frames || do_debug_macinfo || do_debug_str)
|| do_debug_frames || do_debug_macinfo || do_debug_str
|| do_debug_loc)
&& strncmp (name, ".debug_", 7) == 0)
{
name += 7;
@ -3252,6 +3325,7 @@ process_section_headers (file)
|| (do_debug_frames && (strcmp (name, "frame") == 0))
|| (do_debug_macinfo && (strcmp (name, "macinfo") == 0))
|| (do_debug_str && (strcmp (name, "str") == 0))
|| (do_debug_loc && (strcmp (name, "loc") == 0))
)
request_dump (i, DEBUG_DUMP);
}
@ -6455,6 +6529,7 @@ get_AT_name (attribute)
case DW_AT_src_coords: return "DW_AT_src_coords";
case DW_AT_body_begin: return "DW_AT_body_begin";
case DW_AT_body_end: return "DW_AT_body_end";
case DW_AT_GNU_vector: return "DW_AT_GNU_vector";
default:
{
static char buffer [100];
@ -7124,6 +7199,112 @@ decode_location_expression (data, pointer_size, length)
}
}
static const char * debug_loc_contents;
static bfd_vma debug_loc_size;
static void
load_debug_loc (file)
FILE * file;
{
Elf32_Internal_Shdr * sec;
unsigned int i;
/* If it is already loaded, do nothing. */
if (debug_loc_contents != NULL)
return;
/* Locate the .debug_loc section. */
for (i = 0, sec = section_headers;
i < elf_header.e_shnum;
i ++, sec ++)
if (strcmp (SECTION_NAME (sec), ".debug_loc") == 0)
break;
if (i == elf_header.e_shnum || sec->sh_size == 0)
return;
debug_loc_size = sec->sh_size;
debug_loc_contents = ((char *)
get_data (NULL, file, sec->sh_offset, sec->sh_size,
_("debug_loc section data")));
}
static void
free_debug_loc ()
{
if (debug_loc_contents == NULL)
return;
free ((char *) debug_loc_contents);
debug_loc_contents = NULL;
debug_loc_size = 0;
}
static int
display_debug_loc (section, start, file)
Elf32_Internal_Shdr * section;
unsigned char * start;
FILE * file ATTRIBUTE_UNUSED;
{
unsigned char *section_end;
unsigned long bytes;
unsigned char *section_begin = start;
bfd_vma addr;
addr = section->sh_addr;
bytes = section->sh_size;
section_end = start + bytes;
if (bytes == 0)
{
printf (_("\nThe .debug_loc section is empty.\n"));
return 0;
}
printf (_("Contents of the .debug_loc section:\n\n"));
printf (_("\n Offset Begin End Expression\n"));
while (start < section_end)
{
unsigned long begin;
unsigned long end;
unsigned short length;
unsigned long offset;
offset = start - section_begin;
while (1)
{
/* Normally, the lists in the debug_loc section are related to a
given compilation unit, and thus, we would use the
pointer size of that compilation unit. However, since we are
displaying it seperately here, we either have to store
pointer sizes of all compilation units, or assume they don't
change. We assume, like the debug_line display, that
it doesn't change. */
begin = byte_get (start, debug_line_pointer_size);
start += debug_line_pointer_size;
end = byte_get (start, debug_line_pointer_size);
start += debug_line_pointer_size;
if (begin == 0 && end == 0)
break;
begin += addr;
end += addr;
length = byte_get (start, 2);
start += 2;
printf (" %8.8lx %8.8lx %8.8lx (", offset, begin, end);
decode_location_expression (start, debug_line_pointer_size, length);
printf (")\n");
start += length;
}
printf ("\n");
}
return 1;
}
static const char * debug_str_contents;
static bfd_vma debug_str_size;
@ -7379,7 +7560,7 @@ read_and_display_attr_value (attribute, form, data, cu_offset, pointer_size)
break;
default:
warn (_("Unrecognised form: %d\n"), form);
warn (_("Unrecognized form: %d\n"), form);
break;
}
@ -7528,6 +7709,12 @@ read_and_display_attr_value (attribute, form, data, cu_offset, pointer_size)
decode_location_expression (block_start, pointer_size, uvalue);
printf (")");
}
else if (form == DW_FORM_data4)
{
printf ("(");
printf ("location list");
printf (")");
}
break;
default:
@ -7564,6 +7751,7 @@ display_debug_info (section, start, file)
printf (_("The section %s contains:\n\n"), SECTION_NAME (section));
load_debug_str (file);
load_debug_loc (file);
while (start < end)
{
@ -7748,6 +7936,7 @@ display_debug_info (section, start, file)
}
free_debug_str ();
free_debug_loc ();
printf ("\n");
@ -8559,7 +8748,7 @@ debug_displays[] =
{ ".eh_frame", display_debug_frames, NULL },
{ ".debug_macinfo", display_debug_macinfo, NULL },
{ ".debug_str", display_debug_str, NULL },
{ ".debug_loc", display_debug_loc, NULL },
{ ".debug_pubtypes", display_debug_not_supported, NULL },
{ ".debug_ranges", display_debug_not_supported, NULL },
{ ".debug_static_func", display_debug_not_supported, NULL },
@ -8602,7 +8791,7 @@ display_debug_section (section, file)
}
if (i == -1)
printf (_("Unrecognised debug section: %s\n"), name);
printf (_("Unrecognized debug section: %s\n"), name);
free (start);
@ -9240,6 +9429,7 @@ process_corefile_note_segment (file, offset, length)
while (external < (Elf_External_Note *)((char *) pnotes + length))
{
Elf_External_Note * next;
Elf32_Internal_Note inote;
char * temp = NULL;
@ -9250,7 +9440,18 @@ process_corefile_note_segment (file, offset, length)
inote.descdata = inote.namedata + align_power (inote.namesz, 2);
inote.descpos = offset + (inote.descdata - (char *) pnotes);
external = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2));
next = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2));
if (((char *) next) > (((char *) pnotes) + length))
{
warn (_("corrupt note found at offset %x into core notes\n"),
((char *) external) - ((char *) pnotes));
warn (_(" type: %x, namesize: %08lx, descsize: %08lx\n"),
inote.type, inote.namesz, inote.descsz);
break;
}
external = next;
/* Verify that name is null terminated. It appears that at least
one version of Linux (RedHat 6.0) generates corefiles that don't

View File

@ -1,5 +1,5 @@
/* resbin.c -- manipulate the Windows binary resource format.
Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -30,6 +30,7 @@
/* Macros to swap in values. */
#define get_8(s) (*((unsigned char *)(s)))
#define get_16(be, s) ((be) ? bfd_getb16 (s) : bfd_getl16 (s))
#define get_32(be, s) ((be) ? bfd_getb32 (s) : bfd_getl32 (s))
@ -68,6 +69,9 @@ static struct res_resource *bin_to_res_version
PARAMS ((const unsigned char *, unsigned long, int));
static struct res_resource *bin_to_res_userdata
PARAMS ((const unsigned char *, unsigned long, int));
static void get_version_header
PARAMS ((const unsigned char *, unsigned long, int, const char *,
unichar **, int *, int *, int *, int *));
/* Given a resource type ID, a pointer to data, a length, return a
res_resource structure which represents that resource. The caller
@ -460,7 +464,7 @@ bin_to_res_dialog (data, length, big_endian)
unsigned long length;
int big_endian;
{
int version;
int signature;
struct dialog *d;
int c, sublen, i;
unsigned int off;
@ -472,8 +476,8 @@ bin_to_res_dialog (data, length, big_endian)
d = (struct dialog *) res_alloc (sizeof *d);
version = get_16 (big_endian, data);
if (version != 1)
signature = get_16 (big_endian, data + 2);
if (signature != 0xffff)
{
d->ex = NULL;
d->style = get_32 (big_endian, data);
@ -482,11 +486,11 @@ bin_to_res_dialog (data, length, big_endian)
}
else
{
int signature;
int version;
signature = get_16 (big_endian, data + 2);
if (signature != 0xffff)
fatal (_("unexpected dialog signature %d"), signature);
version = get_16 (big_endian, data);
if (version != 1)
fatal (_("unexpected DIALOGEX version %d"), version);
d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
d->ex->help = get_32 (big_endian, data + 4);
@ -514,6 +518,8 @@ bin_to_res_dialog (data, length, big_endian)
d->caption = get_unicode (data + off, length - off, big_endian, &sublen);
off += sublen * 2 + 2;
if (sublen == 0)
d->caption = NULL;
if ((d->style & DS_SETFONT) == 0)
{
@ -523,6 +529,7 @@ bin_to_res_dialog (data, length, big_endian)
{
d->ex->weight = 0;
d->ex->italic = 0;
d->ex->charset = 1; /* Default charset. */
}
}
else
@ -538,7 +545,8 @@ bin_to_res_dialog (data, length, big_endian)
if (length < off + 4)
toosmall (_("dialogex font information"));
d->ex->weight = get_16 (big_endian, data + off);
d->ex->italic = get_16 (big_endian, data + off + 2);
d->ex->italic = get_8 (data + off + 2);
d->ex->charset = get_8 (data + off + 3);
off += 4;
}
@ -808,7 +816,7 @@ static struct res_resource *
bin_to_res_rcdata (data, length, big_endian)
const unsigned char *data;
unsigned long length;
int big_endian;
int big_endian ATTRIBUTE_UNUSED;
{
struct rcdata_item *ri;
struct res_resource *r;
@ -1019,7 +1027,7 @@ bin_to_res_version (data, length, big_endian)
struct res_resource *r;
get_version_header (data, length, big_endian, "VS_VERSION_INFO",
(unichar *) NULL, &verlen, &vallen, &type, &off);
(unichar **) NULL, &verlen, &vallen, &type, &off);
if ((unsigned int) verlen != length)
fatal (_("version length %d does not match resource length %lu"),
@ -1091,7 +1099,7 @@ bin_to_res_version (data, length, big_endian)
vi->type = VERINFO_STRING;
get_version_header (data, length, big_endian, "StringFileInfo",
(unichar *) NULL, &verlen, &vallen, &type,
(unichar **) NULL, &verlen, &vallen, &type,
&off);
if (vallen != 0)
@ -1163,7 +1171,7 @@ bin_to_res_version (data, length, big_endian)
vi->type = VERINFO_VAR;
get_version_header (data, length, big_endian, "VarFileInfo",
(unichar *) NULL, &verlen, &vallen, &type,
(unichar **) NULL, &verlen, &vallen, &type,
&off);
if (vallen != 0)
@ -1231,7 +1239,7 @@ static struct res_resource *
bin_to_res_userdata (data, length, big_endian)
const unsigned char *data;
unsigned long length;
int big_endian;
int big_endian ATTRIBUTE_UNUSED;
{
struct rcdata_item *ri;
struct res_resource *r;
@ -1252,6 +1260,7 @@ bin_to_res_userdata (data, length, big_endian)
/* Macros to swap out values. */
#define put_8(v, s) (*((unsigned char *) (s)) = (unsigned char) (v))
#define put_16(be, v, s) ((be) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
#define put_32(be, v, s) ((be) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
@ -1621,12 +1630,14 @@ res_to_bin_dialog (dialog, big_endian)
if (dialog->ex == NULL)
{
put_16 (big_endian, 0, d->data + 2);
put_16 (big_endian, 0, d->data + 4);
put_8 (0, d->data + 4);
put_8 (1, d->data + 5);
}
else
{
put_16 (big_endian, dialog->ex->weight, d->data + 2);
put_16 (big_endian, dialog->ex->italic, d->data + 4);
put_8 (dialog->ex->italic, d->data + 4);
put_8 (dialog->ex->charset, d->data + 5);
}
}

View File

@ -1,5 +1,5 @@
/* resrc.c -- read and write Windows rc files.
Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -131,7 +131,7 @@ static FILE *cpp_pipe;
static char *cpp_temp_file;
/* Input stream is either a file or a pipe. */
/* Input stream is either a file or a pipe. */
static enum {ISTREAM_PIPE, ISTREAM_FILE} istream_type;
@ -173,7 +173,7 @@ static void get_data
PARAMS ((FILE *, unsigned char *, unsigned long, const char *));
static void define_fontdirs PARAMS ((void));
/* Run `cmd' and redirect the output to `redir'. */
/* Run `cmd' and redirect the output to `redir'. */
static int
run_cmd (cmd, redir)
@ -481,6 +481,7 @@ read_rc_file (filename, preprocessor, preprocargs, language, use_temp_file)
rcparse_set_language (language);
yyin = cpp_pipe;
yyparse ();
rcparse_discard_strings ();
close_input_stream ();
@ -518,7 +519,7 @@ close_input_stream ()
pclose (cpp_pipe);
}
/* Since this is also run via xatexit, safeguard. */
/* Since this is also run via xatexit, safeguard. */
cpp_pipe = NULL;
cpp_temp_file = NULL;
}
@ -1580,7 +1581,7 @@ write_rc_directory (e, rd, type, name, language, level)
case 2:
/* If we're at level 2, the key of this resource is the name
we are going to use in the rc printout. */
we are going to use in the rc printout. */
name = &re->id;
break;
@ -1592,7 +1593,8 @@ write_rc_directory (e, rd, type, name, language, level)
&& (re->id.u.id & 0xffff) == re->id.u.id)
{
fprintf (e, "LANGUAGE %lu, %lu\n",
re->id.u.id & 0xff, (re->id.u.id >> 8) & 0xff);
re->id.u.id & ((1 << SUBLANG_SHIFT) - 1),
(re->id.u.id >> SUBLANG_SHIFT) & 0xff);
*language = re->id.u.id;
}
break;
@ -2052,23 +2054,26 @@ write_rc_dialog (e, dialog)
{
const struct dialog_control *control;
if (dialog->style != 0)
fprintf (e, "STYLE 0x%lx\n", dialog->style);
fprintf (e, "STYLE 0x%lx\n", dialog->style);
if (dialog->exstyle != 0)
fprintf (e, "EXSTYLE 0x%lx\n", dialog->exstyle);
if ((dialog->class.named && dialog->class.u.n.length > 0)
|| dialog->class.u.id != 0)
{
fprintf (e, "CLASS ");
res_id_print (e, dialog->class, 0);
res_id_print (e, dialog->class, 1);
fprintf (e, "\n");
}
if (dialog->caption != NULL)
{
fprintf (e, "CAPTION \"");
unicode_print (e, dialog->caption, -1);
fprintf (e, "\"\n");
}
if ((dialog->menu.named && dialog->menu.u.n.length > 0)
|| dialog->menu.u.id != 0)
{
@ -2076,14 +2081,18 @@ write_rc_dialog (e, dialog)
res_id_print (e, dialog->menu, 0);
fprintf (e, "\n");
}
if (dialog->font != NULL)
{
fprintf (e, "FONT %d, \"", dialog->pointsize);
unicode_print (e, dialog->font, -1);
fprintf (e, "\"");
if (dialog->ex != NULL
&& (dialog->ex->weight != 0 || dialog->ex->italic != 0))
fprintf (e, ", %d, %d", dialog->ex->weight, dialog->ex->italic);
&& (dialog->ex->weight != 0
|| dialog->ex->italic != 0
|| dialog->ex->charset != 1))
fprintf (e, ", %d, %d, %d",
dialog->ex->weight, dialog->ex->italic, dialog->ex->charset);
fprintf (e, "\n");
}

View File

@ -316,6 +316,7 @@ display_archive (file)
bfd *file;
{
bfd *arfile = (bfd *) NULL;
bfd *last_arfile = (bfd *) NULL;
for (;;)
{
@ -333,8 +334,14 @@ display_archive (file)
}
display_bfd (arfile);
/* Don't close the archive elements; we need them for next_archive. */
if (last_arfile != NULL)
bfd_close (last_arfile);
last_arfile = arfile;
}
if (last_arfile != NULL)
bfd_close (last_arfile);
}
static void

View File

@ -0,0 +1 @@
PICFLAG=-fpic

View File

@ -0,0 +1 @@
PICFLAG_FOR_TARGET=-fpic

View File

@ -1,3 +1,94 @@
2002-05-13 Nick Clifton <nickc@cambridge.redhat.com>
* stabs.c (s_stab_generic): Fix grammatical error in warning
message.
2002-05-11 Nick Clifton <nickc@cambridge.redhat.com>
* stabs.c (s_stab_generic): Warn about a description field that is
too big.
2002-05-11 Daniel Jacobowitz <drow@mvista.com>
Merge from mainline:
2002-05-11 Nick Clifton <nickc@cambridge.redhat.com>
* config/obj-coff.c: Fix compile time warnings when compiling
without BFD_ASSEMBLER defined.
Fix formatting.
* config/tc-sh.c (md_pcrel_from): Define for use with sh-hms
target.
(md_pcrel_from_section): Use md_pcrel_from().
2002-05-09 Alan Modra <amodra@bigpond.net.au>
* config/tc-i386.c (md_estimate_size_before_relax) Don't lose
reloc when no_cond_jump_promotion.
Merge from mainline
2002-05-08 Jim Wilson <wilson@redhat.com>
* config/tc-i960.c (md_estimate_size_before_relax): Return size of
current variable part of frag.
2002-05-02 Alan Modra <amodra@bigpond.net.au>
* config/tc-ppc.c (mapping): Map sectoff to BFD_RELOC_16_BASEREL.
(ppc_elf_validate_fix): Replace BFD_RELOC_32_BASEREL with
BFD_RELOC_16_BASEREL.
(md_assemble): Likewise.
(md_apply_fix3): Likewise.
2002-05-01 Andrew Macleod <amacleod@cygnus.com>
* config/tc-i386.c (extra_symbol_chars): Add '[' to the list.
2002-04-28 Alan Modra <amodra@bigpond.net.au>
* config/tc-i386.c: Formatting fixes, add missing space in error
message.
2002-05-03 Alexandre Oliva <aoliva@redhat.com>
* config/tc-s390.c (md_gather_operands): Emit dwarf2 line-number
information for instructions.
2002-05-02 Nick Clifton <nickc@cambridge.redhat.com>
* config/tc-arm.c (thumb_add_sub): Do not convert a subtract of
zero into an add of zero - it is not the same.
2002-04-27 Alan Modra <amodra@bigpond.net.au>
Merge from mainline.
2002-04-17 Martin Schwidefsky <schwidefsky@de.ibm.com>
* config/tc-s390.c (tc_s390_fix_adjustable): Prevent adjustments to
symbols in merge sections.
2002-02-19 Martin Schwidefsky <schwidefsky@de.ibm.com>
* config/tc-s390.c (md_parse_option): Add switches -m31 and -m64.
Make bit size independent of architecture switch.
(md_begin): Add warning for -m64 with -Aesa.
(s390_md_end): Use renamed architecture defines.
2002-02-19 Tom Tromey <tromey@redhat.com>
* config/tc-xstormy16.h (DWARF2_LINE_MIN_INSN_LENGTH): Define.
Tue Apr 9 16:45:48 2002 J"orn Rennecke <joern.rennecke@superh.com>
* config/tc-sh.h (TC_FIX_ADJUSTABLE): Disable adjusting if
symbol_used_in_reloc_p is true.
* config/tc-sh.c (md_apply_fix3): Don't zero relocations on big
endian hosts.
2002-04-03 Alan Modra <amodra@bigpond.net.au>
* symbols.c (resolve_symbol_value <O_uminus, O_bit_not,
O_logical_not>): Derive final_seg from add_symbol.
<O_multiply..O_logical_or>: More final_seg twiddles.
2002-04-24 Andreas Schwab <schwab@suse.de>
* config/tc-i386.c (output_jump, output_disp)
(md_estimate_size_before_relax): Don't set fx_pcrel_adjust any
more.
(md_apply_fix3): Remember addend value for rela relocations.
(tc_gen_reloc): Correctly compute pc-relative relocation addend.
2002-04-10 Alan Modra <amodra@bigpond.net.au>
* as.c (parse_args <OPTION_VERSION>): Use VERSION is

File diff suppressed because it is too large Load Diff

View File

@ -521,7 +521,7 @@ struct vfp_reg
unsigned long regno;
};
static const struct vfp_reg vfp_regs[] =
static const struct vfp_reg vfp_regs[] =
{
{"fpsid", 0x00000000},
{"FPSID", 0x00000000},
@ -842,7 +842,7 @@ static void do_mav_binops_3a PARAMS ((char *));
static void do_mav_binops_3b PARAMS ((char *));
static void do_mav_binops_3c PARAMS ((char *));
static void do_mav_binops_3d PARAMS ((char *));
static void do_mav_triple PARAMS ((char *, int, enum arm_reg_type,
static void do_mav_triple PARAMS ((char *, int, enum arm_reg_type,
enum arm_reg_type,
enum arm_reg_type));
static void do_mav_triple_4a PARAMS ((char *));
@ -855,7 +855,7 @@ static void do_mav_triple_5e PARAMS ((char *));
static void do_mav_triple_5f PARAMS ((char *));
static void do_mav_triple_5g PARAMS ((char *));
static void do_mav_triple_5h PARAMS ((char *));
static void do_mav_quad PARAMS ((char *, int, enum arm_reg_type,
static void do_mav_quad PARAMS ((char *, int, enum arm_reg_type,
enum arm_reg_type,
enum arm_reg_type,
enum arm_reg_type));
@ -1106,7 +1106,7 @@ static const struct asm_opcode insns[] =
{"strh", 0xe00000b0, 3, ARM_EXT_V4, do_ldstv4},
/* ARM Architecture 4T. */
/* Note: bx (and blx) are required on V5, even if the processor does
/* Note: bx (and blx) are required on V5, even if the processor does
not support Thumb. */
{"bx", 0xe12fff10, 2, ARM_EXT_V4T | ARM_EXT_V5, do_bx},
@ -7447,7 +7447,9 @@ thumb_add_sub (str, subtract)
return;
}
}
else
/* Note - you cannot convert a subtract of 0 into an
add of 0 because the carry flag is set differently. */
else if (offset > 0)
subtract = 0;
if (Rd == REG_SP)
@ -7927,7 +7929,7 @@ mav_reg_required_here (str, shift, regtype)
/* Restore the start point. */
*str = start;
/* In the few cases where we might be able to accept something else
this error can be overridden. */
inst.error = _(all_reg_maps[regtype].expected);

View File

@ -1374,7 +1374,7 @@ ppc_elf_suffix (str_p, exp_p)
MAP ("plt@h", (int) BFD_RELOC_HI16_PLTOFF),
MAP ("plt@ha", (int) BFD_RELOC_HI16_S_PLTOFF),
MAP ("sdarel", (int) BFD_RELOC_GPREL16),
MAP ("sectoff", (int) BFD_RELOC_32_BASEREL),
MAP ("sectoff", (int) BFD_RELOC_16_BASEREL),
MAP ("sectoff@l", (int) BFD_RELOC_LO16_BASEREL),
MAP ("sectoff@h", (int) BFD_RELOC_HI16_BASEREL),
MAP ("sectoff@ha", (int) BFD_RELOC_HI16_S_BASEREL),
@ -1683,7 +1683,7 @@ ppc_elf_validate_fix (fixp, seg)
&& fixp->fx_r_type != BFD_RELOC_HI16_GOTOFF
&& fixp->fx_r_type != BFD_RELOC_LO16_GOTOFF
&& fixp->fx_r_type != BFD_RELOC_HI16_S_GOTOFF
&& fixp->fx_r_type != BFD_RELOC_32_BASEREL
&& fixp->fx_r_type != BFD_RELOC_16_BASEREL
&& fixp->fx_r_type != BFD_RELOC_LO16_BASEREL
&& fixp->fx_r_type != BFD_RELOC_HI16_BASEREL
&& fixp->fx_r_type != BFD_RELOC_HI16_S_BASEREL
@ -2236,7 +2236,7 @@ md_assemble (str)
case BFD_RELOC_LO16_PLTOFF:
reloc = BFD_RELOC_PPC64_PLT16_LO_DS;
break;
case BFD_RELOC_32_BASEREL:
case BFD_RELOC_16_BASEREL:
reloc = BFD_RELOC_PPC64_SECTOFF_DS;
break;
case BFD_RELOC_LO16_BASEREL:
@ -5280,7 +5280,6 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_RVA:
case BFD_RELOC_32_PCREL:
case BFD_RELOC_32_BASEREL:
case BFD_RELOC_PPC_EMB_NADDR32:
md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
value, 4);
@ -5305,6 +5304,7 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_LO16_GOTOFF:
case BFD_RELOC_HI16_GOTOFF:
case BFD_RELOC_HI16_S_GOTOFF:
case BFD_RELOC_16_BASEREL:
case BFD_RELOC_LO16_BASEREL:
case BFD_RELOC_HI16_BASEREL:
case BFD_RELOC_HI16_S_BASEREL:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,115 @@
/* tc-s390.h -- Header file for tc-s390.c.
Copyright 2000, 2001 Free Software Foundation, Inc.
Written by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GAS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#define TC_S390
#ifdef ANSI_PROTOTYPES
struct fix;
#endif
#ifndef BFD_ASSEMBLER
#error S390 support requires BFD_ASSEMBLER
#endif
/* This expression evaluates to false if the relocation is for a local object
for which we still want to do the relocation at runtime. True if we
are willing to perform this relocation while building the .o file.
This is only used for pcrel relocations, so GOTOFF does not need to be
checked here. I am not sure if some of the others are ever used with
pcrel, but it is easier to be safe than sorry. */
#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \
((FIX)->fx_r_type != BFD_RELOC_390_GOTENT \
&& ((FIX)->fx_addsy == NULL \
|| (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
&& ! S_IS_WEAK ((FIX)->fx_addsy) \
&& S_IS_DEFINED ((FIX)->fx_addsy) \
&& ! S_IS_COMMON ((FIX)->fx_addsy))))
#define TC_FORCE_RELOCATION(FIXP) tc_s390_force_relocation(FIXP)
extern int tc_s390_force_relocation PARAMS ((struct fix *));
#define tc_fix_adjustable(X) tc_s390_fix_adjustable(X)
extern int tc_s390_fix_adjustable PARAMS ((struct fix *));
#define TC_FIX_ADJUSTABLE(fixP) \
(! symbol_used_in_reloc_p ((fixP)->fx_addsy) && tc_fix_adjustable (fixP))
/* The target BFD architecture. */
#define TARGET_ARCH bfd_arch_s390
extern enum bfd_architecture s390_arch PARAMS ((void));
/* The target BFD format. */
#define TARGET_FORMAT s390_target_format()
extern const char * s390_target_format PARAMS ((void));
/* Set the endianness we are using. */
#define TARGET_BYTES_BIG_ENDIAN 1
/* Whether or not the target is big endian */
extern int target_big_endian;
/* Permit temporary numeric labels. */
#define LOCAL_LABELS_FB 1
/* $ is used to refer to the current location. */
/* #define DOLLAR_DOT */
/* We need to be able to make relocations involving the difference of
two symbols. This includes the difference of two symbols when
one of them is undefined (this comes up in PIC code generation).
*/
#define UNDEFINED_DIFFERENCE_OK
/* foo-. gets turned into PC relative relocs */
#define DIFF_EXPR_OK
/* We don't need to handle .word strangely. */
#define WORKING_DOT_WORD
#define md_number_to_chars number_to_chars_bigendian
#define md_do_align(n, fill, len, max, around) \
if ((n) && !need_pass_2 && (fill == 0) && \
(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0) { \
char *p; \
p = frag_var (rs_align_code, 15, 1, (relax_substateT) max, \
(symbolS *) 0, (offsetT) (n), (char *) 0); \
*p = 0x07; \
goto around; \
}
extern void s390_align_code PARAMS ((fragS *, int));
#define HANDLE_ALIGN(fragP) \
if (fragP->fr_type == rs_align_code) \
s390_align_code (fragP, (fragP->fr_next->fr_address \
- fragP->fr_address \
- fragP->fr_fix));
/* call md_pcrel_from_section, not md_pcrel_from */
#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section(FIXP, SEC)
extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
#define md_operand(x)
extern void s390_md_end PARAMS ((void));
#define md_end() s390_md_end ()

View File

@ -240,6 +240,14 @@ s_stab_generic (what, stab_secname, stabstr_secname)
other = longint;
desc = get_absolute_expression ();
if ((desc > 0xffff) || (desc < -0x8000))
/* This could happen for example with a source file with a huge
number of lines. The only cure is to use a different debug
format, probably DWARF. */
as_warn (_(".stab%c: description field '%x' too big, try a different debug format"),
what, desc);
if (what == 's' || what == 'n')
{
if (*input_line_pointer != ',')

View File

@ -986,6 +986,7 @@ resolve_symbol_value (symp)
case O_bit_not:
case O_logical_not:
left = resolve_symbol_value (add_symbol);
seg_left = S_GET_SEGMENT (add_symbol);
if (op == O_uminus)
left = -left;
@ -996,7 +997,7 @@ resolve_symbol_value (symp)
final_val += left + symp->sy_frag->fr_address;
if (final_seg == expr_section || final_seg == undefined_section)
final_seg = absolute_section;
final_seg = seg_left;
resolved = symbol_resolved_p (add_symbol);
break;
@ -1062,15 +1063,19 @@ resolve_symbol_value (symp)
Don't emit messages unless we're finalizing the symbol value,
otherwise we may get the same message multiple times. */
if (op != O_eq && op != O_ne
&& (seg_left != absolute_section
|| seg_right != absolute_section)
&& ((op != O_subtract
&& op != O_lt && op != O_le && op != O_ge && op != O_gt)
|| seg_left != seg_right
|| (seg_left == undefined_section
&& add_symbol != op_symbol))
&& finalize_syms)
if ((op == O_eq || op == O_ne)
|| ((op == O_subtract
|| op == O_lt || op == O_le || op == O_ge || op == O_gt)
&& seg_left == seg_right
&& (seg_left != undefined_section
|| add_symbol == op_symbol))
|| (seg_left == absolute_section
&& seg_right == absolute_section))
{
if (final_seg == expr_section || final_seg == undefined_section)
final_seg = absolute_section;
}
else if (finalize_syms)
{
char *file;
unsigned int line;
@ -1105,6 +1110,9 @@ resolve_symbol_value (symp)
as_bad (_("invalid section for operation setting `%s'"),
S_GET_NAME (symp));
}
/* Prevent the error propagating. */
if (final_seg == expr_section || final_seg == undefined_section)
final_seg = absolute_section;
}
/* Check for division by zero. */
@ -1160,7 +1168,15 @@ resolve_symbol_value (symp)
final_val += symp->sy_frag->fr_address + left;
if (final_seg == expr_section || final_seg == undefined_section)
final_seg = absolute_section;
{
if (seg_left == undefined_section
|| seg_right == undefined_section)
final_seg = undefined_section;
else if (seg_left == absolute_section)
final_seg = seg_right;
else
final_seg = seg_left;
}
resolved = (symbol_resolved_p (add_symbol)
&& symbol_resolved_p (op_symbol));
break;

View File

@ -1,3 +1,9 @@
2002-04-2 Alan Modra <amodra@bigpond.net.au>
Merge from mainline.
2002-04-24 Elena Zannoni <ezannoni@redhat.com>
* dwarf2.h: Add DW_AT_GNU_vector.
2002-02-13 Matt Fredette <fredette@netbsd.org>
* m68k.h (EF_M68000): Define.

View File

@ -328,6 +328,7 @@ enum dwarf_attribute
DW_AT_src_coords = 0x2104,
DW_AT_body_begin = 0x2105,
DW_AT_body_end = 0x2106,
DW_AT_GNU_vector = 0x2107,
/* VMS Extensions. */
DW_AT_VMS_rtnbeg_pd_address = 0x2201
};

View File

@ -1,3 +1,10 @@
2002-04-27 Alan Modra <amodra@bigpond.net.au>
Merge from mainline
2002-04-11 Alan Modra <amodra@bigpond.net.au>
* i386.h: Add intel mode cmpsd and movsd.
Put them before SSE2 insns, so that rep prefix works.
2002-02-25 Alan Modra <amodra@bigpond.net.au>
* ppc.h (PPC_OPCODE_POWER4, PPC_OPCODE_NOPOWER4): Define.

View File

@ -1231,6 +1231,9 @@ static const template i386_optab[] = {
{"cmpunordpd",2, 0x660fc2, 3, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
{"cmpunordsd",2, 0xf20fc2, 3, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
{"cmppd", 3, 0x660fc2, X, CpuSSE2, FP|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
/* Intel mode string compare. */
{"cmpsd", 0, 0xa7, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
{"cmpsd", 2, 0xa7, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
{"cmpsd", 3, 0xf20fc2, X, CpuSSE2, FP|Modrm, { Imm8, RegXMM|LongMem, RegXMM } },
{"comisd", 2, 0x660f2f, X, CpuSSE2, FP|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
{"cvtpi2pd", 2, 0x660f2a, X, CpuSSE2, FP|Modrm, { RegMMX|LLongMem, RegXMM, 0 } },
@ -1249,6 +1252,9 @@ static const template i386_optab[] = {
{"movlpd", 2, 0x660f13, X, CpuSSE2, FP|Modrm, { RegXMM, LLongMem, 0 } },
{"movmskpd", 2, 0x660f50, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm, { RegXMM|InvMem, Reg32|Reg64, 0 } },
{"movntpd", 2, 0x660f2b, X, CpuSSE2, FP|Modrm, { RegXMM, LLongMem, 0 } },
/* Intel mode string move. */
{"movsd", 0, 0xa5, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
{"movsd", 2, 0xa5, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
{"movsd", 2, 0xf20f10, X, CpuSSE2, FP|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
{"movsd", 2, 0xf20f11, X, CpuSSE2, FP|Modrm, { RegXMM, RegXMM|LongMem, 0 } },
{"movupd", 2, 0x660f10, X, CpuSSE2, FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },

View File

@ -0,0 +1,130 @@
/* s390.h -- Header file for S390 opcode table
Copyright 2000, 2001 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#ifndef S390_H
#define S390_H
/* List of instruction sets variations. */
enum s390_opcode_arch_val
{
S390_OPCODE_ESA = 0,
S390_OPCODE_ESAME
};
/* The opcode table is an array of struct s390_opcode. */
struct s390_opcode
{
/* The opcode name. */
const char * name;
/* The opcode itself. Those bits which will be filled in with
operands are zeroes. */
unsigned char opcode[6];
/* The opcode mask. This is used by the disassembler. This is a
mask containing ones indicating those bits which must match the
opcode field, and zeroes indicating those bits which need not
match (and are presumably filled in by operands). */
unsigned char mask[6];
/* The opcode length in bytes. */
int oplen;
/* An array of operand codes. Each code is an index into the
operand table. They appear in the order which the operands must
appear in assembly code, and are terminated by a zero. */
unsigned char operands[6];
/* Bitmask of architectures this opcode is available for. */
unsigned int architecture;
};
/* The table itself is sorted by major opcode number, and is otherwise
in the order in which the disassembler should consider
instructions. */
extern const struct s390_opcode s390_opcodes[];
extern const int s390_num_opcodes;
/* A opcode format table for the .insn pseudo mnemonic. */
extern const struct s390_opcode s390_opformats[];
extern const int s390_num_opformats;
/* Values defined for the flags field of a struct powerpc_opcode. */
/* The operands table is an array of struct s390_operand. */
struct s390_operand
{
/* The number of bits in the operand. */
int bits;
/* How far the operand is left shifted in the instruction. */
int shift;
/* One bit syntax flags. */
unsigned long flags;
};
/* Elements in the table are retrieved by indexing with values from
the operands field of the powerpc_opcodes table. */
extern const struct s390_operand s390_operands[];
/* Values defined for the flags field of a struct s390_operand. */
/* This operand names a register. The disassembler uses this to print
register names with a leading 'r'. */
#define S390_OPERAND_GPR 0x1
/* This operand names a floating point register. The disassembler
prints these with a leading 'f'. */
#define S390_OPERAND_FPR 0x2
/* This operand names an access register. The disassembler
prints these with a leading 'a'. */
#define S390_OPERAND_AR 0x4
/* This operand names a control register. The disassembler
prints these with a leading 'c'. */
#define S390_OPERAND_CR 0x8
/* This operand is a displacement. */
#define S390_OPERAND_DISP 0x10
/* This operand names a base register. */
#define S390_OPERAND_BASE 0x20
/* This operand names an index register, it can be skipped. */
#define S390_OPERAND_INDEX 0x40
/* This operand is a relative branch displacement. The disassembler
prints these symbolically if possible. */
#define S390_OPERAND_PCREL 0x80
/* This operand takes signed values. */
#define S390_OPERAND_SIGNED 0x100
/* This operand is a length. */
#define S390_OPERAND_LENGTH 0x200
#endif /* S390_H */

View File

@ -1,3 +1,39 @@
2002-05-09 Alan Modra <amodra@bigpond.net.au>
Merge from mainline.
2002-05-02 Alan Modra <amodra@bigpond.net.au>
* emultempl/ppc64elf.em (gld${EMULATION_NAME}_after_allocation):
Adjust for ppc64_elf_set_toc change. #include libbfd.h.
2002-04-28 Alan Modra <amodra@bigpond.net.au>
* Makefile.am (mpw): New maintainer mode rule to make mpw-*.c files.
* Makefile.in: Regenerate.
* mpw-elfmips.c: Delete.
* mpw-eppcmac.c: Delete.
* mpw-esh.c: Delete.
* mpw-idtmips.c: Delete.
2002-04-27 Alan Modra <amodra@bigpond.net.au>
Merge from mainline
2002-04-08 Alan Modra <amodra@bigpond.net.au>
* ldlang.c (lang_size_sections): Don't complain about
SEC_NEVER_LOAD sections having no memory region specified.
* ld.texinfo (Format Commands <OUTPUT_FORMAT>): Typo fix.
2002-04-07 matthew green <mrg@redhat.com>
* ld/configure.host (*-*-netbsd*): Add support for NetBSD/ELF.
2002-02-19 Martin Schwidefsky <schwidefsky@de.ibm.com>
* emulparams/elf64_s390.sh (ARCH): Change to "s390:64-bit".
* emulparams/elf_s390.sh (ARCH): Change to "s390:31-bit".
2002-04-11 Nick Clifton <nickc@cambridge.redhat.com>
* emultempl/armelf.em (PARSE_AND_LIST_SHORTOPTS): Add 'n' in order
to prevent "-n" from being taken as an abbreviation for
"--no-pipeline-knowledge".
2002-04-04 Alan Modra <amodra@bigpond.net.au>
* dep-in.sed: Cope with absolute paths.

View File

@ -1196,6 +1196,29 @@ dep-am: DEP
.PHONY: dep dep-in dep-am
@MAINT@.PHONY: mpw
@MAINT@mpw: $(srcdir)/mpw-ei386go32.c $(srcdir)/mpw-elfmips.c \
@MAINT@ $(srcdir)/mpw-em68kcoff.c $(srcdir)/mpw-eppcmac.c \
@MAINT@ $(srcdir)/mpw-esh.c $(srcdir)/mpw-idtmips.c
@MAINT@
@MAINT@$(srcdir)/mpw-ei386go32.c: ei386go32.c
@MAINT@ $(srcdir)/../move-if-change $< $@
@MAINT@
@MAINT@$(srcdir)/mpw-elfmips.c: eelf32ebmip.c
@MAINT@ $(srcdir)/../move-if-change $< $@
@MAINT@
@MAINT@$(srcdir)/mpw-em68kcoff.c: em68kcoff.c
@MAINT@ $(srcdir)/../move-if-change $< $@
@MAINT@
@MAINT@$(srcdir)/mpw-eppcmac.c: eppcmacos.c
@MAINT@ $(srcdir)/../move-if-change $< $@
@MAINT@
@MAINT@$(srcdir)/mpw-esh.c: esh.c
@MAINT@ $(srcdir)/../move-if-change $< $@
@MAINT@
@MAINT@$(srcdir)/mpw-idtmips.c: emipsidt.c
@MAINT@ $(srcdir)/../move-if-change $< $@
# What appears below is generated by a hacked mkdep using gcc -MM.
# DO NOT DELETE THIS LINE -- mkdep uses it.

View File

@ -0,0 +1,11 @@
SCRIPT_NAME=elf
ELFSIZE=64
OUTPUT_FORMAT="elf64-s390"
TEXT_START_ADDR=0x80000000
MAXPAGESIZE=0x1000
NONPAGED_TEXT_START_ADDR=0x80000000
ARCH="s390:64-bit"
MACHINE=
NOP=0x07070707
TEMPLATE_NAME=elf32
GENERATE_SHLIB_SCRIPT=yes

View File

@ -0,0 +1,10 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-s390"
TEXT_START_ADDR=0x00400000
MAXPAGESIZE=0x1000
NONPAGED_TEXT_START_ADDR=0x00400000
ARCH="s390:31-bit"
MACHINE=
NOP=0x07070707
TEMPLATE_NAME=elf32
GENERATE_SHLIB_SCRIPT=yes

View File

@ -156,7 +156,12 @@ PARSE_AND_LIST_PROLOGUE='
#define OPTION_THUMB_ENTRY 301
'
PARSE_AND_LIST_SHORTOPTS=p
# Note we add 'n' to the short option list in order to prevent
# getopt_long_only from thinking that -n is a unique abbreviation
# for --no-pipeline-knowledge. There is no case to handle 'n' here
# however, so instead it will be passed back to parse_args() in
# lexsup.c where it will be handled.
PARSE_AND_LIST_SHORTOPTS=pn
PARSE_AND_LIST_LONGOPTS='
{ "no-pipeline-knowledge", no_argument, NULL, '\'p\''},

View File

@ -23,6 +23,7 @@
#
cat >>e${EMULATION_NAME}.c <<EOF
#include "libbfd.h"
#include "elf64-ppc.h"
static int need_laying_out = 0;
@ -35,8 +36,8 @@ static void gld${EMULATION_NAME}_finish PARAMS ((void));
static void
gld${EMULATION_NAME}_after_allocation ()
{
if (!ppc64_elf_set_toc (output_bfd, &link_info))
einfo ("%X%P: can not set TOC base: %E\n");
if (!link_info.relocateable)
_bfd_set_gp_value (output_bfd, ppc64_elf_toc (output_bfd));
}
/* Final emulation specific call. PowerPC64 has 24 byte .plt entries,

View File

@ -2277,7 +2277,7 @@ A couple of linker script commands deal with object file formats.
@cindex output file format in linker script
The @code{OUTPUT_FORMAT} command names the BFD format to use for the
output file (@pxref{BFD}). Using @code{OUTPUT_FORMAT(@var{bfdname})} is
exactly like using @samp{-oformat @var{bfdname}} on the command line
exactly like using @samp{--oformat @var{bfdname}} on the command line
(@pxref{Options,,Command Line Options}). If both are used, the command
line option takes precedence.

View File

@ -2914,6 +2914,8 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
defined, issue a warning. */
if ((bfd_get_section_flags (output_bfd, os->bfd_section)
& (SEC_ALLOC | SEC_LOAD)) != 0
&& (bfd_get_section_flags (output_bfd, os->bfd_section)
& SEC_NEVER_LOAD) == 0
&& ! link_info.relocateable
&& strcmp (os->region->name, "*default*") == 0
&& lang_memory_region_list != NULL

View File

@ -1,3 +1,31 @@
2002-05-09 Anton Blanchard <anton@samba.org>
* ppc-opc.c: Add "tlbiel" for POWER4.
2002-05-09 Alan Modra <amodra@bigpond.net.au>
Merge from mainline.
2002-05-01 Alan Modra <amodra@bigpond.net.au>
* ppc-opc.c: Add "tlbsx." and "tlbsxe." for booke.
2002-04-17 matthew green <mrg@redhat.com>
* ppc-opc.c (powerpc_opcode): Fix dssall operand list.
2002-04-29 Chris Demetriou <cgd@broadcom.com>
Merge from mainline:
2002-03-06 Chris Demetriou <cgd@broadcom.com>
* mips-opc.c (mips_builtin_opcodes): Mark "pref" as being
present on I4.
Merge from mainline:
2002-03-06 Chris Demetriou <cgd@broadcom.com>
* mips-opc.c (mips_builtin_opcodes): Add "movn.ps" and "movz.ps".
Merge from mainline:
2002-03-15 Chris Demetriou <cgd@broadcom.com>
* mips-dis.c (is_newabi): Fix ABI decoding.
2002-04-04 Alan Modra <amodra@bigpond.net.au>
* dep-in.sed: Cope with absolute paths.

View File

@ -3065,6 +3065,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
{ "caxo.", XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
{ "tlbiel", X(31,274), XRTRA_MASK, POWER4, { RB } },
{ "mfapidi", X(31,275), X_MASK, BOOKE, { RT, RA } },
{ "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
@ -3672,7 +3674,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
{ "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } },
{ "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { STRM } },
{ "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } },
{ "srawi", XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
{ "srai", XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } },
@ -3688,7 +3690,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbsx.", XRC(31,914,1), X_MASK, PPC403, { RT, RA, RB } },
{ "tlbsx", XRC(31,914,0), X_MASK, BOOKE, { RA, RB } },
{ "tlbsx.", XRC(31,914,1), X_MASK, BOOKE, { RA, RB } },
{ "tlbsxe", XRC(31,915,0), X_MASK, BOOKE, { RA, RB } },
{ "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE, { RA, RB } },
{ "slbmfee", X(31,915), XRA_MASK, PPC64, { RT, RB } },

View File

@ -0,0 +1,257 @@
/* s390-dis.c -- Disassemble S390 instructions
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of GDB, GAS and the GNU binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include <stdio.h>
#include "ansidecl.h"
#include "sysdep.h"
#include "dis-asm.h"
#include "opcode/s390.h"
static int init_flag = 0;
static int opc_index[256];
static int current_arch_mask = 0;
static void init_disasm PARAMS ((struct disassemble_info *));
static unsigned int s390_extract_operand
PARAMS ((unsigned char *, const struct s390_operand *));
/* Set up index table for first opcode byte. */
static void
init_disasm (info)
struct disassemble_info *info;
{
const struct s390_opcode *opcode;
const struct s390_opcode *opcode_end;
memset (opc_index, 0, sizeof (opc_index));
opcode_end = s390_opcodes + s390_num_opcodes;
for (opcode = s390_opcodes; opcode < opcode_end; opcode++)
{
opc_index[(int) opcode->opcode[0]] = opcode - s390_opcodes;
while ((opcode < opcode_end) &&
(opcode[1].opcode[0] == opcode->opcode[0]))
opcode++;
}
switch (info->mach)
{
case bfd_mach_s390_31:
current_arch_mask = 1 << S390_OPCODE_ESA;
break;
case bfd_mach_s390_64:
current_arch_mask = 1 << S390_OPCODE_ESAME;
break;
default:
abort ();
}
init_flag = 1;
}
/* Extracts an operand value from an instruction. */
static inline unsigned int
s390_extract_operand (insn, operand)
unsigned char *insn;
const struct s390_operand *operand;
{
unsigned int val;
int bits;
/* Extract fragments of the operand byte for byte. */
insn += operand->shift / 8;
bits = (operand->shift & 7) + operand->bits;
val = 0;
do
{
val <<= 8;
val |= (unsigned int) *insn++;
bits -= 8;
}
while (bits > 0);
val >>= -bits;
val &= ((1U << (operand->bits - 1)) << 1) - 1;
/* Sign extend value if the operand is signed or pc relative. */
if ((operand->flags & (S390_OPERAND_SIGNED | S390_OPERAND_PCREL))
&& (val & (1U << (operand->bits - 1))))
val |= (-1U << (operand->bits - 1)) << 1;
/* Double value if the operand is pc relative. */
if (operand->flags & S390_OPERAND_PCREL)
val <<= 1;
/* Length x in an instructions has real length x+1. */
if (operand->flags & S390_OPERAND_LENGTH)
val++;
return val;
}
/* Print a S390 instruction. */
int
print_insn_s390 (memaddr, info)
bfd_vma memaddr;
struct disassemble_info *info;
{
bfd_byte buffer[6];
const struct s390_opcode *opcode;
const struct s390_opcode *opcode_end;
unsigned int value;
int status, opsize, bufsize;
char separator;
if (init_flag == 0)
init_disasm (info);
/* The output looks better if we put 6 bytes on a line. */
info->bytes_per_line = 6;
/* Every S390 instruction is max 6 bytes long. */
memset (buffer, 0, 6);
status = (*info->read_memory_func) (memaddr, buffer, 6, info);
if (status != 0)
{
for (bufsize = 0; bufsize < 6; bufsize++)
if ((*info->read_memory_func) (memaddr, buffer, bufsize + 1, info) != 0)
break;
if (bufsize <= 0)
{
(*info->memory_error_func) (status, memaddr, info);
return -1;
}
/* Opsize calculation looks strange but it works
00xxxxxx -> 2 bytes, 01xxxxxx/10xxxxxx -> 4 bytes,
11xxxxxx -> 6 bytes. */
opsize = ((((buffer[0] >> 6) + 1) >> 1) + 1) << 1;
status = opsize > bufsize;
}
else
{
bufsize = 6;
opsize = ((((buffer[0] >> 6) + 1) >> 1) + 1) << 1;
}
if (status == 0)
{
/* Find the first match in the opcode table. */
opcode_end = s390_opcodes + s390_num_opcodes;
for (opcode = s390_opcodes + opc_index[(int) buffer[0]];
(opcode < opcode_end) && (buffer[0] == opcode->opcode[0]);
opcode++)
{
const struct s390_operand *operand;
const unsigned char *opindex;
/* Check architecture. */
if (!(opcode->architecture & current_arch_mask))
continue;
/* Check signature of the opcode. */
if ((buffer[1] & opcode->mask[1]) != opcode->opcode[1]
|| (buffer[2] & opcode->mask[2]) != opcode->opcode[2]
|| (buffer[3] & opcode->mask[3]) != opcode->opcode[3]
|| (buffer[4] & opcode->mask[4]) != opcode->opcode[4]
|| (buffer[5] & opcode->mask[5]) != opcode->opcode[5])
continue;
/* The instruction is valid. */
if (opcode->operands[0] != 0)
(*info->fprintf_func) (info->stream, "%s\t", opcode->name);
else
(*info->fprintf_func) (info->stream, "%s", opcode->name);
/* Extract the operands. */
separator = 0;
for (opindex = opcode->operands; *opindex != 0; opindex++)
{
unsigned int value;
operand = s390_operands + *opindex;
value = s390_extract_operand (buffer, operand);
if ((operand->flags & S390_OPERAND_INDEX) && value == 0)
continue;
if ((operand->flags & S390_OPERAND_BASE) &&
value == 0 && separator == '(')
{
separator = ',';
continue;
}
if (separator)
(*info->fprintf_func) (info->stream, "%c", separator);
if (operand->flags & S390_OPERAND_GPR)
(*info->fprintf_func) (info->stream, "%%r%i", value);
else if (operand->flags & S390_OPERAND_FPR)
(*info->fprintf_func) (info->stream, "%%f%i", value);
else if (operand->flags & S390_OPERAND_AR)
(*info->fprintf_func) (info->stream, "%%a%i", value);
else if (operand->flags & S390_OPERAND_CR)
(*info->fprintf_func) (info->stream, "%%c%i", value);
else if (operand->flags & S390_OPERAND_PCREL)
(*info->print_address_func) (memaddr + (int) value, info);
else if (operand->flags & S390_OPERAND_SIGNED)
(*info->fprintf_func) (info->stream, "%i", (int) value);
else
(*info->fprintf_func) (info->stream, "%i", value);
if (operand->flags & S390_OPERAND_DISP)
{
separator = '(';
}
else if (operand->flags & S390_OPERAND_BASE)
{
(*info->fprintf_func) (info->stream, ")");
separator = ',';
}
else
separator = ',';
}
/* Found instruction, printed it, return its size. */
return opsize;
}
/* No matching instruction found, fall through to hex print. */
}
if (bufsize >= 4)
{
value = (unsigned int) buffer[0];
value = (value << 8) + (unsigned int) buffer[1];
value = (value << 8) + (unsigned int) buffer[2];
value = (value << 8) + (unsigned int) buffer[3];
(*info->fprintf_func) (info->stream, ".long\t0x%08x", value);
return 4;
}
else if (bufsize >= 2)
{
value = (unsigned int) buffer[0];
value = (value << 8) + (unsigned int) buffer[1];
(*info->fprintf_func) (info->stream, ".short\t0x%04x", value);
return 2;
}
else
{
value = (unsigned int) buffer[0];
(*info->fprintf_func) (info->stream, ".byte\t0x%02x", value);
return 1;
}
}

View File

@ -0,0 +1,190 @@
/* s390-mkopc.c -- Generates opcode table out of s390-opc.txt
Copyright 2000, 2001 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of GDB, GAS, and the GNU binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* ARCHBITS_ESA and ARCH_ESAME correspond to the bit numbers defined
by s390_opcode_arch_val in include/opcode/s390.h:
ARCHBITS_ESAONLY = (1<<S390_OPCODE_ESA)
ARCHBITS_ESA = (1<<S390_OPCODE_ESA) + (1<<S390_OPCODE_ESAME)
ARCHBITS_ESA = (1<<S390_OPCODE_ESAME). */
#define ARCHBITS_ESAONLY 1
#define ARCHBITS_ESA 3
#define ARCHBITS_ESAME 2
struct op_struct
{
char opcode[16];
char mnemonic[16];
char format[16];
int archbits;
unsigned long long sort_value;
int no_nibbles;
};
struct op_struct *op_array;
int max_ops;
int no_ops;
static void
createTable (void)
{
max_ops = 256;
op_array = malloc (max_ops * sizeof (struct op_struct));
no_ops = 0;
}
/* `insertOpcode': insert an op_struct into sorted opcode array. */
static void
insertOpcode (char *opcode, char *mnemonic, char *format, int archbits)
{
char *str;
unsigned long long sort_value;
int no_nibbles;
int ix, k;
while (no_ops >= max_ops)
{
max_ops = max_ops * 2;
op_array = realloc (op_array, max_ops * sizeof (struct op_struct));
}
sort_value = 0;
str = opcode;
for (ix = 0; ix < 16; ix++)
{
if (*str >= '0' && *str <= '9')
sort_value = (sort_value << 4) + (*str - '0');
else if (*str >= 'a' && *str <= 'f')
sort_value = (sort_value << 4) + (*str - 'a' + 10);
else if (*str >= 'A' && *str <= 'F')
sort_value = (sort_value << 4) + (*str - 'A' + 10);
else if (*str == '?')
sort_value <<= 4;
else
break;
str ++;
}
sort_value <<= 4*(16 - ix);
no_nibbles = ix;
for (ix = 0; ix < no_ops; ix++)
if (sort_value > op_array[ix].sort_value)
break;
for (k = no_ops; k > ix; k--)
op_array[k] = op_array[k-1];
strcpy(op_array[ix].opcode, opcode);
strcpy(op_array[ix].mnemonic, mnemonic);
strcpy(op_array[ix].format, format);
op_array[ix].sort_value = sort_value;
op_array[ix].no_nibbles = no_nibbles;
op_array[ix].archbits = archbits;
no_ops++;
}
static char file_header[] =
"/* The opcode table. This file was generated by s390-mkopc.\n\n"
" The format of the opcode table is:\n\n"
" NAME OPCODE MASK OPERANDS\n\n"
" Name is the name of the instruction.\n"
" OPCODE is the instruction opcode.\n"
" MASK is the opcode mask; this is used to tell the disassembler\n"
" which bits in the actual opcode must match OPCODE.\n"
" OPERANDS is the list of operands.\n\n"
" The disassembler reads the table in order and prints the first\n"
" instruction which matches. */\n\n"
"const struct s390_opcode s390_opcodes[] =\n {\n";
/* `dumpTable': write opcode table. */
static void
dumpTable (void)
{
char *str;
int ix;
/* Write hash table entries (slots). */
printf (file_header);
for (ix = 0; ix < no_ops; ix++)
{
printf (" { \"%s\", ", op_array[ix].mnemonic);
for (str = op_array[ix].opcode; *str != 0; str++)
if (*str == '?')
*str = '0';
printf ("OP%i(0x%sLL), ",
op_array[ix].no_nibbles*4, op_array[ix].opcode);
printf ("MASK_%s, INSTR_%s, ",
op_array[ix].format, op_array[ix].format);
printf ("%i}", op_array[ix].archbits);
if (ix < no_ops-1)
printf (",\n");
else
printf ("\n");
}
printf ("};\n\n");
printf ("const int s390_num_opcodes =\n");
printf (" sizeof (s390_opcodes) / sizeof (s390_opcodes[0]);\n\n");
}
int
main (void)
{
char currentLine[256];
createTable ();
/* Read opcode descriptions from `stdin'. For each mnemonic,
make an entry into the opcode table. */
while (fgets (currentLine, sizeof (currentLine), stdin) != NULL)
{
char opcode[16];
char mnemonic[16];
char format[16];
char description[64];
char archtag[16];
int archbits;
if (currentLine[0] == '#')
continue;
memset (opcode, 0, 8);
if (sscanf (currentLine, "%15s %15s %15s \"%[^\"]\" %15s",
opcode, mnemonic, format, description, archtag) == 5)
{
if (strcmp (archtag, "esaonly") == 0)
archbits = ARCHBITS_ESAONLY;
else if (strcmp (archtag, "esa") == 0)
archbits = ARCHBITS_ESA;
else if (strcmp (archtag, "esame") == 0)
archbits = ARCHBITS_ESAME;
else
archbits = 0;
insertOpcode (opcode, mnemonic, format, archbits);
}
else
fprintf (stderr, "Couldn't scan line %s\n", currentLine);
}
dumpTable ();
return 0;
}

View File

@ -0,0 +1,318 @@
/* s390-opc.c -- S390 opcode list
Copyright 2000, 2001 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of GDB, GAS, and the GNU binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include <stdio.h>
#include "ansidecl.h"
#include "opcode/s390.h"
/* This file holds the S390 opcode table. The opcode table
includes almost all of the extended instruction mnemonics. This
permits the disassembler to use them, and simplifies the assembler
logic, at the cost of increasing the table size. The table is
strictly constant data, so the compiler should be able to put it in
the .text section.
This file also holds the operand table. All knowledge about
inserting operands into instructions and vice-versa is kept in this
file. */
/* The operands table.
The fields are bits, shift, insert, extract, flags. */
const struct s390_operand s390_operands[] =
{
#define UNUSED 0
{ 0, 0, 0 }, /* Indicates the end of the operand list */
#define R_8 1 /* GPR starting at position 8 */
{ 4, 8, S390_OPERAND_GPR },
#define R_12 2 /* GPR starting at position 12 */
{ 4, 12, S390_OPERAND_GPR },
#define R_16 3 /* GPR starting at position 16 */
{ 4, 16, S390_OPERAND_GPR },
#define R_20 4 /* GPR starting at position 20 */
{ 4, 20, S390_OPERAND_GPR },
#define R_24 5 /* GPR starting at position 24 */
{ 4, 24, S390_OPERAND_GPR },
#define R_28 6 /* GPR starting at position 28 */
{ 4, 28, S390_OPERAND_GPR },
#define R_32 7 /* GPR starting at position 32 */
{ 4, 32, S390_OPERAND_GPR },
#define F_8 8 /* FPR starting at position 8 */
{ 4, 8, S390_OPERAND_FPR },
#define F_12 9 /* FPR starting at position 12 */
{ 4, 12, S390_OPERAND_FPR },
#define F_16 10 /* FPR starting at position 16 */
{ 4, 16, S390_OPERAND_FPR },
#define F_20 11 /* FPR starting at position 16 */
{ 4, 16, S390_OPERAND_FPR },
#define F_24 12 /* FPR starting at position 24 */
{ 4, 24, S390_OPERAND_FPR },
#define F_28 13 /* FPR starting at position 28 */
{ 4, 28, S390_OPERAND_FPR },
#define F_32 14 /* FPR starting at position 32 */
{ 4, 32, S390_OPERAND_FPR },
#define A_8 15 /* Access reg. starting at position 8 */
{ 4, 8, S390_OPERAND_AR },
#define A_12 16 /* Access reg. starting at position 12 */
{ 4, 12, S390_OPERAND_AR },
#define A_24 17 /* Access reg. starting at position 24 */
{ 4, 24, S390_OPERAND_AR },
#define A_28 18 /* Access reg. starting at position 28 */
{ 4, 28, S390_OPERAND_AR },
#define C_8 19 /* Control reg. starting at position 8 */
{ 4, 8, S390_OPERAND_CR },
#define C_12 20 /* Control reg. starting at position 12 */
{ 4, 12, S390_OPERAND_CR },
#define B_16 21 /* Base register starting at position 16 */
{ 4, 16, S390_OPERAND_BASE|S390_OPERAND_GPR },
#define B_32 22 /* Base register starting at position 32 */
{ 4, 32, S390_OPERAND_BASE|S390_OPERAND_GPR },
#define X_12 23 /* Index register starting at position 12 */
{ 4, 12, S390_OPERAND_INDEX|S390_OPERAND_GPR },
#define D_20 24 /* Displacement starting at position 20 */
{ 12, 20, S390_OPERAND_DISP },
#define D_36 25 /* Displacement starting at position 36 */
{ 12, 36, S390_OPERAND_DISP },
#define L4_8 26 /* 4 bit length starting at position 8 */
{ 4, 8, S390_OPERAND_LENGTH },
#define L4_12 27 /* 4 bit length starting at position 12 */
{ 4, 12, S390_OPERAND_LENGTH },
#define L8_8 28 /* 8 bit length starting at position 8 */
{ 8, 8, S390_OPERAND_LENGTH },
#define U4_8 29 /* 4 bit unsigned value starting at 8 */
{ 4, 8, 0 },
#define U4_12 30 /* 4 bit unsigned value starting at 12 */
{ 4, 12, 0 },
#define U4_16 31 /* 4 bit unsigned value starting at 16 */
{ 4, 16, 0 },
#define U4_20 32 /* 4 bit unsigned value starting at 20 */
{ 4, 20, 0 },
#define U8_8 33 /* 8 bit unsigned value starting at 8 */
{ 8, 8, 0 },
#define U8_16 34 /* 8 bit unsigned value starting at 16 */
{ 8, 16, 0 },
#define I16_16 35 /* 16 bit signed value starting at 16 */
{ 16, 16, S390_OPERAND_SIGNED },
#define U16_16 36 /* 16 bit unsigned value starting at 16 */
{ 16, 16, 0 },
#define J16_16 37 /* PC relative jump offset at 16 */
{ 16, 16, S390_OPERAND_PCREL },
#define J32_16 38 /* PC relative long offset at 16 */
{ 32, 16, S390_OPERAND_PCREL }
};
/* Macros used to form opcodes. */
/* 8/16/48 bit opcodes. */
#define OP8(x) { x, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define OP16(x) { x >> 8, x & 255, 0x00, 0x00, 0x00, 0x00 }
#define OP48(x) { x >> 40, (x >> 32) & 255, (x >> 24) & 255, \
(x >> 16) & 255, (x >> 8) & 255, x & 255}
/* The new format of the INSTR_x_y and MASK_x_y defines is based
on the following rules:
1) the middle part of the definition (x in INSTR_x_y) is the official
names of the instruction format that you can find in the principals
of operation.
2) the last part of the definition (y in INSTR_x_y) gives you an idea
which operands the binary represenation of the instruction has.
The meanings of the letters in y are:
a - access register
c - control register
d - displacement, 12 bit
f - floating pointer register
i - signed integer, 4 or 8 bit
l - length, 4 or 8 bit
p - pc relative
r - general purpose register
u - unsigned integer, 4 or 8 bit
0 - operand skipped.
The order of the letters reflects the layout of the format in
storage and not the order of the paramaters of the instructions.
The use of the letters is not a 100% match with the PoP but it is
quite close.
For example the instruction "mvo" is defined in the PoP as follows:
MVO D1(L1,B1),D2(L2,B2) [SS]
--------------------------------------
| 'F1' | L1 | L2 | B1 | D1 | B2 | D2 |
--------------------------------------
0 8 12 16 20 32 36
The instruction format is: INSTR_SS_LLRDRD / MASK_SS_LLRDRD. */
#define INSTR_E 2, { 0,0,0,0,0,0 } /* e.g. pr */
#define INSTR_RIE_RRP 6, { R_8,R_12,J16_16,0,0,0 } /* e.g. brxhg */
#define INSTR_RIL_0P 6, { J32_16,0,0,0,0 } /* e.g. jg */
#define INSTR_RIL_RP 6, { R_8,J32_16,0,0,0,0 } /* e.g. brasl */
#define INSTR_RIL_UP 6, { U4_8,J32_16,0,0,0,0 } /* e.g. brcl */
#define INSTR_RI_0P 4, { J16_16,0,0,0,0,0 } /* e.g. j */
#define INSTR_RI_RI 4, { R_8,I16_16,0,0,0,0 } /* e.g. ahi */
#define INSTR_RI_RP 4, { R_8,J16_16,0,0,0,0 } /* e.g. brct */
#define INSTR_RI_RU 4, { R_8,U16_16,0,0,0,0 } /* e.g. tml */
#define INSTR_RI_UP 4, { U4_8,J16_16,0,0,0,0 } /* e.g. brc */
#define INSTR_RRE_00 4, { 0,0,0,0,0,0 } /* e.g. palb */
#define INSTR_RRE_0R 4, { R_28,0,0,0,0,0 } /* e.g. tb */
#define INSTR_RRE_AA 4, { A_24,A_28,0,0,0,0 } /* e.g. cpya */
#define INSTR_RRE_AR 4, { A_24,R_28,0,0,0,0 } /* e.g. sar */
#define INSTR_RRE_F0 4, { F_24,0,0,0,0,0 } /* e.g. sqer */
#define INSTR_RRE_FF 4, { F_24,F_28,0,0,0,0 } /* e.g. debr */
#define INSTR_RRE_R0 4, { R_24,0,0,0,0,0 } /* e.g. ipm */
#define INSTR_RRE_RA 4, { R_24,A_28,0,0,0,0 } /* e.g. ear */
#define INSTR_RRE_RF 4, { R_24,F_28,0,0,0,0 } /* e.g. cefbr */
#define INSTR_RRE_RR 4, { R_24,R_28,0,0,0,0 } /* e.g. lura */
#define INSTR_RRF_F0FF 4, { F_16,F_24,F_28,0,0,0 } /* e.g. madbr */
#define INSTR_RRF_FUFF 4, { F_24,F_16,F_28,U4_20,0,0 } /* e.g. didbr */
#define INSTR_RRF_RURR 4, { R_24,R_28,R_16,U4_20,0,0 } /* e.g. .insn */
#define INSTR_RRF_U0FF 4, { F_24,U4_16,F_28,0,0,0 } /* e.g. cfxbr */
#define INSTR_RRF_U0FR 4, { F_24,U4_16,R_28,0,0,0 } /* e.g. cfebr */
#define INSTR_RRF_U0FR 4, { F_24,U4_16,R_28,0,0,0 } /* e.g. cfxbr */
#define INSTR_RR_0R 2, { R_12, 0,0,0,0,0 } /* e.g. br */
#define INSTR_RR_FF 2, { F_8,F_12,0,0,0,0 } /* e.g. adr */
#define INSTR_RR_R0 2, { R_8, 0,0,0,0,0 } /* e.g. spm */
#define INSTR_RR_RR 2, { R_8,R_12,0,0,0,0 } /* e.g. lr */
#define INSTR_RR_U0 2, { U8_8, 0,0,0,0,0 } /* e.g. svc */
#define INSTR_RR_UR 2, { U4_8,R_12,0,0,0,0 } /* e.g. bcr */
#define INSTR_RSE_RRRD 6, { R_8,R_12,D_20,B_16,0,0 } /* e.g. lmh */
#define INSTR_RSE_RURD 6, { R_8,U4_12,D_20,B_16,0,0 } /* e.g. icmh */
#define INSTR_RSI_RRP 4, { R_8,R_12,J16_16,0,0,0 } /* e.g. brxh */
#define INSTR_RS_AARD 4, { A_8,A_12,D_20,B_16,0,0 } /* e.g. lam */
#define INSTR_RS_CCRD 4, { C_8,C_12,D_20,B_16,0,0 } /* e.g. lctl */
#define INSTR_RS_R0RD 4, { R_8,D_20,B_16,0,0,0 } /* e.g. sll */
#define INSTR_RS_RRRD 4, { R_8,R_12,D_20,B_16,0,0 } /* e.g. cs */
#define INSTR_RS_RURD 4, { R_8,U4_12,D_20,B_16,0,0 } /* e.g. icm */
#define INSTR_RXE_FRRD 6, { F_8,D_20,X_12,B_16,0,0 } /* e.g. axbr */
#define INSTR_RXE_RRRD 6, { R_8,D_20,X_12,B_16,0,0 } /* e.g. lg */
#define INSTR_RXF_FRRDF 6, { F_32,F_8,D_20,X_12,B_16,0 } /* e.g. madb */
#define INSTR_RXF_RRRDR 6, { R_32,R_8,D_20,X_12,B_16,0 } /* e.g. .insn */
#define INSTR_RX_0RRD 4, { D_20,X_12,B_16,0,0,0 } /* e.g. be */
#define INSTR_RX_FRRD 4, { F_8,D_20,X_12,B_16,0,0 } /* e.g. ae */
#define INSTR_RX_RRRD 4, { R_8,D_20,X_12,B_16,0,0 } /* e.g. l */
#define INSTR_RX_URRD 4, { U4_8,D_20,X_12,B_16,0,0 } /* e.g. bc */
#define INSTR_SI_URD 4, { D_20,B_16,U8_8,0,0,0 } /* e.g. cli */
#define INSTR_SSE_RDRD 6, { D_20,B_16,D_36,B_32,0,0 } /* e.g. mvsdk */
#define INSTR_SS_L0RDRD 6, { D_20,L8_8,B_16,D_36,B_32,0 } /* e.g. mvc */
#define INSTR_SS_LIRDRD 6, { D_20,L4_8,B_16,D_36,B_32,U4_12 } /* e.g. srp */
#define INSTR_SS_LLRDRD 6, { D_20,L4_8,B_16,D_36,L4_12,B_32 } /* e.g. pack */
#define INSTR_SS_RRRDRD 6, { D_20,R_8,B_16,D_36,B_32,R_12 } /* e.g. mvck */
#define INSTR_SS_RRRDRD2 6, { R_8,D_20,B_16,R_12,D_36,B_32 } /* e.g. plo */
#define INSTR_SS_RRRDRD3 6, { R_8,R_12,D_20,B_16,D_36,B_32 } /* e.g. lmd */
#define INSTR_S_00 4, { 0,0,0,0,0,0 } /* e.g. hsch */
#define INSTR_S_RD 4, { D_20,B_16,0,0,0,0 } /* e.g. lpsw */
#define MASK_E { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RIE_RRP { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RIL_0P { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RIL_RP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RIL_UP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RI_0P { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RI_RI { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RI_RP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RI_RU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RI_UP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRE_00 { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
#define MASK_RRE_0R { 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00 }
#define MASK_RRE_AA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_AR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_F0 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
#define MASK_RRE_FF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_R0 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
#define MASK_RRE_RA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_RF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_RR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRF_F0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_FUFF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_RURR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RR_0R { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_FF { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_R0 { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_RR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_U0 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_UR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RSE_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RSE_RURD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RSI_RRP { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RS_AARD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RS_CCRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RS_R0RD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RS_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RS_RURD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RXE_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RXE_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RXF_FRRDF { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RXF_RRRDR { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RX_0RRD { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RX_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RX_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RX_URRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SI_URD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SSE_RDRD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_L0RDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_LIRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_LLRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_RRRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_RRRDRD2 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_RRRDRD3 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_S_00 { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
#define MASK_S_RD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
/* The opcode formats table (blueprints for .insn pseudo mnemonic). */
const struct s390_opcode s390_opformats[] =
{
{ "e", OP8(0x00LL), MASK_E, INSTR_E, 3 },
{ "ri", OP8(0x00LL), MASK_RI_RI, INSTR_RI_RI, 3 },
{ "rie", OP8(0x00LL), MASK_RIE_RRP, INSTR_RIE_RRP, 3 },
{ "ril", OP8(0x00LL), MASK_RIL_RP, INSTR_RIL_RP, 3 },
{ "rr", OP8(0x00LL), MASK_RR_RR, INSTR_RR_RR, 3 },
{ "rre", OP8(0x00LL), MASK_RRE_RR, INSTR_RRE_RR, 3 },
{ "rrf", OP8(0x00LL), MASK_RRF_RURR, INSTR_RRF_RURR, 3 },
{ "rs", OP8(0x00LL), MASK_RS_RRRD, INSTR_RS_RRRD, 3 },
{ "rse", OP8(0x00LL), MASK_RSE_RRRD, INSTR_RSE_RRRD, 3 },
{ "rsi", OP8(0x00LL), MASK_RSI_RRP, INSTR_RSI_RRP, 3 },
{ "rx", OP8(0x00LL), MASK_RX_RRRD, INSTR_RX_RRRD, 3 },
{ "rxe", OP8(0x00LL), MASK_RXE_RRRD, INSTR_RXE_RRRD, 3 },
{ "rxf", OP8(0x00LL), MASK_RXF_RRRDR, INSTR_RXF_RRRDR,3 },
{ "s", OP8(0x00LL), MASK_S_RD, INSTR_S_RD, 3 },
{ "si", OP8(0x00LL), MASK_SI_URD, INSTR_SI_URD, 3 },
{ "ss", OP8(0x00LL), MASK_SS_RRRDRD, INSTR_SS_RRRDRD,3 },
{ "sse", OP8(0x00LL), MASK_SSE_RDRD, INSTR_SSE_RDRD, 3 },
};
const int s390_num_opformats =
sizeof (s390_opformats) / sizeof (s390_opformats[0]);
#include "s390-opc.tab"

View File

@ -0,0 +1,626 @@
# S/390 opcodes list. Use s390-mkopc to convert it into the opcode table.
# Copyright 2000, 2001 Free Software Foundation, Inc.
# Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
5a a RX_RRRD "add" esa
6a ad RX_FRRD "add normalized (long)" esa
2a adr RR_FF "add normalized (long)" esa
7a ae RX_FRRD "add normalized (short)" esa
3a aer RR_FF "add normalized (short)" esa
4a ah RX_RRRD "add halfword" esa
5e al RX_RRRD "add logical" esa
1e alr RR_RR "add logical" esa
fa ap SS_LLRDRD "add decimal" esa
1a ar RR_RR "add" esa
7e au RX_FRRD "add unnormalized (short)" esa
3e aur RR_FF "add unnormalized (short)" esa
6e aw RX_FRRD "add unnormalized (long)" esa
2e awr RR_FF "add unnormalized (long)" esa
36 axr RR_FF "add normalized" esa
b240 bakr RRE_RR "branch and stack" esa
45 bal RX_RRRD "branch and link" esa
05 balr RR_RR "branch and link" esa
4d bas RX_RRRD "branch and save" esa
0d basr RR_RR "branch and save" esa
0c bassm RR_RR "branch and save and set mode" esa
47 bc RX_URRD "branch on condition" esa
07 bcr RR_UR "branch on condition" esa
46 bct RX_RRRD "branch on count" esa
06 bctr RR_RR "branch on count" esa
b258 bsg RRE_RR "branch in subspace group" esa
0b bsm RR_RR "branch and set mode" esa
86 bxh RS_RRRD "branch on index high" esa
87 bxle RS_RRRD "branch on index low or equal" esa
59 c RX_RRRD "compare" esa
69 cd RX_FRRD "compare (long)" esa
29 cdr RR_FF "compare (long)" esa
bb cds RS_RRRD "compare double and swap" esa
79 ce RX_FRRD "compare (short)" esa
39 cer RR_FF "compare (short)" esa
b21a cfc S_RD "compare and form codeword" esa
49 ch RX_RRRD "compare halfword" esa
55 cl RX_RRRD "compare logical" esa
d5 clc SS_L0RDRD "compare logical" esa
0f clcl RR_RR "compare logical long" esa
95 cli SI_URD "compare logical" esa
bd clm RS_RURD "compare logical characters under mask" esa
15 clr RR_RR "compare logical" esa
b25d clst RRE_RR "compare logical string" esa
b263 cmpsc RRE_RR "compression call" esa
f9 cp SS_LLRDRD "compare decimal" esa
b24d cpya RRE_AA "copy access" esa
19 cr RR_RR "compare" esa
ba cs RS_RRRD "compare and swap" esa
b230 csch S_00 "clear subchannel" esa
b257 cuse RRE_RR "compare until substring equal" esa
b250 csp RRE_RR "compare and swap and purge" esa
4f cvb RX_RRRD "convert to binary" esa
4e cvd RX_RRRD "convert to decimal" esa
5d d RX_RRRD "divide" esa
6d dd RX_FRRD "divide (long)" esa
2d ddr RR_FF "divide (long)" esa
7d de RX_FRRD "divide (short)" esa
3d der RR_FF "divide (short)" esa
83 diag RS_RRRD "diagnose" esa
fd dp SS_LLRDRD "divide decimal" esa
1d dr RR_RR "divide" esa
b22d dxr RRE_F0 "divide (ext.)" esa
b24f ear RRE_RA "extract access" esa
de ed SS_L0RDRD "edit" esa
df edmk SS_L0RDRD "edit and mark" esa
b226 epar RRE_R0 "extract primary ASN" esa
b249 ereg RRE_RR "extract stacked registers" esa
b227 esar RRE_R0 "extract secondary ASN" esa
b24a esta RRE_RR "extract stacked state" esa
44 ex RX_RRRD "execute" esa
24 hdr RR_FF "halve (long)" esa
34 her RR_FF "halve (short)" esa
b231 hsch S_00 "halt subchannel" esa
b224 iac RRE_R0 "insert address space control" esa
43 ic RX_RRRD "insert character" esa
bf icm RS_RURD "insert characters under mask" esa
b20b ipk S_00 "insert PSW key" esa
b222 ipm RRE_R0 "insert program mask" esa
b221 ipte RRE_RR "invalidate page table entry" esa
b229 iske RRE_RR "insert storage key extended" esa
b223 ivsk RRE_RR "insert virtual storage key" esa
58 l RX_RRRD "load" esa
41 la RX_RRRD "load address" esa
51 lae RX_RRRD "load address extended" esa
9a lam RS_AARD "load access multiple" esa
e500 lasp SSE_RDRD "load address space parameters" esa
23 lcdr RR_FF "load complement (long)" esa
33 lcer RR_FF "load complement (short)" esa
13 lcr RR_RR "load complement" esa
b7 lctl RS_CCRD "load control" esa
68 ld RX_FRRD "load (long)" esa
28 ldr RR_FF "load (long)" esa
78 le RX_FRRD "load (short)" esa
38 ler RR_FF "load (short)" esa
48 lh RX_RRRD "load halfword" esa
98 lm RS_RRRD "load multiple" esa
21 lndr RR_FF "load negative (long)" esa
31 lner RR_FF "load negative (short)" esa
11 lnr RR_RR "load negative" esa
20 lpdr RR_FF "load positive (long)" esa
30 lper RR_FF "load positive (short)" esa
10 lpr RR_RR "load positive" esa
82 lpsw S_RD "load PSW" esa
18 lr RR_RR "load" esa
b1 lra RX_RRRD "load real address" esa
25 lrdr RR_FF "load rounded (ext. to long)" esa
35 lrer RR_FF "load rounded (long to short)" esa
22 ltdr RR_FF "load and test (long)" esa
32 lter RR_FF "load and test (short)" esa
12 ltr RR_RR "load and test" esa
b24b lura RRE_RR "load using real address" esa
5c m RX_RRRD "multiply" esa
af mc SI_URD "monitor call" esa
6c md RX_FRRD "multiply (long)" esa
2c mdr RR_FF "multiply (long)" esa
7c me RX_FRRD "multiply (short to long)" esa
3c mer RR_FF "multiply (short to long)" esa
4c mh RX_RRRD "multiply halfword" esa
fc mp SS_LLRDRD "multiply decimal" esa
1c mr RR_RR "multiply" esa
b232 msch S_RD "modify subchannel" esa
b247 msta RRE_R0 "modify stacked state" esa
d2 mvc SS_L0RDRD "move" esa
e50f mvcdk SSE_RDRD "move with destination key" esa
e8 mvcin SS_L0RDRD "move inverse" esa
d9 mvck SS_RRRDRD "move with key" esa
0e mvcl RR_RR "move long" esa
da mvcp SS_RRRDRD "move to primary" esa
db mvcs SS_RRRDRD "move to secondary" esa
e50e mvcsk SSE_RDRD "move with source key" esa
92 mvi SI_URD "move" esa
d1 mvn SS_L0RDRD "move numerics" esa
f1 mvo SS_LLRDRD "move with offset" esa
b254 mvpg RRE_RR "move page" esa
b255 mvst RRE_RR "move string" esa
d3 mvz SS_L0RDRD "move zones" esa
67 mxd RX_FRRD "multiply (long to ext.)" esa
27 mxdr RR_FF "multiply (long to ext.)" esa
26 mxr RR_FF "multiply (ext.)" esa
54 n RX_RRRD "AND" esa
d4 nc SS_L0RDRD "AND" esa
94 ni SI_URD "AND" esa
14 nr RR_RR "AND" esa
56 o RX_RRRD "OR" esa
d6 oc SS_L0RDRD "OR" esa
96 oi SI_URD "OR" esa
16 or RR_RR "OR" esa
f2 pack SS_LLRDRD "pack" esa
b248 palb RRE_00 "purge ALB" esa
b218 pc S_RD "program call" esa
0101 pr E "program return" esa
b228 pt RRE_RR "program transfer" esa
b20d ptlb S_00 "purge TLB" esa
b23b rchp S_00 "reset channel path" esa
b22a rrbe RRE_RR "reset reference bit extended" esa
b238 rsch S_00 "resume subchannel" esa
5b s RX_RRRD "subtract" esa
b219 sac S_RD "set address space control" esa
b279 sacf S_RD "set address space control fast" esa
b237 sal S_00 "set address limit" esa
b24e sar RRE_AR "set access" esa
b23c schm S_00 "set channel monitor" esa
b204 sck S_RD "set clock" esa
b206 sckc S_RD "set clock comparator" esa
6b sd RX_FRRD "subtract normalized (long)" esa
2b sdr RR_FF "subtract normalized (long)" esa
7b se RX_FRRD "subtract normalized (short)" esa
3b ser RR_FF "subtract normalized (short)" esa
4b sh RX_RRRD "subtract halfword" esa
b214 sie S_RD "start interpretive execution" esa
ae sigp RS_RRRD "signal processor" esa
5f sl RX_RRRD "subtract logical" esa
8b sla RS_R0RD "shift left single" esa
8f slda RS_R0RD "shift left double (long)" esa
8d sldl RS_R0RD "shift left double logical (long)" esa
89 sll RS_R0RD "shift left single logical" esa
1f slr RR_RR "subtract logical" esa
fb sp SS_LLRDRD "subtract decimal" esa
b20a spka S_RD "set PSW key from address" esa
04 spm RR_R0 "set program mask" esa
b208 spt S_RD "set CPU timer" esa
b210 spx S_RD "set prefix" esa
b244 sqdr RRE_F0 "square root (long)" esa
b245 sqer RRE_F0 "square root (short)" esa
1b sr RR_RR "subtract" esa
8a sra RS_R0RD "shift right single" esa
8e srda RS_R0RD "shift right double (long)" esa
8c srdl RS_R0RD "shift right double logical (long)" esa
88 srl RS_R0RD "shift right single logical" esa
f0 srp SS_LIRDRD "shift and round decimal" esa
b25e srst RRE_RR "search string" esa
b225 ssar RRE_R0 "set secondary ASN" esa
b233 ssch S_RD "start subchannel" esa
b22b sske RRE_RR "set storage key extended" esa
80 ssm S_RD "set system mask" esa
50 st RX_RRRD "store" esa
9b stam RS_AARD "store access multiple" esa
b212 stap S_RD "store CPU address" esa
42 stc RX_RRRD "store character" esa
b205 stck S_RD "store clock" esa
b207 stckc S_RD "store clock comparator" esa
be stcm RS_RURD "store characters under mask" esa
b23a stcps S_RD "store channel path status" esa
b239 stcrw S_RD "store channel report word" esa
b6 stctl RS_CCRD "store control" esa
60 std RX_FRRD "store (long)" esa
70 ste RX_FRRD "store (short)" esa
40 sth RX_RRRD "store halfword" esa
b202 stidp S_RD "store CPU id" esa
90 stm RS_RRRD "store multiple" esa
ac stnsm SI_URD "store then AND system mask" esa
ad stosm SI_URD "store then OR system mask" esa
b209 stpt S_RD "store CPU timer" esa
b211 stpx S_RD "store prefix" esa
b234 stsch S_RD "store subchannel" esa
b246 stura RRE_RR "store using real address" esa
7f su RX_FRRD "subtract unnormalized (short)" esa
3f sur RR_FF "subtract unnormalized (short)" esa
0a svc RR_U0 "supervisor call" esa
6f sw RX_FRRD "subtract unnormalized (long)" esa
2f swr RR_FF "subtract unnormalized (long)" esa
37 sxr RR_FF "subtract normalized (ext.)" esa
b24c tar RRE_AR "test access" esa
b22c tb RRE_0R "test block" esa
91 tm SI_URD "test under mask" esa
b236 tpi S_RD "test pending interruption" esa
e501 tprot SSE_RDRD "test protection" esa
dc tr SS_L0RDRD "translate" esa
99 trace RS_RRRD "trace" esa
dd trt SS_L0RDRD "translate and test" esa
93 ts S_RD "test and set" esa
b235 tsch S_RD "test subchannel" esa
f3 unpk SS_LLRDRD "unpack" esa
0102 upt E "update tree" esa
57 x RX_RRRD "exclusive OR" esa
d7 xc SS_L0RDRD "exclusive OR" esa
97 xi SI_URD "exclusive OR" esa
17 xr RR_RR "exclusive OR" esa
f8 zap SS_LLRDRD "zero and add" esa
a70a ahi RI_RI "add halfword immediate" esa
84 brxh RSI_RRP "branch relative on index high" esa
85 brxle RSI_RRP "branch relative on index low or equal" esa
a705 bras RI_RP "branch relative and save" esa
a704 brc RI_UP "branch relative on condition" esa
a706 brct RI_RP "branch relative on count" esa
b241 cksm RRE_RR "checksum" esa
a70e chi RI_RI "compare halfword immediate" esa
a9 clcle RS_RRRD "compare logical long extended" esa
a708 lhi RI_RI "load halfword immediate" esa
a8 mvcle RS_RRRD "move long extended" esa
a70c mhi RI_RI "multiply halfword immediate" esa
b252 msr RRE_RR "multiply single" esa
71 ms RX_RRRD "multiply single" esa
a700 tmh RI_RU "test under mask high" esa
a701 tml RI_RU "test under mask low" esa
0700 nopr RR_0R "no operation" esa
0710 bor RR_0R "branch on overflow / if ones" esa
0720 bhr RR_0R "branch on high" esa
0720 bpr RR_0R "branch on plus" esa
0730 bnler RR_0R "branch on not low or equal" esa
0740 blr RR_0R "branch on low" esa
0740 bmr RR_0R "branch on minus / if mixed" esa
0750 bnher RR_0R "branch on not high or equal" esa
0760 blhr RR_0R "branch on low or high" esa
0770 bner RR_0R "branch on not equal" esa
0770 bnzr RR_0R "branch on not zero / if not zeros" esa
0780 ber RR_0R "branch on equal" esa
0780 bzr RR_0R "branch on zero / if zeros" esa
0790 bnlhr RR_0R "branch on not low or high" esa
07a0 bher RR_0R "branch on high or equal" esa
07b0 bnlr RR_0R "branch on not low" esa
07b0 bnmr RR_0R "branch on not minus / if not mixed" esa
07c0 bler RR_0R "brach on low or equal" esa
07d0 bnhr RR_0R "branch on not high" esa
07d0 bnpr RR_0R "branch on not plus" esa
07e0 bnor RR_0R "branch on not overflow / if not ones" esa
07f0 br RR_0R "unconditional branch" esa
4700 nop RX_0RRD "no operation" esa
4710 bo RX_0RRD "branch on overflow / if ones" esa
4720 bh RX_0RRD "branch on high" esa
4720 bp RX_0RRD "branch on plus" esa
4730 bnle RX_0RRD "branch on not low or equal" esa
4740 bl RX_0RRD "branch on low" esa
4740 bm RX_0RRD "branch on minus / if mixed" esa
4750 bnhe RX_0RRD "branch on not high or equal" esa
4760 blh RX_0RRD "branch on low or high" esa
4770 bne RX_0RRD "branch on not equal" esa
4770 bnz RX_0RRD "branch on not zero / if not zeros" esa
4780 be RX_0RRD "branch on equal" esa
4780 bz RX_0RRD "branch on zero / if zeros" esa
4790 bnlh RX_0RRD "branch on not low or high" esa
47a0 bhe RX_0RRD "branch on high or equal" esa
47b0 bnl RX_0RRD "branch on not low" esa
47b0 bnm RX_0RRD "branch on not minus / if not mixed" esa
47c0 ble RX_0RRD "branch on low or equal" esa
47d0 bnh RX_0RRD "branch on not high" esa
47d0 bnp RX_0RRD "branch on not plus" esa
47e0 bno RX_0RRD "branch on not overflow / if not ones" esa
47f0 b RX_0RRD "unconditional branch" esa
a714 jo RI_0P "jump on overflow / if ones" esa
a724 jh RI_0P "jump on A high" esa
a724 jp RI_0P "jump on plus" esa
a734 jnle RI_0P "jump on not low or equal" esa
a744 jl RI_0P "jump on A low" esa
a744 jm RI_0P "jump on minus / if mixed" esa
a754 jnhe RI_0P "jump on not high or equal" esa
a764 jlh RI_0P "jump on low or high" esa
a774 jne RI_0P "jump on A not equal B" esa
a774 jnz RI_0P "jump on not zero / if not zeros" esa
a784 je RI_0P "jump on A equal B" esa
a784 jz RI_0P "jump on zero / if zeros" esa
a794 jnlh RI_0P "jump on not low or high" esa
a7a4 jhe RI_0P "jump on high or equal" esa
a7b4 jnl RI_0P "jump on A not low" esa
a7b4 jnm RI_0P "jump on not minus / if not mixed" esa
a7c4 jle RI_0P "jump on low or equal" esa
a7d4 jnh RI_0P "jump on A not high" esa
a7d4 jnp RI_0P "jump on not plus" esa
a7e4 jno RI_0P "jump on not overflow / if not ones" esa
a7f4 j RI_0P "jump" esa
b34a axbr RRE_FF "add extended bfp" esa
b31a adbr RRE_FF "add long bfp" esa
ed000000001a adb RXE_FRRD "add long bfp" esa
b30a aebr RRE_FF "add short bfp" esa
ed000000000a aeb RXE_FRRD "add short bfp" esa
b349 cxbr RRE_FF "compare extended bfp" esa
b319 cdbr RRE_FF "compare long bfp" esa
ed0000000019 cdb RXE_FRRD "compare long bfp" esa
b309 cebr RRE_FF "compare short bfp" esa
ed0000000009 ceb RXE_FRRD "compare short bfp" esa
b348 kxbr RRE_FF "compare and signal extended bfp" esa
b318 kdbr RRE_FF "compare and signal long bfp" esa
ed0000000018 kdb RXE_FRRD "compare and signal long bfp" esa
b308 kebr RRE_FF "compare and signal short bfp" esa
ed0000000008 keb RXE_FRRD "compare and signal short bfp" esa
b396 cxfbr RRE_RF "convert from fixed 32 to extended bfp" esa
b395 cdfbr RRE_RF "convert from fixed 32 to long bfp" esa
b394 cefbr RRE_RF "convert from fixed 32 to short bfp" esa
b39a cfxbr RRF_U0FR "convert to fixed extended bfp to 32" esa
b399 cfdbr RRF_U0FR "convert to fixed long bfp to 32" esa
b398 cfebr RRF_U0FR "convert to fixed short bfp to 32" esa
b34d dxbr RRE_FF "divide extended bfp" esa
b31d ddbr RRE_FF "divide long bfp" esa
ed000000001d ddb RXE_FRRD "divide long bfp" esa
b30d debr RRE_FF "divide short bfp" esa
ed000000000d deb RXE_FRRD "divide short bfp" esa
b35b didbr RRF_FUFF "divide to integer long bfp" esa
b353 diebr RRF_FUFF "divide to integer short bfp" esa
b38c efpc RRE_RR "extract fpc" esa
b342 ltxbr RRE_FF "load and test extended bfp" esa
b312 ltdbr RRE_FF "load and test long bfp" esa
b302 ltebr RRE_FF "load and test short bfp" esa
b343 lcxbr RRE_FF "load complement extended bfp" esa
b313 lcdbr RRE_FF "load complement long bfp" esa
b303 lcebr RRE_FF "load complement short bfp" esa
b347 fixbr RRF_U0FF "load fp integer extended bfp" esa
b35f fidbr RRF_U0FF "load fp integer long bfp" esa
b357 fiebr RRF_U0FF "load fp integer short bfp" esa
b29d lfpc S_RD "load fpc" esa
b305 lxdbr RRE_FF "load lengthened long to extended bfp" esa
ed0000000005 lxdb RXE_FRRD "load lengthened long to extended bfp" esa
b306 lxebr RRE_FF "load lengthened short to extended bfp" esa
ed0000000006 lxeb RXE_FRRD "load lengthened short to extended bfp" esa
b304 ldebr RRE_FF "load lengthened short to long bfp" esa
ed0000000004 ldeb RXE_FRRD "load lengthened short to long bfp" esa
b341 lnxbr RRE_FF "load negative extended bfp" esa
b311 lndbr RRE_FF "load negative long bfp" esa
b301 lnebr RRE_FF "load negative short bfp" esa
b340 lpxbr RRE_FF "load positive extended bfp" esa
b310 lpdbr RRE_FF "load positive long bfp" esa
b300 lpebr RRE_FF "load positive short bfp" esa
b345 ldxbr RRE_FF "load rounded extended to long bfp" esa
b346 lexbr RRE_FF "load rounded extended to short bfp" esa
b344 ledbr RRE_FF "load rounded long to short bfp" esa
b34c mxbr RRE_FF "multiply extended bfp" esa
b31c mdbr RRE_FF "multiply long bfp" esa
ed000000001c mdb RXE_FRRD "multiply long bfp" esa
b307 mxdbr RRE_FF "multiply long to extended bfp" esa
ed0000000007 mxdb RXE_FRRD "multiply long to extended bfp" esa
b317 meebr RRE_FF "multiply short bfp" esa
ed0000000017 meeb RXE_FRRD "multiply short bfp" esa
b30c mdebr RRE_FF "multiply short to long bfp" esa
ed000000000c mdeb RXE_FRRD "multiply short to long bfp" esa
b31e madbr RRF_F0FF "multiply and add long bfp" esa
ed000000001e madb RXF_FRRDF "multiply and add long bfp" esa
b30e maebr RRF_F0FF "multiply and add short bfp" esa
ed000000000e maeb RXF_FRRDF "multiply and add short bfp" esa
b31f msdbr RRF_F0FF "multiply and subtract long bfp" esa
ed000000001f msdb RXF_FRRDF "multiply and subtract long bfp" esa
b30f msebr RRF_F0FF "multiply and subtract short bfp" esa
ed000000000f mseb RXF_FRRDF "multiply and subtract short bfp" esa
b384 sfpc RRE_RR "set fpc" esa
b299 srnm S_RD "set rounding mode" esa
b316 sqxbr RRE_FF "square root extended bfp" esa
b315 sqdbr RRE_FF "square root long bfp" esa
ed0000000015 sqdb RXE_FRRD "square root long bfp" esa
b314 sqebr RRE_FF "square root short bfp" esa
ed0000000014 sqeb RXE_FRRD "square root short bfp" esa
b29c stfpc S_RD "store fpc" esa
b34b sxbr RRE_FF "subtract extended bfp" esa
b31b sdbr RRE_FF "subtract long bfp" esa
ed000000001b sdb RXE_FRRD "subtract long bfp" esa
b30b sebr RRE_FF "subtract short bfp" esa
ed000000000b seb RXE_FRRD "subtract short bfp" esa
ed0000000012 tcxb RXE_FRRD "test data class extended bfp" esa
ed0000000011 tcdb RXE_FRRD "test data class long bfp" esa
ed0000000010 tceb RXE_FRRD "test data class short bfp" esa
b274 siga S_RD "signal adapter" esa
# are the following instructions confidential ??
b2a6 cuutf RRE_RR "convert unicode to utf-8" esa
b2a7 cutfu RRE_RR "convert utf-8 to unicode" esa
ee plo SS_RRRDRD2 "perform locked operation" esa
b25a bsa RRE_RR "branch and set authority" esa
b277 rp S_RD "resume program" esa
0107 sckpf E "set clock programmable field" esa
b27d stsi S_RD "store system information" esa
01ff trap2 E "trap" esa
b2ff trap4 S_RD "trap4" esa
# Here are the new esame instructions:
b946 bctgr RRE_RR "branch on count 64" esame
b900 lpgr RRE_RR "load positive 64" esame
b910 lpgfr RRE_RR "load positive 64<32" esame
b901 lngr RRE_RR "load negative 64" esame
b911 lngfr RRE_RR "load negative 64<32" esame
b902 ltgr RRE_RR "load and test 64" esame
b912 ltgfr RRE_RR "load and test 64<32" esame
b903 lcgr RRE_RR "load complement 64" esame
b913 lcgfr RRE_RR "load complement 64<32" esame
b980 ngr RRE_RR "and 64" esame
b921 clgr RRE_RR "compare logical 64" esame
b931 clgfr RRE_RR "compare logical 64<32" esame
b981 ogr RRE_RR "or 64" esame
b982 xgr RRE_RR "exclusive or 64" esame
b904 lgr RRE_RR "load 64" esame
b914 lgfr RRE_RR "load 64<32" esame
b920 cgr RRE_RR "compare 64" esame
b930 cgfr RRE_RR "compare 64<32" esame
b908 agr RRE_RR "add 64" esame
b918 agfr RRE_RR "add 64<32" esame
b909 sgr RRE_RR "subtract 64" esame
b919 sgfr RRE_RR "subtract 64<32" esame
b90a algr RRE_RR "add logical 64" esame
b91a algfr RRE_RR "add logical 64<32" esame
b90b slgr RRE_RR "subtract logical 64" esame
b91b slgfr RRE_RR "subtract logical 64<32" esame
e30000000046 bctg RXE_RRRD "branch on count 64" esame
e3000000002e cvdg RXE_RRRD "convert to decimal 64" esame
e3000000000e cvbg RXE_RRRD "convert to binary 64" esame
e30000000024 stg RXE_RRRD "store 64" esame
e30000000080 ng RXE_RRRD "and 64" esame
e30000000021 clg RXE_RRRD "compare logical 64" esame
e30000000031 clgf RXE_RRRD "comparee logical 64<32" esame
e30000000081 og RXE_RRRD "or 64" esame
e30000000082 xg RXE_RRRD "exclusive or 64" esame
e30000000004 lg RXE_RRRD "load 64" esame
e30000000014 lgf RXE_RRRD "load 64<32" esame
e30000000015 lgh RXE_RRRD "load halfword 64" esame
e30000000020 cg RXE_RRRD "compare 64" esame
e30000000030 cgf RXE_RRRD "compare 64<32" esame
e30000000008 ag RXE_RRRD "add 64" esame
e30000000018 agf RXE_RRRD "add 64<32" esame
e30000000009 sg RXE_RRRD "subtract 64" esame
e30000000019 sgf RXE_RRRD "subtract 64<32" esame
e3000000000a alg RXE_RRRD "add logical 64" esame
e3000000001a algf RXE_RRRD "add logical 64<32" esame
e3000000000b slg RXE_RRRD "subtract logical 64" esame
e3000000001b slgf RXE_RRRD "subtract logical 64<32" esame
e3000000000c msg RXE_RRRD "multiply single 64" esame
e3000000001c msgf RXE_RRRD "multiply single 64<32" esame
ec0000000044 brxhg RIE_RRP "branch relative on index high 64" esame
ec0000000045 brxlg RIE_RRP "branch relative on index low or equal 64" esame
eb0000000044 bxhg RSE_RRRD "branch on index high 64" esame
eb0000000045 bxleg RSE_RRRD "branch on index low or equal 64" esame
eb000000000c srlg RSE_RRRD "shift right single logical 64" esame
eb000000000d sllg RSE_RRRD "shift left single logical 64" esame
eb000000000a srag RSE_RRRD "shift right single 64" esame
eb000000000b slag RSE_RRRD "shift left single 64" esame
eb0000000024 stmg RSE_RRRD "store multiple 64" esame
eb0000000026 stmh RSE_RRRD "store multiple high" esame
eb0000000004 lmg RSE_RRRD "load multiple 64" esame
eb0000000096 lmh RSE_RRRD "load multiple high" esame
ef lmd SS_RRRDRD3 "load multiple disjoint" esame
eb000000000f tracg RSE_RRRD "trace 64" esame
e30000000003 lrag RXE_RRRD "load real address 64" esame
e50000000002 strag SSE_RDRD "store read address" esame
eb0000000025 stctg RSE_RRRD "store control 64" esame
eb000000002f lctlg RSE_RRRD "load control 64" esame
eb0000000030 csg RSE_RRRD "compare and swap 64" esame
eb000000003e cdsg RSE_RRRD "compare double and swap 64" esame
eb0000000020 clmh RSE_RURD "compare logical characters under mask high" esame
eb000000002c stcmh RSE_RURD "store characters under mask high" esame
eb0000000080 icmh RSE_RURD "insert characters under mask high" esame
a700 tmlh RI_RU "test under mask low high" esame
a702 tmhh RI_RU "test under mask high high" esame
a701 tmll RI_RU "test under mask low low" esame
a703 tmhl RI_RU "test under mask high low" esame
c004 brcl RIL_UP "branch relative on condition long" esame
c014 jgo RIL_0P "jump long on overflow / if ones" esame
c024 jgh RIL_0P "jump long on high" esame
c024 jgp RIL_0P "jump long on plus" esame
c034 jgnle RIL_0P "jump long on not low or equal" esame
c044 jgl RIL_0P "jump long on low" esame
c044 jgm RIL_0P "jump long on minus / if mixed" esame
c054 jgnhe RIL_0P "jump long on not high or equal" esame
c064 jglh RIL_0P "jump long on low or high" esame
c074 jgne RIL_0P "jump long on not equal" esame
c074 jgnz RIL_0P "jump long on not zero / if not zeros" esame
c084 jge RIL_0P "jump long on equal" esame
c084 jgz RIL_0P "jump long on zero / if zeros" esame
c094 jgnlh RIL_0P "jump long on not low or high" esame
c0a4 jghe RIL_0P "jump long on high or equal" esame
c0b4 jgnl RIL_0P "jump long on not low" esame
c0b4 jgnm RIL_0P "jump long on not minus / if not mixed" esame
c0c4 jgle RIL_0P "jump long on low or equal" esame
c0d4 jgnh RIL_0P "jump long on not high" esame
c0d4 jgnp RIL_0P "jump long on not plus" esame
c0e4 jgno RIL_0P "jump long on not overflow / if not ones" esame
c0f4 jg RIL_0P "jump long" esame
c005 brasl RIL_RP "branch relative and save long" esame
a707 brctg RI_RP "branch relative on count 64" esame
a709 lghi RI_RI "load halfword immediate 64" esame
a70b aghi RI_RI "add halfword immediate 64" esame
a70d mghi RI_RI "multiply halfword immediate 64" esame
a70f cghi RI_RI "compare halfword immediate 64" esame
b925 sturg RRE_RR "store using real address 64" esame
b90e eregg RRE_RR "extract stacked registers 64" esame
b905 lurag RRE_RR "load using real address 64" esame
b90c msgr RRE_RR "multiply single 64" esame
b91c msgfr RRE_RR "multiply single 64<32" esame
b3a4 cegbr RRE_RR "convert from fixed 64 to short bfp" esame
b3a5 cdgbr RRE_RR "convert from fixed 64 to long bfp" esame
b3a6 cxgbr RRE_RR "convert from fixed 64 to extended bfp" esame
b3a8 cgebr RRF_U0FR "convert to fixed short bfd to 64" esame
b3a9 cgdbr RRF_U0FR "convert to fixed long bfp to 64" esame
b3aa cgxbr RRF_U0FR "convert to fixed extended bfp to 64" esame
b3c4 cegr RRE_RR "convert from fixed 64 to short hfp" esame
b3c5 cdgr RRE_RR "convert from fixed 64 to long hfp" esame
b3c6 cxgr RRE_RR "convert from fixed 64 to extended hfp" esame
b3c8 cger RRF_U0FR "convert to fixed short hfp to 64" esame
b3c9 cgdr RRF_U0FR "convert to fixed long hfp to 64" esame
b3ca cgxr RRF_U0FR "convert to fixed extended hfp to 64" esame
010b tam E "test addressing mode" esame
010c sam24 E "set addressing mode 24" esame
010d sam31 E "set addressing mode 31" esame
010e sam64 E "set addressing mode 64" esame
a500 iihh RI_RU "insert immediate high high" esame
a501 iihl RI_RU "insert immediate high low" esame
a502 iilh RI_RU "insert immediate low high" esame
a503 iill RI_RU "insert immediate low low" esame
a504 nihh RI_RU "and immediate high high" esame
a505 nihl RI_RU "and immediate high low" esame
a506 nilh RI_RU "and immediate low high" esame
a507 nill RI_RU "and immediate low low" esame
a508 oihh RI_RU "or immediate high high" esame
a509 oihl RI_RU "or immediate high low" esame
a50a oilh RI_RU "or immediate low high" esame
a50b oill RI_RU "or immediate low low" esame
a50c llihh RI_RU "load logical immediate high high" esame
a50d llihl RI_RU "load logical immediate high low" esame
a50e llilh RI_RU "load logical immediate low high" esame
a50f llill RI_RU "load logical immediate low low" esame
b2b1 stfl S_RD "store facility list" esame
b2b2 lpswe S_RD "load psw extended" esame
b90d dsgr RRE_RR "divide single 64" esame
b90f lrvgr RRE_RR "load reversed 64" esame
b916 llgfr RRE_RR "load logical 64<32" esame
b917 llgtr RRE_RR "load logical thirty one bits" esame
b91d dsgfr RRE_RR "divide single 64<32" esame
b91f lrvr RRE_RR "load reversed 32" esame
b986 mlgr RRE_RR "multiply logical 64" esame
b987 dlgr RRE_RR "divide logical 64" esame
b988 alcgr RRE_RR "add logical with carry 64" esame
b989 slbgr RRE_RR "subtract logical with borrow 64" esame
b98d epsw RRE_RR "extract psw" esame
b996 mlr RRE_RR "multiply logical 32" esame
b997 dlr RRE_RR "divide logical 32" esame
b998 alcr RRE_RR "add logical with carry 32" esame
b999 slbr RRE_RR "subtract logical with borrow 32" esame
b99d esea RRE_R0 "extract and set extended authority" esame
c000 larl RIL_RP "load address relative long" esame
e3000000000d dsg RXE_RRRD "divide single 64" esame
e3000000000f lrvg RXE_RRRD "load reversed 64" esame
e30000000016 llgf RXE_RRRD "load logical 64<32" esame
e30000000017 llgt RXE_RRRD "load logical thirty one bits" esame
e3000000001d dsgf RXE_RRRD "divide single 64<32" esame
e3000000001e lrv RXE_RRRD "load reversed 32" esame
e3000000001f lrvh RXE_RRRD "load reversed 16" esame
e3000000002f strvg RXE_RRRD "store reversed 64" esame
e3000000003e strv RXE_RRRD "store reversed 32" esame
e3000000003f strvh RXE_RRRD "store reversed 64" esame
e30000000086 mlg RXE_RRRD "multiply logical 64" esame
e30000000087 dlg RXE_RRRD "divide logical 64" esame
e30000000088 alcg RXE_RRRD "add logical with carry 64" esame
e30000000089 slbg RXE_RRRD "subtract logical with borrow 64" esame
e3000000008e stpq RXE_RRRD "store pair to quadword" esame
e3000000008f lpq RXE_RRRD "load pair from quadword" esame
e30000000096 ml RXE_RRRD "multiply logical 32" esame
e30000000097 dl RXE_RRRD "divide logical 32" esame
e30000000098 alc RXE_RRRD "add logical with carry 32" esame
e30000000099 slb RXE_RRRD "subtract logical with borrow 32" esame
e30000000090 llgc RXE_RRRD "load logical character" esame
e30000000091 llgh RXE_RRRD "load logical halfword" esame
eb000000001c rllg RSE_RRRD "rotate left single logical 64" esame
eb000000001d rll RSE_RRRD "rotate left single logical 32" esame
b278 stcke S_RD "store clock extended" esame
b2a5 tre RRE_RR "translate extended" esame
eb000000008e mvclu RSE_RRRD "move long unicode" esame
e9 pka SS_L0RDRD "pack ascii" esame
e1 pku SS_L0RDRD "pack unicode" esame
b993 troo RRE_RR "translate one to one" esame
b992 trot RRE_RR "translate one to two" esame
b991 trto RRE_RR "translate two to one" esame
b990 trtt RRE_RR "translate two to two" esame
ea unpka SS_L0RDRD "unpack ascii" esame
e2 unpku SS_L0RDRD "unpack unicode" esame
b358 thder RRE_RR "convert short bfp to long hfp" esame
b359 thdr RRE_RR "convert long bfp to long hfp" esame
b350 tbedr RRF_U0FF "convert long hfp to short bfp" esame
b351 tbdr RRF_U0FF "convert long hfp to long bfp" esame
b374 lzer RRE_R0 "load short zero" esame
b375 lzdr RRE_R0 "load long zero" esame
b376 lzxr RRE_R0 "load extended zero" esame