diff options
36 files changed, 190 insertions, 184 deletions
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 8c4d4f7..1213a15 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -801,7 +801,6 @@ mips_relocate_section (bfd *output_bfd, bool gp_undefined; struct external_reloc *ext_rel; struct external_reloc *ext_rel_end; - unsigned int i; bool got_lo; struct internal_reloc lo_int_rel; bfd_size_type amt; @@ -861,7 +860,7 @@ mips_relocate_section (bfd *output_bfd, ext_rel = (struct external_reloc *) external_relocs; ext_rel_end = ext_rel + input_section->reloc_count; - for (i = 0; ext_rel < ext_rel_end; ext_rel++, i++) + for (; ext_rel < ext_rel_end; ext_rel++) { struct internal_reloc int_rel; bool use_lo = false; diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index fbb1cd9..c02e34e 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -3287,25 +3287,20 @@ extern asection _bfd_elf_large_com_section; && ((input_section->flags & SEC_DEBUGGING) != 0 \ || elf_section_type (input_section) == SHT_GNU_SFRAME)) \ { \ - Elf_Internal_Shdr *rel_hdr; \ + Elf_Internal_Shdr *rel_hdr \ + = _bfd_elf_single_rel_hdr (input_section->output_section); \ \ - rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \ + rel_hdr->sh_size -= rel_hdr->sh_entsize; \ + rel_hdr = _bfd_elf_single_rel_hdr (input_section); \ + rel_hdr->sh_size -= rel_hdr->sh_entsize; \ \ - /* Avoid empty output section. */ \ - if (rel_hdr->sh_size > rel_hdr->sh_entsize) \ - { \ - rel_hdr->sh_size -= rel_hdr->sh_entsize; \ - rel_hdr = _bfd_elf_single_rel_hdr (input_section); \ - rel_hdr->sh_size -= rel_hdr->sh_entsize; \ + memmove (rel, rel + count, \ + (relend - rel - count) * sizeof (*rel)); \ \ - memmove (rel, rel + count, \ - (relend - rel - count) * sizeof (*rel)); \ - \ - input_section->reloc_count -= count; \ - relend -= count; \ - rel--; \ - continue; \ - } \ + input_section->reloc_count -= count; \ + relend -= count; \ + rel--; \ + continue; \ } \ \ for (int i_ = 0; i_ < count; i_++) \ diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c index 0a6e665..a78516d 100644 --- a/bfd/elf32-arc.c +++ b/bfd/elf32-arc.c @@ -1947,6 +1947,18 @@ elf_arc_relocate_section (bfd * output_bfd, return false; } + if (wrel != rel) + { + Elf_Internal_Shdr *rel_hdr; + size_t deleted = rel - wrel; + + rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); + rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; + rel_hdr = _bfd_elf_single_rel_hdr (input_section); + rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; + input_section->reloc_count -= deleted; + } + return true; } diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index a9d92ff..e4376f0 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -6527,16 +6527,15 @@ elf32_arm_size_stubs (bfd *output_bfd, while (1) { bfd *input_bfd; - unsigned int bfd_indx; asection *stub_sec; enum elf32_arm_stub_type stub_type; bool stub_changed = false; unsigned prev_num_a8_fixes = num_a8_fixes; num_a8_fixes = 0; - for (input_bfd = info->input_bfds, bfd_indx = 0; + for (input_bfd = info->input_bfds; input_bfd != NULL; - input_bfd = input_bfd->link.next, bfd_indx++) + input_bfd = input_bfd->link.next) { Elf_Internal_Shdr *symtab_hdr; asection *section; diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index 69317b3..249c6b5 100644 --- a/bfd/elf32-bfin.c +++ b/bfd/elf32-bfin.c @@ -1376,7 +1376,6 @@ bfin_relocate_section (bfd * output_bfd, asection *sgot; Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; - int i = 0; dynobj = elf_hash_table (info)->dynobj; symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; @@ -1387,7 +1386,7 @@ bfin_relocate_section (bfd * output_bfd, rel = relocs; relend = relocs + input_section->reloc_count; - for (; rel < relend; rel++, i++) + for (; rel < relend; rel++) { int r_type; reloc_howto_type *howto; diff --git a/bfd/elf32-csky.c b/bfd/elf32-csky.c index a03f002..2a08659 100644 --- a/bfd/elf32-csky.c +++ b/bfd/elf32-csky.c @@ -3446,13 +3446,12 @@ elf32_csky_size_stubs (bfd *output_bfd, while (1) { bfd *input_bfd; - unsigned int bfd_indx; asection *stub_sec; bool stub_changed = false; - for (input_bfd = info->input_bfds, bfd_indx = 0; + for (input_bfd = info->input_bfds; input_bfd != NULL; - input_bfd = input_bfd->link.next, bfd_indx++) + input_bfd = input_bfd->link.next) { Elf_Internal_Shdr *symtab_hdr; asection *section; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index b417cb0..abe26e4 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -3600,14 +3600,6 @@ elf_i386_relocate_section (bfd *output_bfd, rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; - if (rel_hdr->sh_size == 0) - { - /* It is too late to remove an empty reloc section. Leave - one NONE reloc. - ??? What is wrong with an empty section??? */ - rel_hdr->sh_size = rel_hdr->sh_entsize; - deleted -= 1; - } rel_hdr = _bfd_elf_single_rel_hdr (input_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; input_section->reloc_count -= deleted; diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c index 57c37c5..db7ed46 100644 --- a/bfd/elf32-microblaze.c +++ b/bfd/elf32-microblaze.c @@ -1765,7 +1765,6 @@ microblaze_elf_relax_section (bfd *abfd, Elf_Internal_Rela *irel, *irelend; bfd_byte *contents = NULL; bfd_byte *free_contents = NULL; - int rel_count; unsigned int shndx; size_t i, sym_index; asection *o; @@ -1818,8 +1817,7 @@ microblaze_elf_relax_section (bfd *abfd, goto error_return; irelend = internal_relocs + sec->reloc_count; - rel_count = 0; - for (irel = internal_relocs; irel < irelend; irel++, rel_count++) + for (irel = internal_relocs; irel < irelend; irel++) { bfd_vma symval; if ((ELF32_R_TYPE (irel->r_info) != (int) R_MICROBLAZE_64_PCREL) @@ -1935,10 +1933,9 @@ microblaze_elf_relax_section (bfd *abfd, if (sdata->relax_count > 0) { shndx = _bfd_elf_section_from_bfd_section (abfd, sec); - rel_count = 0; sdata->relax[sdata->relax_count].addr = sec->size; - for (irel = internal_relocs; irel < irelend; irel++, rel_count++) + for (irel = internal_relocs; irel < irelend; irel++) { bfd_vma nraddr; diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c index 3627b30..bcd7c42 100644 --- a/bfd/elf32-nds32.c +++ b/bfd/elf32-nds32.c @@ -4344,7 +4344,6 @@ nds32_elf_late_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *symtab_hdr; asection *sgot; char *local_tls_type; - unsigned long symndx; bfd_vma *local_tlsdesc_gotent; if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) @@ -4386,8 +4385,8 @@ nds32_elf_late_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, sgot = elf_hash_table (info)->sgot; local_tls_type = elf32_nds32_local_got_tls_type (ibfd); local_tlsdesc_gotent = elf32_nds32_local_tlsdesc_gotent (ibfd); - for (symndx = 0; local_got < end_local_got; - ++local_got, ++local_tls_type, ++local_tlsdesc_gotent, ++symndx) + for (; local_got < end_local_got; + ++local_got, ++local_tls_type, ++local_tlsdesc_gotent) { if (*local_got > 0) { diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index f17effd..3fd9f28 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -9142,15 +9142,6 @@ ppc_elf_relocate_section (bfd *output_bfd, rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; - if (rel_hdr->sh_size == 0) - { - /* It is too late to remove an empty reloc section. Leave - one NONE reloc. - ??? What is wrong with an empty section??? */ - rel_hdr->sh_size = rel_hdr->sh_entsize; - deleted -= 1; - wrel++; - } relend = wrel; rel_hdr = _bfd_elf_single_rel_hdr (input_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index 8e8fb75..cf36702 100644 --- a/bfd/elf32-visium.c +++ b/bfd/elf32-visium.c @@ -615,17 +615,9 @@ visium_elf_relocate_section (bfd *output_bfd, } if (sec != NULL && discarded_section (sec)) - { - /* For relocs against symbols from removed linkonce sections, - or sections discarded by a linker script, we just want the - section contents zeroed. Avoid any special processing. */ - _bfd_clear_contents (howto, input_bfd, input_section, - contents, rel->r_offset); - - rel->r_info = 0; - rel->r_addend = 0; - continue; - } + RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, + rel, 1, relend, R_VISIUM_NONE, + howto, 0, contents); if (bfd_link_relocatable (info)) continue; diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 3e768dc..e6c90a6 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -13819,15 +13819,14 @@ ppc64_elf_size_stubs (struct bfd_link_info *info) while (1) { bfd *input_bfd; - unsigned int bfd_indx; struct map_stub *group; htab->stub_iteration += 1; htab->relr_count = 0; - for (input_bfd = info->input_bfds, bfd_indx = 0; + for (input_bfd = info->input_bfds; input_bfd != NULL; - input_bfd = input_bfd->link.next, bfd_indx++) + input_bfd = input_bfd->link.next) { Elf_Internal_Shdr *symtab_hdr; asection *section; @@ -18083,14 +18082,6 @@ ppc64_elf_relocate_section (bfd *output_bfd, rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; - if (rel_hdr->sh_size == 0) - { - /* It is too late to remove an empty reloc section. Leave - one NONE reloc. - ??? What is wrong with an empty section??? */ - rel_hdr->sh_size = rel_hdr->sh_entsize; - deleted -= 1; - } rel_hdr = _bfd_elf_single_rel_hdr (input_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; input_section->reloc_count -= deleted; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index ebd2eb4..b6f97b5 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -5099,14 +5099,6 @@ elf_x86_64_relocate_section (bfd *output_bfd, rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; - if (rel_hdr->sh_size == 0) - { - /* It is too late to remove an empty reloc section. Leave - one NONE reloc. - ??? What is wrong with an empty section??? */ - rel_hdr->sh_size = rel_hdr->sh_entsize; - deleted -= 1; - } rel_hdr = _bfd_elf_single_rel_hdr (input_section); rel_hdr->sh_size -= rel_hdr->sh_entsize * deleted; input_section->reloc_count -= deleted; diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 0425e62..cec579c 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -8465,10 +8465,9 @@ elfNN_aarch64_modify_headers (bfd *abfd, struct bfd_link_info *info) { struct elf_segment_map *m; - unsigned int segment_count = 0; Elf_Internal_Phdr *p; - for (m = elf_seg_map (abfd); m != NULL; m = m->next, segment_count++) + for (m = elf_seg_map (abfd); m != NULL; m = m->next) { /* We are only interested in the memory tag segment that will be dumped to a core file. If we have no memory tags or this isn't a core file we diff --git a/bfd/version.h b/bfd/version.h index f200fb8..c33770d 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -16,7 +16,7 @@ In releases, the date is not included in either version strings or sonames. */ -#define BFD_VERSION_DATE 20250718 +#define BFD_VERSION_DATE 20250720 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ diff --git a/gas/config/tc-cr16.c b/gas/config/tc-cr16.c index 99bc1bd..f2d1108 100644 --- a/gas/config/tc-cr16.c +++ b/gas/config/tc-cr16.c @@ -119,7 +119,6 @@ const size_t md_longopts_size = sizeof (md_longopts); static void l_cons (int nbytes) { - int c; expressionS exp; #ifdef md_flush_pending_output @@ -141,7 +140,6 @@ l_cons (int nbytes) md_cons_align (nbytes); #endif - c = 0; do { unsigned int bits_available = BITS_PER_CHAR * nbytes; @@ -236,7 +234,6 @@ l_cons (int nbytes) if ((*(input_line_pointer) == '@') && (*(input_line_pointer +1) == 'c')) code_label = 1; emit_expr (&exp, nbytes); - ++c; if ((*(input_line_pointer) == '@') && (*(input_line_pointer +1) == 'c')) { input_line_pointer +=3; diff --git a/gas/config/tc-mn10200.c b/gas/config/tc-mn10200.c index 1eb4702..fe54d21 100644 --- a/gas/config/tc-mn10200.c +++ b/gas/config/tc-mn10200.c @@ -896,7 +896,6 @@ md_assemble (char *str) for (;;) { const char *errmsg = NULL; - int op_idx; char *hold; int extra_shift = 0; @@ -906,9 +905,9 @@ md_assemble (char *str) next_opindex = 0; insn = opcode->opcode; extension = 0; - for (op_idx = 1, opindex_ptr = opcode->operands; + for (opindex_ptr = opcode->operands; *opindex_ptr != 0; - opindex_ptr++, op_idx++) + opindex_ptr++) { const struct mn10200_operand *operand; expressionS ex; diff --git a/gas/config/tc-v850.c b/gas/config/tc-v850.c index f73c3bf..176910d 100644 --- a/gas/config/tc-v850.c +++ b/gas/config/tc-v850.c @@ -344,15 +344,10 @@ v850_comm (int area) int old_subsec; char *pfrag; int align; - flagword applicable; old_sec = now_seg; old_subsec = now_subseg; - applicable = bfd_applicable_section_flags (stdoutput); - - applicable &= SEC_ALLOC; - switch (area) { case SCOMMON_SECTION: diff --git a/gas/config/tc-xgate.c b/gas/config/tc-xgate.c index 0823ecd..4a7829f 100644 --- a/gas/config/tc-xgate.c +++ b/gas/config/tc-xgate.c @@ -1123,7 +1123,6 @@ xgate_scan_operands (struct xgate_opcode *opcode, s_operand oprs[]) unsigned short oper_mask = 0; int operand_bit_length = 0; unsigned int operand = 0; - char n_operand_bits = 0; char first_operand_equals_second = 0; int i = 0; char c = 0; @@ -1139,7 +1138,6 @@ xgate_scan_operands (struct xgate_opcode *opcode, s_operand oprs[]) { oper_mask <<= 1; oper_mask += 1; - n_operand_bits++; } } diff --git a/gas/config/tc-z8k.c b/gas/config/tc-z8k.c index 2980cff..83a732f 100644 --- a/gas/config/tc-z8k.c +++ b/gas/config/tc-z8k.c @@ -1032,7 +1032,6 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE { unsigned char *output_ptr = buffer; int c; - int nibble; unsigned int *class_ptr; frag_wane (frag_now); @@ -1044,7 +1043,7 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE memset (buffer, 0, sizeof (buffer)); class_ptr = this_try->byte_info; - for (nibble = 0; (c = *class_ptr++); nibble++) + while ((c = *class_ptr++) != 0) { switch (c & CLASS_MASK) diff --git a/gas/ecoff.c b/gas/ecoff.c index 7411595..97b9093 100644 --- a/gas/ecoff.c +++ b/gas/ecoff.c @@ -3606,7 +3606,6 @@ ecoff_build_lineno (const struct ecoff_debug_swap *backend, efdr_t *file; proc_t *proc; unsigned long c; - long iline; long totcount; lineno_list_t first; lineno_list_t *local_first_lineno = first_lineno; @@ -3620,7 +3619,6 @@ ecoff_build_lineno (const struct ecoff_debug_swap *backend, proc = NULL; last = NULL; c = offset; - iline = 0; totcount = 0; /* FIXME? Now that MIPS embedded-PIC is gone, it may be safe to @@ -3800,7 +3798,6 @@ ecoff_build_lineno (const struct ecoff_debug_swap *backend, ++c; } - ++iline; last = l; } @@ -764,19 +764,19 @@ assemble_one (char *line) /* Make sure this hasn't pushed the locked sequence past the bundle size. */ valueT bundle_size = pending_bundle_size (bundle_lock_frag); - if (bundle_size > 1U << bundle_align_p2) + if (bundle_size > (valueT) 1 << bundle_align_p2) as_bad (_ (".bundle_lock sequence at %" PRIu64 " bytes, " - "but .bundle_align_mode limit is %u bytes"), - (uint64_t) bundle_size, 1U << bundle_align_p2); + "but .bundle_align_mode limit is %" PRIu64 " bytes"), + (uint64_t) bundle_size, (uint64_t) 1 << bundle_align_p2); } else if (bundle_align_p2 > 0) { valueT insn_size = pending_bundle_size (insn_start_frag); - if (insn_size > 1U << bundle_align_p2) + if (insn_size > (valueT) 1 << bundle_align_p2) as_bad (_("single instruction is %" PRIu64 " bytes long, " - "but .bundle_align_mode limit is %u bytes"), - (uint64_t) insn_size, 1U << bundle_align_p2); + "but .bundle_align_mode limit is %" PRIu64 " bytes"), + (uint64_t) insn_size, (uint64_t) 1 << bundle_align_p2); finish_bundle (insn_start_frag, insn_size); } @@ -6786,10 +6786,10 @@ s_bundle_unlock (int arg ATTRIBUTE_UNUSED) size = pending_bundle_size (bundle_lock_frag); - if (size > 1U << bundle_align_p2) + if (size > (valueT) 1 << bundle_align_p2) as_bad (_(".bundle_lock sequence is %" PRIu64 " bytes, " - "but bundle size is only %u bytes"), - (uint64_t) size, 1u << bundle_align_p2); + "but bundle size is only %" PRIu64 " bytes"), + (uint64_t) size, (uint64_t) 1 << bundle_align_p2); else finish_bundle (bundle_lock_frag, size); diff --git a/gas/write.c b/gas/write.c index 455dc44..c56ad28 100644 --- a/gas/write.c +++ b/gas/write.c @@ -2242,7 +2242,7 @@ write_object_file (void) char *table_ptr; addressT table_addr; addressT from_addr, to_addr; - int n, m; + int n; subseg_change (lie->seg, lie->subseg); fragP = lie->dispfrag; @@ -2267,9 +2267,9 @@ write_object_file (void) table_ptr += md_short_jump_size; table_addr += md_short_jump_size; - for (m = 0; + for (; lie && lie->dispfrag == fragP; - m++, lie = lie->next_broken_word) + lie = lie->next_broken_word) { if (lie->added == 2) continue; diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 35b770f..2bbaf14 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -27659,6 +27659,16 @@ or a prompt that does not. @item set prompt @var{newprompt} Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth. +For example, this will set a blue-colored ``(gdb)'' prompt: + +@smallexample +set prompt \001\033[0;34m\002(gdb)\001\033[0m\002 +@end smallexample + +It uses @samp{\001} and @samp{\002} to begin and end a sequence of +non-printing characters, to make sure they're not counted in the string +length. + @kindex show prompt @item show prompt Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}} diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step-self-call-alarm.c b/gdb/testsuite/gdb.arch/amd64-disp-step-self-call-alarm.c index 03b868c..0fb2904 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step-self-call-alarm.c +++ b/gdb/testsuite/gdb.arch/amd64-disp-step-self-call-alarm.c @@ -16,9 +16,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <unistd.h> +#include <stdlib.h> + +extern void test_call (void); + +void +unreachable (void) +{ + abort (); +} void setup_alarm (void) { alarm (300); } + +int +main () +{ + setup_alarm (); + test_call (); + unreachable (); + return 0; +} diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step-self-call.S b/gdb/testsuite/gdb.arch/amd64-disp-step-self-call.S index 78a6859..20a8eb7 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step-self-call.S +++ b/gdb/testsuite/gdb.arch/amd64-disp-step-self-call.S @@ -18,33 +18,12 @@ handling. */ .text - - .global main -main: - nop - - callq setup_alarm - - nop - -/***********************************************/ - -/* test call/ret */ - .global test_call test_call: call test_call - nop + call unreachable .global test_ret_end test_ret_end: nop -/***********************************************/ - -/* all done */ - -done: - mov $0,%rdi - call exit - hlt .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.arch/i386-disp-step-self-call-alarm.c b/gdb/testsuite/gdb.arch/i386-disp-step-self-call-alarm.c index 03b868c..0fb2904 100644 --- a/gdb/testsuite/gdb.arch/i386-disp-step-self-call-alarm.c +++ b/gdb/testsuite/gdb.arch/i386-disp-step-self-call-alarm.c @@ -16,9 +16,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <unistd.h> +#include <stdlib.h> + +extern void test_call (void); + +void +unreachable (void) +{ + abort (); +} void setup_alarm (void) { alarm (300); } + +int +main () +{ + setup_alarm (); + test_call (); + unreachable (); + return 0; +} diff --git a/gdb/testsuite/gdb.arch/i386-disp-step-self-call.S b/gdb/testsuite/gdb.arch/i386-disp-step-self-call.S index 466e50c..20a8eb7 100644 --- a/gdb/testsuite/gdb.arch/i386-disp-step-self-call.S +++ b/gdb/testsuite/gdb.arch/i386-disp-step-self-call.S @@ -18,33 +18,12 @@ handling. */ .text - - .global main -main: - nop - - call setup_alarm - - nop - -/***********************************************/ - -/* test call/ret */ - .global test_call test_call: call test_call - nop + call unreachable .global test_ret_end test_ret_end: nop -/***********************************************/ - -/* all done */ - -done: - pushl $0 - call exit - hlt .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp b/gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp index 53bf642..fce6d67 100644 --- a/gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp +++ b/gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp @@ -31,7 +31,7 @@ proc prepare_test {has_cfi} { "${objcallerfile}" \ object [list {additional_flags=-fomit-frame-pointer \ -funwind-tables -fasynchronous-unwind-tables}]] != "" } { - untested "couldn't compile with cfi" + untested "couldn't compile" return false } } else { @@ -41,7 +41,7 @@ proc prepare_test {has_cfi} { object [list {additional_flags=-fomit-frame-pointer \ -fno-unwind-tables \ -fno-asynchronous-unwind-tables}]] != "" } { - untested "couldn't compile without cfi" + untested "couldn't compile" return false } } @@ -54,15 +54,12 @@ proc prepare_test {has_cfi} { clean_restart "$binfile-${extension}" - with_test_prefix "${extension}" { - - if ![runto callback] then { - fail "has_cfi=$has_cfi: Can't run to callback" - return false - } - gdb_test_no_output "maint frame-unwinder disable ARCH" - return true + if ![runto callback] then { + fail "has_cfi=$has_cfi: Can't run to callback" + return false } + gdb_test_no_output "maint frame-unwinder disable ARCH" + return true } if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" \ @@ -72,15 +69,45 @@ if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" \ return } -if { [prepare_test false] } { - gdb_test "bt" \ +proc_with_prefix no-cfi {} { + if { ![prepare_test false] } { + return + } + + set re_msg \ + [string_list_to_regexp \ + "Required frame unwinder may have been disabled," \ + " see 'maint info frame-unwinders'"] + set hs {[^\r\n]} + set re_bt_line "#0\\s+[string_to_regexp {callback ()}] $hs+" + set re_bt_no_filters \ [multi_line \ - "\[^\r\n\]+Required frame unwinder may have been disabled, \[^\r\n\]+" \ - "#0\\s+callback \\(\\) \[^\r\n\]+"] \ - "verify unwind fail without CFI" + $re_bt_line \ + $re_msg] + gdb_test "bt -no-filters" \ + $re_bt_no_filters \ + "verify no-filters unwind fail" + + # Flush frame cache to retrigger the message. + gdb_test "maint flush register-cache" \ + [string_to_regexp "Register cache flushed."] + + # This output may occur when we run into the message while applying the + # frame filters. + set re_bt \ + [multi_line \ + $hs+$re_msg \ + $re_bt_line] + gdb_test "bt" \ + "($re_bt|$re_bt_no_filters)" \ + "verify unwind fail" } -if { [prepare_test true] } { +proc_with_prefix cfi {} { + if { ![prepare_test true] } { + return + } + if { [istarget "arm*-*-*"] } { setup_kfail backtrace/31950 *-*-* } @@ -89,6 +116,12 @@ if { [prepare_test true] } { # #1 0x00000000004004e9 in caller () # #2 0x00000000004004cd in main () at ... gdb_test "bt" \ - "#0 +callback $text\r\n#1 $text in caller $text\r\n#2 $text in main $text" \ - "Verify unwinding works based only on CFI information" + [multi_line \ + "#0 +callback $text" \ + "#1 $text in caller $text" \ + "#2 $text in main $text"] \ + "Verify unwinding works" } + +no-cfi +cfi diff --git a/gdb/testsuite/gdb.base/break-dbg.exp b/gdb/testsuite/gdb.base/break-dbg.exp index 3652b8e..a7c7d92 100644 --- a/gdb/testsuite/gdb.base/break-dbg.exp +++ b/gdb/testsuite/gdb.base/break-dbg.exp @@ -46,7 +46,17 @@ gdb_test "catch load" "^Catchpoint $decimal \\(load\\)" gdb_test "catch unload" "^Catchpoint $decimal \\(unload\\)" gdb_test "catch signal" "^Catchpoint $decimal \\(standard signals\\)" -gdb_test "catch syscall" "^Catchpoint $decimal \\(any syscall\\)" + +set re_warning_xml_disabled \ + [string_to_regexp \ + [join \ + [list \ + "warning: Can not parse XML syscalls information;" \ + "XML support was disabled at compile time."]]] +gdb_test "catch syscall" \ + [multi_line \ + "^($re_warning_xml_disabled" \ + ")?Catchpoint $decimal [string_to_regexp {(any syscall)}]"] gdb_test "watch -l global_var" "\[Ww]atchpoint $decimal: -location global_var" diff --git a/gdb/testsuite/gdb.multi/pending-bp.exp b/gdb/testsuite/gdb.multi/pending-bp.exp index 1cd1cfb..2458cd7 100644 --- a/gdb/testsuite/gdb.multi/pending-bp.exp +++ b/gdb/testsuite/gdb.multi/pending-bp.exp @@ -328,5 +328,7 @@ proc_with_prefix py_test_clear_thread {} { # Run all the tests. test_no_inf_display test_pending_toggle -py_test_toggle_thread -py_test_clear_thread +if { [allow_python_tests] } { + py_test_toggle_thread + py_test_clear_thread +} diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f9039dc..8d94d6b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -9993,6 +9993,10 @@ proc gdb_stdin_log_init { } { set logfile [standard_output_file_with_gdb_instance gdb.in] set in_file [open $logfile w] + + verbose -log "" + verbose -log "Starting logfile: $logfile" + verbose -log "" } # Write to the file for logging gdb input. diff --git a/gprofng/src/Stabs.cc b/gprofng/src/Stabs.cc index 116316e..20bdf8b 100644 --- a/gprofng/src/Stabs.cc +++ b/gprofng/src/Stabs.cc @@ -1546,7 +1546,7 @@ Stabs::readSymSec (Elf *elf, bool is_dynamic) switch (GELF_ST_TYPE (Sym.st_info)) { case STT_FUNC: - if (Sym.st_size == 0 || ELF_ST_BIND (Sym.st_info) == STB_WEAK) + if (Sym.st_size == 0) break; if (Sym.st_shndx == 0) { diff --git a/ld/testsuite/ld-elf/linkonce1.d b/ld/testsuite/ld-elf/linkonce1.d index e4f9a70..3920f25 100644 --- a/ld/testsuite/ld-elf/linkonce1.d +++ b/ld/testsuite/ld-elf/linkonce1.d @@ -2,11 +2,10 @@ #source: linkonce1b.s #ld: -r #objdump: -r +#notarget: [is_generic] .*: file format .* #... -RELOCATION RECORDS FOR \[.debug_frame\]: -OFFSET[ ]+TYPE[ ]+VALUE[ ]* -.*(NONE|unused|UNUSED).*\*ABS\* +RELOCATION RECORDS FOR \[.debug_frame\]: \(none\) #pass diff --git a/ld/testsuite/ld-elf/linkonce3.d b/ld/testsuite/ld-elf/linkonce3.d new file mode 100644 index 0000000..25306d2 --- /dev/null +++ b/ld/testsuite/ld-elf/linkonce3.d @@ -0,0 +1,13 @@ +#source: linkonce1a.s +#source: linkonce1b.s +#ld: -r +#objdump: -r +#target: [is_generic] + +.*: file format .* +#... +RELOCATION RECORDS FOR \[.debug_frame\]: +OFFSET[ ]+TYPE[ ]+VALUE[ ]* +.*(NONE|unused|UNUSED).*\*ABS\* + +#pass diff --git a/ld/testsuite/ld-elf/no-section-header.exp b/ld/testsuite/ld-elf/no-section-header.exp index 2a4575b..7461fdd 100644 --- a/ld/testsuite/ld-elf/no-section-header.exp +++ b/ld/testsuite/ld-elf/no-section-header.exp @@ -21,7 +21,7 @@ # Written by H.J. Lu (hongjiu.lu@intel.com) # -if { ![is_elf_format] } { +if { ![istarget *-*-gnu*] } { return } |