(implicit_it_mode): New global.
(it_instruction_type): New enum.
(arm_parse_it_mode): New function.
(arm_long_opts): New option added.
(arm_it): New field.
(it_state): New enum.
(now_it): New macro.
(check_it_blocks_finished): New function.
(insns[]): Use the IT Thumb opcodes for ARM too.
(arm_cleanup): Call check_it_blocks_finished.
(now_it_compatible): New function.
(conditional_insn): New function.
(set_it_insn_type): New macro.
(set_it_insn_type_last): New macro.
(do_it): Call automatic IT machinery functions.
(do_t_add_sub): Likewise
(do_t_arit3): Likewise.
(do_t_arit3c): Likewise.
(do_t_blx): Likewise.
(do_t_branch): Likewise.
(do_t_bkpt): Likewise.
(do_t_branch23): Likewise.
(do_t_bx): Likewise.
(do_t_bxj): Likewise.
(do_t_cps): Likewise.
(do_t_cpsi): Likewise.
(do_t_cbz): Likewise.
(do_t_it): Likewise.
(encode_thumb2_ldmstm): Likewise.
(do_t_ldst): Likewise.
(do_t_mov_cmp): Likewise.
(do_t_mvn_tst): Likewise.
(do_t_mul): Likewise.
(do_t_neg): Likewise.
(do_t_setend): Likewise.
(do_t_shift): Likewise.
(do_t_tb): Likewise.
(output_it_inst): New function.
(new_automatic_it_block): New function.
(close_automatic_it_block): New function.
(now_it_add_mask): New function.
(it_fsm_pre_encode): New function.
(handle_it_state): New function.
(it_fsm_post_encode): New function.
(force_automatic_it_block_close): New function.
(in_it_block): New function.
(md_assemble): Call automatic IT block machinery functions.
(arm_frob_label): Likewise.
(arm_opts): New element.
* config/tc-arm.h (it_state): New enum.
(current_it): New struct.
(arm_segment_info_type): New member added.
* doc/c-arm.texi: New option -mimplicit-it documented.
* gas/arm/arm-it-auto.d: New test.
* gas/arm/arm-it-auto.s: New file.
* gas/arm/arm-it-auto-2.d: New test case.
* gas/arm/arm-it-auto-2.s: New file.
* gas/arm/arm-it-auto-3.d: New test case.
* gas/arm/arm-it-auto-3.s: New file.
* gas/arm/arm-it-bad.d: New test case.
* gas/arm/arm-it-bad.l: New file.
* gas/arm/arm-it-bad.s: New file.
* gas/arm/arm-it-bad-2.d: New test case.
* gas/arm/arm-it-bad-2.l: New file.
* gas/arm/arm-it-bad-2.s: New file.
* gas/arm/arm-it-bad-3.d: New test case.
* gas/arm/arm-it-bad-3.l: New file.
* gas/arm/arm-it-bad-3.s: New file.
* gas/arm/thumb2_it_auto.d: New test.
* gas/arm/thumb2_it_bad.l: Error message updated.
* gas/arm/thumb2_it_bad_auto.d: New test.
* gas/arm/thumb2_it.d: Comment added.
* gas/arm/thumb2_it_bad.d: Comment added.
bfd/
* elf32-arm.c (elf32_arm_size_stubs): Use PLT address as
destination for defined dynamic symbols when deciding whether to
insert a stub or not.
(allocate_dynrelocs): Make sure functions are not marked as Thumb
when actually accessed through a PLT, even when generating a
shared lib.
ld/testsuite:
* ld-arm/farcall-mixed-app.s: Add new references to check more
modes switching.
* ld-arm/farcall-mixed-lib1.s: Likewise.
* ld-arm/farcall-mixed-app-v5.d: Update expected result.
* farcall-mixed-app.d: Likewise.
* ld-arm/farcall-mixed-lib.d: Likewise.
Processes relocs in a target specific manner.
(debug_apply_relocations): Use the new function.
* dwarf.c (display_debug_loc): End the dump with a blank line.
(struct debug_display): Enable reloc processing for .debug_aranges
and .debug_loc sections.
Target::new_output_section.
(Layout::attach_allocated_section_to_segment): Put large section
sections in a separate load segment with the large segment flag
set.
(Layout::segment_precedes): Sort large data segments after other
load segments.
(align_file_offset): New static function.
(Layout::set_segment_offsets): Use align_file_offset.
* output.h (class Output_section): Add is_small_section_ and
is_large_section_ fields.
(Output_section::is_small_section): New function.
(Output_section::set_is_small_section): New function.
(Output_section::is_large_section): New function.
(Output_section::set_is_large_section): New function.
(Output_section::is_large_data_section): New function.
(class Output_segment): Add is_large_data_segment_ field.
(Output_segment::is_large_data_segment): New function.
(Output_segment::set_is_large_data_segment): New function.
* output.cc (Output_section::Output_section): Initialize new
fields.
(Output_segment::Output_segment): Likewise.
(Output_segment::add_output_section): Add assertion that large
data sections always go in large data segments. Force small data
sections to the end of the list of data sections. Force small BSS
sections to the start of the list of BSS sections. For large BSS
sections to the end of the list of BSS sections.
* symtab.h (class Symbol): Declare is_common_shndx.
(Symbol::is_defined): Check Symbol::is_common_shndx.
(Symbol::is_common): Likewise.
(class Symbol_table): Define enum Commons_section_type. Update
declarations. Add small_commons_ and large_commons_ fields.
* symtab.cc (Symbol::is_common_shndx): New function.
(Symbol_table::Symbol_table): Initialize new fields.
(Symbol_table::add_from_object): Put small and large common
symbols in the right list.
(Symbol_table::sized_finalized_symbol): Check
Symbol::is_common_shndx.
(Symbol_table::sized_write_globals): Likewise.
* common.cc (Symbol_table::do_allocate_commons): Allocate new
common symbol lists. Don't call do_allocate_commons_list if the
list is empty.
(Symbol_table::do_allocate_commons_list): Remove is_tls
parameter. Add comons_section_type parameter. Change all
callers. Handle small and large common symbols.
* object.cc (Sized_relobj::do_finalize_local_symbols): Check
Symbol::is_common_shndx.
* resolve.cc (symbol_to_bits): Likewise.
* target.h (Target::small_common_shndx): New function.
(Target::small_common_section_flags): New function.
(Target::large_common_shndx): New function.
(Target::large_common_section_flags): New function.
(Target::new_output_section): New function.
(Target::Target_info): Add small_common_shndx, large_common_shndx,
small_common_section_flags, and large_common_section_flags
fields.
(Target::do_new_output_section): New virtual function.
* arm.cc (Target_arm::arm_info): Initialize new fields.
* i386.cc (Target_i386::i386_info): Likewise.
* powerpc.cc (Target_powerpc::powerpc_info) [all versions]:
Likewise.
* sparc.c (Target_sparc::sparc_info) [all versions]: Likewise.
* x86_64.cc (Target_x86_64::x86_64_info): Likewise.
(Target_x86_64::do_new_output_section): New function.
* configure.ac: Define conditional MCMODEL_MEDIUM.
* testsuite/Makefile.am (check_PROGRAMS): Add large.
(large_SOURCES, large_CFLAGS, large_DEPENDENCIES): Define.
(large_LDFLAGS): Define.
* testsuite/large.c: New file.
* testsuite/testfile.cc (Target_test::test_target_info):
Initialize new fields.
* configure, testsuite/Makefile.in: Rebuild.
2009-06-19 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_tls_transition): Add a parameter,
r_symndx. Report local symbol name on error.
(elf_i386_check_relocs): Updated. Report local symbol name on
error.
(elf_i386_gc_sweep_hook): Updated.
(elf_i386_relocate_section): Likewise.
* elf64-x86-64.c (elf64_x86_64_tls_transition): Add a parameter,
r_symndx. Report local symbol name on error.
(elf64_x86_64_check_relocs): Updated. Report local symbol name
on error.
(elf64_x86_64_gc_sweep_hook): Updated.
(elf64_x86_64_relocate_section): Likewise.
ld/testsuite/
2009-06-19 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/i386.exp: Run tlsgd2.
* ld-i386/tlsgd2.d: New.
* ld-i386/tlsgd2.s: Likewise.
* ld-x86-64/tlsgd3.d: Updated.
* machoread.c (macho_symtab_read): Adjust for bfd changes.
* darwin-nat.h (struct darwin_exception_msg): New type to describe
a mach exception.
(struct private_thread_info): New type to describe the state of the
thread.
(DEF_VEC_I thread_t): Removed, replaced by ...
(DEF_VEC_O darwin_thread_t): ... this new type.
(struct darwin_inferior): Renamed to ...
(struct private_inferior): ... this type. Fields added.
(darwin_not_port): Moved into the private inferior structure.
* darwin-nat.c: Add includes, improve comments.
Rewrite to handle multiple threads and processes.
(darwin_resume_to): New function and protype.
(darwin_resume, darwin_wait_to, darwin_wait): Ditto.
(darwin_kill_inferior): Add ops argument.
(darwin_pid_to_str): New function.
(darwin_thread_alive): Ditto.
(darwin_inf, darwin_not_port): Removed.
(darwin_inf_fake_stop): New variable.
(msgin, msgout, msg_state, exc_msg): Removed.
(mach_check_error): Use warning instead of error.
(darwin_ptrace): Adjust debug level.
(cmp_thread_t): Fix names (typo).
(darwin_check_new_threads): Argument is now an inferior,
adjust for new structures, add no change check, ignore dead ports,
handle first thread case.
(find_inferior_task_it): New function.
(find_inferior_notify_it): Ditto.
(darwin_find_inferior_by_task): Ditto.
(darwin_find_inferior_by_notify): Ditto.
(darwin_find_thread): Ditto.
(darwin_suspend_inferior): Ditto.
(darwin_resume_inferior): Ditto.
(catch_exception_raise_state): Removed.
(catch_exception_raise_state_identity): Removed.
(darwin_suspend_inferior_it): New function.
(darwin_resume_inferior_it): Ditto.
(darwin_dump_message): New function, extracted from darwin_wait.
(darwin_decode_exception_message): New function.
(darwin_encode_reply): New function.
(catch_exception_raise): Removed.
(darwin_send_reply): New function, extracted from darwin_resume.
(darwin_resume_thread): New function, extracted from darwin_resume.
(struct resume_inferior_threads_param): New type.
(darwin_resume_inferior_threads_it): New function.
(darwin_resume_inferior_threads): New function.
(darwin_suspend_inferior_threads): New function.
(darwin_resume): Mostly rewritten to handle multiple threads and
some corner cases.
(darwin_decode_message): New function extracted from darwin_wait.
(cancel_breakpoint): New function.
(darwin_wait): Mostly rewritten. Handle multiple threads.
(darwin_mourn_inferior): Adjust for per process structures.
(darwin_reply_to_all_pending_messages): New function.
(darwin_stop_inferior): Adjust for per inferior structures.
(darwin_attach_pid): Ditto.
(darwin_init_thread_list): Ditto.
(darwin_attach): Ditto.
(darwin_detach): Ditto.
(darwin_files_info): Now empty.
(darwin_pid_to_str): Adjust returns string to match one expected by
the testsuite.
(darwin_read_write_inferior): Rename err variable to match other uses.
Adjust debug message. Handle submaps.
(darwin_xfer_memory): Adjust for per inferior structures.
(set_enable_mach_exceptions): Ditto.
(darwin_pid_to_exec_file): New function.
(darwin_get_ada_task_ptid): Ditto.
(darwin_supports_multi_process): Ditto.
(_initialize_darwin_inferior): Remove useless assertion, adjust for
per inferior structures. Add new target operations.
Pedro Alves <pedro@codesourcery.com>
* target.h (struct target_ops) <supports_multi_process>: New
callback.
(target_supports_multi_process): New.
* server.c (handle_query): Even if GDB reports support, only
enable multi-process if the target also supports it. Report
multi-process support only if the target backend supports it.
* linux-low.c (linux_supports_multi_process): New function.
(linux_target_ops): Install it as target_supports_multi_process
callback.
* mach-o.c (bfd_mach_o_scan_read_symtab_symbols): Add prototype.
(bfd_mach_o_version): Use bfd_mach_o_get_data instead of direct access.
(bfd_mach_o_valid): Ditto.
(bfd_mach_o_wide_p): Ditto.
(bfd_mach_o_canonicalize_reloc): Ditto.
(bfd_mach_o_build_commands): Ditto.
(bfd_mach_o_scan_read_thread): Ditto.
(bfd_mach_o_flatten_sections): Ditto.
(bfd_mach_o_scan_start_address): Ditto.
(bfd_mach_o_lookup_section): Ditto.
(bfd_mach_o_core_fetch_environment): Ditto.
(bfd_mach_o_write_contents): Ditto. Handle reexport_dylib.
(bfd_mach_o_scan_write_relocs): Adjust for bfd_mach_o_get_data.
(bfd_mach_o_scan_write_symtab): Ditto.
Use macros instead of hard-coded values.
(bfd_mach_o_scan_read_symtab_symbol): Make the function static.
Use bfd_mach_o_get_data instead of direct access. Use macros
instead of hard-coded values.
(bfd_mach_o_scan_read_symtab_strtab): Make the function static.
Remove sym argument and get section from mdata.
Move code into the else branch.
(bfd_mach_o_scan_read_symtab_symbols): Make the function static.
Remove sym argument and get section from mdata. Adjust code.
(bfd_mach_o_scan_read_dylib): Move assertion into the created
switch (which replaces consecutive if statements).
(bfd_mach_o_scan_read_dysymtab): Rename seg to cmd. Load
module table, table of content, indirect symbols and external
referenced symbols.
(bfd_mach_o_scan_read_symtab): Renames seg to symtab. Set symtab
field.
(bfd_mach_o_scan_read_linkedit): New function.
(bfd_mach_o_scan_read_str): Ditto.
(bfd_mach_o_count_symbols): Simplify the code by using the symtab
field of mdata.
(bfd_mach_o_get_symtab_upper_bound): Remove check as
bfd_mach_o_count_symbols never returns an error.
(bfd_mach_o_canonicalize_symtab): Simplify the code by using the
symtab field (there might be only one symtab).
(bfd_mach_o_scan_read_command): Handle reexported dylib.
Handle sub frameworks, sub umbrella, sub library and sub client.
Read code signature and segment split info commands.
(bfd_mach_o_scan): Reindent.
(bfd_mach_o_xlat_name): New type.
(bfd_mach_o_print_flags): New function.
(bfd_mach_o_get_name): Ditto.
(bfd_mach_o_cpu_name): New variable.
(bfd_mach_o_filetype_name, bfd_mach_o_header_flags_name)
(bfd_mach_o_section_type_name)
(bfd_mach_o_section_attribute_name)
(bfd_mach_o_load_command_name): New variables.
(bfd_mach_o_print_private_header): New function.
(bfd_mach_o_print_section_map): New function extracted from
bfd_mach_o_print_private_bfd_data.
(bfd_mach_o_print_section): Ditto. Print more infos.
(bfd_mach_o_print_segment): Ditto.
(bfd_mach_o_print_dysymtab): Ditto.
(bfd_mach_o_bfd_print_private_bfd_data): Reworked. Handle
load weak dylib, reexport dylib and id dylib.
Handle code signature and segment_split info.
Handle sub frameworks, sub umbrella, sub library and sub client.
(bfd_mach_o_section_get_nbr_indirect): New function.
* mach-o.h (BFD_MACH_O_REFERENCE_MASK): New macro. Add comment.
(bfd_mach_o_header_flags): New enum to define header flags.
(bfd_mach_o_section_attribute): New enum to replace ...
(BFD_MACH_O_S_ATTR_LOC_RELOC, BFD_MACH_O_S_ATTR_EXT_RELOC,
BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS, BFD_MACH_O_S_ATTR_DEBUG,
BFD_MACH_O_S_SELF_MODIFYING_CODE, BFD_MACH_O_S_ATTR_LIVE_SUPPORT,
BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS,
BFD_MACH_O_S_ATTR_NO_TOC, BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS): ...
these removed macros.
(BFD_MACH_O_NLIST_SIZE, BFD_MACH_O_NLIST_64_SIZE): New macros.
(bfd_mach_o_dylib_module): New type.
(BFD_MACH_O_DYLIB_MODULE_SIZE, BFD_MACH_O_DYLIB_MODULE_64_SIZE): New
macros.
(bfd_mach_o_dylib_table_of_content): New type.
(BFD_MACH_O_TABLE_OF_CONTENT_SIZE): New macro.
(bfd_mach_o_dylib_reference): New type.
(BFD_MACH_O_REFERENCE_SIZE): New macro.
(bfd_mach_o_dysymtab_command): Add fields for loaded and decoded
modules, toc, references and indirect syms.
(BFD_MACH_O_INDIRECT_SYMBOL_SIZE): New macro.
(bfd_mach_o_dylinker_command): Remove cmd and cmdsize fields (were
unused). Add comment.
(bfd_mach_o_dylib_command): Ditto.
(bfd_mach_o_prebound_dylib_command): Ditto.
(bfd_mach_o_linkedit_command): New type.
(bfd_mach_o_str_command): New type.
(bfd_mach_o_load_command): Add linkedit and str fields.
(mach_o_data_struct): Add symtab field.
(bfd_get_mach_o_data): Renamed to ...
(bfd_mach_o_get_data): ... this new macro.
(bfd_mach_o_scan_read_symtab_symbol,
bfd_mach_o_scan_read_symtab_strtab,
bfd_mach_o_scan_read_symtab_symbols): Prototypes removed.
* mach-o-i386.c (bfd_mach_o_i386_mkobject): Use bfd_mach_o_get_data
instead of direct access.