(IS_ABSOLUTE_RELOC): Define.
(struct ppc_link_hash_entry): New.
(struct ppc_link_hash_table): New.
(ppc_hash_table): Define.
(link_hash_newfunc): New function.
(ppc64_elf_link_hash_table_create): New function.
(create_got_section): New function.
(ppc64_elf_create_dynamic_sections): Call create_got_section. Stash
pointers to our dynamic sections in hash table.
(ppc64_elf_copy_indirect_symbol): New function.
(ppc64_elf_check_relocs): Remove DEBUG code. Use short-cuts to
dynamic sections. Localise vars. Modify code for refcounts
starting from zero. Don't allocate here, or force symbols dynamic.
Don't copy all relocs if shared, select ones we need. Add code
to track possible copy relocs for non-shared link.
(ppc64_elf_gc_mark_hook): Update comment.
(ppc64_elf_gc_sweep_hook): Sweep dynrelocs too.
(ppc64_elf_adjust_dynamic_symbol): Remove DEBUG code. Rewrite .plt
code for reference counting garbage collection. Don't create .plt
entries for functions that don't comply with ABI naming convention,
and don't allocate .plt space here. Use short-cuts to dynamic
sections. If possible, keep dynamic relocations instead of using
copy relocs. Remove confused comments.
(ppc_adjust_dynindx): Delete.
(WILL_CALL_FINISH_DYNAMIC_SYMBOL): Define.
(allocate_dynrelocs): New function.
(readonly_dynrelocs): New function.
(ppc64_elf_size_dynamic_sections): Rewrite. Allocate local .got
space here, and call allocate_dynrelocs to allocate space for
global .plt, .got and reloc sections. Use short-cuts to dynamic
sections. Call readonly_dynrelocs to determine whether we need
DT_TEXTREL. Don't generate section symbols here, the generic
ELF linker code does it for us.
(ppc64_elf_final_link): Call regular ELF backend linker rather than
gc variety, since we do our own .got handling.
(ppc64_elf_relocate_section): Remove DEBUG code. Make use of
dynamic section short-cuts. Localise vars, and delay setting.
Handle unknown relocs in main switch statement. Replace ugly
complicated tests for unresolvable relocs with a simple direct
scheme using "unresolved_reloc" var. Test ELF_ST_VISIBILITY
before allowing an undefined sym in a shared lib. Do R_*_DS tests
after main switch, when we've set addend. Do non-addend insn
tweaks before main swithc. Ignore input_section->vma when
calculating reloc offsets as it's always zero. Rewrite dynamic
reloc handling. Consolidate R_*_HA handling. Handle more relocs.
(ppc64_elf_finish_dynamic_symbol): Remove DEBUG code. Make use
of dynamic section short-cuts. Reorganise .plt handling code.
Remove confused comments. Take note of ELF_LINK_FORCED_LOCAL.
Move expressions out of swap_reloca_out function calls.
(ppc64_elf_reloc_type_class): New function.
(ppc64_elf_info_to_howto): Move common expression to local var.
(ppc64_elf_finish_dynamic_sections): Remove DEBUG code. Make use
of dynamic section short-cuts. Don't fiddle with section syms
here as the ELF linker does it for us.
(elf_backend_can_refcount): Define.
(bfd_elf64_bfd_link_hash_table_create): Define.
(elf_backend_copy_indirect_symbol): Define.
(elf_backend_reloc_type_class): Define.
(elf_backend_*, bfd_elf64_bfd_* defines): Sort.
(struct elf_backend_data): Add can_refcount.
* elf.c (_bfd_elf_link_hash_newfunc): Get rid of a few casts. Set
got.refcount and plt.refcount from init_refcount.
(_bfd_elf_link_hash_table_init): Set up init_refcount.
(_bfd_elf_link_hash_copy_indirect): Reference got/plt.refcount
rather than got/plt.offset, and test for <= 0 rather than -1.
* elflink.h (size_dynamic_sections): Set init_refcount to -1.
* elfxx-target.h (elf_backend_can_refcount): Define.
(elfNN_bed): Init can_refcount.
* linker.c (_bfd_link_hash_newfunc): Get rid of a few casts.
(_bfd_generic_link_hash_newfunc): Likewise.
* elf32-cris.c (cris_elf_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
* elf32-hppa.c (elf32_hppa_check_relocs): Modify for refcounts
starting from zero.
(elf32_hppa_copy_indirect_symbol): Make static to agree with
prototype.
(elf_backend_can_refcount): Define.
* elf32-i386.c (elf_i386_check_relocs): Modify for refcounts
starting from zero.
(allocate_dynrelocs): Set plt/got.offset rather than *.refcount.
(elf_i386_finish_dynamic_symbol): Expand SHN_UNDEF comment.
(elf_i386_finish_dynamic_sections): Use local var so line < 80 chars.
(elf_backend_can_refcount): Define.
(elf_i386_copy_indirect_symbol): Make static to agree with
prototype. Formatting fix.
* elf32-m68k.c (elf_m68k_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
* elf32-ppc.c (ppc_elf_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
* elf32-s390.c (elf_s390_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
* elf64-s390.c (elf_s390_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
* elf64-x86-64.c (elf64_x86_64_check_relocs): Modify for refcounts
starting from zero.
(elf_backend_can_refcount): Define.
no longer allocate here. Localise some vars to blocks where they
are used.
(elf32_hppa_adjust_dynamic_symbol): Correct a comment. Delay
setting of vars until needed.
(allocate_dynrelocs): Don't create a .plt entry without a reloc
when symbol visibilty makes a function local.
(elf32_hppa_finish_dynamic_symbol): Move expressions out of
swap_reloca_out function calls.
(elf32_hppa_relocate_section): Likewies. Comment typo fix.
(elf32_hppa_finish_dynamic_sections): Migrate common code out of
switch statement.
Changes by Daniel Berlin <dan@cgsoftware.com>, to support
better parsing of const and volatile type expressions.
* c-exp.y (const_and_volatile, const_or_volatile_noopt,
const_or_volatile): New non-terminals.
(ptype): Use new rule for const_or_volatile.
(typebase): Use new rule for const_or_volatile_noopt.
* parser-defs.h (enum type_pieces): New values tp_const, tp_volatile.
* parse.c (follow_types): Handle tp_const and tp_volatile on the
type stack: call make_cv_type to create new const/volatile type.
* lib/gdb.exp (test_debug_format): New proc.
(setup_xfail_format): Use new proc test_debug_format.
* gdb.base/constvars.exp (local_compiler_xfail_check): New
proc; use new service proc test_debug_format.
Replace all other "gcc_compiled" tests with this test.
* gdb.base/volatile.exp (local_compiler_xfail_check): New
proc; use new service proc test_debug_format.
Replace all other "gcc_compiled" tests with this test.
Changes by Daniel Berlin <dan@cgsoftware.com>, to support
better parsing of const and volatile type expressions.
* c-exp.y (const_and_volatile, const_or_volatile_noopt,
const_or_volatile): New non-terminals.
(ptype): Use new rule for const_or_volatile.
(typebase): Use new rule for const_or_volatile_noopt.
* parser-defs.h (enum type_pieces): New values tp_const, tp_volatile.
* parse.c (follow_types): Handle tp_const and tp_volatile on the
type stack: call make_cv_type to create new const/volatile type.
no longer allocate here. Localise some vars to blocks where they
are used. Remove separate switch stmt for creating .got sec.
(elf_i386_adjust_dynamic_symbol): Correct a comment. Remove
redundant casts and aborts. Delay setting of vars until needed.
(allocate_dynrelocs): Remove redundant casts and aborts.
(elf_i386_size_dynamic_sections): Move comment.
(elf_i386_finish_dynamic_symbol): Move expressions out of function
calls.
(elf_i386_relocate_section): Likewise. Comment typo fix.
(elf_i386_finish_dynamic_sections): Migrate common code out of
switch statement.
(elf_backend_* defines): Sort.
request to kill the inferior and its child processes. Otherwise, the
inferior is not killed on HPUX 11.0. Removed the code that detaches the
child processes since we just killed them.
* input-file.c (input_file_open): When reading the
first line looking for #NO_APP, prepare for the possibility
of finding #APP instead. Also fix algorithm to allow
white-space to follow either #NO_APP or #APP directives.
(elf_backend_copy_indirect_symbol): Define.
(struct elf_i386_link_hash_entry): Rename "root" to "elf".
(struct elf_i386_link_hash_table): Likewise.
(link_hash_newfunc): Get rid of unnecessary casts.
(elf_i386_link_hash_table_create): Likewise.
(elf_i386_check_relocs): Initialise local_got_refcounts to 0.
Don't test input section SEC_READONLY here to try to avoid copy
relocs, and keep dyn_relocs regardleas of ELF_LINK_NON_GOT_REF.
(elf_i386_adjust_dynamic_symbol): Check output section SEC_READONLY
here to properly test whether we need copy relocs. Do so for weak
syms too.
* elf32-hppa (elf32_hppa_copy_indirect_symbol): New function.
(elf_backend_copy_indirect_symbol): Define.
(struct elf32_hppa_link_hash_table): Rename "root" to "elf".
(stub_hash_newfunc): Get rid of unnecessary casts.
(hppa_link_hash_newfunc): Likewise.
(elf32_hppa_check_relocs): Initialise local_got_refcounts to 0.
Don't test input section SEC_READONLY here to try to avoid copy
relocs, and keep dyn_relocs regardleas of ELF_LINK_NON_GOT_REF.
(elf32_hppa_adjust_dynamic_symbol): Check output section SEC_READONLY
here to properly test whether we need copy relocs. Do so for weak
syms too.